Qbittorrent: 通过Web UI控制/编辑RSS feed

创建于 2013-02-25  ·  281评论  ·  资料来源: qbittorrent/qBittorrent

我在OpenSUSE 12.2上运行了qbittorrent,我曾经将它设置为RSS源,以自动下载torrent,然后将此框用作家中的媒体服务器。 我可以通过ssh会话或通过Web ui调整几乎所有内容。 能够控制qbittorrent的RSS提要而不必将-sh放到框中并拉到gui并进行编辑,将是很好的。 理想情况下,我想使用iPAD中的Web ui并调整RSS feed,可以将此功能添加到Web ui中吗?
谢谢
jdavis3980

Feature request Help wanted RSS WebUI

最有用的评论

由于以下原因,我很想立即关闭此问题:

  • 对话已经进行了太长时间,而且话题太离题了。 即使有一些好处,但该票证应该是关于官方WebUI中的RSS支持的。 这是一个简单明了的功能请求,而不是此处放置很多东西的地方。
  • 有很多+1 / me too / pleeeeease / i've waited 58 years instead of contributing in any way whatsoever to the project besides this disrespectful and ungrateful comment, why is this not done yet?帖子使整个对话变得混乱。
  • 由于他所请求的功能现在可以通过备用WebUI来使用,因此唯一未解决的合理问题就是在官方网站中对此进行支持。

当我关闭此线程时,我将打开两个新线程:

  • 一个用于在主WebUI中跟踪此功能的实现的程序(并专门关注于此)。 如果您只是想说“是的,我也想要这个”,则不需要+1注释,只需使用反应即可。
  • 人们可以在一个集中的地方自由讨论替代WebUI开发,这就是所谓的“替代WebUI开发讨论”或类似内容。

如果还有其他问题,请告诉我。

所有281条评论

+1请为qbittorrent-nox添加RSS功能,以使其与具有X窗口的qBittorrent具有奇偶校验。

+1

在Windows上+1

+1

+1

+1

@buinsky我已经看到您在Web界面中工作。 该功能似乎很有用。

+1

对于从uTorrent迁移的人来说,缺少的功能可能会破坏交易。 其他一切都很棒,甚至更好。

谢谢,并保持良好的工作:)

+1
希望看到这种情况。

+1

+1如上所述,这对我来说是个大难题。 希望看到它发生。

+1
因此,必须坚持使用uTorrent bloatware

+1,请-我找到的最好的无头客户,这将使它变得完整。

+1

+1。 这将非常有用。

请! +1

请添加此功能! +1

为此功能+1

+1
从一开始就消失了

+1
这会让我离开utorrent

+1
我现在没有这个卡住了

+1

+1

+1

是的,完全希望拥有此功能! 然后可以从眼垫控制:-)。 :+1:

+1需要带RSS的Web UI,用于无头服务器。

+1

+1

+1

+1

+1

+1

+1

+1

+1

三年了,仍然没有支持无头版本的RSS提要吗? 虽然Windows版本很棒,但这令人失望。

也许有人可以给我一些有关编辑.conf的指导? 我也不反对,但是我仍然希望看到UI跟随。

我尝试使用几种不同的编码来保存路径来编辑文件,但无法正常工作。 我最终不得不使用flexget。

+1

+1

我很乐意从uTorrent服务器迁移,该服务器是封闭源代码,并且似乎没有得到积极开发,但这是唯一阻止我的事情

+1

+1

好吧,最终我选择了Flexget:可以无休止地运行,同时仍提供所需的功能。

那将排除基于磁铁链接自动获取的能力。

+1

+1

+1(通过添加和完成的日期排序不会受到伤害)

2016年6月25日,星期六,下午5:23 Rihards Skuja [email protected]
写道:

+1

-
您收到此消息是因为您已订阅此线程。
直接回复此电子邮件,在GitHub上查看
https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment -228571166,
或使线程静音
https://github.com/notifications/unsubscribe/AGbY-5ty-GOC3gqmyGctI5zjwX6cJMGhks5qPZw8gaJpZM4AdExq

ssh X11转发可以正常工作,但是webUI中的此功能会更好。

+1现在使用flexget,但是将RSS集成到qbittorrent-nox中将是很棒的!

+1

并通过添加和完成的日期进行排序不受影响

在#5547中添加

+1

+1

+1

没有人尝试在fork或patch上实现此功能吗? 真奇怪,在所有这些时间之后,仍然没有实现此基本且真正需要的功能。

+1。 运行一个无头的torrent / PleX盒子,就可以完成它。

+1

+100!

是的,为我+1。

哇,花了一个小时寻找在config / etc中启用的选项,只是发现qbtorrent nox不支持它。 啊。 :失望:

现在使用功能强大的Sonarr,但我一直在寻找轻量级且集成的东西

+1

+1

惊讶的是4年后还没有添加。 难怪每个人都使用rTorrent。

+1 OMG,这真是荒谬,让qBittorent成为了一个非常好的痛苦客户

某种与RSS相关的WebAPI可以(应该)作为#6505的一部分实现。

我开始在WebUI中实现RSS支持。 但是由于服用抗抑郁药,我无法完成这项工作。

@ qbittorrent / webdev
可能可以帮助某人在WebUI中实现RSS支持。 我的代码位于:

https://github.com/buinsky/qBittorrent/tree/rss

+1

+1

+1

多年后又有一个人加+1。

+1

+1可能最终会写一些东西来解析RSS feed并以这种速率自己戳API ...

@buinsky ,您仍然无法完成此工作吗?

@glassez我不能不幸。

我非常感谢@glassez尝试解决此问题。 您是否可以为我们提供大概的时间表,以了解修复程序的实现以及可能具有此修复程序的qBittorrent版本?

+1

+1

+1

+1

+1

为需要的一件事而不得不远程进入我的服务器+1烦人... rss更改。 否则真棒客户!

+1甚至都没有注意到这不是问题。 :(肯定会想要的!

请实现此功能!

不幸的是,该项目目前没有活跃的Web开发人员...

+1
我看到了qbittorrent主页,然后跳进去安装了无标题文件

  • 通过Web用户界面进行远程控制,使用AJAX编写
    -几乎与常规GUI相同

本文并不是说缺少功能,只是说GUI不完全相同。

是否有通过SSH使RSS在qbittorrent中工作的指南?

+1

+1!
怎么还没有呢?

因为任何关心这个的人都还没有实现它。 我认为请求拉取是受欢迎的。

好吧,当人们在等待时,我想指出的是,用于Linux 3.3_alpha的utorrent服务器在webUI中确实具有rss组件

并具有社区0.83 webui的全部功能(股票webui缺少一些功能)

现在正在开发适当的Web API。 我希望它将在4.0.x分支的第一次更新中发布。
至于它的Web UI,由于我们没有活跃的Web开发人员,因此我无法安排其发布时间。

刚搬到Rockstor NAS,并意识到我的RSS配置无法从Web-ui导入。 哎哟...

+1! 刚购买了Netgear NAS,并且Web-ui版本确实需要此功能!

+1

+1

+1

+1

如果需要解决方法,这是一种解决方案。
https://askubuntu.com/questions/498232/using-rss-in-qbittorrent

+1

qBittorrent v4.1具有实验性的RSS管理API。 看这里

我们会很快看到这个支持吗? 我将qbittorent作为服务运行。 我需要关闭服务并在桌面上启动它来管理RSS下载,这真是令人讨厌。

我们会很快看到这个支持吗?

您没有注意到我之前的评论吗? 还是说Web UI?

我的意思是网络用户界面,但我正在使用篡改猴子为Chrome浏览器为此注入视图,请继续关注

就是这样,它需要Tampermonkey for Chrome。 它未经测试,如果它覆盖了您的规则或类似内容,请不要怪我。

// ==UserScript==
// <strong i="6">@name</strong>         qbittorrent rss
// <strong i="7">@namespace</strong>    http://tampermonkey.net/
// <strong i="8">@version</strong>      0.1
// <strong i="9">@description</strong>  Adds rss rule window to qBittorent web UI
// <strong i="10">@author</strong>       Anders Malmgren
// <strong i="11">@match</strong>        http://localhost:8080
// <strong i="12">@grant</strong>        none
// <strong i="13">@require</strong>      http://knockoutjs.com/downloads/knockout-3.4.2.js
// <strong i="14">@require</strong>      http://andersmalmgren.github.io/Knockout.BindingConventions/src/Knockout.BindingConventions.js
// ==/UserScript==

(function() {
    var modalTemplate = '<div>\
   <select data-name="rules"></select>\
   <button data-name="addRule">Add</button>\
   <button data-name="deleteSelectedRule">Delete</button>\
   <div data-name="selectedRule">\
      <div><label><input data-name="enabled"/>Enabled</label></div>\
      <div><label>Name</label><input data-name="name" /></div>\
      <div><label>Must contain</label><input data-name="mustContain" /></div>\
      <div><label>Must NOT contain</label><input data-name="mustNotContain" /></div>\
      <div><label>Save path</label><input data-name="savePath" /></div>\
      <label>Feeds</label>\
      <div data-name="feeds">\
          <div><label><input data-name="enabled"/><span data-name="name"></span></label></div>\
      </div>\
      <button data-name="save">Save</button>\
   </div>\
</div>'

    var button = new Element("a", { html: "RSS<div data-name='modal' data-bind='modal: modal'>" + modalTemplate + "</div>"});
    button.setAttribute("data-bind", "click: showRss");

    var feeds = null;
    new Request.JSON({
            url:  new URI('api/v2/rss/items'),
            noCache: true,
            method: 'get',
            onFailure: function() {
               //TODO: error handling
            },
            onSuccess: function(response) {
               feeds = Object.keys(response).map(function(key) { return { name: key, url: response[key] != "" ? response[key] : key }; })
            }
        }).send();

    $("mochaToolbar").append(button);

    var Model = function() {
        this.modal = ko.observable().extend({notify: 'always'});;
        this.modal.subscribe(function(value) { console.log(value);});
    };

    Model.prototype = {
        showRss: function() {
            if(this.modal() == null) {
                this.modal(new RssModel());
            }
        }
    };

    var RssModel = function() {
      this.rules = ko.observableArray();
      this.selectedRule = ko.observable();

      this.listRules();
      this.canDeleteSelectedRule = ko.computed(function() { return this.selectedRule() != null }, this);
    };

    RssModel.prototype = {
          listRules: function() {
var url = new URI('api/v2/rss/rules');
        var request = new Request.JSON({
            url: url,
            noCache: true,
            method: 'get',
            onFailure: function() {
               //TODO: error handling
            },
            onSuccess: function(response) {
               this.rules(Object.keys(response).map(function(key) { return new Rule(key, response[key]); }));
            }.bind(this)
        }).send();
        },
        addRule: function() {
            this.rules.push(new Rule("Untitled", { enabled: false, mustContain: "", mustNotContain: "", savePath: "", affectedFeeds: []}));
        },
        deleteSelectedRule: function() {
            var rule = this.selectedRule();
            var url = new URI('api/v2/rss/removeRule');
            url.setData('ruleName', rule.name());
            new Request.JSON({
               url: url,
               noCache: true,
               method: 'get',
               onFailure: function(response) {
                   //Unpexted behaviour, eror with status 200 trigger, why?
                   if(response.status !== 200) {
                       throw "Error deleting rule";
                   }
                   this.rules.remove(rule);

               }.bind(this)
            }).send();

        }
    };

    var Rule = function(name, data) {
        this.name = ko.observable(name);
        this.enabled = data.enabled;
        this.mustContain = data.mustContain;
        this.mustNotContain = data.mustNotContain;
        this.savePath = data.savePath;
        this.feeds = feeds.map(function(f) { return new Feed(f, data.affectedFeeds.indexOf(f.url) >= 0)});

        this.data = data;

        this.canSave = ko.observable(true);
    };

    Rule.prototype = {
       save: function() {
            var toSave = Object.assign({}, this.data);

            for (var key in toSave) {
               if (this.hasOwnProperty(key)) {
                    toSave[key] = ko.utils.unwrapObservable(this[key]);
               }
            }

            toSave.affectedFeeds = this.feeds.filter(function(f) { return f.enabled; }).map(function(f) { return f.url; });
            var json = ko.toJSON(toSave);
            var dirty = ko.toJSON(this.data) !== json;

            if(!dirty) return;

            var url = new URI('api/v2/rss/setRule');
            url.setData('ruleName', this.name());
            url.setData("ruleDef", json);

            this.canSave(false);
            var request = new Request.JSON({
               url: url,
               noCache: true,
               method: 'get',
               onFailure: function(response) {
                   //Unpexted behaviour, eror with status 200 trigger, why?
                   if(response.status !== 200) {
                       throw "Error saving rule";
                   }

                   this.data = toSave;
                   this.canSave(true);
               }.bind(this)
            }).send();
       }
    };

    var Feed = function(data, enabled) {
       this.name = data.name;
       this.url = data.url;
       this.enabled = enabled;
    };


    var orgOptionsApply = ko.bindingConventions.conventionBinders.options.apply;
    ko.bindingConventions.conventionBinders.options.apply = function(name, element, bindings, options, type, data, viewModel) {
        orgOptionsApply(name, element, bindings, options, type, data, viewModel)

        if (options.length === 0 || options[0]["name"]) {
            bindings.optionsText = function() { return "name"; };
        }
    };

    ko.bindingHandlers.modal = {
        init: function(element, valueAccessor) {
            valueAccessor().subscribe(function(value) {
            if(value) {
                setTimeout(function () {
                new MochaUI.Window({
                    title: "RSS auto download",
                    content: element,
                    storeOnClose: true,
                    addClass: 'windowFrame', // fixes iframe scrolling on iOS Safari
                    scrollbars: true,
                    maximizable: false,
                    closable: true,
                    paddingVertical: 0,
                    paddingHorizontal: 0,
                    onClose: function() {
                        valueAccessor()(null);
                    }
                });
                }, 0);
            }
            });

        }
    }


    ko.applyBindings(new Model(), button)
})();

用某些受影响的Feeds URL调用setRule似乎会使qbitTorrent感到困惑,它不会将受影响的提要保存在规则中,即使我选择不启用,它也会启用规则。

网址(编辑方式的坡口数据)

https://xxx.org/rss/feed?passkey=xxxx&feed=dl&type_origin=1&cats [] = 1c1c3&cats [] = 1c1c6&cats [] = 2c1c3&cats [] = 2c1c6”

我更新了上述脚本,以考虑到当前API的意外行为/错误。
另外,请勿重新命名您的供稿,使名称与网址保持同步

嗨! 首先,感谢Anders的脚本。 但是我尝试了一下,也许做错了,因为我看到的只是顶部菜单上的橙色“ RSS”(请参见屏幕截图),当我单击时,我看到了这个弹出窗口,实际上并不允许我做任何事情...我们应该看到什么,在哪里? 我什么也找不到。 (顺便说一句,当我单击“添加”时,没有任何反应,并且下拉菜单为空且不可编辑)

提前致谢!

image

@jadazul谢谢。

它看起来应该像
Rss

已针对v4.1.1 Web UI进行了测试

您可能需要定义一个供稿以使其正常工作,它只是规则的用户界面。 如果您有RSS提要,但没有任何规则,则需要按“添加”,然后可以填写字段。 尽管4.1.1中存在一个错误,所以您无法保存包含长网址供稿的规则,例如我上面的示例中的示例

尽管4.1.1中存在一个错误,所以您无法保存包含长网址供稿的规则,例如我上面的示例中的示例

您确定脚本以与在qBittorrent中添加供稿时使用的格式相同的格式发送供稿URL吗?

@glassez

我使用从返回的网址

api / v2 / rss / items

再次感谢@AndersMalmgren

当我在一台无头的Ubuntu服务器上安装qBittorrent-nox时,我找不到添加单个RSS feed的方法...我阅读了api的Wiki,但是没有很多方法来做到这一点...我尝试在ssh终端中使用curl,登录工作并给我一个cookie,但是没有使用/ api / v2,这是行不通的,每次都会出现404错误,并且找不到任何示例正确地做到这一点,所以我放弃了并尝试了您的脚本(但现在我知道这仅是为了管理现有的提要)。

有没有添加提要的方法,以便以后可以使用您的脚本进行管理? 即使是手动修改某些配置文件,我也只需要找到一种方法即可...

再次感谢!

我可以稍后进行研究,只是为了支持我的用例,该用例正在向现有提要中添加规则

编辑:您检查控制台是否有错误

抱歉,在检查此内容时,我刚刚看到了您的修改。

每当我尝试使用curl时,我都会收到404错误,但没有更多详细信息...

您是否在4.1.1上? RSS API已在4.1中添加

是的,我在无头的Ubuntu Server 18.04上安装了qBittorrent-nox v4.1.1

编辑:从头开始,我刚刚进行了验证,甚至我以为我有最新版本(因为我使用的是Ubuntu的apt-get,我以为那是最新版本),所以我已经安装了v4.0.3 ...我的错,我会尽快尝试安装最新版本。 无论如何,谢谢您的帮助!

setRule在4.1.2中仍然不起作用

+1

setRule在4.1.3中仍然不起作用,这是我创建的视频,当我尝试设置供稿网址时,您会发现一切都出错了

https://youtu.be/t_w9epoyxC8

@AndersMalmgren记住,您可以插入https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage使用Tampermonkey

setRule在4.1.3中仍然不起作用,这是我创建的视频,当我尝试设置供稿网址时,您会发现一切都出错了

https://youtu.be/t_w9epoyxC8

协议已更改。 我不记得前段时间进行修改时是哪一个。 请检查。

`

// ==UserScript==
// <strong i="11">@name</strong>         qbittorrent rss
// <strong i="12">@namespace</strong>    http://tampermonkey.net/
// <strong i="13">@version</strong>      0.1
// <strong i="14">@description</strong>  Adds rss rule window to qBittorent web UI
// <strong i="15">@author</strong>       Anders Malmgren
// <strong i="16">@match</strong>        
// <strong i="17">@grant</strong>        none
// <strong i="18">@require</strong>      http://knockoutjs.com/downloads/knockout-3.4.2.js
// <strong i="19">@require</strong>      http://andersmalmgren.github.io/Knockout.BindingConventions/src/Knockout.BindingConventions.js
// ==/UserScript==
(function() {
    var modalTemplate = '<div>\
<select data-name="rules"></select>\
<button data-name="addRule">Add</button>\
<button data-name="deleteSelectedRule">Delete</button>\
<div data-name="selectedRule">\
    <div><label><input data-name="enabled"/>Enabled</label></div>\
    <div><label>Name</label><input data-name="name" /></div>\
    <div><label>Must contain</label><input data-name="mustContain" /></div>\
    <div><label>Must NOT contain</label><input data-name="mustNotContain" /></div>\
    <div><label>Assigned Category</label><input data-name="assignedCategory" /></div>\
    <div><label>Save path</label><input data-name="savePath" /></div>\
    <label>Feeds</label>\
    <div data-name="feeds">\
        <div><label><input data-name="enabled"/><span data-name="name"></span></label></div>\
    </div>\
    <button data-name="save">Save</button>\
</div>\
</div>'

    var button = new Element("a", { html: "RSS<div data-name='modal' data-bind='modal: modal'>" + modalTemplate + "</div>"});
    button.setAttribute("data-bind", "click: showRss");

    var feeds = null;
    new Request.JSON({
            url:  new URI('api/v2/rss/items'),
            noCache: true,
            method: 'get',
            onFailure: function() {
            //TODO: error handling
            },
            onSuccess: function(response) {
            feeds = Object.keys(response).map(function(key) { return { name: key, url: response[key] != "" ? response[key]["url"] : key }; })
            }
        }).send();

    $("mochaToolbar").append(button);

    var Model = function() {
        this.modal = ko.observable().extend({notify: 'always'});;
        this.modal.subscribe(function(value) { console.log(value);});
    };

    Model.prototype = {
        showRss: function() {
            if(this.modal() == null) {
                this.modal(new RssModel());
            }
        }
    };

    var RssModel = function() {
    this.rules = ko.observableArray();
    this.selectedRule = ko.observable();

    this.listRules();
    this.canDeleteSelectedRule = ko.computed(function() { return this.selectedRule() != null }, this);
    };

    RssModel.prototype = {
        listRules: function() {
var url = new URI('api/v2/rss/rules');
        var request = new Request.JSON({
            url: url,
            noCache: true,
            method: 'get',
            onFailure: function() {
            //TODO: error handling
            },
            onSuccess: function(response) {
            this.rules(Object.keys(response).map(function(key) { return new Rule(key, response[key]); }));
            }.bind(this)
        }).send();
        },
        addRule: function() {
            this.rules.push(new Rule("Untitled", { enabled: false, mustContain: "", mustNotContain: "",assignedCategory: "", savePath: "", affectedFeeds: []}));
        },
        deleteSelectedRule: function() {
            var rule = this.selectedRule();
            var url = new URI('api/v2/rss/removeRule');
            url.setData('ruleName', rule.name());
            new Request.JSON({
            url: url,
            noCache: true,
            method: 'get',
            onFailure: function(response) {
                //Unpexted behaviour, eror with status 200 trigger, why?
                if(response.status !== 200) {
                    throw "Error deleting rule";
                }
                this.rules.remove(rule);

            }.bind(this)
            }).send();

        }
    };

    var Rule = function(name, data) {
        this.name = ko.observable(name);
        this.enabled = data.enabled;
        this.mustContain = data.mustContain;
        this.assignedCategory = data.assignedCategory;
        this.mustNotContain = data.mustNotContain;
        this.savePath = data.savePath;
        this.feeds = feeds.map(function(f) { return new Feed(f, data.affectedFeeds.indexOf(f.url) >= 0)});

        this.data = data;

        this.canSave = ko.observable(true);
    };

    Rule.prototype = {
    save: function() {
            var toSave = Object.assign({}, this.data);

            for (var key in toSave) {
            if (this.hasOwnProperty(key)) {
                    toSave[key] = ko.utils.unwrapObservable(this[key]);
            }
            }

            toSave.affectedFeeds = this.feeds.filter(function(f) { return f.enabled; }).map(function(f) { return f.url; });
            var json = ko.toJSON(toSave);
            var dirty = ko.toJSON(this.data) !== json;

            if(!dirty) return;

            var url = new URI('api/v2/rss/setRule');
            url.setData('ruleName', this.name());
            url.setData("ruleDef", json);

            this.canSave(false);
            var request = new Request.JSON({
            url: url,
            noCache: true,
            method: 'get',
            onFailure: function(response) {
                //Unpexted behaviour, eror with status 200 trigger, why?
                if(response.status !== 200) {
                    throw "Error saving rule";
                }

                this.data = toSave;
                this.canSave(true);
            }.bind(this)
            }).send();
    }
    };

    var Feed = function(data, enabled) {
    this.name = data.name;
    this.url = data.url;
    this.enabled = enabled;
    };


    var orgOptionsApply = ko.bindingConventions.conventionBinders.options.apply;
    ko.bindingConventions.conventionBinders.options.apply = function(name, element, bindings, options, type, data, viewModel) {
        orgOptionsApply(name, element, bindings, options, type, data, viewModel)

        if (options.length === 0 || options[0]["name"]) {
            bindings.optionsText = function() { return "name"; };
        }
    };

    ko.bindingHandlers.modal = {
        init: function(element, valueAccessor) {
            valueAccessor().subscribe(function(value) {
            if(value) {
                setTimeout(function () {
                new MochaUI.Window({
                    title: "RSS auto download",
                    content: element,
                    storeOnClose: true,
                    addClass: 'windowFrame', // fixes iframe scrolling on iOS Safari
                    scrollbars: true,
                    maximizable: false,
                    closable: true,
                    paddingVertical: 0,
                    paddingHorizontal: 0,
                    onClose: function() {
                        valueAccessor()(null);
                    }
                });
                }, 0);
            }
            });

        }
    }


    ko.applyBindings(new Model(), button)
})();

`

@ rqi14您对上面发布的我的代码进行了任何更改吗?

我记下了一些更改的信息,如果我没记错的话,它是列出URL的格式,setRules仍然采用URL字符串数组。

@ rqi14您对上面发布的我的代码进行了任何更改吗?

我记下了一些更改的信息,如果我没记错的话,它是列出URL的格式,setRules仍然采用URL字符串数组。

是的,我做到了。 我不记得我说过的修改内容。 但是它现在正在工作。

@ rqi14我在比较工具中比较了两个版本,是的,我已经完成了您的更改。 他们更改了从api / v2 / rss / items返回的提要URL的格式

当我使用VNC和常规GUI或只是从运行GUI的计算机上复制RSS提要设置中的设置后,我可以再停止qbittorrent并启动qbittorrent-nox,然后它将继续进行吗? 换句话说:仅仅是缺少GUI还是缺少整个功能集?

因此,如果我正确理解了这一点,我们必须自己添加RSS feed,而不会将其添加到webui中吗?

当我使用VNC和常规GUI或只是从运行GUI的计算机上复制RSS提要设置中的设置后,我可以再停止qbittorrent并启动qbittorrent-nox,然后它将继续进行吗? 换句话说:仅仅是缺少GUI还是缺少整个功能集?

显然,只有GUI丢失了,在发布我正在等待的种子之前,我切换到-nox进行测试,并成功将其自动下载。

知道GUI添加的目标是什么?

大家好,这是我的rss规则用户界面的最新版本。
现在,它对所有变异数据的请求使用帖子。 另外,它可用于所有提要URL(这是qbittorrent当前如何解析来自get请求的路径的错误)。
此用户界面目前仅支持规则,您无法添加供稿等。但您可以自己添加它

// ==UserScript==
// <strong i="8">@name</strong>         qbittorrent rss
// <strong i="9">@namespace</strong>    http://tampermonkey.net/
// <strong i="10">@version</strong>      0.1
// <strong i="11">@description</strong>  Adds rss rule window to qBittorent web UI
// <strong i="12">@author</strong>       Anders Malmgren
// <strong i="13">@match</strong>        http://winserver:8080
// <strong i="14">@match</strong>        http://localhost:8080/
// <strong i="15">@grant</strong>        none
// <strong i="16">@require</strong>      http://knockoutjs.com/downloads/knockout-3.4.2.js
// <strong i="17">@require</strong>      http://andersmalmgren.github.io/Knockout.BindingConventions/src/Knockout.BindingConventions.js
// ==/UserScript==

(function() {
    var modalTemplate = '<div>\
   <select data-name="rules"></select>\
   <button data-name="addRule">Add</button>\
   <button data-name="deleteSelectedRule">Delete</button>\
   <div data-name="selectedRule">\
      <div><label><input data-name="enabled"/>Enabled</label></div>\
      <div><label>Name</label><input data-name="name" /></div>\
      <div><label>Must contain</label><input data-name="mustContain" /></div>\
      <div><label>Must NOT contain</label><input data-name="mustNotContain" /></div>\
      <div><label>Save path</label><input data-name="savePath" /></div>\
      <label>Feeds</label>\
      <div data-name="feeds">\
          <div><label><input data-name="enabled"/><span data-name="name"></span></label></div>\
      </div>\
      <button data-name="save">Save</button>\
   </div>\
</div>'

    var button = new Element("a", { html: "RSS<div data-name='modal' data-bind='modal: modal'>" + modalTemplate + "</div>"});
    button.setAttribute("data-bind", "click: showRss");

    var feeds = null;
    new Request.JSON({
            url:  new URI('api/v2/rss/items'),
            noCache: true,
            method: 'get',
            onFailure: function() {
               //TODO: error handling
            },
            onSuccess: function(response) {
               feeds = Object.keys(response).map(function(key) { return { name: key, url: response[key] != "" ? response[key] : key }; })
            }
        }).send();

    $("mochaToolbar").append(button);

    var Model = function() {
        this.modal = ko.observable().extend({notify: 'always'});;
        this.modal.subscribe(function(value) { console.log(value);});
    };

    Model.prototype = {
        showRss: function() {
            if(this.modal() == null) {
                this.modal(new RssModel());
            }
        }
    };

    var RssModel = function() {
      this.rules = ko.observableArray();
      this.selectedRule = ko.observable();

      this.listRules();
      this.canDeleteSelectedRule = ko.computed(function() { return this.selectedRule() != null }, this);
    };

    RssModel.prototype = {
          listRules: function() {
var url = new URI('api/v2/rss/rules');
        var request = new Request.JSON({
            url: url,
            noCache: true,
            method: 'get',
            onFailure: function() {
               //TODO: error handling
            },
            onSuccess: function(response) {
               this.rules(Object.keys(response).map(function(key) { return new Rule(key, response[key]); }));
            }.bind(this)
        }).send();
        },
        addRule: function() {
            this.rules.push(new Rule("Untitled", { enabled: false, mustContain: "", mustNotContain: "", savePath: "", affectedFeeds: []}));
        },
        deleteSelectedRule: function() {
            var rule = this.selectedRule();
            var url = new URI('api/v2/rss/removeRule');
            new Request.JSON({
               url: url,
               noCache: true,
               method: 'post',
               data: { ruleName: rule.name() },
               onFailure: function(response) {
                   //Unpexted behaviour, eror with status 200 trigger, why?
                   if(response.status !== 200) {
                       throw "Error deleting rule";
                   }
                   this.rules.remove(rule);

               }.bind(this)
            }).send();

        }
    };

    var Rule = function(name, data) {
        this.name = ko.observable(name);
        this.enabled = data.enabled;
        this.mustContain = data.mustContain;
        this.mustNotContain = data.mustNotContain;
        this.savePath = data.savePath;
        this.feeds = feeds.map(function(f) { return new Feed(f, data.affectedFeeds.indexOf(f.url.url) >= 0)});

        this.data = data;

        this.canSave = ko.observable(true);
    };

    Rule.prototype = {
       save: function() {
            var toSave = Object.assign({}, this.data);

            for (var key in toSave) {
               if (this.hasOwnProperty(key)) {
                    toSave[key] = ko.utils.unwrapObservable(this[key]);
               }
            }

            toSave.affectedFeeds = this.feeds.filter(function(f) { return f.enabled; }).map(function(f) { return f.url; });
            var json = ko.toJSON(toSave);
            var dirty = ko.toJSON(this.data) !== json;

            if(!dirty) return;

            var url = new URI('api/v2/rss/setRule');

            this.canSave(false);
            var request = new Request.JSON({
               url: url,
               noCache: true,
               method: 'post',
               data: { ruleName: this.name(), ruleDef: json },
               onFailure: function(response) {
                   //Unpexted behaviour, eror with status 200 trigger, why?
                   if(response.status !== 200) {
                       throw "Error saving rule";
                   }

                   this.data = toSave;
                   this.canSave(true);
               }.bind(this)
            }).send();
       }
    };

    var Feed = function(data, enabled) {
       this.name = data.name;
       this.url = data.url.url;
       this.id = data.url.uid;
       this.enabled = enabled;
    };


    var orgOptionsApply = ko.bindingConventions.conventionBinders.options.apply;
    ko.bindingConventions.conventionBinders.options.apply = function(name, element, bindings, options, type, data, viewModel) {
        orgOptionsApply(name, element, bindings, options, type, data, viewModel)

        if (options.length === 0 || options[0]["name"]) {
            bindings.optionsText = function() { return "name"; };
        }
    };

    ko.bindingHandlers.modal = {
        init: function(element, valueAccessor) {
            valueAccessor().subscribe(function(value) {
            if(value) {
                setTimeout(function () {
                new MochaUI.Window({
                    title: "RSS auto download",
                    content: element,
                    storeOnClose: true,
                    addClass: 'windowFrame', // fixes iframe scrolling on iOS Safari
                    scrollbars: true,
                    maximizable: false,
                    closable: true,
                    paddingVertical: 0,
                    paddingHorizontal: 0,
                    onClose: function() {
                        valueAccessor()(null);
                    }
                });
                }, 0);
            }
            });

        }
    }


    ko.applyBindings(new Model(), button)
})();

好的,我分叉了qbittorrent。 现在,您可以使用替代的webui方法添加我的RSS Rules UI。 这是我的回购

https://github.com/AndersMalmgren/qBittorrent

替代用户界面的说明
https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage

@AndersMalmgren为什么不为此更改打开PR?

@Piccirello几个原因,首先,我使用了一个称为Knockout的MVVM引擎,我不确定核心团队是否想添加其他引擎。 第二,没有语言支持。 第三,它的视觉效果与其余的UI不一致,最后我需要清理它。 :D

今天是此功能要求的5周年,请访问github。

是否有可能获得有关团队针对RSS和Webui的未来计划的反馈。

是否有可能获得有关团队针对RSS和Webui的未来计划的反馈。

在这5年中,反馈没有改变。 只要有Web开发人员想要为此做出贡献,它将立即实施。

在此期间,我的备用UI可以完成此工作:)

我是一名Web开发人员,愿意为此工作(我非常希望自己使用此功能)。 真的不知道什么时候/是否真的能够完成它,因为我根本不熟悉代码库。

@alexiooo涉及RSS Web API方法时,您可以查看我的分支机构如何使用它们

@alexiooo ,您也可以联系@Piccirello。 最近,他在我们的Web客户端中做了很多工作。 也许他在RSS实施方面有一些经验。 至少他可以为代码库提供帮助。

+1

@Piccirello @glassez @ngosang @buinsky
这似乎是一个长期运行且非常受欢迎的请求,是否有可能将其添加到里程碑中。
谢谢

我现在根本没有时间进行这项工作。 我什至没有机会发表关于现有PR的评论。

事实是,我们只有一个Web开发人员。 我们需要社区的更多支持才能完成此任务。

@alexiooo@glassez所述,如果对webui / webapi架构或qBittorrent的代码库有任何疑问,请随时与我们联系。 我对RSS没有任何经验。

@Piccirello是否有关于浏览器兼容性的准则? 我想使用一些ES6功能,特别是类( https://caniuse.com/#feat = es6-class)

这是我们一段时间以来一直需要决定的事情。 我知道我们已经在其他问题/ prs中讨论了该主题,但是不记得在哪里。

一方面,我们拥有mocha类,这些类可能会完成ES6类所需要的一切。 另一方面,除IE11之外,我们的用户可能使用的所有浏览器都支持ES6类。 我和下一个人一样不喜欢IE11,但是我不想在没有充分理由的情况下放弃支持。 真正的问题是我们没有任何指标可以了解用户使用的浏览器。

编辑:我确实从@ Chocobo1找到了这篇文章,我对此非常同意。

我认为很多人都没有使用IE11,即使微软表示不使用它,也可以使用https://techcommunity.microsoft.com/t5/Windows-IT-Pro-Blog/The-perils-of-using-Internet-Explorer-作为您的默认浏览器/ ba-p / 331732

是否可以选择可以在设置中启用的指标,并记录诸如此类的匿名统计信息?

这是一个公平的观点。 似乎IE仍然会占据台式机浏览器市场的5-10%,具体取决于您的来源。 10%的比例确实很高,我会犹豫放弃对这么多用户的支持。

但是,也许4.2.0是切换到es6的好时机。 IE用户要么必须使用4.1,要么使用现代浏览器。 我不想独自做出这个决定。 @ Chocobo1您对此有何想法? 我认为您已经有一段时间想更新我们的堆栈了。

那10%的人也将包括甚至不知道洪流的老用户。 我认为,对于qBittorrent用户而言,使用IE的人数要低得多,但是如果没有qBittorrent用户的任何统计信息就无法判断。

由于uTorrent的问题,许多qBittorrent用户转向了它,如果他们足够了解uTorrent迁移到qBittorrent的危险,那么请进入设置并将其设置为可通过webgui进行访问,我怀疑他们仍然使用IE。

但是我只是在假设,我没有任何实际数字。

添加指标对于完成短期任务(尤其是在GDPR后的世界)而言是一个相当大的跃进,但是假设从现在到您放弃浏览器支持之间至少有一个版本,这将使您有机会编写EOL警告。 这样,您就可以将邮件专门定位到受影响的浏览器,并为用户提供一些帮助。

鉴于这种微调可以帮助用户意识到他们的浏览器选择具有比qB ....更广泛的安全隐患,并且可以使警报摆在他们面前,而度量和新闻发布永远不会,这可能是一种更好的方法。

但我不想无故放弃支持。

我的想法是:拥有ES6类对我们有重要意义,我们希望放弃IE11支持吗? 我不太确定...
即使答案是肯定的,IMO在v4.2.x系列中进行切换仍为时过早,我同意https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment -475126288事先发出EOL警告(至少在某些版本中)。 如果有人想意识到这一点,请提出另一个问题(或PR)并在那里进行讨论。

或者,我们可以使用Babel进行转译。 无论如何,我们都停留在编译步骤上,因此不会产生太大的影响。 这样,我们可以同时使用ES6和支持IE。

可以使用打字稿。 它将编译为标准原型对象

可以使用打字稿,是的,但是我只是想将纯ES6 javascript转换为将在IE上运行的javascript。

是的,但是由于您需要额外的构建步骤,因此您最好输入打字稿并从打字安全中受益

如果当前无法实现,那么X服务器UI的“客户端”选项又如何,以便我们可以分别运行qbittorrent-nox和UI? Deluge的功能类似:主UI也可以充当服务器的客户端,因此您可以让服务器在无显示计算机上运行,​​并从另一台计算机远程控制它。

在此期间,我的备用UI可以完成此工作:)

@AndersMalmgren
我希望获得有关如何通过Windows安装qBittorrent部署备用UI的说明。
即下载XXX到一个文件夹,将qBittorrent“用户备用Web UI”指向该文件夹。
我可以看到您已经在上面的评论中发布了脚本,并且还进行了分叉。
我可以从您的帖子中复制脚本,将其保存到具有特定文件名的文件中(请告诉我它应该叫什么!),然后将qBittorrent的备用Web UI指向包含该文件的文件夹?
非常感谢您向社区提供此服务。

@bakertony
嗨,首先确保yuo在4.1.x分支上。

src\webui\www所有这些都应放入本地计算机上的文件夹中。 同时确保将src\icons复制到src\webui\www\public\images

@bakertony
嗨,首先确保yuo在4.1.x分支上。

src\webui\www所有这些都应放入本地计算机上的文件夹中。 同时确保将src\icons复制到src\webui\www\public\images

感谢那!
只是为其他人真正说明一下:
1)我去了https://github.com/AndersMalmgren/qBittorrent
2)我下载了(单击“克隆或下载”)
3)将文件夹“ qBittorrent-mastersrc \ webui \ www”复制到我的计算机上的某个位置
4)在计算机上已复制文件夹的“ www \ public”中创建了一个图像文件夹
5)将“ qBittorrent-mastersrc \ icons”的内容复制到“ www \ public \ images”
6)在qBittorrent的“设置-> Web UI->使用备用Web UI”中,将“文件位置”设置为www文件夹,单击“确定”
7)浏览到“ http:// localhost :8080”以查看新的UI

我可以看到工具栏上有一个新的“ RSS”图标,使我可以查看现有的RSS自动下载。
太好了,谢谢。
不幸的是,我希望看到完整的RSS标签,即希望看到RSS feed的内容并根据需要下载其他种子:-/希望有一天有一个qBittorrent更新!

@bakertony嗨,看来api / v2 / rss / items?withData = true应该可以为您提供这些数据。 还没有尝试过。
https://github.com/qbittorrent/qBittorrent/wiki/Web-API-Documentation#get -all-items

然后,您也许可以使用add torrent方法添加一个torrent

https://github.com/qbittorrent/qBittorrent/wiki/Web-API-Documentation#add -new-torrent

@bakertony我修复了要下载的UI。 如果您使用的是qbittorrent的可下载版本,请确保使用41x分支。 大师就是您从大师那里建立源代码

https://github.com/AndersMalmgren/qBittorrent/tree/v4_1_x

非常感谢@AndersMalmgren。 但是,当您尝试从HTTP源提取两个js库时,它不能像在HTTPS qb实例上那样工作。 由于它们是跨源的,因此被浏览器阻止。 只需将http更改为https即可解决此问题。 我认为,理想情况下,库应该与WebUI打包在一起。

同样,在选择了备用UI的情况下,该UI中对图标/图像的所有请求都将失败,并显示err500。不知道为什么,它们都位于文件系统上的正确位置。 qbittorrent或nginx中没有错误...很奇怪。

我最大的问题是我无法添加新的RSS feed。 有没有办法将它们以某种方式插入到qb配置存储中?

您能否在支持Raspberry Pi 2的版本中选择此功能? 谢谢

@AndersMalmgren ,我克隆了您的v4_1_x分支,对其进行了编译,并根据说明设置了替代ui。 我有RSS按钮,但是它什么也没做。 我哪里出问题了?

@AndersMalmgren ,实际上只是NoScript插件阻止了您的repo和knockoutjs中的javascript。 允许他们后,它起作用。

@AndersMalmgren ,该API是否还不支持设置(智能)剧集过滤,或者您只是不愿意将其包括在内?

@Ingvix仅添加了我自己使用的那些。

https://github.com/qbittorrent/qBittorrent/wiki/Web-API-Documentation#set -auto-downloading-rule

@AndersMalmgren ,好的,谢谢。 我想我会尝试看看是否可以自己做。

怎么还没有添加? 这个功能要求是6岁。 来吧! 这是任何Bittorrent客户端的重要组成部分。

是的,欧文! 付出了我们所付出的一切,您还没有编码和提交就太荒唐了!!
您如何放置</ /讽刺>>?

我已经为此加了一个加号,但是我也很乐意把我的钱放在我的嘴巴上,这将为这笔赏金做出贡献!

嗯,从几年前开始,我将继续在Linux上使用utorrent 3.3,直到此功能完成为止。

哇... 6年

是的,如果我是你,我会放弃等待。

+1

看起来确实没有意义,但是我将向该请求添加+1 ...然后继续使用uTorrent,每两年检查一次,看看是否有任何进展。 就是说,我意识到这是一个免费的产品,并且赞赏它的作用,尽管如果有广告的支持,将这个名单上的人迁移可以增加收入。

@WilliCJ到底是什么意思? Rtorrent是唯一具有完整RSS管理功能且开放源代码的UI。 它被广泛使用。

抱歉@owenashurst,我一定不清楚,我的意思是,将我的小“ +1”请求添加到已经有6年历史的未操作线程的请求是没有意义的。 不过,我确实不得不道歉,我显然把它放在了错误的位置,因为我什至没有意识到有一个Rtorrent应用程序。 您是否在uTorrent和qBittorrent上推荐它?

@WilliCJ哈哈,是的,Rtorrent是一个基于Linux的应用程序,它具有一个称为Rutorrent的UI,并且默认情况下通常安装一个RSS插件。 Qbittorent是跨平台的,但是不确定Rtorrent是否已被交叉编译。

感谢@owenashurst ,我刚刚检查了一下,看来Rtorrent仍然仅是Linux,并且由于我在使用的机器上运行Windows平台,因此对我来说不起作用。 不管怎么说,还是要谢谢你! 鉴于此,我仍然想通过WebUI在开发人员列表上访问qBittorrent的RSS提要和过滤器选项!

对我来说,等待6年对于一个功能来说太长了。
有Linux,docker,rss和webui支持的任何其他洪流客户端吗?

@ Haxy89,如果您阅读了以前的评论,我提到了Rtorrent,它是一个基于Linux的bittorrent客户端,您单独安装的Web UI(Rutorrent)具有一个具有RSS支持的插件,所有在线教程均默认包含该插件。 无论如何,还有一个Docker容器拥有所有这些。

@owenashurst @ Haxy89 @WilliCJ你们是否尝试过https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment -483063942 + https://github.com/qbittorrent/qBittorrent/issues/453#的altWebUI实现

@WolfganP我还没有尝试过,只要它可以像添加/编辑/删除中那样管理RSS feed,那就太好了。 我看到您无法从丢失的RSS feed中查看/下载种子,但这并不是很重要。

@WolfganP
刚刚尝试过但是...
obraz

无所事事...

我要和RTorrent打架

@ Haxy89是的,无法从webUI添加提要。 我不想寻找新的解决方案,因此我重新编译了包含常规UI的qbittorrent,并通过SSH和X11转发添加了这些供稿。 另外,一些不包含自动下载选项,因此如果需要设置它们,则需要再次使用X11转发或手动编辑配置文件。 有点麻烦,但这并不是我仍然需要经常打开常规UI,qBittorrent具有最佳的浏览器扩展,可以随时添加新的torrent,因此我可以忍受这种情况。

@WolfganP
刚刚尝试过但是...
obraz

无所事事...

控制台说什么? 某些设置不正确。 确保您位于4.1.x分支。

编辑:当前,您需要从桌面UI设置提要。 但我也有可以设置供稿的版本。 但是有点马车

@WolfganP

我没有使用桌面。
很有可能像RTorrent一样从Web设置一切

@ Haxy89 @AndersMalmgren即使已经定义了一个提要,但“提要”选项卡上的我还是有同样的问题,但是我没有时间进行适当的故障排除。 样本rss / feeds.json:

{
    "The Pirate Bay - Video": {
        "uid": "{ad569ad7-ea3e-4bb5-8c85-a43215b5d352}",
        "url": "https://thepiratebay.org/rss//top100/200"
    }
}

当我使用主版本时,问题可能是@AndersMalmgren分支的altWebUI落后于当前WebUI状态。 也许@Piccirello (又名WebUI

我只在4.1.5上测试过的@wolfganp会更新为1.7,看看

@WolfganP为我工作于4.1.7

顺便说一句,没有API函数来强制RSS提取。 因此,您需要向Feed中添加自动规则。 否则“ Feed”标签将为空,尽管它应该在“ Feed”标签下显示该Feed的名称。

使用基本的Feed管理UI更新了我的4.1.x分支

image

@AndersMalmgren现在为我工作正常(仅测试供稿列表,而不是其他功能)。 非常感谢!

顺便说一句,在rss.js第39行中,您可能需要将RSS图标的格式更新为svgsrc='images/qbt-theme/rss-config.svg'

@WolfganP您需要使用4.1.x中的图标。 那里的图标是png

@owenashurst @ Haxy89 @WilliCJ你们尝试过#453(注释) + #453(注释)中的altWebUI实现吗?

@WolfganP我现在有,“ RSS规则”按钮本身未正确显示(我可能做错了一些,但我认为我已按照说明进行操作),但它似乎可以让我访问和编辑RSS自动下载规则,并查看现有的RSS供稿,但不添加/编辑它们。

请检查控制台是否有错误

请检查控制台是否有错误

抱歉@AndersMalmgren ,我看不到任何与

我最初安装的qBittorrent仅来自qBittorent.org站点上的下载安装程序,但是现在我已经从github下载了clone / zip文件,并复制了一些不在“ qBittorrent-mastersrc \ icons”文件夹中的文件。 “ https://github.com/AndersMalmgren/qBittorrent ” clone / zip。 RSS提要的图标现在在那里。

谢谢安德斯和欧文!

...现在我只需要弄清楚如何使qbottorrent的Filebot正常工作!

顺便说一句,没有API函数来强制RSS提取。 因此,您需要向Feed中添加自动规则。 否则“ Feed”标签将为空,尽管它应该在“ Feed”标签下显示该Feed的名称。

@AndersMalmgren只是大声地

我不知道你们在说什么。 您真正想念什么API?

添加一个规则,该规则从不匹配任何种子文件,但是无论如何都会触发提要更新?

这样行不通。
提要以指定的间隔更新。 当资讯提供更新规则套用到它时。

我们需要向用户公开这些设置

image

可以使用当前的API来解决。 但是API中不存在“更新所有提要”功能

image

或为此更新单粒饲料

image

我在我的4.1.x分支的downlad设置选项卡中添加了rss feed设置

image

@AndersMalmgren
有自动下载的设置吗?
哪里会自动下载种子? 默认下载文件夹?
过滤器仅自动下载选定的种子等?

@ Haxy89他不是在回购中进行的最初更改吗? 或至少是本期宣布的内容。 您可以为每个规则设置下载位置。

@ Haxy89@Ingvix所说的那样被包括在内。 直到现在,上述RSS设置都没有。

我将rss feed设置添加到了downlad设置选项卡

您可以将更改作为“拉取请求”提供吗?
还是与qBittorrent内置WebUI不兼容?

但是API中不存在“更新所有提要”功能

将会。

我将rss feed设置添加到了downlad设置选项卡

您可以将更改作为“拉取请求”提供吗?
还是与qBittorrent内置WebUI不兼容?

唯一缺少的功能就是翻译。 目前已硬编码

https://github.com/AndersMalmgren/qBittorrent/blob/c52de3980f7543248e88f76c09f53da41dc4d63b/src/webui/www/private/preferences_content.html#L236

即使缺少翻译,我也没问题,至少我们可以做到!

因此,我设法使它至少在视觉上起作用。 它实际上从未添加任何种子。 我假设包含/不包含支持正则表达式? 我应该用斜杠输入还是不输入? 如果不是,我实际上不知道它是如何工作的。 您会考虑支持正则表达式吗?

在弄乱了rss设置后,它实际上只是停止了所有工作。 它输出此错误:
文件类型不可接受,仅允许使用常规文件

当我去网址
我正在使用来自仓库的debian 10 qbittorrent。 是4.1.5-1

当我修改下载部分中的设置时,它将禁用新的用户界面,并且我必须重新启用它(并祈祷它不会破坏所有功能)

无论如何,我只想说你在做主的工作。 我非常感谢能在webui中访问rss,即使它有很多问题。

@xrishox我没有公开正则表达式字段,因为我自己没有使用它们。 可以解决。 谢谢 :)

您知道此错误是什么意思吗?“文件类型不可接受,只允许使用常规文件”

有时,当我转到显示的webui网址时。 它似乎只能通过删除qbittorrent.conf并重新开始进行修复

编辑1:
我不知道这是我的安装所特有的错误,还是其他人也会遇到的错误,因此,如果其他人遇到相同的问题,我将仅发布对我有用的解决方案。

https://github.com/qbittorrent/qBittorrent/issues/10503#issuecomment -486923269

“#10485将登录页面从login.html重命名为index.html。v4.1.5仍在查找login.html,但您的公用文件夹包含index.html。请尝试将该文件重命名为login.html。

编辑2:

现在,我遇到了一个奇怪的问题,即它经常禁用备用webui,而我必须重新启用它并再次输入备用路径。 没什么大不了的,因为至少它能起作用,但是我不确定为什么要这样做。 我也遇到了怪异的ui bug,以使ui图标不会显示,并且由于某些奇怪的原因而导致文本被复制。 我不确定为什么会这样,因为我将所有图标都复制到了/ private和/ public。 它不会破坏我使用qbittorrent的能力,因此我并不特别在意它。 仅出于完整性目的在此处报告。

这是怪异的ui怪癖的图片https://i.imgur.com/kkdGyzs.png

我真的希望在被合并的这一点上稳定并强大,因为这是一个了不起的功能。

但是API中不存在“更新所有提要”功能
将会。

谢谢@glassezhttps://github.com/qbittorrent/qBittorrent/pull/11055

您知道此错误是什么意思吗?“文件类型不可接受,只允许使用常规文件”

当在* nix上启用alt webUI并且请求的文件不是“常规文件”时,就会发生这种情况(我不确定这到底是什么意思)。 也可能是在不存在这样的文件时,因此无法检查其类型。

@xrishox我暴露了正则表达式选项。 它在我的4,1.x分支中

我在我的4.1.x分支的downlad设置选项卡中添加了rss feed设置

我将其移植到qBittorrent master(#11056)中。
不幸的是,我无法使用@AndersMalmgren的其他代码来做到这

@glassez对我来说太老了:)

编辑:我的代码需要清理才能正式发布

@AndersMalmgren您是否有机会尝试https://github.com/qbittorrent/qBittorrent/pull/11055 ? (允许通过WebAPI刷新RSS项目)

很好,我启用了正则表达式。 我还没有触发它的事件,所以这里希望它能起作用。

如果您愿意接受,我有一些生活质量建议。 请注意,这些并不是请求或要求,因为它实际上对于我的用例而言是完美的,但是您可以考虑一些事项。

当您在“自动下载”页面上单击“保存”时,它可以保存您已修改的所有自动下载的修改,而不仅仅是当前关注的自动下载。 或者,选择添加“全部保存”按钮。

另一个有用的功能是拥有它,以便可以将自动下载的内容添加到类别/标签中,其中类别/标签是其自动下载内容的名称。

@WolfganP目前我还没有C ++环境,

@xrishox感谢您的反馈,我可以添加一个全部保存按钮。 该类别感觉很主观,但可能不适合。 如果需要,我可以公开类别字段吗?

@AndersMalmgren如果有帮助,您可以使用我的Dockerfile轻松构建本地qBittorrent代码。 它还将从源代码构建libtorrent 1.1。 它现在有几个缺点(您尚无法通过config,它不支持增量构建),但使构建qBittorrent变得非常容易。

Docker内部版本: docker build -t qbittorrent/qbittorrent .
Docker运行: docker run --rm -it -p 8080:8080 qbittorrent/qbittorrent

@Piccirello何时计划4.2? 在4.2即将发布之前,我没有理由修复此问题

在这一点上,您的猜测和我的一样。

@Piccirello何时计划4.2? 在4.2即将发布之前,我没有理由修复此问题

#10047可能会在接下来的几天/一周或两天内发布4.2.0的公开测试版。
自6月底以来,我一直在使用4.2.0 alpha版本。

好吧,当RSS修复程序处于beta版时,我可以在主服务器中实施它

所以我只有一个rss事件触发器,而正则表达式似乎不起作用。 我从rutorrent复制了它的确切工作位置,并尝试了是否使用斜线。

现在,v4.1.x分支中提供了“ refreshItem”操作。

@glassez我可以在某处获取beta二进制文件吗? 谢谢

我等不及您完善rss ui。 @AndersMalmgren您可以向主人提出拉动请求吗?

@ caoli5288是否尝试按照https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment -483063942使用altWebUI方法? (https://github.com/AndersMalmgren/qBittorrent根据https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-483342384使用4.1分支)

@WolfganP这是https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment -519135601中所示,并且很难通过浏览器提供内容。

图片

@ caoli5288 https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment -519135601不是webUI,而是QtUI。 这些评论与Web API上不可用的feed更新有关,稍后由@glassezhttps://github.com/qbittorrent/qBittorrent/pull/11055实施

怎么样了? 我们可以在下一个版本中看到此功能吗?

怎么样了? 我们可以在下一个版本中看到此功能吗?

您可以尝试以下方法: https :
但只有中文

怎么样了? 我们可以在下一个版本中看到此功能吗?

您可以尝试以下方法: https :
但只有中文

@miniers谢谢! 您是否尝试过使用AltWebUI? 我只是打开问题https://github.com/miniers/qb-web/issues/3询问使用现有翻译字符串的问题。

我在RSS上+1。 这是否意味着qbittorrent-nox即将开始基本的RSS下载?

(令人怀疑的是,自2013年起,这已被忽略)

有希望在4.2中看到这一点吗? @ Chocobo1我看到您做了很多改进,我认为这是我在

+1我已经使用qbittorrent多年了,由于qbittorrent中缺少Web UI RSS支持,我正在积极寻找另一个torrent应用程序。

wtf 9年后,至今仍没有更新

@ikiddoi您可能应该阅读上面的评论,并意识到它处于qbittorrent的测试版中。

参考: https :

我缺少了一些东西,我没有在不稳定的(4.2.0 \ ~~ 201911110018-6775-8711613 \〜ubuntu18.04.1)中使用qbitorrent-nox的WebUI中看到该选项。

请注意,完全可以确定,但是在nox和标准版本之间始终存在功能奇偶校验问题。

我在我的master分支中修复了4.2支持

https://github.com/AndersMalmgren/qBittorrent/tree/master

现在它也支持刷新提要。 点击提要名称旁边的小刷新图标

我不理解官方团队与社区打交道的缓慢性。
看看这数千个未解决的问题!
也许是时候找到qbittorrent的替代品了。

我不理解官方团队与社区打交道的缓慢性。
看看这数千个未解决的问题!
也许是时候找到qbittorrent的替代品了。

这是因为他们缺乏开发人员。 非常欢迎您为未解决的问题做出贡献并提供解决方案,但这可能会让您不感兴趣,因为它是无偿工作。

您捐赠了多少钱来帮助开发功能和修复程序? 开发人员会在自己的时间里做自由工作,即使我们希望早些实现这样的事情,我们也应该感谢他们投入到项目中的工作和努力,而不是付诸行动。就像他们有权利自由地做我们想做的事情,并且在他们没有为我们牺牲更多时间的时候对他们生气。

地狱,如果我是开发人员之一,那么我会重新考虑是否要在项目的用户非常忘恩负义的时候将时间和精力投入到项目中。

哇,这个线程的权利。

官方团队发布了官方声明,说他们根本没有
有时间花在此功能上,但可以接受来自
社区。 很高兴终于到了,或者贡献自己的力量。

在2019年11月14日12:28:20 caoli5288 [email protected]写道:

我不理解官方团队与社区打交道的缓慢性。
看看这数千个未解决的问题!
也许是时候找到qbittorrent的替代品了。
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看或取消订阅。

您捐赠了多少钱来帮助开发功能和修复程序

@ BradleyDS2聆听社区意见并使软件变得更好是开源软件的道德规范之一。 你怎么说我捐多少

非常欢迎您为未解决的问题做出贡献并提供解决方案

这是一个自大的想法。 大多数用户可以做什么,但抱怨呢? 查看您的帐户。 您尚未向任何项目贡献任何代码。 那是因为您对任何项目都满意吗? 还是您认为github应该删除问题页面并保留请求请求?

如果开源软件不听取社区的意见,它将失去用户。 奇怪的是,我应该被指控仅仅陈述一个事实,

大多数用户可以做什么,但抱怨呢?

捐赠,提出要求,提供建设性反馈。 询问团队他们希望您做些什么。

至于您说的其他话,我会用您自己的一些话来回答。

你怎么能说
开源软件的道德规范
那是个傲慢的想法

团队正在努力工作,只是因为您没有明确想要做的事情并不会减轻他们的工作量。 没有人需要那种毒性。

他们听取社区意见并优先处理问题。 这个过程花了很长时间,因为在打开它的大部分时间里,几乎没有人可以处理它。

他们听取社区意见并优先处理问题

@ BradleyDS2那么2000年以上的问题呢?

我是一名开源开发人员,并且为数十个开源项目做出了贡献。 你做了什么? 我看不到您为某些项目做任何贡献,在我看来,您只是在讲话。

我没有对qbittorrent做任何事情。 几个月前,我启动了一个dockerfile请求,但被拒绝了。

你只对一件事是正确的。 我走了。

他们听取社区意见并优先处理问题

@ BradleyDS2那么2000年以上的问题呢?

我指的是6500+已关闭。

我是一名开源开发人员,并且为数十个开源项目做出了贡献。 你做了什么? 我看不到您为任何项目做任何贡献,在我看来,您只是在讲话。

然后,您一定会丢失一些东西,因为我之前确实已经完成过对项目的拉取请求,但是我主要使用gitlab。

我没有对qbittorrent做任何事情。 几个月前,我启动了一个dockerfile请求,但被拒绝了。

您和我都知道为什么它被拒绝了。 它设置为自动接受法律通知,开发人员还说:“我不认为我们现在有能力对其进行正式维护。”

这些年来仍未实施的唯一原因是qBittorrent项目的团队中没有活跃/永久的Web开发人员。 这个原因在这里已经被多次提及,所以那些不了解它的人应该认真考虑他们的心理能力。

我在我的master分支中修复了4.2支持

https://github.com/AndersMalmgren/qBittorrent/tree/master

现在它也支持刷新提要。 点击提要名称旁边的小刷新图标

我以为现在可以在不需要其他UI的情况下实现RSS自动下载功能了,不是吗? 至少在构建主分支后,我看不到从webUI访问自动下载规则的方法。

我在我的master分支中修复了4.2支持
https://github.com/AndersMalmgren/qBittorrent/tree/master
现在它也支持刷新提要。 点击提要名称旁边的小刷新图标

我以为现在可以在不需要其他UI的情况下实现RSS自动下载功能了,不是吗? 至少在构建主分支后,我看不到从webUI访问自动下载规则的方法。

我不知道qbittorrent的构建过程如何工作,但是文件在那里,所以我猜它应该包含在构建中。

但是我使用替代UI方法

@AndersMalmgren好吧,我再次按照https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment -483063942中的说明进行操作,并提供了与我一起构建qbittorrent并使其正常工作的源代码。 有趣的是,尽管更改已包含在源代码中,但更改本身并未包含在构建中。

@AndersMalmgren好吧,我再次按照#453(注释)中的说明进行操作,同时提供了与我一起构建qbittorrent并使之正常工作的源代码。 有趣的是,尽管更改已包含在源代码中,但更改本身并未包含在构建中。

我猜也许在某个地方也必须添加rss.js列表:)

@AndersMalmgren好吧,我再次按照#453(注释)中的说明进行操作,同时提供了与我一起构建qbittorrent并使之正常工作的源代码。 有趣的是,尽管更改已包含在源代码中,但更改本身并未包含在构建中。

无需使用@AndersMalmgren fork来重建所有内容以使用RSS功能(我们都感谢他:-)
只需以zip格式获取其主要源代码,解压缩Web文件夹,然后将正式的qBt指向该文件夹即可构建AltWebUI设置。 一切正常。

@WolfganP如果我理解@Ingvix正确,他

但是您是正确的,要将我的更改与标准二进制文件一起使用,您需要使用替代的Web ui方法。

查看代码,看起来api已经构建好了,只需要编写ui? https://github.com/qbittorrent/qBittorrent/blob/master/src/webui/api/rsscontroller.cpp

我不知道很多C ++,但我确实知道JS,也许可以把一些东西放在一起

@ljmerza,您可以签出我的分支机构,它具有支持

@ljmerza,您可以签出我的分支机构,它具有支持

我应该在4.2.1中使用哪个分支?

@ljmerza,您可以签出我的分支机构,它具有支持

我应该在4.2.1中使用哪个分支?

我的仓库的v4_2_x分支已更新为支持4.2.x

@ljmerza,您可以签出我的分支机构,它具有支持

我应该在4.2.1中使用哪个分支?

我的仓库的v4_2_x分支已更新为支持4.2.x

计划在pull请求中获得master的RSS WebUI支持?

@AndersMalmgren您可以打开拉取请求以将您的更改合并到此存储库中吗?

@AndersMalmgren您可以打开拉取请求以将您的更改合并到此存储库中吗?

我可以,但是我不确定团队是否希望将其撤消,它不能像UI的其余部分那样工作,并且我没有对代码做太多出色的设计工作,只是想要一些可以自己使用的快速工作:)

@AndersMalmgren您可以打开拉取请求以将您的更改合并到此存储库中吗?

我支持该动议。
我对编程一无所知(仅复制和粘贴),当我尝试使用替代WUI时,它总是会中断,因此我必须从头开始。
如果默认情况下成为WUI,则像我这样的人可以利用此RSS功能。

自从实现altWebUI以来,无需合并代码并等待WebUI功能的发布(如果未修改WebAPI)。 使用现有工具将@AndersMalmgren或其他开发人员更改为WebUI,配置官方qBt,您就可以开始使用。

即:要从github下载源树的一部分,请使用https://minhaskamal.github.io/DownGit
专门用于更新@AndersMalmgren RSS https://minhaskamal.github.io/DownGit/#/home?url = https:%2F%2Fgithub.com%2FAndersMalmgren%2FqBittorrent%2Ftree%2Fmaster%2Fsrc%2Fwebui%2Fwww和然后在某个文件夹上展开zip文件,并按照https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage上的说明在altWebUI中使用它

我不知道我在做什么错。

链接是我对WebUI设置进行更改时在Chrome中获得的链接
https://mega.nz/#!c9hTgYKa!2q4agsrwv787vwCre -as4IKog1lGQLTBAsGsMfDTeAo

这另一个是我的带图标的www文件夹
https://mega.nz/#!AtoFFKhJ!q8RiQQdV2oYBHMhbcqnpmiUZ3cQFSKYltUiDRZCGY0E

这是我的WebUI配置
WebUI \ Address = *
WebUI \ AlternativeUIEnabled = true
WebUI \ AuthSubnetWhitelist = @无效()
WebUI \ AuthSubnetWhitelistEnabled = false
WebUI \ CSRFProtection = true
WebUI \ ClickjackingProtection = true
WebUI \ Enabled = true
WebUI \ HTTPS \ Enabled = false
WebUI \ HostHeaderValidation = true
WebUI \ LocalHostAuth = false
WebUI \ Password_ha1 = xxxxx
WebUI \ Port = 1340
WebUI \ RootFolder = / mnt / Share / www /
WebUI \ ServerDomains = *
WebUI \ UseUPnP = true
WebUI \用户名= xxxx

谁能帮我?

@Piocas此问题线程用于讨论Web UI中的RSS管理。 如果您认为这是一个错误,请打开一个新的问题,或者去官方的qBittorrent论坛寻求配置帮助。

这将是一个很棒的功能。

悲伤,就看过去了7年,这并没有得到落实。 有点儿疯狂。

自从实现altWebUI以来,无需合并代码并等待WebUI功能的发布(如果未修改WebAPI)。 使用现有工具将@AndersMalmgren或其他开发人员更改为WebUI,配置官方qBt,您就可以开始使用。

即:要从github下载源树的一部分,请使用https://minhaskamal.github.io/DownGit
专门用于更新@AndersMalmgren RSS https://minhaskamal.github.io/DownGit/#/home?url = https:%2F%2Fgithub.com%2FAndersMalmgren%2FqBittorrent%2Ftree%2Fmaster%2Fsrc%2Fwebui%2Fwww和然后在某个文件夹上展开zip文件,并按照https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage上的说明在altWebUI中使用它

这确实对我有用,尽管起步正确,但起初让我有点循环。 无论如何,由于已经实施,我(或任何人)如何帮助上游合并这些更改?

只是为了确认,UI中只有控件/编辑功能不可用? RSS提要是否仍触发下载?

+1请为qbittorrent-nox添加RSS功能,以使其与具有X窗口的qBittorrent具有奇偶校验。

qbittorrent-nox具有RSS功能,它是Web前端,不为其提供任何UI。

因此,现在您需要一个界面来管理它。

因此,现在您需要一个界面来管理它。

您已经可以通过对WebAPI的HTTP请求来控制它。 这就是WebUI在后台执行的操作。 只是一堆发出请求的按钮。

因此,在更新WebUI以提供图形方式进行此操作之前,您始终可以只使用脚本或其他内容发出请求。

或者从字面上自己安装它https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment -600877487

实现RSS功能的另一个替代webUI https://github.com/CzBiX/qb-web

实现RSS功能的另一个替代webUI https://github.com/CzBiX/qb-web

希望这是默认的webUI! 比默认的要好!

实现RSS功能的另一个替代webUI https://github.com/CzBiX/qb-web

希望这是默认的webUI! 比默认的要好!

这就是为什么要实现替代WebUI(以及最近的Qt UI模板的东西)的原因,以允许用户自定义UI功能而无需接触核心。
请记住,核心代码中的任何更改都意味着某些(社区,非付费)开发人员需要永久维护它。

由于以下原因,我很想立即关闭此问题:

  • 对话已经进行了太长时间,而且话题太离题了。 即使有一些好处,但该票证应该是关于官方WebUI中的RSS支持的。 这是一个简单明了的功能请求,而不是此处放置很多东西的地方。
  • 有很多+1 / me too / pleeeeease / i've waited 58 years instead of contributing in any way whatsoever to the project besides this disrespectful and ungrateful comment, why is this not done yet?帖子使整个对话变得混乱。
  • 由于他所请求的功能现在可以通过备用WebUI来使用,因此唯一未解决的合理问题就是在官方网站中对此进行支持。

当我关闭此线程时,我将打开两个新线程:

  • 一个用于在主WebUI中跟踪此功能的实现的程序(并专门关注于此)。 如果您只是想说“是的,我也想要这个”,则不需要+1注释,只需使用反应即可。
  • 人们可以在一个集中的地方自由讨论替代WebUI开发,这就是所谓的“替代WebUI开发讨论”或类似内容。

如果还有其他问题,请告诉我。

感谢大家的反馈。

开发讨论线程已启动: https :
后续功能请求也在https://github.com/qbittorrent/qBittorrent/issues/12355上进行。 请不要发送垃圾邮件,如果您只是想对其“ +1”,请使用反应。

此页面是否有帮助?
0 / 5 - 0 等级