* Extend the configuration format in order to allow access_token,
user_id and device_id instead of username and password
* Move the matrix login logic outside of login_and_sync for clarity
* Add support for access token based session resuming instead of
logging in every time (thus creating a new device each time the
service starts up)
* Delay the startup of feed reader loops until after the matrix module
has had a chance to actually check authentication
This change is quite involved and there are a few caveats, namely an
intentional race condition between the feed reader loops and matrix
authentication, as well as significantly different behaviors depending
on which authentication scheme is being used: password based
authentication requires an API call while resuming a session using an
access token does not.
* Implement the std::error::Error trait and add a Result type
* Propagate generic io::Error and serde_yaml::Error using From
* Move the Result and Error types to the bottom of the module
* Use the tracing crate instead of println macros
* Do not panic on failure to send messages
* Move the send code to a separate function in preparation for adding
a proper retry implementation
This is a rewrite of our old feedbot in rust, heavily inspired from
rek2's INN matrix bot and making use of some bits from matrix-rust-sdk
This is an asynchronous tokio-based matrix client using a stateless feed
fetcher implementation based on reqwest, it uses feed_rs for parsing RSS
and Atom feeds. State persistence is achieved using a simple file-backed
datastore with serde_yaml as a serialization format.
Published under the GNU General Public License version 3 or later.