Descrizione
Effettuare il download di piu' URL ed eseguire un'azione solo quando tutti i download sono terminati
Esempio di utilizzo
// contiene le url da scaricare
var urls = new Array(
"http://repo.hyperstruct.net/suite/sameplace-suite-stable.xpi",
"http://dafizilla.sourceforge.net/viewsourcewith/index.php");
// contiene i path dove salvare le url
var fileNames = new Array(
"/home/dafi/sameplace.xpi",
"/home/dafi/vsw-index.php");
var ud = new UrlDownloader();
ud.onFinish = myOnFinishCallbackFunction;
ud.callbackObject = "Prova salvataggio";
ud.saveURIList(urls, fileNames);
// La funzione riceve in ingresso le url
// ed i relativi filename, opzionalmente
// puo' ricevere un parametro applicativo
function myOnFinishCallbackFunctionfunction(urls, outFiles, callbackObject) {
...
}
Snippet
function UrlDownloader() {
this.onFinish = null;
this.count = 0;
this.urls = [];
this.outFiles = [];
this.callbackObject = null;
}
UrlDownloader.prototype = {
saveURIList : function(urls, outFiles) {
if (!this.onFinish) {
throw "UrlDownloader: the onFinish is not valid";
}
this.urls = urls;
this.outFiles = outFiles;
this.count = 0;
for (var i = 0; i < urls.length; i++) {
this.internalSaveURI(urls[i], outFiles[i]);
}
},
onStateChange : function(webProgress, request, stateFlags, status) {
const wpl = Components.interfaces.nsIWebProgressListener;
var isLoadFinished = (stateFlags & wpl.STATE_STOP)
;//&& (stateFlags & wpl.STATE_IS_NETWORK);
if (isLoadFinished) {
++this.count;
if (this.count == this.outFiles.length) {
this.onFinish(this.urls, this.outFiles, this.callbackObject);
}
}
},
QueryInterface : function(iid) {
if (iid.equals(Components.interfaces.nsIWebProgressListener) ||
iid.equals(Components.interfaces.nsISupportsWeakReference) ||
iid.equals(Components.interfaces.nsISupports)) {
return this;
}
throw Components.results.NS_NOINTERFACE;
},
internalSaveURI : function(url, outFile) {
const nsIWBP = Components.interfaces.nsIWebBrowserPersist;
var persist = ViewSourceWithCommon.makeWebBrowserPersist();
persist.progressListener = this;
persist.persistFlags = nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES
| nsIWBP.PERSIST_FLAGS_FROM_CACHE;
var referrer = null;//ViewSourceWithBrowserHelper.getReferrer(document);
var postData = null;//ViewSourceWithBrowserHelper.getPostData();
var uri = ViewSourceWithCommon.makeURL(url);
persist.saveURI(uri, null, referrer, postData, null, outFile);
},
onStatusChange : function(webProgress, request, status, message) {},
onLocationChange : function(webProgress, request, location) {},
onProgressChange : function(webProgress, request,
curSelfProgress, maxSelfProgress,
curTotalProgress, maxTotalProgress) {},
onSecurityChange : function(webProgress, request, state) {}
}