diff --git a/resources/docs/Documentation.md b/resources/docs/Documentation.md index cfdf7cdd1..060d636de 100644 --- a/resources/docs/Documentation.md +++ b/resources/docs/Documentation.md @@ -1,74 +1,75 @@ # 🔥 RSS Guard Documentation 🔥 -Welcome to RSS Guard documentation. You can find everything about the application right here. +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) -### [`Downloads`](#dwn) -### [`Supported Operating Systems`](#sos) -### [`Major Features`](#mfe) -#####     [`Supported Feed Readers`](#sfr) -#####     [`Article Filtering`](#fltr) -#####     [`Websites Scraping`](#scrap) -#####     [`Notifications`](#notif) -#####     [`Database Backends`](#datab) -#####     [`User Data Portability`](#userd) -#####     [`Built-in Web Browser with AdBlock`](#webb) -### [`Minor Features`]() -#####     [`Files Downloader`](#downl) -#####     [`Labels`](#lbls) -#####     [`Skins`](#skin) -#####     [`GUI Tweaking`](#guit) -#####     [`Command Line Interface (CLI)`](#cli) -### [`For Contributors and Other Topics`](#contrib) -#####     [`Donations`](#donat) -#####     [`Compiling RSS Guard`](#compil) -#####     [`Plugin API`](#papi) -#####     [`Reporting Bugs or Feature Requests`](#reprt) -#####     [`Localization`](#locali) -#####     [`Migrating data`](#migratt) +- [What is RSS Guard?](#wirss) +- [Downloads](#dwn) +- [Supported Operating Systems](#sos) +- [Major Features](#mfe) + - [Supported Feed Readers](#sfr) + - [Article Filtering](#fltr) + - [Websites Scraping](#scrap) + - [Notifications](#notif) + - [Database Backends](#datab) + - [User Data Portability](#userd) + - [Built-in Web Browser with AdBlock](#webb) +- [Minor Features](#mife) + - [Files Downloader](#downl) + - [Labels](#lbls) + - [Skins](#skin) + - [GUI Tweaking](#guit) + - [Command Line Interface (CLI)](#cli) +- [For Contributors and Other Topics](#contrib) + - [Donations](#donat) + - [Compiling RSS Guard](#compil) + - [Plugin API](#papi) + - [Reporting Bugs or Feature Requests](#reprt) + - [Localization](#locali) + - [Migrating data](#migratt)
-## What is RSS Guard? -RSS Guard is desktop [open-source](https://en.wikipedia.org/wiki/Open_source) [cross-platform](#sos) [multi-protocol](#sfr) feed reader. It is able to fetch basically all known feed formats, including RSS/RDF/ATOM/JSON. RSS Guard is developed on top of the [Qt library](http://qt-project.org). There is a Discord [channel](https://discord.gg/7xbVMPPNqH) for users to communicate. +## 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 almost any of the known feed formats, including RSS/RDF/ATOM/JSON. RSS Guard is developed on top of the [Qt library](http://qt-project.org). -## Downloads -Official place to download RSS Guard is at [Github Releases](https://github.com/martinrotter/rssguard/releases). You can also download development (beta) [build](https://github.com/martinrotter/rssguard/releases/tag/devbuild) which is automatically updated everytime source code is updated. +## Downloads +Official place to download RSS Guard is at [Github Releases](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. -Also, RSS Guard is [available](https://repology.org/project/rssguard/versions) for many Linux distributions, even via [Flathub](https://flathub.org/apps/details/com.github.rssguard). +Also, RSS Guard is available for [many Linux distributions](https://repology.org/project/rssguard/versions), and even via [Flathub](https://flathub.org/apps/details/com.github.rssguard). I highly recommend to download RSS Guard only from reputable sources. -## Supported Operating Systems -RSS Guard is cross-platform application and at this point is know to work on: +## 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) * macOS 10.10+ * OS/2 (ArcaOS, eComStation) -## Major Features +## Major Features -### Supported Feed Readers -RSS Guard is multi-account application and supports many web feed readers via built-in [plugins](#papi). One of the plugins, of course, provides support for standard **RSS/ATOM/JSON** feeds with set of features everyone would expect from classic feed reader like OPML support etc. +### Supported Feed Readers +RSS Guard is a 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 **RSS/ATOM/JSON** feeds with the set of features everyone would expect from classic feed reader, like OPML support, etc. -I organized supported web feed readers into elegant table. +I organized the supported web-based feed readers into an elegant table: -| Service | Two-way Synchronization | [Intelligent Synchronization Algorithm](#intel) (ISA) 2 | Synchronized Labels 1 | OAuth | -|----|-----|-----|----|---| -| Feedly | ✅ | ❌ | ✅ | ✅ (only for official binaries) | -| Gmail | ✅ | ❌ | ❌ | ✅ | -| Google Reader API 3 | ✅ | ✅ | ✅ | ✅ (only for Inoreader) | -| Nextcloud News | ✅ | ❌ | ❌ | ❌ | -| Tiny Tiny RSS | ✅ | ❌ | ✅ | ❌ | +| Service | Two-way Synchronization | [Intelligent Synchronization Algorithm](#intel) (ISA) 1 | Synchronized Labels 2 | OAuth | +| :--- | :---: | :---: | :---: | :---: +| Feedly | ✅ | ❌ | ✅ | ✅ (only for official binaries) +| Gmail | ✅ | ❌ | ❌ | ✅ +| Google Reader API 3 | ✅ | ✅ | ✅ | ✅ (only for Inoreader) +| Nextcloud News | ✅ | ❌ | ❌ | ❌ +| Tiny Tiny RSS | ✅ | ❌ | ✅ | ❌ -1 Note that [labels](#lbls) are supported for all plugins, it's just that on some plugins they are local-only and are not synchronizeable to/from service, usually because service itself does not support the feature. +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. -2 Some plugins support next-gen intelligent synchronization algorithm (ISA) which has some benefits as it usually offers superier synchronization speed and transfers much less data over your network connection. +alt-img - +With ISA, RSS Guard only downloads articles which are new or were updated. While the old algorithm usually always fetch all available articles, even if they are not needed, which leads to unnecessary overload of your network connection and RSS Guard. -With ISA, RSS Guard only downloads only articles which are new or were updated, whereas older algorithm in RSS Guard usually always fetches all available articles, even if they are not needed, leading to unnecessary overload of your network connection and 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 @@ -77,98 +78,98 @@ With ISA, RSS Guard only downloads only articles which are new or were updated, * TheOldReader * FreshRSS -### Article Filtering -Sometimes you need to tweak incoming article - mark them starred, remove ads from their contents or simply ignore them. That's what filtering feature is for. +### Article Filtering +Sometimes you need to tweak incoming article - mark them starred, remove ads from their contents or simply ignore them. That's where filtering feature comes in. - +alt-img #### Writing article filter -Article filters are fully scriptable and consist of arbitrary JavaScript code which must provide function with prototype +Article filters are fully scriptable and consist of arbitrary JavaScript code which must provide function with prototype: ```js function filterMessage() { } ``` -The function must be fast and must return values which belong to enumeration [`FilteringAction`](#FilteringAction-enum). You can you use either direct numerical value of each enumerant, for example `2` or you can use self-descriptive name, for example `MessageObject.Ignore`. There are also names `MSG_ACCEPT` and `MSG_IGNORE` as aliases for `MessageObject.Accept` and `MessageObject.Ignore`. +The function should be fast enough, and must return values which belong to enumeration [`FilteringAction`](#FilteringAction-enum). You can either use direct numerical value of each enumerant, for example `2`, or you can use self-descriptive name, for example `MessageObject.Ignore`. There are also names `MSG_ACCEPT` and `MSG_IGNORE` as aliases for `MessageObject.Accept` and `MessageObject.Ignore`. -Each message 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 writable, allowing you to change contents of the message before it is written to DB. You can mark message important, parse its description or perhaps change author name or even assign some label to it!!! +Each message/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 message before it is written to DB. You can mark message important, parse its description, perhaps change author name or even assign some label to it!!! -You can use [special placeholders](#userd-plac) within message filter. +You can use [special placeholders](#userd-plac) within article filter. -Also, there is a special variable named `utils`. This variable is of type `FilterUtils` and offers some useful utility [functions](#utils-object) for you to use in your filters. +Also, there is a special variable named `utils`. This variable is of type `FilterUtils` and offers some useful [utility functions](#utils-object) for you to use in your filters. -RSS Guard also allows to use list of labels assigned to each message. You can therefore do actions in your filtering script based on which labels are assigned to the message. The property is called `assignedLabels` and is array of [`Label`](#Label-class) objects. If you change assigned labels to the message, then the change will be eventually [synchronized](#sfrl) back to server if respective plugin supports it. +RSS Guard also allows to use the list of labels assigned to each message. You can, therefore, execute actions in your filtering script, based on which labels are assigned to the message. The property is called `assignedLabels` and is array of [`Label`](#Label-class) objects. If you change assigned labels to the message, then the change will be eventually [synchronized](#sfrl) back to server if respective plugin supports it. -Passed message also offers special function +Passed message also offers special function: ```js Boolean MessageObject.isDuplicateWithAttribute(DuplicationAttributeCheck) ``` -which allows you to perform runtime check for existence of the message in RSS Guard's database. The parameter is integer value from enumeration [`DuplicationAttributeCheck`](#DuplicationAttributeCheck-enum) and specifies how exactly you want to determine if given message is "duplicate". Again, you can use direct integer values or enumerant names. +Which allows you to perform runtime check for existence of the message in RSS Guard's database. The parameter is integer value from enumeration [`DuplicationAttributeCheck`](#DuplicationAttributeCheck-enum) and specifies how exactly you want to determine if given message is "duplicate". Again, you can use direct integer values or enumerant names. -For example if you want to check if there is already another message with same author in database, then you call `msg.isDuplicateWithAttribute(MessageObject.SameAuthor)`. Values of the enumeration can be combined via bitwise `|` operation in single call, for example like this: `msg.isDuplicateWithAttribute(MessageObject.SameAuthor | MessageObject.SameUrl)`. +For example, if you want to check if there is already another message with same author in database, you should call `msg.isDuplicateWithAttribute(MessageObject.SameAuthor)`. Values of the enumeration can be combined via bitwise `|` operation in single call, for example like this: `msg.isDuplicateWithAttribute(MessageObject.SameAuthor | MessageObject.SameUrl)`. -Here is the reference of methods and properties of some types available in your filtering scipts. +Here is the reference of methods and properties of some types available in your filtering scripts. #### `MessageObject` class -| Property/method | Description | -|---|---| -| `Array