NewsFlash

tl;dr: NewsFlash is a complete rewrite of the FeedReader application in rust.

The idea of a larger overhaul of the code base was already formed quite some time ago as this Wiki page documents. Around the same time I started to look into rust. As a first learning exercise I ported the integrated content grabber of FeedReader to rust as a separate crate. With the first crate turning out half decent I started the mammoth task of rewriting all of FeedReader.

Obligatory Screenshot Comparison

As you can see the visual differences are minimal. I would argue however that NewsFlash does have some nice minor visual
and functional improvements over FeedReader.

So what IS actually different about the rewrite compared to the old vala application?

A Different Project Structure

API Crates

The supported feed services were realized as plugins in FeedReader.

This turned out to be a bad move since every new service would be developed in the main repository anyway. There was no reason to not have all of the plugins installed. But problems with plugins not loading at runtime for whatever were plenty.

So for NewsFlash I’m making use of the excellent crate system that rust provides to develop a generic as possible implementation of a service API
in a separate repository. But then have the integration into NewsFlash’s abstraction layer in the main repository. The idea here is that the API crates will be useful to other people as well.

So far there are:

Application Base Crate

Similarly NewsFlash itself is split up in 2 parts:

A base application crate called news_flash that contains all the syncing functionality, database code and other utilities. This crate is neither relying on gnome technology (libxml2 doesn’t count) nor is there platform specific code. It relies on pure rust crates where ever possible.

On top of the base crate sits news_flash_gtk which is one of hopefully many graphical user interfaces that make use of the `news_flash` code base. Maybe we will see a Qt GUI, a windows or mac application or maybe even another Gtk GUI with a different interaction concept.

In the end this should result in more contributors to a modern core for RSS clients and especially better tested and maintained feed service integrations for everyone.

A Clear Vision From the Start

NewsFlash will be an opinionated project right from the start. With FeedReader I gave in to too many feature requests and added too many settings and dconf tweaks over time. This made maintaining and testing a lot harder than necessary.

Bugs often happened only with a certain combination of settings. Every user feels his combination of settings are the only reasonable way to use the application. They therefore forget to mention anything about the non-default settings in their reports. There were more than one revelations in trying to reproduce a bug that went like “Ah, you’re using these two settings. Now I can reproduce the bug no problem”.

So this time around I want to be way more strict about accepting new features and configuration knobs.

I myself am also guilty of overcomplicating some behaviors in the FeedReader GUI for the sake of appearing automatic and cool, while in reality often leading to more problems than making things easier. A prominent example would be the behavior of the unread list in FeedReader that automatically removes read articles upon deselection. It made the code more complex, caused bugs and even caused unexpected user interactions for some.

With NewsFlash I want to be more straight foreward with these things.

A Few New Features

Despite the focus on a leaner application a few improvements and features already snuck into the code base.

Search the feedly Cloud for New Feeds

Discovering new content with RSS is not as simple as with big social media sites that most people use to get their news. Interesting feeds are all over the world wide web. Finding new feeds you want to subscribe to mostly happens by accident.

NewsFlash makes use of the large database of feedly to lessen the pain.

New Add Dialog

It’s now easier than ever to manually add a new feed. Just type the website and NewsFlash automatically looks for all feeds available. No longer you have to type or paste the exact RSS/Atom URL, although that still works just fine.

Adaptive User Interface

Of course NewsFlash also makes use of libhandy to shrink the UI down as much as possible. This hasn’t been tested on a phone so far. And I expect that some work is still needed until it’s completely usable on a phone. But even on a traditional desktop it is a “nice-to-have” feature. Just shrink the window down and get it out of the way.

Dark Mode

Until there are desktop wide dark preference settings you can switch to a dark variant of the Gtk theme in NewsFlash.

Edit Keybindings

No need to open up d-conf and edit strings to change the default keybindings any more.

Misc

  • OPML export
  • configurable proxy
  • download full content for specific articles on demand
  • Export articles as html with embedded images
  • better error handling and communicating them to the user
  • manual but also more reliable offline mode

Looking for Service Maintainers

I’m ending this post with the announcement that I am looking for people that are actively using a specific service backend of NewsFlash or want to add a completely new one and are willing to maintain it.

The size of the code for each service is quite manageable. But keeping an eye on and testing every service can be challenging.
So this time around I’m hoping to find at least one person per service that knows the basics of rust and uses the service on a (almost) daily basis.

Services & Maintainers:

Leave a Reply

Your email address will not be published. Required fields are marked *