work on docs

This commit is contained in:
Martin Rotter 2023-09-29 13:01:41 +02:00
parent 69b4d9828a
commit 1104071281
13 changed files with 69 additions and 62 deletions

View File

@ -2,10 +2,10 @@ 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).
RSS Guard is also available in [repositories of many Linux distributions](https://repology.org/project/rssguard/versions), and via [Flathub](https://flathub.org/apps/search?q=rssguard).
The are two different [flavors](#features/browseradblock):
* [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`).
* Regular: Includes an (almost) full-blown integrated web browser (built with `-DUSE_WEBENGINE=ON`).
* Lite: 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.

View File

@ -1,9 +1,9 @@
Built-in Web Browser & AdBlock
==============================
RSS Guard is distributed in two variants:
* **Standard package with WebEngine-based bundled article viewer**: This variant displays messages/articles with their full formatting and layout in embedded Chromium-based web browser. This variant of RSS Guard should be okay for everyone. Also, installation packages are relatively big.
* **Standard package with WebEngine-based bundled article viewer**: This variant displays articles with their full formatting and layout in embedded Chromium-based web browser. This variant of RSS Guard should be okay for everyone. Also, installation packages are relatively big.
* **Lite package with simple text-based article viewer**: This variant displays article in a much simpler and much more lightweight web viewer component. All packages of this variant have `nowebengine` keyword in their names. This flavor of RSS Guard does NOT have a JavaScript support and is meant for people who value their privacy.
* **Lite package with simple text-based article viewer**: This variant displays article in a much simpler and much more lightweight web viewer component. All packages of this variant have `nowebengine` (or `lite`) keyword in their names. This flavor of RSS Guard does NOT have a JavaScript support and is meant for people who value their privacy.
## AdBlock
Both variants of RSS Guard offer ad-blocking functionality via [Adblocker](https://github.com/cliqz-oss/adblocker). Adblocker offers similar performance to [uBlock Origin](https://github.com/gorhill/uBlock).

View File

@ -8,12 +8,12 @@ SQLite backend is very simple to use, no further configuration needed. All your
```
<user-data-folder>\database\database.db
```
(For path to user data folder, see User Data Portability section.)
(For path to user data folder, see [this](#userdata) section.)
This backend offers an `in-memory` database option, which automatically copies all your data into RAM when application launches, making RSS Guard incredibly fast. Data is written back to database file on disk when application exits. This option is not expected to be used often because RSS Guard should be fast enough with classic SQLite persistent DB files. Use this option only with huge amount of article data, and when you know what you are doing.
Also note, that some new versions of RSS Guard introduce changes to how application data are stored in database file. When this change happens, backup of your SQLite database file is created automatically.
MariaDB (MySQL) backend is there for users who want to store their data in a centralized way. You can have a single server in your network and use multiple RSS Guard instances to access the data.
MariaDB (MySQL) backend is there for users who want to store their data in a centralized way. You can have a single server in your network and use multiple RSS Guard instances to access the data, but not simultaneously.
For database-related configuration see `Settings -> Data storage` dialog section.

View File

@ -1,10 +1,10 @@
Files Downloader
File Downloader
================
RSS Guard offers simple file downloader.
<img alt="alt-img" src="images/downloader-window.png" width="600px">
You can right-click any item in an embedded web browser and hit the `Save as` button. RSS Guard will then automatically display the downloader, and will download your file. This feature works in both RSS Guard variants. The downloader is also fully interconnected with some RSS Guard plugins, like Gmail where you can download e-mail attachments with it.
You can right-click any item in an embedded web browser and hit the `Save as` button. RSS Guard will then automatically display the downloader, and will download your file. This feature works in both RSS Guard [variants](#browseradblock). The downloader is also fully interconnected with some RSS Guard plugins, like Gmail where you can download e-mail attachments with it.
<img alt="alt-img" src="images/downloader-view.png" width="600px">

View File

@ -10,23 +10,27 @@ The dialog seen below offers you a way of managing your article filters. You can
<img alt="alt-img" src="images/filters-dialog.png" width="600px">
## 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:
Article filters are small scripts which are executed automatically when articles/feeds are downloaded. Article filters are `JavaScript` snippets which must provide function with prototype:
```js
function filterMessage() { }
```
The function should be fast and must return values which belong to enumeration `FilteringAction`.
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!!!
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](labels) to it!!!
```{note}
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 can be used in article filters.
```{attention}
A special [placeholders](userdata.md#data-placeholder) 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 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` objects.
[Labels](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` objects.
Passed article also offers a special function:
@ -34,7 +38,7 @@ Passed article also offers a special function:
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`. It specifies how exactly the article should match.
which allows you to perform runtime check for existence of the article in RSS Guards database. Parameter is the value from enumeration `DuplicateCheck`. 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:
@ -45,7 +49,7 @@ msg.isAlreadyInDatabase(MessageObject.SameAuthor | MessageObject.SameUrl)
## Class Reference Documentation
Here is the reference of methods and properties of types available in your filtering scripts.
Here is the reference documentation of types available for your filtering scripts.
### `MessageObject` class
| Type | Name(Parameters) | Return value | Read-only | Synchronized | Description
@ -73,7 +77,7 @@ Here is the reference of methods and properties of types available in your filte
| Method | `deassignLabel(String label_id)` | `Boolean` | ❌ | ❌ | Removes label from the message. The `String` value is the `customId` property of `Label` type. See its API reference for relevant info.
| Method | `createLabelId(String title, String color_hex_code)` | `String` | ❌ | ❌ | Creates the label with given name and given color hex code in form `#AABBCC`. Color can be omitted in which case auto-generated color is used.
| Method | `addEnclosure(String url, String mime_type)` | `void` | ❌ | ❌ | Appends new enclosure/attachment with given URL and MIME type to the article.
| Property | `runningFilterWhenFetching` | `Boolean` | ✅ | ❌ | Returns `true` if message filter is applied when message is fetched. Returns `false` if filter is applied manually, for example from **Article filters** window.<!-- TODO: is there another example when it's applied? should "for example" be dropped? -->
| Property | `runningFilterWhenFetching` | `Boolean` | ✅ | ❌ | Returns `true` if message filter is applied when message is fetched. Returns `false` if filter is applied manually, for example from `Article filters` window.
### `Label` class
| Type | Name | Return value | Read-only | Description
@ -89,7 +93,9 @@ Here is the reference of methods and properties of types available in your filte
| `Ignore` | 2 | Message is ignored and will **NOT** be added or updated in DB. Already existing message will not be purged from DB.
| `Purge` | 4 | Existing message is purged from the DB completely. Behaves like `Ignore` when there is a new incoming message.
```{attention}
The `MessageObject` attributes are synchronized with service even if you return `Purge` or `Ignore`. In other words, even if the filter ignores the article, you can still tweak its properties, and they will be synchronized back to your server.
```
### `DuplicateCheck` enum
| Enumerant name | Integer value | Description

View File

@ -1,17 +1,12 @@
General GUI Concepts & Manipulating Accounts & Adding Feeds
===========================================================
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.
* 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.
<img alt="alt-img" src="images/accounts.png">

View File

@ -20,4 +20,4 @@ Unassigning a message label might easily be done through the message viewer.
Note that unassigning the message labels is also synchronized at regular intervals (with services that support label synchronization).
Message filters can also assign or remove labels from messages.
[Article filters](filters) can also assign or remove labels.

View File

@ -9,4 +9,4 @@ RSS Guard allows you to customize desktop notifications. There are a number of e
<img alt="alt-img" src="images/notif.png" width="600px">
Your notification can also play `.wav` sounds which you can place under your user data folder and use them via special placeholder. Other audio formats are not supported.
Your notification can also play `.wav` sounds which you can place under your [user data](userdata) folder and use them via special [placeholder](userdata.md#data-placeholder). Other audio formats are not supported.

View File

@ -6,4 +6,8 @@ Article list offers search box to quickly filter displayed articles. If you want
You can select name for your search and more importantly the actual search phrase. As the name of the feature suggests, you need to enter valid [regular expression](https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference).
Then you confirm the dialog and your search will show in feed list under `Regex queries` item. If you click it, all matching articles will be shown. Also, the article count shown next to the item is dynamically recalculated after new articles are fetched, so you can comfortably use this feature to track articles you are interested in.
Then you confirm the dialog and your search will show in feed list under `Regex queries` item. If you click it, all matching articles will be shown. Also, the article count shown next to the item is dynamically recalculated after new articles are fetched, so you can comfortably use this feature to track articles you are interested in.
```{attention}
Count of all (or unread) articles matching your regex query is disabled in feed list for performance reasons. This limitation might be removed in the future.
```

View File

@ -4,15 +4,16 @@ Scraping Websites
Only proceed if you consider yourself a power user, and you know what you are doing!
```
RSS Guard offers additional advanced feature inspired by [Liferea](https://lzone.de/liferea/).
RSS Guard offers additional advanced feature inspired by [Liferea](https://lzone.de/liferea).
Goal of this feature is to allow advanced users to use RSS Guard with data sources which do not provide regular feed. So you can use the feature to generate one.
----
You can select source type of each feed. If you select URL, then RSS Guard simply downloads feed file from given location and behaves like everyone would expect.
However, if you choose `Script` option, then you cannot provide URL of your feed, and you rely on custom script to generate feed file and provide its contents to [**standard output** (stdout)](https://en.wikipedia.org/wiki/Standard_streams#Standard_output_(stdout)). Data written to standard output should be valid feed file, for example RSS or ATOM XML file.
However, if you choose `Script` option, then you cannot provide URL of your feed, and you rely on custom script to generate feed file and provide its contents to [**standard output** (stdout)](https://en.wikipedia.org/wiki/Standard_streams#Standard_output_(stdout)). Data written to standard output should be valid feed data.
`Fetch it now` button also works with `Script` option. Therefore, if your source script and (optional) post-process script in cooperation deliver a valid feed file to the output, then all important metadata, like title or icon of the feed, can be discovered :sparkles: automagically :sparkles:.
`Fetch it now` button also works with `Script` option. Therefore, if your source script and (optional) post-process script in cooperation deliver a valid feed data to the output, then all important metadata, like title or icon of the feed, can be discovered :sparkles: automagically :sparkles:.
<img alt="alt-img" src="images/scrape-source-type.png" width="350px">
@ -33,18 +34,23 @@ Executable file must be always be specified, while arguments do not. Be very car
| Command | Explanation |
| :--- | --- |
| `bash -c "curl 'https://github.com/martinrotter.atom'"` | Download ATOM feed file using Bash and Curl. |
| `Powershell Invoke-WebRequest 'https://github.com/martinrotter.atom' \| Select-Object -ExpandProperty Content` | Download ATOM feed file with Powershell. |
| `php tweeper.php -v 0 https://twitter.com/NSACareers` | Scrape Twitter RSS feed file with [Tweeper](https://git.ao2.it/tweeper.git). Tweeper is the utility that produces RSS feed from Twitter and other similar social platforms. |
| `Powershell Invoke-WebRequest "https://github.com/martinrotter.atom" \| Select-Object -ExpandProperty Content` | Download ATOM feed file with Powershell. |
| `php tweeper.php -v 0 "https://twitter.com/NSACareers"` | Scrape Twitter RSS feed file with [Tweeper](https://git.ao2.it/tweeper.git). Tweeper is the utility that produces RSS feed from Twitter and other similar social platforms. |
Note that the above examples are cross-platform. You can use exactly the same command on Windows, Linux or macOS, if your operating system is properly configured.
```{note}
The above examples are cross-platform. You can use exactly the same command on Windows, Linux or macOS, if your operating system is properly configured.
```
RSS Guard offers placeholder `%data%` which is automatically replaced with full path to RSS Guard user data folder, allowing you to make your configuration fully portable. You can, therefore, use something like this as a source script line: `bash %data%/scripts/download-feed.sh`.
RSS Guard offers [placeholder](userdata.md#data-placeholder) `%data%` which is automatically replaced with full path to RSS Guard user data folder, allowing you to make your configuration fully portable. You can, therefore, use something like this as a source script line: `bash %data%/scripts/download-feed.sh`.
Also, working directory of process executing the script is set to point to RSS Guard user's data folder.
```{attention}
Working directory of process executing the script is set to point to RSS Guard [user data](userdata) folder.
```
There are [examples of website scrapers](https://github.com/martinrotter/rssguard/tree/master/resources/scripts/scrapers). Most of them are written in Python 3, so their execution line is similar to `python script.py`. Make sure to examine each script for more information on how to use it.
After your source feed data is downloaded either via URL or custom script, you can optionally post-process it with one more custom script, which will take **raw source data as input**. It must produce valid feed data to [**standard output** (stdout)] while printing all error messages to [**error output** (stderr)].
----
After your source feed data is downloaded either via URL or custom script, you can optionally post-process it with one more custom script, which will take **raw source data as input**. It must produce valid feed data to standard output while printing all error messages to error output.
Here is little flowchart explaining where and when scripts are used:

View File

@ -5,7 +5,7 @@ RSS Guard is a skinable application. With [Qt stylesheets](https://doc.qt.io/qt-
<img alt="alt-img" src="images/gui-dark.png" width="600px">
```{warning}
Note that as of RSS Guard `4.1.3`, old skins `vergilius` and `dark` were removed and replaced with `nudus` skins. For now, only `nudus` skins are maintained by RSS Guard developers.
Note that as of RSS Guard `4.1.3`, old skins `vergilius` and `dark` were removed and replaced with `nudus-*` skins. For now, only `nudus` skins are maintained by RSS Guard developers.
```
```{note}
@ -16,7 +16,7 @@ You can select style and skin in `Settings -> User interface` dialog section.
Try to play around with various combinations of styles and skins to achieve the UI you like.
Creating a custom UI is possible with `skins`. Each skin should be placed in its own root folder and must contain specific files. The [built-in skins](https://github.com/martinrotter/rssguard/tree/master/resources/skins) are stored in folder together with RSS Guard executable, but you can place your own custom skins in a `skins` subfolder in user data folder. Create the folder manually, if it does not exist.
Creating a custom UI is possible with `skins`. Each skin should be placed in its own root folder and must contain specific files. The [built-in skins](https://github.com/martinrotter/rssguard/tree/master/resources/skins) are stored in folder together with RSS Guard executable, but you can place your own custom skins in a `skins` subfolder in [user data](userdata) folder. Create the folder manually, if it does not exist.
<img alt="alt-img" src="images/about-skins.png" width="600px">

View File

@ -1,11 +1,13 @@
User Data
=========
```{note}
One of the main goals of RSS Guard is to have portable/relocatable user data folder so that it can be used across all supported operating systems.
```
RSS Guard can run in two modes:
* **Non-portable:** The default mode, where user's data folder is placed in user-wide "config directory" (`C:\Users\<user>\AppData\Local` on Windows).
If the file `C:\Users\<user>\AppData\Local\RSS Guard 4\data\config\config.ini` exists, then this `<user>`'s folder is used.
* **Portable mode:** This mode allows storing user data folder in a subfolder **data4** in the same directory as RSS Guard binary (`rssguard.exe` on Windows). This mode is used automatically if non-portable mode detection fails.
* **Non-portable**: The default mode, where user data folder is placed in user-wide "config directory" (`C:\Users\<user>\AppData\Local` on Windows).
If the file `C:\Users\<user>\AppData\Local\RSS Guard 4\data\config\config.ini` exists, then this folder is used.
* **Portable mode**: This mode allows storing user data folder in a subfolder **data4** in the same directory as RSS Guard binary (`rssguard.exe` on Windows). This mode is used automatically if non-portable mode detection fails.
Check `Help -> About application -> Resources` dialog tab to find more info on paths used.
@ -13,7 +15,7 @@ User data folder can store your custom icon themes in `icons` subfolder, and cus
## `%data%` placeholder
RSS Guard stores its data and settings in a single folder. How to find out the exact path, see here. RSS Guard allows using the folder programmatically in some special contexts via `%data%` placeholder. You can use this placeholder in following contexts:
* Contents of your article filters - you can, therefore, place some scripts under your user data folder and include them via JavaScript into your article filter.
* Contents of each file included in your custom skins. Note that in this case, the semantics of `%data%` are little changed and `%data%` points directly to base folder of your skin.
* `source` and `post-process script` attributes for feed scraping - you can use the placeholder to load scripts to generate/process the feed from user's data folder.
* Notifications also support the placeholder in path to audio files which are to be played when some event happens. For example, you could place audio files in your data folder and then use them in a notification with `%data%\audio\new-messages.wav`. See more about notifications.
* Contents of your [article filters](filters) - you can, therefore, place some scripts under your user data folder and include them via JavaScript into your article filter.
* Contents of each file included in your custom [skins](skins). Note that in this case, the semantics of `%data%` are little changed and `%data%` points directly to base folder of your skin.
* `source` and `post-process script` attributes for feed [scraping](scraping) - you can use the placeholder to load scripts to generate/process the feed from user's data folder.
* [Notifications](notifications) also support the placeholder in path to audio files which are to be played when some event happens. For example, you could place audio files in your data folder and then use them in a notification with `%data%\audio\new-messages.wav`. See more about notifications.

View File

@ -1,29 +1,23 @@
Supported Feed Readers
======================
RSS Guard is multi-account application and supports many web-based feed readers via built-in plugins. 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.
RSS Guard is multi-account application and supports many web-based feed readers via built-in plugins. 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 (ISA) <sup>1</sup> | Synchronized Labels <sup>2</sup> <a id="sfrl"></a> | OAuth <sup>4</sup> |
| Service | Two-way Synchronization | Intelligent Synchronization Algorithm (ISA) [^1] | Synchronized Labels [^2] | OAuth [^3] |
| :--- | :---: | :---: | :---: | :---:
| Feedly | ✅ | ✅ | ✅ | ✅ (only for official binaries)
| Gmail | ✅ | ✅ | ✅ | ✅
| Google Reader API <sup>3</sup> | ✅ | ✅ | ✅ | ✅ (only for Inoreader)
| Google Reader API [^4] | ✅ | ✅ | ✅ | ✅ (only for Inoreader)
| Nextcloud News | ✅ | ❌ | ❌ | ❌
| Tiny Tiny RSS | ✅ | ✅ | ✅ | ❌
<sup>1</sup> 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.
[^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.
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.
<sup>2</sup> Note that labels 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.
[^2]: Note that [labels](#features/labels) 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.
<sup>3</sup> Tested services are:
* Bazqux
* FreshRSS
* Inoreader
* Miniflux
* Reedah
* TheOldReader
[^3]: [OAuth](https://en.wikipedia.org/wiki/OAuth) is a secure way of authenticating users in online applications.
<sup>4</sup> [OAuth](https://en.wikipedia.org/wiki/OAuth) is a secure way of authenticating users in online applications.
[^4]: Tested services are: Bazqux, FreshRSS, Inoreader, Miniflux, Reedah, TheOldReader.