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).Result;
54 content.CopyTo(m_Stream);
55 }
56
58 public override bool CanRead => m_Stream.CanRead;
59
61 public override bool CanSeek => m_Stream.CanSeek;
62
64 public override bool CanWrite => m_Stream.CanWrite;
65
67 public override long Length => m_Stream.Length;
68
70 public override long Position
71 {
72 get => m_Stream.Position;
73 set => m_Stream.Position = value;
74 }
75
77 protected override void Dispose(bool disposing)
78 {
79 if (disposing && !m_Disposed)
80 {
81 m_Disposed = true;
82 m_Stream.Position = 0;
83
84 if (m_Mode == BadWriteMode.Append)
85 {
86 //Lock file
87 m_Webservice.Checkout(m_Path).Wait();
88
89 //Upload content
90 m_Webservice.Checkin(m_Path, "", m_Stream).Wait();
91 }
92 else
93 {
94 bool hasNode = m_Webservice.HasNode(m_Path).Result;
95
96 if (hasNode && m_Webservice.IsValidDocument(m_Path).Result)
97 {
98 //Lock file
99 m_Webservice.Checkout(m_Path).Wait();
100
101 //Upload content
102 m_Webservice.Checkin(m_Path, "", m_Stream).Wait();
103 }
104 else
105 {
106 m_Webservice.CreateDocumentSimple(m_Path, m_Stream).Wait();
107 }
108 }
109 }
110
111 m_Stream.Close();
112 base.Dispose(disposing);
113 }
114
116 public override void Flush()
117 {
118 m_Stream.Flush();
119 }
120
122 public override int Read(byte[] buffer, int offset, int count)
123 {
124 return m_Stream.Read(buffer, offset, count);
125 }
126
128 public override long Seek(long offset, SeekOrigin origin)
129 {
130 return m_Stream.Seek(offset, origin);
131 }
132
134 public override void SetLength(long value)
135 {
136 m_Stream.SetLength(value);
137 }
138
140 public override void Write(byte[] buffer, int offset, int count)
141 {
142 m_Stream.Write(buffer, offset, count);
143 }
144}
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.