DownThemAll(dTa)是目前firefox下用得最多的下载插件,它支持多线程下载,断点续传等,使用很方便。美中不足的是,dTa对http协议下载支持很好,但对ftp协议下载却几乎没有做任何扩展,跟firefox自带的下载工具功能上几乎没有什么区别,不能暂停,不能断点续传,不支持多线程下载等。但实际上,xunlrunner库里对ftp的实现是完全的,只是因为dTa没有利用到而已。要用到这些功能也很简单,下面就介绍如何更改dTa,使它对ftp的支持更好一些。
首先到dTa这个扩展的目录下,通常是~user/.mozilla/****.default/extensions/{DDC359D1-844A-42a7-9AA1-88A850A938A8} /chrome下,{}中包含的是dTa的当前uuid.
把chrome.jar解压到当前目录, linux下是unzip chrome.jar就行了;再将chrome.jar复制为chrome.orig.jar,以便后面操作失误时可以恢复。
再到当前目录下的content/dta目录下,这里有一个manager.js,它是dta文件下载的核心模块,也是我们要更改的地方。
打开manager.js文件,跳到1693行左右,这里有一个try catch语句块。try部分主要是为了从某一部分开始请求http文件,catch部分为空。在整个catch语句里,我们加上自己对ftp协议的处理,它也是一个try catch语句块:
try {
let rc = this._chan.QueryInterface(Ci.nsIResumableChannel);
rc.resumeAt(c.start+c.written, null);
} catch(ex) {
}
这个语句块判断下载的文件是否可以续传,如果可以,就跳到它要续传的位置。
再在文件中跳到2038行左右,这里有一个单独的语句d.resumable=false; 我们要把这句话替换成一个如下的try catch语句块:
try {
let rc = this._chan.QueryInterface(Ci.nsIResumableChannel);
d.resumable = true;
} catch(ex) {
d.resumable = false;
}
它也是判断当前下载文件的可续传性。
保存文件manager.js,退出。我们再回到chrome.jar所在的目录中去,把更新后的manager.js文件加进去. zip -r chrome.jar content/dta/manager.js。
重新启动firefox,这下dta管理器中的ftp文件就可以被暂停了。由于ftp站点通常限制了同ip的访问数,多线程下载通常用不上。这没关系,反正修改后的dta现在是支持多线程下载和续传了。


