diff -x scrapbook.jar -aurN scrapbook-1.2.0.8-fx+fl.orig/chrome/scrapbook/content/scrapbook/common.js scrapbook-1.2.0.8-fx+fl/chrome/scrapbook/content/scrapbook/common.js --- scrapbook-1.2.0.8-fx+fl.orig/chrome/scrapbook/content/scrapbook/common.js 2006-12-16 02:12:40.000000000 +0900 +++ scrapbook-1.2.0.8-fx+fl/chrome/scrapbook/content/scrapbook/common.js 2007-10-06 23:24:15.000000000 +0900 @@ -255,6 +255,89 @@ this.writeFile(aFile, content, "UTF-8"); }, + uploadFolder : function(aItem) + { + this.upload_endpoint = nsPreferences.copyUnicharPref("scrapbook.upload_endpoint", ""); + if (this.upload_endpoint == "") { return alert("scrapbook.upload_endpoint not set"); } + + this.files = []; + this.filesCount = 0; + var aDir = this.getContentDir(aItem.id).clone(); + if ( !aDir || !aDir.isDirectory() ) return; + var fileEnum = aDir.directoryEntries; + while ( fileEnum.hasMoreElements() ) { + onefile = fileEnum.getNext().QueryInterface(Components.interfaces.nsIFile); + if ( onefile.isFile() ) { + this.filesCount++; + this.files.push( onefile ); + sbCommonUtils.log( onefile.leafName ); + } + } + this.uploadFile(); + }, + + uploadFile : function() + { + var mIStream = Components.classes["@mozilla.org/io/multiplex-input-stream;1"].createInstance(Components.interfaces.nsIMultiplexInputStream); + var count = 0; + var fIStream; + var bufIStream; + var aIStream1; + var str; + var aFile; + + var Boundary = new String(); + var BoundaryChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + var BoundaryCharsLen = BoundaryChars.length; + for (var i = 0; i < 32; i++) { + Boundary += BoundaryChars.charAt(Math.floor(Math.random() * BoundaryCharsLen)); + } + + while ( this.files.length > 0 ) { + fIStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); + bufIStream = Components.classes["@mozilla.org/network/buffered-input-stream;1"].createInstance(Components.interfaces.nsIBufferedInputStream); + aIStream1 = Components.classes["@mozilla.org/io/string-input-stream;1"].createInstance(Components.interfaces.nsIStringInputStream); + aIStream11 = Components.classes["@mozilla.org/io/string-input-stream;1"].createInstance(Components.interfaces.nsIStringInputStream); + + aFile = this.files.shift(); + str = new String(); + str += "--" + Boundary + "\r\nContent-Disposition: form-data; name=\"file" + count + "\"; filename=\"" + aFile.leafName + "\"\r\n"; + str += "Content-Type: application/octet-stream\r\n"; + str += "Content-Length: " + aFile.fileSize + "\r\n\r\n"; + aIStream1.setData(str, str.length); + mIStream.appendStream(aIStream1); + + fIStream.init(aFile, 0x01, 0, false); + bufIStream.init(fIStream, 65536); + mIStream.appendStream(bufIStream); + + str = new String(); + str += "\r\n"; + aIStream11.setData(str, str.length); + mIStream.appendStream(aIStream11); + + count++; + } + + var aIStream2 = Components.classes["@mozilla.org/io/string-input-stream;1"].createInstance(Components.interfaces.nsIStringInputStream); + + var str2 = new String(); + str2 += "--" + Boundary + "--\r\n"; + aIStream2.setData(str2, str2.length); + mIStream.appendStream(aIStream2); + + var req = new XMLHttpRequest(); + req.onerror = function() { + this.files = []; + return alert("upload failed"); + }; + req.onload = function(){ sbCommonUtils.log("uploadok"); }; + req.open("POST", this.upload_endpoint, true); + req.setRequestHeader("Content-Length", mIStream.available()); + req.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + Boundary); + req.send(mIStream); + }, + saveTemplateFile : function(aURISpec, aFile) { if ( aFile.exists() ) return; diff -x scrapbook.jar -aurN scrapbook-1.2.0.8-fx+fl.orig/chrome/scrapbook/content/scrapbook/saver.js scrapbook-1.2.0.8-fx+fl/chrome/scrapbook/content/scrapbook/saver.js --- scrapbook-1.2.0.8-fx+fl.orig/chrome/scrapbook/content/scrapbook/saver.js 2006-12-16 02:12:42.000000000 +0900 +++ scrapbook-1.2.0.8-fx+fl/chrome/scrapbook/content/scrapbook/saver.js 2007-10-06 22:10:33.000000000 +0900 @@ -819,6 +819,7 @@ onCaptureComplete : function(aItem) { + sbCommonUtils.uploadFolder(aItem); if ( aItem && sbDataSource.getProperty(sbCommonUtils.RDF.GetResource("urn:scrapbook:item" + aItem.id), "type") == "marked" ) return; if ( sbCommonUtils.getBoolPref("scrapbook.notifyOnComplete", true) ) {