Qbittorrent: Control/Edit RSS feeds from the Web UI

Created on 25 Feb 2013  ·  281Comments  ·  Source: qbittorrent/qBittorrent

I have qbittorrent running on OpenSUSE 12.2 that I used to set up RSS feeds to automatically download torrents and I used this box as a media server for my home. I can adjust pretty much everything through an ssh session or through the web ui. It would be nice to be able to control the RSS feeds for qbittorrent without having to ssh -Y into the box and pull over the gui and do the edits. Ideally I want to use the web ui from my iPAD and adjust the RSS feeds, can this feature be added to the web ui?
Thanks
jdavis3980

Feature request Help wanted RSS WebUI

Most helpful comment

I'm tempted to close this issue now for the following reasons:

  • Conversation has gone on for too long and too off-topic. Even though some good things came of that, this ticket is supposed to be about RSS support in the official WebUI. It's a simple and clear feature request, not the place for a lot of the things that are here.
  • There are a lot of +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? posts cluttering the whole conversation.
  • Since the he requested functionality is now available via alternate WebUIs, the only reasonable thing left unaddressed is to support this in the official one.

When I close this one, I'll open two new threads:

  • One to track the implementation of this feature in the main WebUI (and to focus exclusively on that). No need for +1 comments if you just want to say "yeah, I want this too", just use reactions.
  • One called "Alternate WebUI development discussion" or similar for people to freely discuss alternate WebUI development in a centralized place.

If anyone has additional concerns, let me know.

All 281 comments

+1 Please add RSS capabilities to qbittorrent-nox so that it has feature parity with qBittorrent with X windows.

+1

+1 on windows to

+1

+1

+1

@buinsky I have seen that you have worked in the web interface. It seems that this feature can be useful.

+1

That missing feature is possibly a deal breaker for people migrating from uTorrent. Everything else is great and even better.

Thank you and keep the good work :)

+1
Would like to see this happening.

+1

+1 As per post above, this is a deal breaker for me. Would like to see it happen.

+1
Having to stick with uTorrent bloatware because of this

+1 Please - best headless client I've found yet, and this would simply make it complete.

+1

+1. This would be very useful.

Please! +1

Please add this feature! +1

+1 for this feature

+1
Missing since the beginning

+1
this will make me move from utorrent

+1
I'm stuck without this now

+1

+1

+1

Yeah, would totally love to have this feature! Can control from eye pad then :-). :+1:

+1 need Web UI with RSS for headless server.

+1

+1

+1

+1

+1

+1

+1

+1

+1

Three years, and still no support for RSS feeds in the headless version? While the Windows version is great, this is just disappointing.

Perhaps someone can give me pointers on editing the .conf? I'm not averse to that either, but I'd still like to see the UI follow along.

I tried editing the file using a few different encodings for the save paths and couldn't get it to work. I ended up having to use flexget instead.

+1

+1

I'd love to migrate away fro the uTorrent server which is closed source and doesn't seem to be actively developed but this is the only thing stopping me

+1

+1

Well, eventually I went with Flexget: that can be run headlessly, while still offering the features I need.

That would exclude the ability to automatically get based on magnet links.

+1

+1

+1 (and sorting via dates added and completed couldn't hurt)

On Sat, Jun 25, 2016, 5:23 PM Rihards Skuja [email protected]
wrote:

+1


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-228571166,
or mute the thread
https://github.com/notifications/unsubscribe/AGbY-5ty-GOC3gqmyGctI5zjwX6cJMGhks5qPZw8gaJpZM4AdExq
.

ssh X11 forwarding works fine but this feature in webUI would be much better.

+1 am using flexget for now but having integrated RSS in qbittorrent-nox would be fantastic!

+1

and sorting via dates added and completed couldn't hurt

Added in #5547

+1

+1

+1

Did nobody try to implement this feature on a fork or patch ? It's really weird that after all this time there is still no implementation of this basic and really needed feature.

+1 on this. Running a headless torrent/PleX box and this would complete it.

+1

+100!

Aye, +1 for me.

Wow, spent an hour looking for this option to turn on in the config / etc only to find out qbtorrent nox doesn't support it. Ugh. :disappointed:

Using Sonarr for now, which is quite full featured, but I was looking for something lightweight and integrated

+1

+1

Surprised this isn't added yet after 4 years. No wonder everybody uses rTorrent.

+1 OMG this is really ridiculous lets make qBittorent a really good bittorent client

Some kind of RSS-related WebAPI may (should) be implemented as part of #6505.

I began to implement RSS support in WebUI. But I can't complete this work because of the antidepressants I take.

@qbittorrent/webdev
May be it can help someone to implement RSS support in WebUI. My code located here:

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

+1

+1

+1

Yet another person adding a +1 after many years.

+1

+1 probably going to end up writing something to parse the RSS feed and poke the API myself at this rate...

@buinsky, you still can't complete your work about this?

@glassez I can not unfortunately.

I really apreciate @glassez for trying to fix this issue. Is there a rough timeline you can give us on the implementation of the fix and the version of qBittorrent that will have the fix probably?

+1

+1

+1

+1

+1

+1 its annoying having to remote into my server for the one thing needed... rss changes. otherwise awesome client!

+1 hadn't even noticed this wasn't a thing. :( Definitely would want it!

Please implement this feature!

Unfortunatelly, the project has no active web developer at this time...

+1
I saw the qbittorrent home page and jumped right in to install header-less

  • Remote control through Web user interface, written with AJAX
    - Nearly identical to the regular GUI

This text doesn't say that there's missing functionality, just that the GUI isn't exactly the same.

Is there any guide to get RSS working in qbittorrent via SSH?

+1

+1!
How come this isn't there yet?

Because anybody who cares about this has not implemented it yet. I think pull requests are welcome.

Well while people are waiting I'd like to point out that utorrent server for linux 3.3_alpha does have a rss component in the webUI

and with the community 0.83 webui it's full featured (the stock webui is lacking a few things)

Appropriate Web API is under development now. I hope, it will be released with first update of 4.0.x branch.
As for Web UI for it, I can't schedule its release since we have no active web developer.

just moved to a Rockstor NAS and realized my RSS config can't be imported from the web-ui. Ouch...

+1! Just bought a Netgear NAS and this feature is really needed on the web-ui version!

+1

+1

+1

+1

This is sort of a solution if you need a workaround.
https://askubuntu.com/questions/498232/using-rss-in-qbittorrent

+1

qBittorrent v4.1 has experimental RSS management API. See here.

Will we soon see this supported? I run qbittorent as a service. It's really annoying that I need to shutdown the service and start it on desktop to manage RSS downloads

Will we soon see this supported?

Didn't you notice my previous comment? Or do you mean Web UI?

I mean web UI, but I'm working on injecting a view for this using tamper monkey for Chrome, stay tuned

So here it is, it requires Tampermonkey for Chrome. Its highly untested, dont blame me if it overwrites your rules or similar.

// ==UserScript==
// @name         qbittorrent rss
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Adds rss rule window to qBittorent web UI
// @author       Anders Malmgren
// @match        http://localhost:8080
// @grant        none
// @require      http://knockoutjs.com/downloads/knockout-3.4.2.js
// @require      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)
})();

Calling setRule with certain affectedFeeds urls seems to confuse qbitTorrent, it does not save the affected feed on the rule, it also enables the rule even though I choose not to.

Url (edited way peronal data)

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

I updated above script to take into account unexpected behavior / bugs with current API.
Also do not renmae your feeds, keep the name in sync with the URL

Hi! First of all, thanks Anders for the script. But I tried it and maybe I did something wrong because all I see is an orange "RSS" on the top menu (see the screen capture), that when I click I got this popup window that doesn't really allow me to do anything... what are we supposed to see and where? I couldn't find anything else. (Btw, when I click "Add" nothing happens, and the dropdown menu is empty and non editable)

Thanks in advance!

image

Hi @jadazul Thanks.

It should look like,
Rss

Its tested against v4.1.1 Web UI

You might need to have a feed defined for it to work, its only a UI for rules. IF you have a RSS feed but no rules you need to press Add and you can fill in fields. Though there is a bug in 4.1.1 so you cant save rules that contain long url feeds like my example in post above

Though there is a bug in 4.1.1 so you cant save rules that contain long url feeds like my example in post above

Are you sure your script send feed URL in the same format as you used when add feed in qBittorrent?

@glassez

I use the URL returned from

api/v2/rss/items

Thanks again @AndersMalmgren

As I installed qBittorrent-nox ina a headless Ubuntu server, I couldn't find a way to add a single RSS feed... I read the Wiki for the api, but there are not many examples of how to do it... I tried using curl in the ssh terminal, logging in works and give me a cookie, but not using the /api/v2, that doesn't work, I get a 404 error everytime and I couldn't find any example of how to properly do it so I gave up and tried your script (but now I understand it's only to manage existing feeds).

Is there any way of adding the feed so I can use your script to manage it later? Even if it's manually modifying some config files, I just need to find a way to do it...

Thanks again!

I can look into it later, I just made it to support my use case which is adding rules to existing feeds

Edit: did you check the console for errors

Sorry, I just saw your edit when checking this.

Everytime I try with curl I just get the 404 error and not many more details...

Are you on 4.1.1? The RSS API was added in 4.1

Yes, I installed qBittorrent-nox v4.1.1 on a headless Ubuntu Server 18.04

Edit: Scratch that, I just verified and even I thought I had the last version (because I used apt-get from Ubuntu, I supposed it was the last version), I have installed v4.0.3 instead... My bad, I'll try installing the latest version soon. Thanks for your help anyways!

setRule is still not working in 4.1.2

+1

setRule still not working in 4.1.3, here is a video I created, you can see it all goes wrong when I try to set a feed url

https://youtu.be/t_w9epoyxC8

@AndersMalmgren remember that you can insert your webui improvements server side instead of using Tampermonkey via the Alt WebUI https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage

setRule still not working in 4.1.3, here is a video I created, you can see it all goes wrong when I try to set a feed url

https://youtu.be/t_w9epoyxC8

The protocol has been changed. I do not remember exactly which one as I made the modification some time ago. Please check.

`

// ==UserScript==
// @name         qbittorrent rss
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Adds rss rule window to qBittorent web UI
// @author       Anders Malmgren
// @match        
// @grant        none
// @require      http://knockoutjs.com/downloads/knockout-3.4.2.js
// @require      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 did you do any changes to my code you posted above?

I rembered something changed a while ago it was the format the URLs was listed if I remember correctly, the setRules still takes an array of URL strings.

@rqi14 did you do any changes to my code you posted above?

I rembered something changed a while ago it was the format the URLs was listed if I remember correctly, the setRules still takes an array of URL strings.

Yes I did. I do not remember what modification I made as I said. But it is now working.

@rqi14 I compared our two versions in a compare tool and yeah, your change I have already done. They have changed the format of the feed urls returned from api/v2/rss/items

When I use VNC and the Regular GUI or just copy the settings over with RSS feeds setup already from a machine running the GUI can I then stop qbittorrent and start qbittorrent-nox and it will pick up on that? In other words: Is just the GUI missing or the entire feature set?

So if I understand this correctly, we have to add the RSS feed on our own and it won't be added to the webui?

When I use VNC and the Regular GUI or just copy the settings over with RSS feeds setup already from a machine running the GUI can I then stop qbittorrent and start qbittorrent-nox and it will pick up on that? In other words: Is just the GUI missing or the entire feature set?

Apparently, only the GUI is missing, I switched to -nox for testing before a torrent I was waiting for was published, and it was successfully auto-downloaded.

any idea when the GUI addition is targeted for?

Hey guys, here is my latest version of my rss rule UI.
It now uses posts for all requests that mutate data. As a bonus it works with all feed urls (its a bug in how qbittorrent parses paths from get requests currently).
This UI only supports rules currently, you can not add feeds etc. But feel free to add it yourself

// ==UserScript==
// @name         qbittorrent rss
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Adds rss rule window to qBittorent web UI
// @author       Anders Malmgren
// @match        http://winserver:8080
// @match        http://localhost:8080/
// @grant        none
// @require      http://knockoutjs.com/downloads/knockout-3.4.2.js
// @require      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)
})();

Ok guys, I forked qbittorrent. You can now add my RSS Rules UI using the alternative webui method. Here is my repo

https://github.com/AndersMalmgren/qBittorrent

Instructions for alternative UI
https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage

@AndersMalmgren why don’t you open a PR for this change?

@Piccirello Couple of reasons, first I use a MVVM engine called Knockout, I'm not sure the core team wants to add another engine to the mix. Second, no language support. Third, its visuals are not coherent with rest of UI and lastly I need to clean it up. :D

Today is the 5 year anniversary of this feature request here on github.

Is it possible to get some feedback on the teams future plans for RSS and the webui.

Is it possible to get some feedback on the teams future plans for RSS and the webui.

The feedback has not changed during this 5 years. It will be implemented as soon as there is a web developer who wants to contribute in it.

In the meantime my alternate UI does the job :)

I'm a web developer and willing to work on this (I very much want this feature myself). Don't really know when/if I'll actually be able to finish it, since I'm not familiar with the code base at all.

@alexiooo when it comes to the RSS web API methods you can check out my branch how to use them

@alexiooo, also you can contact @Piccirello. He has done a lot of work in our web client lately. Maybe he has some experience in RSS implementation. At least he can help with the codebase.

+1

@Piccirello @glassez @ngosang @buinsky
This seems like a long running and very popular request, would it be possible to add it to a milestone.
Thanks

I simply don’t have the time to take this on right now. I haven’t even had a chance to address the comments on my existing PRs.

The fact of the matter is that we only have one web dev. We need more support from the community to get this done.

@alexiooo As @glassez mentioned, feel free to reach out if you have any questions about the webui/webapi architecture or qBittorrent’s codebase. I don’t have any experience with RSS.

@Piccirello Are there any guidelines on browser compatibility? I want to use some ES6 features, specifically Classes (https://caniuse.com/#feat=es6-class)

This is something we've been needing to decide on for a while. I know we've discussed this topic in other issues/prs, but can't remember where.

One on hand, we have mocha classes that will likely accomplish everything you need from ES6 classes. On the other hand, ES6 classes are supported by all browsers our users are likely using, other than IE11. I dislike IE11 as much as the next person, but I don't want to drop support without good reason. The real issue is that we don't have any sort of metrics to know what browsers our users are using.

Edit: I did find this post from @Chocobo1, which I largely agree with.

I don't think many people are using IE11, even Microsoft says not to use it https://techcommunity.microsoft.com/t5/Windows-IT-Pro-Blog/The-perils-of-using-Internet-Explorer-as-your-default-browser/ba-p/331732

Would it be possible to do opt in metrics, that can be enabled in the settings and record anonymous statistics for things like this?

That’s a fair point. It does seem IE still commands between 5-10% of the desktop browser market, depending on your source. 10% does seem pretty high, and I’d hesitate to drop support for that many users.

But, maybe 4.2.0 is a good time to make the switch to es6. IE users will either have to stay on 4.1 or use a modern browser. I don’t want to make this decision alone though. @Chocobo1 what are your thoughts on this? I think you’ve been wanting to update our stack for a while.

That 10% would also be including older users who don't even know what torrenting is though. I think when it comes to the users of qBittorrent the nunber using IE would be far lower, but it's impossible to tell without any statistics of qBittorrent users.

A lot of qBittorrent users moved to it due to the issues with uTorrent, and if they're conscious enough of the dangers of uTorrent to move to qBittorrent THEN go into the settings and set it to be accessible over a webgui I doubt that they still use IE.

But I'm just assuming that, I don't have any real numbers to go off.

Adding metrics is a fairly large jump to accomplish short term (especially in a post GDPR world) but assuming there is at least one release between now and when you drop browser support this affords you the opportunity to code in a EOL warning. This way you can target messages specifically to the impacted browsers and give users a nudge.

Given that this nudge helps users realise their browser choice has with wider security implications than just qB .... and it puts the alert right in front of them which metrics and news posts never will, this is perhaps a better approach.

but I don't want to drop support without good reason.

The way I think is: is having ES6 classes that much significant that we want to throw away IE11 support? I am not entirely sure...
Even if the answer is positive, IMO it is still too early to make the switch in v4.2.x series, I agree with https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-475126288 that we should have an EOL warning beforehand (at least for a few releases). If anyone wants to realize it please file another issue (or PR) and lets discuss there.

Alternatively, we can use Babel for transpilation. We're stuck with a compile-step anyways, so it won't have as much of an impact. That way we can use ES6 and support IE at the same time.

Typescript can be used. It will compile to standard prototype objects

Typescript is possible, yes, but I just meant transpiling plain ES6 javascript into javascript that will run on IE.

Yes but since you need that extra build step you might as well go typescript and benefit from type safety

If this isn't currently possible, what about a "client" option for the X server UI, so that we can run qbittorrent-nox and the UI separately? Deluge does something like this: the main UI can also act as a client for the server, so you can have the server running in a displayless machine, and control it remotely from another computer.

In the meantime my alternate UI does the job :)

@AndersMalmgren
I'd love to have instructions on how to deploy your alternate UI with a windows install of qBittorrent.
I.e. download XXX to a folder, point qBittorrent "user alternative web UI" to that folder.
I can see that you've posted script in a comment above and have also done a fork.
Can I copy the script from your post, save it to a file with a certain filename (please tell me what it should be called!) and then point qBittorrent's alternative web UI to the folder containing that file?
Many thanks for providing this to the community.

@bakertony
Hi, first make sure yuo are on the 4.1.x branch.

src\webui\www all those should go into a folder on your local computer. Also make sure to copy src\icons to src\webui\www\public\images

@bakertony
Hi, first make sure yuo are on the 4.1.x branch.

src\webui\www all those should go into a folder on your local computer. Also make sure to copy src\icons to src\webui\www\public\images

Thanks for that!
Just to really spell it out for others:
1) I went to https://github.com/AndersMalmgren/qBittorrent
2) I downloaded (click "clone or download")
3) copied the folder "qBittorrent-mastersrc\webui\www" to a location on my computer
4) Created an images folder in "www\public" in the copied folder on my computer
5) copied the contents of "qBittorrent-mastersrc\icons" to "www\public\images"
6) In qBittorrent "settings -> Web UI -> Use alternative Web UI" I set Files Location to be the www folder, clicked OK
7) browsed to "http://localhost:8080" to see the new UI

I can see that there's a new "RSS" icon on the toolbar, allowing me to see the existing RSS auto downloads.
That's very cool, thanks for that.
Unfortunately, I was hoping to see the full RSS tab, i.e. to see contents of the RSS feed and download additional torrents as necessary :-/ Hoping that'll come in a qBittorrent update one day!

@bakertony Hi, it seems api/v2/rss/items?withData=true should be able to give you that data. havent tried though.
https://github.com/qbittorrent/qBittorrent/wiki/Web-API-Documentation#get-all-items

Then you might be able to use the add torrent method to add a torrent

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

@bakertony I fixed a UI for downloading. Make sure to use the 41x branch if you are on the downloadable version of qbittorrent. THe master is if you build source from master

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

Thanks so much for that @AndersMalmgren. However, it doesn't work as it is on a HTTPS qb instance, as you try to pull in two js libs from an HTTP source. This is blocked by the browser as they are cross-origin. Simply changing the http to https fixes this. Ideally the libs should be packaged with the WebUI, I think.

Also with the alternative UI selected, all requests for icons/images in the UI fail with err 500. Not sure why, they are all in the correct location on the filesystem. No errors in qbittorrent or nginx... weird.

My biggest issue is that I can't add new RSS feeds. Is there a way to insert them into the qb config store somehow?

Could you please pick this feature to the version supporting Raspberry Pi 2? Thanks

@AndersMalmgren, I cloned your v4_1_x branch, compiled it and set the alternative ui according to the instructions. I got the RSS button but it doesn't do anything. Where could've I gone wrong?

@AndersMalmgren, actually it was just NoScript addon blocking the javascript from your repo and knockoutjs. After allowing them it works.

@AndersMalmgren, does the API not support setting (smart) episode filtering yet or did you just not bother to include it?

@Ingvix Only added those that I use myself.

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

@AndersMalmgren, alright, thanks. I guess I'll try and see if I can make it myself.

How is this not added yet? 6 years old this feature request is. Come on! It's an essential part of any bittorrent client.

Yeah Owen! With as much as we have paid for this it is outrageous that you haven’t coded and submitted already!!
How do you put a < < / sarcasm > >?

I have already put a plus one on this, but I am also happy to put my money where my mouth is, and would contribute to a bounty for this one!

Meh I'll continue to use utorrent 3.3 for linux from several years ago until this is feature complete.

Wow... 6 years

Yeah I'd give up waiting if I were you.

+1

It does seem kind of pointless, but I'm going to add my +1 to this request ... then keep using uTorrent and checking back every couple of years to see if there's any progress. That said, I realise that it's a free product and appreciate that it does what it does, although if it's supported by advertising, getting the people on this list to migrate should increase that revenue...

@WilliCJ how on earth is it pointless? Rtorrent is the only UI that features full RSS management AND it's open source. It's widely used.

Sorry @owenashurst I must have been unclear, what I meant was that it's pointless adding my little "+1" request to a request to an unactioned thread that's already 6 years old. I do have to appologise though, I've obviously put it in the wrong place as I didn't even realise that there was a Rtorrent app. Are you recommending it over uTorrent and qBittorrent?

@WilliCJ haha ok, yeah Rtorrent is a Linux based application, it has a UI called Rutorrent and there's an RSS plugin that is commonly installed by default. Qbittorent is cross platform however, not sure if Rtorrent has been cross compiled.

Thanks @owenashurst, I've just checked, and it looks like Rtorrent is still only Linux, and as I'm running a windows platform on the box I'm using, it won't work for me. Thanks anyway! Given that though, I'd still like to put my hand up for making the RSS feeds and filters options of qBittorrent accessable through the webui onto the dev list!

6 years waiting is too long for one feature for me.
Any alternative torrent client with Linux, docker, rss and webui support?

@Haxy89 if you read the previous comments, I mentioned Rtorrent which is a Linux based bittorrent client and the web UI(Rutorrent) which you install separately has a plugin with RSS support which all tutorials online include as default. There's also a docker container that has all of it in anyway.

@owenashurst @Haxy89 @WilliCJ did you guys try the altWebUI implementation from https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-483063942 + https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-483342384 ?

@WolfganP I haven't tried it yet no, as long as it can manage RSS feeds as in add/edit/delete then that's pretty good. I saw you can't view/download torrents from the RSS feed lost but that's not really important.

@WolfganP
Just tried but...
obraz

Nothing to do here...

I am going to fight with RTorrent

@Haxy89 Yeah, can't add feeds from webUI. I didn't feel like searching a new solution so I recompiled qbittorrent with regular UI included and added those feeds via SSH and X11-forwarding. Also some options for autodownload were not included so if one needs to set them, one needs to use the X11-forwarding again, or edit the config files manually. Sort of a drag but it's not like I need to open the regular UI too often still and qBittorrent has the best browser extension for adding new torrents on the fly so I can bear with the situation.

@WolfganP
Just tried but...
obraz

Nothing to do here...

What does the console say? Something is not setup correctly. Make sure you are on the 4.1.x branch btw.

edit: Currently you need to setup your feeds from the desktop UI. But I have a version that can setup feeds too. But its a bit buggy

@WolfganP

I am not using desktop.
Would be great to have possibility to set up everything from Web like in RTorrent

@Haxy89 @AndersMalmgren I have the same issue on the Feeds tab being empty even if there is a feed defined already but I had no time to properly troubleshoot. Sample rss/feeds.json:

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

As I'm working with a master build, a problem may be that the altWebUI from @AndersMalmgren fork is way behind the current WebUI state. Maybe @Piccirello (aka the WebUI master :-) can suggest a way to move forward and help troubleshoot.

@wolfganp I have only tested it on 4.1.5 will update to 1.7 and see

@WolfganP Works on 4.1.7 for me

btw, there is no API function to force a RSS fetch. So you need to add a automatic rule to your feed. otherwise the Feeds tab will be empty, though it should display the name of the feed under the feeds tab.

Updated my 4.1.x branch with a basic feed management UI

image

@AndersMalmgren works OK for me now (just feeds list tested, not other functionality). Thanks a lot!

BTW, in rss.js line 39 you'll probably need to update the format of the RSS icon to svg: src='images/qbt-theme/rss-config.svg'

@WolfganP You need to use the icons from 4.1.x. There the icon is a png

@owenashurst @Haxy89 @WilliCJ did you guys try the altWebUI implementation from #453 (comment) + #453 (comment) ?

@WolfganP I have now, and the "RSS Rules" button itself doesn't appear properly (I've probably done something wrong, but I thought I'd followed the instructions), but it seems to let me access and edit the RSS auto download rules, and view the existing RSS feeds but not add/edit them.

Check the console for errors please

Check the console for errors please

Sorry @AndersMalmgren, I can't see any errors that appear to relate to the webui.

My original install of qBittorrent was simply from the downloaded installer from the qBittorent.org site, but I have now downloaded the clone/zip from github and copied a few files that weren't in the "qBittorrent-mastersrc\icons" folder of the "https://github.com/AndersMalmgren/qBittorrent" clone/zip. The icon for the RSS feeds is now there.

Thanks Anders, and Owen!

...now I just have to work out how to get filebot working from qBittorrent!

btw, there is no API function to force a RSS fetch. So you need to add a automatic rule to your feed. otherwise the Feeds tab will be empty, though it should display the name of the feed under the feeds tab.

@AndersMalmgren Just thinking aloud (and didn't try it as I'm AFK): maybe a workaround is to add a rule that never matches any torrent, but will trigger the feed update anyways?

I don't know what you guys are talking about. What API do you really miss?

add a rule that never matches any torrent, but will trigger the feed update anyways?

It doesn't work this way.
Feeds are updated at a specified interval. When feed updates rules are applied to it.

We need to expose these settings to the user

image

That can be fixed with the current API. But Update all feeds function is not present in API

image

Or update singel feed for that matter

image

I added rss feed settings to downlad settings tab in my 4.1.x branch

image

@AndersMalmgren
Any settings for auto downloading?
Where torrents are auto downloaded? Default download folder?
Filters to auto download only selected torrents etc.?

@Haxy89 Weren't those the first changes he made in his repo? Or at least the ones announced in this issue. You can set the download location for every rule.

@Haxy89 Those have been included like @Ingvix says. Above RSS settings were not until now.

I added rss feed settings to downlad settings tab

Can you provide your changes as Pull Request?
Or it is incompatible with qBittorrent built-in WebUI?

But Update all feeds function is not present in API

Will be.

I added rss feed settings to downlad settings tab

Can you provide your changes as Pull Request?
Or it is incompatible with qBittorrent built-in WebUI?

Only feature missing is translateion. Its hardcoded for now

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

I would be fine even with missing translation, at least we will be able to have it!

So I managed to get it working, at least visually. It never actually added any torrents though. I'm assuming the include/do not include supports regex? should I type it with the slashes or without? if not i don't actually know how it works. and would you consider supporting regex?

also after messing with the rss settings it actually just stopped working all together. it outputs this error:
Unacceptable file type, only regular file is allowed

when i go to the url
I'm using the debian 10 qbittorrent from the repos. it's 4.1.5-1

when i modify the settings in the download section it disables the new ui and i have to re-enable it(and pray that it doesn't break everything)

anyways I would just like to say you are doing the lord's work. i'm so grateful to have access to rss in the webui even if it is a bit buggy.

@xrishox I have not exposed the regex fields since I do not use them myself. Can fix. Thanks :)

do you know what this error means "Unacceptable file type, only regular file is allowed"

sometimes when i go to the webui url that shows up. it seems to only be fixable by deleting the qbittorrent.conf and starting over

edit 1:
I don't know if this is a bug specific to my install or something that other people will come across as well, so I'll just post the solution that worked for me in case someone else has the same problem.

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

"#10485 renamed the login page from login.html to index.html. v4.1.5 still looks for login.html, but your public folder contains an index.html. Try renaming that file to login.html."

edit 2:

Now I'm having this weird problem where every so often it disables alternate webui and I have to re-enable it and type in the alternate path again. It's not that big of a deal since at least it works, but I'm not sure why it's doing this. i'm also getting weird ui bugs that make it so that ui icons don't show up and text is being duplicated for some strange reason. i'm not sure why this is as i copied all of the icons to /private and /public. it isn't disruptive to my ability to use qbittorrent though so i'm not particularly concerned about it. only reporting it here for the sake of completeness.

and here's a picture of the weird ui quirks https://i.imgur.com/kkdGyzs.png

i really hope that at the point where this is found to be stable and robust that it gets merged since this is an amazing feature to have.

But Update all feeds function is not present in API
Will be.

Thanks @glassez ! https://github.com/qbittorrent/qBittorrent/pull/11055

do you know what this error means "Unacceptable file type, only regular file is allowed"

It occurs when alt webUI is enabled on *nix and requested file isn't "regular file" (I'm not sure what it means exactly). Also probably when no such file exists so its type can't be checked.

@xrishox I exposed the regex option. Its in my 4,1.x branch

I added rss feed settings to downlad settings tab in my 4.1.x branch

I port it in qBittorrent master (#11056).
Unfortunately, I can't do that with other code of @AndersMalmgren, because it's incompatible with our codebase.

@glassez it's too old school for me :)

Edit: and my code need clean up for an official release

@AndersMalmgren did you have the chance to try https://github.com/qbittorrent/qBittorrent/pull/11055 ? (Allow to refresh RSS item(s) via WebAPI)

Nice, I enabled the regex. I haven't had an event where it would trigger yet so here's to hoping it works.

I have a few quality of life suggestions if you are open to them. Do note that these are not requests or demands as it is actually working perfectly for my usecase as it is, but a few things that you could consider.

When you hit save on the "Auto Download" page, it could save the modifications for all of the auto downloads you have modified and not just the one that is currently focus. Or alternatively adding a save all button.

Another feature that would be useful would be to have it so that stuff that is autodownloaded could optionally be added to a category/tag where the category/tag is the name of the what it autodownloaded.

@WolfganP I dont have a C++ environment at the moment, havent worked with it in years so havent bothered with trying to compile it to be honest. I think its planned for 4.2 milestone. But its an easy fix once the rest method is in place.

@xrishox Thanks for feedback, I can add a save all button. The category feels very subjective and might not fit though. I can expose the category field if you want?

@AndersMalmgren If it helps, you can use my Dockerfile to easily build your local qBittorrent code. It'll build libtorrent 1.1 from source too. It has a couple downsides right now (you can't yet pass in config, it doesn't support incremental builds) but makes it really easy to build qBittorrent.

Docker build: docker build -t qbittorrent/qbittorrent .
Docker run: docker run --rm -it -p 8080:8080 qbittorrent/qbittorrent

@Piccirello when is 4.2 planned? There is no reason for me to fix this until 4.2 is close to release

At this point, your guess is as good as mine.

@Piccirello when is 4.2 planned? There is no reason for me to fix this until 4.2 is close to release

A public beta of 4.2.0 may be released in the next few days/week or two as per #10047
There is a 4.2.0 alpha build that has been posted previously that I have been using since end of June.

Allright, when the RSS fix is in beta I can implement it in my master

So I just had an rss event trigger and regex doesn't appear to work. I copied it over from rutorrent exactly where it does work and i tried it with both with and without the slashes.

Now "refreshItem" action is available in v4.1.x branch.

@glassez can I get a beta binary somewhere? thanks

I can't wait for you to perfect rss ui. @AndersMalmgren Can you make a pull request into master?

@caoli5288 did you try using the altWebUI method as per https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-483063942 ? (https://github.com/AndersMalmgren/qBittorrent use the 4.1 branch as per https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-483342384)

@WolfganP It's works but not very perfect. Not like shown in https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-519135601 and hard to browser feeds contents.

图片

@caoli5288 https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-519135601 isn't the webUI, but the QtUI. Those comments were related to feed update not available on web API, implemented later by @glassez at https://github.com/qbittorrent/qBittorrent/pull/11055

How's it going? Can we see this feature in the next release?

How's it going? Can we see this feature in the next release?

You can try this: https://github.com/miniers/qb-web
but only have chinese

How's it going? Can we see this feature in the next release?

You can try this: https://github.com/miniers/qb-web
but only have chinese

@miniers thanks! Did you try it with the AltWebUI? I just open issue https://github.com/miniers/qb-web/issues/3 to ask about use of existing translation strings.

I'm +1 on the RSS. Does this mean that basic RSS downloading is coming to qbittorrent-nox?

(doubtful this is ignored as of 2013)

There is some hope to see this in 4.2? @Chocobo1 I saw you made a lot of improvement and I think this is the biggest thing I miss in the webui :(

+1 I've been using qbittorrent for years and i'm actively looking for another torrent application due to the lack of web UI RSS support in qbittorrent.

wtf 9 years later and still no update reeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

@ikiddoi You should probably read above your comment and realise it's in a beta version of qbittorrent.

Ref: https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-549786145

I'm missing something, I'm not seeing the option in the WebUI using qbitorrent-nox from unstable (4.2.0\~201911110018-6775-8711613\~ubuntu18.04.1).

Note entirely sure but there was always a feature parity problem between nox and the standard version.

I fixed 4.2 support in my master branch

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

It also have support for refresh feeds now. Click the little refresh icon by the feed name

I don't understand the slowness of the official team in dealing with community.
Look at these thousands of open issues!
Maybe it's time to find a replacement for qbittorrent.

I don't understand the slowness of the official team in dealing with community.
Look at these thousands of open issues!
Maybe it's time to find a replacement for qbittorrent.

It's because they have a lack of developers. You're more than welcome to contribute and provide solutions to the open issues, but that probably doesn't interest you as it's unpaid work.

How much have you donated to help get the features and fixes developed? The developers work in their own time doing free work, and even if we'd like it if some things such as this were implemented sooner, we should show gratitude for the work and effort that they've put into the project, rather than acting like it's our right for them to do what we want for free and getting angry at them when they don't sacrifice more of their time for us.

Hell, if I was one of the devs I'd start reconsidering if I want to put my time and effort into a project when the users of the project are so incredibly ungrateful.

Wow, the entitlement in this thread.

The official team released an official statement that they simply didn't
have the time to spend on this feature, but were open to contributions from
the community. Be glad it's finally getting here, or go contribute yourself.

On 14 November 2019 12:28:20 caoli5288 notifications@github.com wrote:

I don't understand the slowness of the official team in dealing with community.
Look at these thousands of open issues!
Maybe it's time to find a replacement for qbittorrent.—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

How much have you donated to help get the features and fixes developed

@BradleyDS2 Listening to the community and making software better is one of the ethics of open source software. How can you say how much I donate?

You're more than welcome to contribute and provide solutions to the open issues

That's an arrogant idea. What can most users do but complain? Look at your account. You haven't contributed a single line of code to any project. Is that because you're happy with any project? Or do you think github should delete issues page and just keep pull request?

Open source software will lose users if it doesn't listen to the community. It is strange that I should be accused of merely stating a fact,

What can most users do but complain?

Donate, pull requests, constructive feedback. Ask the team what they'd like you to do to contribute.

As for something else you said, I'll stitch together some of your own words as a response.

How can you say
the ethics of open source software
That's an arrogant idea

The team is working hard, just because what you specifically want isn't being done doesn't lessen the effort they put in. If you don't want to be constructive and are only here to complain, please leave. Nobody needs that toxicity.

They listen to the community and prioritise the issues. This one took so long because they had literally nobody who could work on it for the majority of the time it has been open.

They listen to the community and prioritise the issues

@BradleyDS2 So the 2000+ opened issues?

I am an open source developer and have contributed to dozens of open source projects. What have you done? I don't see you contributing to some projects, it seems to me you're just talking.

I didn't do nothing with qbittorrent; I started a dockerfile request a few months ago, and it was rejected.

You were only right about one thing. I'm leaving.

They listen to the community and prioritise the issues

@BradleyDS2 So the 2000+ opened issues?

I'm referring to the 6500+ closed.

I am an open source developer and have contributed to dozens of open source projects. What have you done? I don't see you contributing anything to any project, it seems to me you're just talking.

You must be missing something then, as I've definitely done pull requests for projects before, but I mainly use gitlab.

I didn't do nothing with qbittorrent; I started a dockerfile request a few months ago, and it was rejected.

You and I both know why it was rejected. It was set to automatically accept the legal notice, and the devs also said "I don't think we have the capacity to maintain it officially now."

One only reason why it still hasn't been implemented in all these years is that the qBittorrent project doesn't have an active/permanent web developer on its team. This reason has been mentioned here many times, so those who do not understand it, should seriously think about their mental abilities.

I fixed 4.2 support in my master branch

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

It also have support for refresh feeds now. Click the little refresh icon by the feed name

I assumed that RSS autodownload function would now be implemented without the need of alternative UI but is this not the case? At least I cannot see a way to access my autodownload rules from webUI after building your master branch.

I fixed 4.2 support in my master branch
https://github.com/AndersMalmgren/qBittorrent/tree/master
It also have support for refresh feeds now. Click the little refresh icon by the feed name

I assumed that RSS autodownload function would now be implemented without the need of alternative UI but is this not the case? At least I cannot see a way to access my autodownload rules from webUI after building your master branch.

I don't know how the build process work of qbittorrent, but the files are there so my guess is it should be included in build.

But I use the alternate UI method

@AndersMalmgren Well I once more did as instructed in https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-483063942 with the sources I also build qbittorrent with and got it working. Funny that the changes aren't included in the build itself though they are in the source code.

@AndersMalmgren Well I once more did as instructed in #453 (comment) with the sources I also build qbittorrent with and got it working. Funny that the changes aren't included in the build itself though they are in the source code.

Maybe there is a list somewhere you have to add rss.js too, me guessing :)

@AndersMalmgren Well I once more did as instructed in #453 (comment) with the sources I also build qbittorrent with and got it working. Funny that the changes aren't included in the build itself though they are in the source code.

No need to rebuild everything using @AndersMalmgren fork to use the RSS features (which we all thank him for :-)
Just get his master source code as zip, extract the web folder, and point the official qBt builds AltWebUI settings to that folder. It all works.

@WolfganP If I understand @Ingvix correct he built the source into a binary and that binary did not contain my changes.

But you are correct, to use my changes with the standard binary you need to use the alternative web ui method.

Looking through the code, it looks like the api is already built, just the ui needs to be written? https://github.com/qbittorrent/qBittorrent/blob/master/src/webui/api/rsscontroller.cpp

I don't know a ton of c++ but I do know js and can maybe put something together

@ljmerza you can checkout my branch it has support

@ljmerza you can checkout my branch it has support

Which branch should I use with 4.2.1?

@ljmerza you can checkout my branch it has support

Which branch should I use with 4.2.1?

The v4_2_x branch of my repo is updated to support 4.2.x

@ljmerza you can checkout my branch it has support

Which branch should I use with 4.2.1?

The v4_2_x branch of my repo is updated to support 4.2.x

Planning on a pull request to get rss webui support in master?

@AndersMalmgren Can you open a pull request to merge your changes into this repo?

@AndersMalmgren Can you open a pull request to merge your changes into this repo?

I could but I'm not sure the team want this pulled, it doesnt work like rest of the UI and I didn't do a too great design job on the code just wanted something quick to work for my own use :)

@AndersMalmgren Can you open a pull request to merge your changes into this repo?

I support that motion.
I have no knowledge in programming, (only copy and paste) and when I try to use the alternative WUI, it always breaks and I must return from scratch.
If this becomes the WUI by default, people like me can take advantage of this RSS feature.

There's no need to merge code and wait for releases for WebUI functionality (if WebAPI wasn't modified) since altWebUI was implemented. Use existing tools to get @AndersMalmgren or other devs changes to the WebUI, configure official qBt and you're ready to go.

ie: to download just part of a source tree from github, use https://minhaskamal.github.io/DownGit
Specifically for updating @AndersMalmgren RSS mods -> https://minhaskamal.github.io/DownGit/#/home?url=https:%2F%2Fgithub.com%2FAndersMalmgren%2FqBittorrent%2Ftree%2Fmaster%2Fsrc%2Fwebui%2Fwww and then expand the zip on some folder and use it as you altWebUI following instructions at https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage

I do not know what I'm doing wrong.

the link is what I get in Chrome when I made the changes to the WebUI settings
https://mega.nz/#!c9hTgYKa!2q4agsrwv787vwCre-as4IKog1lGQLTBAsGsMfDTeAo

and this other one my www folder with icons
https://mega.nz/#!AtoFFKhJ!q8RiQQdV2oYBHMhbcqnpmiUZ3cQFSKYltUiDRZCGY0E

this is my WebUI config
WebUI\Address=*
WebUI\AlternativeUIEnabled=true
WebUI\AuthSubnetWhitelist=@Invalid()
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\Username=xxxx

Can anyone help me?

@Piocas This issue thread is for discussing RSS management in Web UI. Please open a new issue if you believe that's a bug or go to the official qBittorrent forum for configuration help.

This would be a wonderful feature to have.

Sad to see 7 years gone by and this hasn't been implemented. Kinda crazy actually.

There's no need to merge code and wait for releases for WebUI functionality (if WebAPI wasn't modified) since altWebUI was implemented. Use existing tools to get @AndersMalmgren or other devs changes to the WebUI, configure official qBt and you're ready to go.

ie: to download just part of a source tree from github, use https://minhaskamal.github.io/DownGit
Specifically for updating @AndersMalmgren RSS mods -> https://minhaskamal.github.io/DownGit/#/home?url=https:%2F%2Fgithub.com%2FAndersMalmgren%2FqBittorrent%2Ftree%2Fmaster%2Fsrc%2Fwebui%2Fwww and then expand the zip on some folder and use it as you altWebUI following instructions at https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage

This did work for me, although getting the pathing right threw me for a little loop at first. In any case, since this has already been implemented, how can I (or anybody) help to merge these changes upstream?

just to confirm, only the control / edit function is unavailable in the UI? Do the RSS feeds still trigger downloads?

+1 Please add RSS capabilities to qbittorrent-nox so that it has feature parity with qBittorrent with X windows.

qbittorrent-nox has RSS capabilities, it's the web front-end that doesn't provide any UI for it.

So now you need an interface to manage it.

So now you need an interface to manage it.

You can already control it with HTTP requests to the WebAPI. That's what the WebUI does under the hood. It's just a bunch of buttons that make requests.

So until the WebUI is updated to provide a graphical way of doing that, you can always just make requests with a script or something.

Or literally install it yourself https://github.com/qbittorrent/qBittorrent/issues/453#issuecomment-600877487

Another alt webUI implementing RSS funtionality https://github.com/CzBiX/qb-web

Another alt webUI implementing RSS funtionality https://github.com/CzBiX/qb-web

wish this was the default webUI! It's way better than the default one!

Another alt webUI implementing RSS funtionality https://github.com/CzBiX/qb-web

wish this was the default webUI! It's way better than the default one!

That's why the alt WebUI (and recently the Qt UI templates' stuff) was implemented, to allow the user customize UI functionality without the need to touch the core.
Just remember that any changes in the core code means some (community, non paid) dev needs to maintain it forever...

I'm tempted to close this issue now for the following reasons:

  • Conversation has gone on for too long and too off-topic. Even though some good things came of that, this ticket is supposed to be about RSS support in the official WebUI. It's a simple and clear feature request, not the place for a lot of the things that are here.
  • There are a lot of +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? posts cluttering the whole conversation.
  • Since the he requested functionality is now available via alternate WebUIs, the only reasonable thing left unaddressed is to support this in the official one.

When I close this one, I'll open two new threads:

  • One to track the implementation of this feature in the main WebUI (and to focus exclusively on that). No need for +1 comments if you just want to say "yeah, I want this too", just use reactions.
  • One called "Alternate WebUI development discussion" or similar for people to freely discuss alternate WebUI development in a centralized place.

If anyone has additional concerns, let me know.

Thanks for the feedback everyone.

Development discussion thread is up: https://github.com/qbittorrent/qBittorrent/issues/12354.
Follow-up feature request is up as well at https://github.com/qbittorrent/qBittorrent/issues/12355. Please don't spam it, use reactions if you just want to "+1" it.

Was this page helpful?
0 / 5 - 0 ratings