BadScript 2
Loading...
Searching...
No Matches
BadOpenKmWritableStream.cs
Go to the documentation of this file.
1using ewu.adam.openkm.rest;
2
4
8public class BadOpenKmWritableStream : Stream
9{
13 private readonly BadWriteMode m_Mode;
14
18 private readonly string m_Path;
19
23 private readonly Stream m_Stream;
24
28 private readonly IOkmWebservice m_Webservice;
29
33 private bool m_Disposed;
34
41 public BadOpenKmWritableStream(IOkmWebservice webservice, string path, BadWriteMode mode)
42 {
43 m_Webservice = webservice;
44 m_Path = path;
45 m_Mode = mode;
46 m_Stream = new MemoryStream();
47
48 if (mode != BadWriteMode.Append)
49 {
50 return;
51 }
52
53 Stream content = m_Webservice.GetContent(path)
54 .Result;
55 content.CopyTo(m_Stream);
56 }
57
59 public override bool CanRead => m_Stream.CanRead;
60
62 public override bool CanSeek => m_Stream.CanSeek;
63
65 public override bool CanWrite => m_Stream.CanWrite;
66
68 public override long Length => m_Stream.Length;
69
71 public override long Position
72 {
73 get => m_Stream.Position;
74 set => m_Stream.Position = value;
75 }
76
78 protected override void Dispose(bool disposing)
79 {
80 if (disposing && !m_Disposed)
81 {
82 m_Disposed = true;
83 m_Stream.Position = 0;
84
85 if (m_Mode == BadWriteMode.Append)
86 {
87 //Lock file
88 m_Webservice.Checkout(m_Path)
89 .Wait();
90
91 //Upload content
92 m_Webservice.Checkin(m_Path, "", m_Stream)
93 .Wait();
94 }
95 else
96 {
97 bool hasNode = m_Webservice.HasNode(m_Path)
98 .Result;
99
100 if (hasNode &&
101 m_Webservice.IsValidDocument(m_Path)
102 .Result)
103 {
104 //Lock file
105 m_Webservice.Checkout(m_Path)
106 .Wait();
107
108 //Upload content
109 m_Webservice.Checkin(m_Path, "", m_Stream)
110 .Wait();
111 }
112 else
113 {
114 m_Webservice.CreateDocumentSimple(m_Path, m_Stream)
115 .Wait();
116 }
117 }
118 }
119
120 m_Stream.Close();
121 base.Dispose(disposing);
122 }
123
125 public override void Flush()
126 {
127 m_Stream.Flush();
128 }
129
131 public override int Read(byte[] buffer, int offset, int count)
132 {
133 return m_Stream.Read(buffer, offset, count);
134 }
135
137 public override long Seek(long offset, SeekOrigin origin)
138 {
139 return m_Stream.Seek(offset, origin);
140 }
141
143 public override void SetLength(long value)
144 {
145 m_Stream.SetLength(value);
146 }
147
149 public override void Write(byte[] buffer, int offset, int count)
150 {
151 m_Stream.Write(buffer, offset, count);
152 }
153}
Implements a Stream for writing to OpenKM.
readonly string m_Path
The Path to the file.
override void Write(byte[] buffer, int offset, int count)
readonly IOkmWebservice m_Webservice
The OpenKM Webservice.
BadOpenKmWritableStream(IOkmWebservice webservice, string path, BadWriteMode mode)
Constructs a new BadOpenKmWritableStream instance.
bool m_Disposed
Indicates if the stream has been disposed.
override long Seek(long offset, SeekOrigin origin)
readonly Stream m_Stream
The Underlying Stream.
readonly BadWriteMode m_Mode
The Write Mode.
override int Read(byte[] buffer, int offset, int count)
File System Implementation for OpenKM.
BadWriteMode
The Write Modes of the File System Abstraction.