sbFileObjectStreams.cpp
Go to the documentation of this file.
1 /*
2 //
3 // Copyright(c) 2005-2008 POTI, Inc.
4 // http://songbirdnest.com
5 //
6 // This file may be licensed under the terms of of the
7 // GNU General Public License Version 2 (the "GPL").
8 //
9 // Software distributed under the License is distributed
10 // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
11 // express or implied. See the GPL for the specific language
12 // governing rights and limitations.
13 //
14 // You should have received a copy of the GPL along with this
15 // program. If not, go to http://www.gnu.org/licenses/gpl.html
16 // or write to the Free Software Foundation, Inc.,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 //
19 // END SONGBIRD GPL
20 //
21 */
22 
23 #include "sbFileObjectStreams.h"
24 #include <nsComponentManagerUtils.h>
25 #include <nsServiceManagerUtils.h>
26 #include <nsStringAPI.h>
27 
28 
30 : mFileStreamIsActive(PR_FALSE)
31 , mObjectStreamIsActive(PR_FALSE)
32 {
33 }
34 
35 /*virtual*/
37 {
38 }
39 
41 
43 {
44  mFileStreamIsActive = PR_FALSE;
45  mObjectStreamIsActive = PR_FALSE;
46 }
47 
49 {
51  if (NS_FAILED(Close())) {
52  NS_WARNING("Error cold not close the output streams!");
53  }
54  }
55 }
56 
57 NS_IMETHODIMP
59 {
60  NS_ENSURE_ARG_POINTER(aStreamedFile);
61 
62  nsresult rv;
63  mFileOutputStream =
64  do_CreateInstance("@mozilla.org/network/file-output-stream;1", &rv);
65  NS_ENSURE_SUCCESS(rv, rv);
66 
67  // Default setup values are fine for the file stream
68  rv = mFileOutputStream->Init(aStreamedFile, -1, -1, 0);
69  NS_ENSURE_SUCCESS(rv, rv);
70 
71  mFileStreamIsActive = PR_TRUE;
72 
73  mObjectOutputStream =
74  do_CreateInstance("@mozilla.org/binaryoutputstream;1", &rv);
75  NS_ENSURE_SUCCESS(rv, rv);
76 
77  rv = mObjectOutputStream->SetOutputStream(mFileOutputStream);
78  NS_ENSURE_SUCCESS(rv, rv);
79 
80  mObjectStreamIsActive = PR_TRUE;
81 
82  return NS_OK;
83 }
84 
85 nsresult
87  PRBool aIsStrongRef)
88 {
89  NS_ENSURE_ARG_POINTER(aSupports);
90 
92  return NS_ERROR_NOT_AVAILABLE;
93  }
94 
95  return mObjectOutputStream->WriteObject(aSupports, aIsStrongRef);
96 }
97 
98 nsresult
99 sbFileObjectOutputStream::WriteCString(const nsACString & aString)
100 {
102  return NS_ERROR_NOT_AVAILABLE;
103  }
104 
105  nsCString str(aString);
106  return mObjectOutputStream->WriteStringZ(str.get());
107 }
108 
109 nsresult
110 sbFileObjectOutputStream::WriteString(const nsAString & aString)
111 {
112  if (!mFileStreamIsActive || !mObjectOutputStream) {
113  return NS_ERROR_NOT_AVAILABLE;
114  }
115 
116  nsString str(aString);
117  return mObjectOutputStream->WriteWStringZ(str.get());
118 }
119 
120 nsresult
122 {
124  return NS_ERROR_NOT_AVAILABLE;
125  }
126 
127  return mObjectOutputStream->Write32(aOutInt);
128 }
129 
130 nsresult
132 {
134  return NS_ERROR_NOT_IMPLEMENTED;
135  }
136 
137  return mObjectOutputStream->WriteBoolean(aBoolean);
138 }
139 
140 nsresult
141 sbFileObjectOutputStream::WriteBytes(const char *aData, PRUint32 aLength)
142 {
143  NS_ENSURE_ARG_POINTER(aData);
144 
146  return NS_ERROR_NOT_AVAILABLE;
147  }
148 
149  return mObjectOutputStream->WriteBytes(aData, aLength);
150 }
151 
152 NS_IMETHODIMP
154 {
155  nsresult rv;
156  if (mFileStreamIsActive) {
157  rv = mFileOutputStream->Close();
158  NS_ENSURE_SUCCESS(rv, rv);
159 
160  mFileStreamIsActive = PR_FALSE;
161  }
162  if (mObjectStreamIsActive) {
163  rv = mObjectOutputStream->Close();
164  NS_ENSURE_SUCCESS(rv, rv);
165 
166  mObjectStreamIsActive = PR_FALSE;
167  }
168 
169  return NS_OK;
170 }
171 
172 //------------------------------------------------------------------------------
173 
175 
177 {
178  mFileStreamIsActive = PR_FALSE;
179  mBufferedStreamIsActive = PR_FALSE;
180  mObjectStreamIsActive = PR_FALSE;
181 }
182 
184 {
185  if (mFileStreamIsActive ||
186  mBufferedStreamIsActive ||
188  {
189  if (NS_FAILED(Close())) {
190  NS_WARNING("Error cold not close the output streams!");
191  }
192  }
193 }
194 
195 NS_IMETHODIMP
197 {
198  NS_ENSURE_ARG_POINTER(aStreamedFile);
199 
200  nsresult rv;
201  mFileInputStream =
202  do_CreateInstance("@mozilla.org/network/file-input-stream;1", &rv);
203  NS_ENSURE_SUCCESS(rv, rv);
204 
205  // Default setup values are fine for the file stream
206  rv = mFileInputStream->Init(aStreamedFile, -1, -1, 0);
207  NS_ENSURE_SUCCESS(rv, rv);
208 
209  mFileStreamIsActive = PR_TRUE;
210 
211  mBufferedInputStream =
212  do_GetService("@mozilla.org/network/buffered-input-stream;1", &rv);
213  NS_ENSURE_SUCCESS(rv, rv);
214 
215  rv = mBufferedInputStream->Init(mFileInputStream, 4096);
216  NS_ENSURE_SUCCESS(rv, rv);
217 
218  mBufferedStreamIsActive = PR_TRUE;
219 
220  mObjectInputStream =
221  do_CreateInstance("@mozilla.org/binaryinputstream;1", &rv);
222  NS_ENSURE_SUCCESS(rv, rv);
223 
224  rv = mObjectInputStream->SetInputStream(mBufferedInputStream);
225  NS_ENSURE_SUCCESS(rv, rv);
226 
227  mObjectStreamIsActive = PR_TRUE;
228 
229  return NS_OK;
230 }
231 
232 nsresult
234  nsISupports **aOutObject)
235 {
236  NS_ENSURE_ARG_POINTER(aOutObject);
237 
238  if (!mFileStreamIsActive ||
239  !mBufferedStreamIsActive ||
241  {
242  return NS_ERROR_NOT_AVAILABLE;
243  }
244 
245  return mObjectInputStream->ReadObject(aIsStrongRef, aOutObject);
246 }
247 
248 nsresult
249 sbFileObjectInputStream::ReadCString(nsACString & aReadString)
250 {
251  if (!mFileStreamIsActive ||
252  !mBufferedStreamIsActive ||
254  {
255  return NS_ERROR_NOT_AVAILABLE;
256  }
257 
258  return mObjectInputStream->ReadCString(aReadString);
259 }
260 
261 nsresult
262 sbFileObjectInputStream::ReadString(nsAString & aReadString)
263 {
264  if (!mFileStreamIsActive ||
265  !mBufferedStreamIsActive ||
267  {
268  return NS_ERROR_NOT_AVAILABLE;
269  }
270 
271  return mObjectInputStream->ReadString(aReadString);
272 }
273 
274 nsresult
276 {
277  NS_ENSURE_ARG_POINTER(aReadInt);
278 
279  if (!mFileStreamIsActive ||
280  !mBufferedStreamIsActive ||
282  {
283  return NS_ERROR_FAILURE;
284  }
285 
286  return mObjectInputStream->Read32(aReadInt);
287 }
288 
289 nsresult
291 {
292  NS_ENSURE_ARG_POINTER(aReadBoolean);
293 
294  if (!mFileStreamIsActive ||
295  !mBufferedStreamIsActive ||
297  {
298  return NS_ERROR_FAILURE;
299  }
300 
301  return mObjectInputStream->ReadBoolean(aReadBoolean);
302 }
303 
304 nsresult
305 sbFileObjectInputStream::ReadBytes(PRUint32 aLength, char **aString)
306 {
307  NS_ENSURE_ARG_POINTER(aString);
308 
309  if (!mFileStreamIsActive ||
310  !mBufferedStreamIsActive ||
312  {
313  return NS_ERROR_FAILURE;
314  }
315 
316  return mObjectInputStream->ReadBytes(aLength, aString);
317 }
318 
319 NS_IMETHODIMP
321 {
322  nsresult rv;
323  if (mFileStreamIsActive) {
324  rv = mFileInputStream->Close();
325  NS_ENSURE_SUCCESS(rv, rv);
326 
327  mFileStreamIsActive = PR_FALSE;
328  }
329  if (mBufferedStreamIsActive) {
330  rv = mBufferedInputStream->Close();
331  NS_ENSURE_SUCCESS(rv, rv);
332 
333  mBufferedStreamIsActive = PR_FALSE;
334  }
335  if (mObjectStreamIsActive) {
336  rv = mObjectInputStream->Close();
337  NS_ENSURE_SUCCESS(rv, rv);
338 
339  mObjectStreamIsActive = PR_FALSE;
340  }
341 
342  return NS_OK;
343 }
344 
nsresult ReadString(nsAString &aReadString)
NS_DECL_ISUPPORTS NS_IMETHOD InitWithFile(nsIFile *aStreamedFile)
return NS_OK
NS_IMPL_ISUPPORTS1(sbDeviceCapabilitiesUtils, sbIDeviceCapabilitiesUtils) sbDeviceCapabilitiesUtils
nsresult ReadPRBool(PRBool *aReadBoolean)
nsresult WriteObject(nsISupports *aSupports, PRBool aIsStrongRef)
nsresult ReadBytes(PRUint32 aLength, char **aString)
nsresult WriteString(const nsAString &aString)
nsresult ReadUint32(PRUint32 *aReadInt)
nsresult WriteUint32(PRUint32 aOutInt)
NS_DECL_ISUPPORTS NS_IMETHOD InitWithFile(nsIFile *aStreamedFile)
nsresult WriteCString(const nsACString &aString)
nsresult WriteBytes(const char *aData, PRUint32 aLength)
nsresult ReadObject(PRBool aIsStrongRef, nsISupports **aOutObject)
nsresult ReadCString(nsACString &aReadString)
_updateTextAndScrollDataForFrame aData
nsresult WritePRBool(PRBool aBoolean)