看健康度最准,比如种子用户进度显示20%也是有可能成功下载的,因为每个人分布有不同的区块数据,大家组合起来就能100%
如果健康度 非常低 或者是0的情况是不是 就没有必要 下载了 进度已经卡 好多天了。
一直挂着一个月,万一遇到个有人用迅雷离线下载后补种的人,说不定救活了
都用迅雷了,还会补种嘛
Task auto-stop condition reached: share ratio(42969%>=200%), seed num(10>=10), seeding time(92415s>=86400s)
根据三个做种规则自动停止任务改成false关闭,这样就不会自动停止上传任务了
<ConditionAutoStopTask>false</ConditionAutoStopTask>
这是在哪配置?docker webui版本没有高级选项,直接添加到 docker 里的 BitComet.xml 吗?
配置文件和下载的文件存储在路径
/opt/1panel/docker/compose/bitcomet-webui/BitComet
/opt/1panel/docker/compose/bitcomet-webui/Downloads
注:如果要修改配置文件请先停止容器,修改完成后在启动,这样才能修改成功
BitComet.xml 推荐设置
多谢多谢!
我没测试过,理论上如果做种文件可以被docker同时映射到两个容器,那就可以同时做种,但两个容器的配置文件目录需要独立,避免写入冲突。
感谢反馈,新版webui已加入BT任务自动停止做种的相关设置页面
之前也遇到过,启动时偶尔会出现监听端口无法成功打开的错误,重启程序能解决,具体原因还没分析出来
Beta5 已发布,欢迎试用
官网似乎还没发2.15 版本
磁力下載點:magnet:?xt=urn:btih:4HYNKUV3NXE6OOFFUN43T5YQNE2WYIJK
BitComet 2.16 Beta5 version.
两个docker映射同一个下载文件夹,配置文件是独立目录(一共三个文件夹),这两个步骤都没问题。
接下来,第一个docker,如果下载文件夹中本身没有文件,就跟预期一样从0%开始下载直到100%。
如果已存在文件,不管是添加种子还是磁链,都会直接跳过已存在的文件,又生成了一个带数字编号的文件,重新开始下载。
于是,只要第一个docker中存在了文件A,那么根据上面的逻辑,第二个docker无论如何都不可能再使用到文件A,最终是 文件A(1)。
有另一个新问题,如果公网IP发生变更,有时候会自动检测更新,有时候不会,没更新的就一直处于0速状态,得手动检测一下才能恢复。
伟大的人儿 给你点赞
docker会更新么
反馈一个小问题,一直存在的, 就是 浏览器集成插件之后,下载没办法像其他下载工具那般 第一时间接管下载。只会下载后右下角提示, 能不能 改成直接下载。
目前可以尝试右键下载链接 选择使用比特彗星下载
这个应该和彗星浏览器扩展识别下载的方式有关
而彗星的扩展似乎无法捕获那些以js脚本驱动的下载
也许彗星可以参考一下 xdown的浏览器扩展 @wxhere15
这个xdown 本质是给旧版的qb中加上了https下载功能
但重要的是他也依靠浏览器扩展来捕获下载的
而且效果看起来更好 其似乎是通过拦截浏览器下载来实现的
即浏览器内置下载 解析出任务后 对齐进行拦截并转发主程序进行下载
xdown
xdown_worker.js
self.importScripts('cookie_manager.js');
self.importScripts('native_host_manager.js');
self.importScripts('xdown_extension.js');
self.importScripts('xdown_context.js');
var xdownExt = new XDownExtension;
xdownExt.initialize();
function checkIsDownloadFile(d) {
var file = true;
let mime = d.mime || '';
if (mime) {
var cType = mime.toLowerCase();
if (cType.indexOf("json") != -1 || cType.indexOf("image/") != -1 ||
(cType.indexOf("text") != -1 && cType.indexOf("text/x-sql") == -1) ||
cType.indexOf("javascript") != -1 ||
cType.indexOf("application/x-protobuf") != -1 ||
cType.indexOf("application/binary") != -1 ||
cType.indexOf("application/pdf") != -1 ||
cType.indexOf("application/x-bittorrent") != -1) {
file = false;
}
else if (cType.indexOf("application") != -1) {
file = true;
}
}
if (d.fileSize >= 0) {
// int64 too long
var iLength = parseInt(d.fileSize);
if (iLength < 2 * 1024 * 1024) {
file = false;
}
}
return file;
}
const usedXDown = d => new Promise((resolve, reject) => {
let downList = [];
if(!checkIsDownloadFile(d)) {
return resolve({id: d.id, result: 0});
}
let url = d.finalUrl || d.url;
var cManager = new CookieManager;
cManager.getCookiesForUrl(
url,
function (cookies) {
let cur_length = d.totalBytes || 0;
let file_name = d.filename || '';
if(typeof(file_name) != 'undefined' && file_name.length < 1) {
var curUrl = url;
var iPosVal = curUrl.indexOf("?");
if(iPosVal > 1) {
curUrl = curUrl.substring(0,iPosVal);
}
iPosVal = curUrl.indexOf("#");
if(iPosVal > 1) {
curUrl = curUrl.substring(0,iPosVal);
}
iPosVal = curUrl.lastIndexOf('/');
if(iPosVal > 10) {
file_name = curUrl.substring(iPosVal + 1);
}
}
var downItem = {
'httpReferer': d.referrer,
'url': url,
'originalUrl': url,
'userAgent': navigator.userAgent,
'httpCookies': cookies || '',
'httpContentType': d.mime || '',
'httpContentLength': cur_length.toString(),
'httpFileName': file_name || '',
};
downList.push(downItem);
let cur_id = d.id || 1;
let downTask = {
'id': cur_id.toString(),
'type': 'create_downloads',
'create_downloads': {
'downloads':downList,
}
}
setTimeout(resolve, 10000);
xdownExt.postMessage(downTask, res => {
if (!res) {
return reject(Error('empty response'));
}
resolve(res);
});
}
);
});
const transfer = async d => {
try {
await usedXDown(d);
if (d.id) {
chrome.downloads.erase({
id: d.id
});
}
}
catch (e) {
console.log('error:',e);
}
};
const onDeterminingFilename = (item, suggest) => {
usedXDown(item).then(res => {
let is_intercept = false;
if(res && res.id) {
if( typeof(res.result) != 'undefined' && res.result === 1) {
is_intercept = true;
}
}
if(is_intercept) {
try{
chrome.downloads.cancel(item.id), function(){
console.log('cancel:',item.id);
}
}
catch (e) {
console.log('error:',e);
}
} else {
suggest({filename: item.filename, conflictAction: 'uniquify'});
}
},err =>{
suggest({filename: item.filename, conflictAction: 'uniquify'});
});
return true;
}
chrome.downloads.onDeterminingFilename.addListener(onDeterminingFilename);
chrome.runtime.onMessage.addListener((request, sender, response) => {
if(request && request.type) {
if(request.type === 'SHOW-XDOWN-SETTING') {
var settingMsg = {
'id': "1",
'type': 'show_settings'
};
xdownExt.postMessage(settingMsg, res => {
if(!res) {
console.log('[error] start xdown failed....');
return;
}
response(res);
});
}
else if(request.type == 'ADD-XDOWN-EVENT') {
xdownExt.postMessage(request, res => {
console.log('ADD-XDOWN-EVENT: ', res);
response(res);
});
}
return true;
}
return false;
});