Skip to content

Feature to Enable/Disable, Add, Edit and Delete RSS Filters #133

@buildwithmalik

Description

@buildwithmalik

Current State

In the current state of the application, when the RSS Filter is either enabled or disabled, a message prompting the user to use the ruTorrent web interface to make the changes pops up as shown below.

RSS Filter Enable Disable

Furthermore, the option of adding, deleting or editing (existing) RSS Filters is not present.

Proposed Changes

  1. I would like to implement the feature of enabling and disabling the RSS Filters from the application itself.
  2. I would also like to implement an RSS Filter Edit Screen whose purpose will be to take user-input related to the RSS Filter (name, pattern, labels etc. )

Implementation

Enabling and Disabling RSS Filters

I will be using the RSS Plugin of the ruTorrent Web Interface to implement this feature. Implementing this feature would require changing the enabled integer in the RSS Filter object and making a POST request to the RSS plugin with the JSON form of the RSS Filter object (more on this below).

Add, Edit, Delete RSS Filters

Again the RSS Plugin will be used. A small catch here is, anytime any change is made to any of the filters, ALL (existing) filters have to be sent via the POST network call to the Plugin. If we attempt to send only the filter that has been changed, all other filters are deleted.

Now the issue with this approach is, a JSON object cannot contain two same keys for obvious reasons and the plugin was not accepting different JSON objects for different filters.

So we will use Content-Type: application/x-www-form-urlencoded to send the data after encoding all the existing RSS Filters in the application.

The one function that will implement both network implementations is given below.

/// Sets details of RSS Filters
  static setRSSFilter(Api api, List<RSSFilter> filters) async {

    // Set Headers
    Map<String, String> headers = {
      "Content-Type": "application/x-www-form-urlencoded"
    };
    headers.addAll(api.getAuthHeader());

    // Set mode of Query
    String queryString = "mode=setfilters&";

    // Encode and add all Filters to the query
    for (RSSFilter filter in filters ?? []) {
      queryString += Uri(queryParameters: filter.toJson()).query + "&";
    }

    // Execute the Network Call
    await api.ioClient
        .post(Uri.parse(api.rssPluginUrl), headers: headers, body: queryString);
  }

The video of the complete working of the proposed feature will be added in the feature PR.

PR #134

Metadata

Metadata

Assignees

No one assigned

    Labels

    TodoThis task needs to be completedenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions