# 🔥 RSS Guard Documentation 🔥 Welcome to RSS Guard documentation. You can find everything about the application right here. There is a [Discord server](https://discord.gg/7xbVMPPNqH) for user communication. ## Table of Contents - [What is RSS Guard?](#wirss) - [Donations](#donat) - [Downloads](#dwn) - [Supported Operating Systems](#sos) - [Supported Feed Readers](#sfr) - [Features](#fe) - [For Contributors and Other Topics](#contrib)
## What is RSS Guard? RSS Guard is an [open-source](https://en.wikipedia.org/wiki/Open_source) [cross-platform](#sos) [multi-protocol](#sfr) desktop feed reader. It is able to fetch feeds in RSS/RDF/ATOM/JSON formats and connect to multiple web-based feed readers. RSS Guard is developed on top of the [Qt library](http://qt-project.org). ## Donations You can support author of RSS Guard via [donations](https://github.com/sponsors/martinrotter). ## Downloads Official place to download RSS Guard is at [Github Releases page](https://github.com/martinrotter/rssguard/releases). You can also download the [development (beta) build](https://github.com/martinrotter/rssguard/releases/tag/devbuild), which is updated automatically every time the source code is updated. RSS Guard is also available in [repositories of many Linux distributions](https://repology.org/project/rssguard/versions), and via [Flathub](https://flathub.org/about). The are two different flavors: - [Regular](https://flathub.org/apps/details/io.github.martinrotter.rssguard): Includes an (almost) full-blown integrated web browser (built with `-DUSE_WEBENGINE=ON`). - [Lite](https://flathub.org/apps/details/io.github.martinrotter.rssguardlite): Includes simpler, safer (and less memory hungry integrated web browser (built with `-DUSE_WEBENGINE=OFF`). I highly recommend to download RSS Guard only from trusted sources. ## Supported Operating Systems RSS Guard is a cross-platform application, and at this point it is known to work on: * Windows 7+ * GNU/Linux (including PinePhone and other Linux-based phone operating systems) * BSD (FreeBSD, OpenBSD, NetBSD, etc.) * macOS 10.14+ * OS/2 (ArcaOS, eComStation) ## Supported Feed Readers RSS Guard is multi-account application and supports many web-based feed readers via [built-in plugins](#papi). One of the plugins, of course, provides the support for standard list of **RSS/ATOM/JSON** feeds with the set of features everyone would expect from classic feed reader. I organized the supported web-based feed readers into an elegant table: | Service | Two-way Synchronization | [Intelligent Synchronization Algorithm](#intel) (ISA) 1 | Synchronized Labels 2 | OAuth 4 | | :--- | :---: | :---: | :---: | :---: | Feedly | ✅ | ✅ | ✅ | ✅ (only for official binaries) | Gmail | ✅ | ✅ | ✅ | ✅ | Google Reader API 3 | ✅ | ✅ | ✅ | ✅ (only for Inoreader) | Nextcloud News | ✅ | ❌ | ❌ | ❌ | Tiny Tiny RSS | ✅ | ✅ | ✅ | ❌ 1 Some plugins support next-gen intelligent synchronization algorithm (ISA) which has some benefits, as it usually offers superior synchronization speed, and transfers much less data over your network connection. With ISA, RSS Guard only downloads articles which are new or were updated by remote server. The old algorithm usually always fetches all available articles, even if they are not needed, which leads to unnecessary overload of your network connection and the RSS Guard. 2 Note that [labels](#lbls) are supported for all plugins, but for some plugins they are local-only, and are not synchronized with the service. Usually because service itself does not support the feature. 3 Tested services are: * Bazqux * FreshRSS * Inoreader * Miniflux * Reedah * TheOldReader 4 [OAuth](https://en.wikipedia.org/wiki/OAuth) is a secure way of authenticating users in online applications. ## Features & How-tos Here you can read detailed description of all RSS Guard features. ### General GUI concepts & manipulating accounts & adding feeds. Main RSS Guard window is separated into three main areas: * feed list (left side) * article list (top-right side) * article preview (top-bottom side) alt-img Feed list displays all your feeds and other items such as recycle bin. Article list displays all your articles depending on what is selected in feed list. Article preview displays details of selected article or information about selected item from feed list if no article is selected. Titlebar of RSS Guard display number of unread articles in square brackets. There are two toolbars available, separate toolbar for feed list and for article list. ---- When you start RSS Guard for the very first time, you are greeted with `Add account` dialog where you select which account you want to operate with. If you want to have classic `RSS/ATOM` feed reader, then select `RSS/RDF/ATOM/JSON` option. alt-img Each "account" offers account-specific actions which are accessible in relevant submenu. alt-img To add new feed into the account you simply use `Feeds -> Add item -> Add a new feed` menu item. alt-img In 99 % of cases, you only need to insert feed URL into `Source` field and then hit `Fetch it now` button which will download feed metadata and fill all other boxes. ### Article Filtering Sometimes you need to automatically tweak the incoming article - mark it starred, remove ads from its contents, or simply ignore it. That's where article filtering feature comes in. #### `Article filters` dialog The dialog seen below offers you a way of managing your article filters. You can assign single filter to multiple feeds. `Test` button tests selected filter against existing messages. `Process checked feeds` runs the filter against messages from checked feeds. alt-img #### Writing article filter Article filters are small scripts which are executed automatically when articles/feeds are downloaded. Article filters are `JavaScript` pieces of code which must provide function with prototype: ```js function filterMessage() { } ``` The function should be fast and must return values which belong to enumeration [`FilteringAction`](#FilteringAction-enum). Each article is accessible in your script via global variable named `msg` of type `MessageObject`, see [this file](https://github.com/martinrotter/rssguard/blob/master/src/librssguard/core/messageobject.h) for the declaration. Some properties are writeable, allowing you to change contents of the article before it is written to RSS Guard DB. You can mark article important, change its description, perhaps change author name or even assign some label to it!!! Some attributes (`read/unread/starred` states) are synchronized back to your account's server - so you can for example mark some articles as starred and the change will be propagated back to TT-RSS server if you use TT-RSS. A [special placeholders](#userd-plac) can be used in article filters. There is also a special variable named `utils`. This variable is of `FilterUtils` type. It offers some useful [utility functions](#utils-object) for you to use in your filters. Labels assigned to articles are visible to your filters. You can, therefore, execute actions in your filtering script, based on which labels are assigned to the article. The property is called `assignedLabels` and is an array of the [`Label`](#Label-class) objects. Passed article also offers a special function: ```js Boolean MessageObject.isAlreadyInDatabase(DuplicateCheck) ``` which allows you to perform runtime check for existence of the article in RSS Guard's database. Parameter is the value from enumeration [`DuplicateCheck`](#dupl-check). It specifies how exactly the article should match. For example, if you want to check if there is already another article by the same author in a database, you should call `msg.isAlreadyInDatabase(MessageObject.SameAuthor)`. The values of enumeration can be combined in a single call with the [bitwise OR](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_OR) (`|`) operator, like this: ```js msg.isAlreadyInDatabase(MessageObject.SameAuthor | MessageObject.SameUrl) ``` Here is the reference of methods and properties of types available in your filtering scripts. #### `MessageObject` class | Type | Name(Parameters) | Return value | Read-only | Synchronized | Description | :--- | :--- | :--- | :---: | :---: | --- | Property | `assignedLabels` | `Array