This fortnight Energy from the Community focuses to the email improvements that are on pipeline. David (flypig) interviewed and summarized changes nicely and it is really awesome to see what’s happen in that front.
The App roundup has once again a nice set of apps. The gPodder originates back to 2013 when old sailor Thomas Perl (thp) ported it for the first time to Sailfish. The Tooterβ as your choice for Sailfish Mastodon app. Then fheroes2 as the game of the fortnight. Finally, FileCase as an alternative app for accessing the filesystem with some great additional features.
Damien (dcaliste) put together once again Repository roundup – thank you Damien.
Let’s work together and keep on helping each other. Have a great time with the newsletter and enjoy!
Longtime readers of the newsletter will recall that back in April 2021 we looked at the work Damien Caliste ( dcaliste ) was doing on QMF — the Qt Messaging Framework — and related software stack.
QMF is an important component for most Sailfish OS users, in that it handles email sending and receiving, attachments and various related operations. The QMF daemon runs in the background and interacts tightly with the email client and notification systems, performing both periodic and always-on syncing to your email server.
As the name implies, QMF is part of the Qt project, is a fully open source component and makes heavy use of the core Qt C++ framework APIs. When we last looked at it Damien was busy ensuring the code successfully passed through the Qt continuous integration pipeline after the introduction of Qt 6. More recently however, Damien has been focusing on email encryption, especially related to the use of GnuPG (the GNU “Pretty Good Privacy” implementation) that can be used for end-to-end encryption, decryption, signing and verifying of emails.
The work was precipitated by szopin who recently recompiled Sequoia-sq for use on Sailfish OS. Official support for PGP has been hampered due to licensing issues surrounding various different versions of the implementation, but Sequoia-sq has the advantage of both being compatible with OpenPGP and having a more suitable licence. As szopin explains, having compiled the executable he contacted Damien to see if this might offer a breakthrough.
I reached out to him as with sequoia-sq compiled and working I thought we finally had a chance at proper PGP support (that’s also GPLv2 licensed and with Rust officially supported, all the stars seemed to align)… Damien very quickly provided a patched
libQMFclient.sothat made the encrypted attachments show up and I managed to do a bit of hacking (mostly cannibalised qCommand) to make it accept a file URL and register for text files, add a predefined command to run sequoia-sq on the contents and display the result.
Clearly this spark lit a fire as Damien has continued working on integrating the changes more fully into QMF and the email app. As Damien explains, this led to him fixing a broader collection of issues around attachments:
I’ve restarted looking into QMF recently, fixing (yet another) attachment bug.
You can see the changes Damien is proposing in the Qt code review tool. It fixes an issue that prevents some attachment files from being listed in the email application. This happens when the attachment parts in the email aren’t tagged with any content disposition directive (most attachment files will come with a content disposition specifying them as attachments).
Encrypted emails come in the form of an encrypted attachment, part of the RFC 1847 specification. Although QMF doesn’t currently have support for decrypting attachments, it would still be possible to decrypt them manually at the command line (using the GnuPG tools) if the attachments could at least be accessed in their encrypted form. As Damien explains:
Such encrypted messages cannot be handled even with the CLI if needed since the encrypted part is not downloaded and the UI offers no way to do it.
These should enable the email application to know about encrypted email and expose the encrypted part as an attachment so it can be downloaded like any other and proceed from the CLI.
I also gave a look at extending the plugin API for cryptography in QMF (introduced years ago for signing capabilities) adding functions for decryption… I’ve some code not yet ready for nemo-qml-plugin-email and jolla-email to make it complete up to the user interface. But I’m having trouble with attachments (again). Indeed, I don’t want to save the decoded email in the email database, but let the user decode it on the fly at each opening with his/her GnuPG password.
The need to decrypt messages on-the-fly like this adds complication, but is an important security feature. It ensures that decrypted messages aren’t available to others even if the user’s phone becomes compromised. But Damien must make quite significant changes in order to support this.
The email layout (after decryption) is changing in memory when it contains attachments while nothing is saved in the database. But nemo-qml-plugin-email expects to retrieve any email it is displaying (and particularly its attachments) from the email database. I’ve circumvent this for the body of the email, but I’ve no clean solution for attachments at the moment. So it’s a bit stalled for the moment.
And on the CLI side szopin also readily admits that there’s more work to be done.
All in all outside of base decryption there’s still a ton of work to be done even on the decrypting side. Even though sequoia is GPLv2 and the sq command works pretty much as a drop in replacement in the CLI, all the rest of Sailfish OS works with gpgme and sequoia has lower level API support only, so I doubt it will replace GPG officially any time soon.
If you’re interested in following Damien’s progress with this you can keep track on the Qt code review platform. But that’s not quite all, because Damien has also been quietly improving the overall QMF codebase independent of his GnuPG work.
When looking at the QMF code, I noticed that it’s still using QCop which is no longer supported in Qt and mainly replaced with D-Bus Qt implementation.
QCop is an inter-process communication (IPC) protocol that allows different parts of the system to communicate with one another. Many Sailfish OS developers will be familiar with D-Bus, which is the standard IPC mechanism used on Sailfish OS. If one application wants to trigger an action or access data that’s part of another application, it can make a D-Bus call to do so. QCop provides similar functionality, but is now a legacy Qt approach to this. As a result, Damien is intent on upgrading the QMF code to switch from QCop to D-Bus:
I’ve started to upgrade the code. Mainly to get the code up to date with today’s standards and hoping secretly for a wider adoption.
As you can see, Damien continues to work on many different aspects of the Sailfish OS messaging stack in the background, bringing both new features and important upgrades to the system. It’s nice to see the collaboration between szopin and Damien is producing results and hopefully we’ll see the fruits of their labour appearing in future Sailfish OS releases.
Few activity this fortnight, mainly driven by community members. It is not reported in this digest, but looking at the exchange in the various pull requests, Jolla is still actively working on review tasks and still accepting the changes when ready.
voicecall, the open source part of the calling application, neochapay proposed modifications to allow building it using Qt6.
nfcd, the daemon for near field communication, tehnick removed
libdbusaccessfrom the link since it is not necessary and was creating an arbitrary dependency on this library.
qtdocgallery, Qt module to create a gallery, neochapay worked on a patch to build the module over Qt6.
sensorfw, sensor framework, Tofee fixed a build issue for the Yocto distribution when using meta-qt6. Because of wrongly set macro variable,
sensorfwwas looking for modules in at the wrong path.
rust, the Rust programming language compiler, rubdos is working on upgrading the Rust package to version 1.73.0. Current patches for SailfishOS requires to be rebased and sometimes reworked on.
As always the Sailfish OS developer community has been continuing to work hard on the apps we all take for granted and I’m very happy to be able to report on some of the fruits of their labour here today.
Don’t forget that if you’re especially enthralled by a particular app, or even if it just makes your day a little bit nicer, you could do worse than make a donation to the project and announcing the fact on the Big Thank You and Coffee Thread.
First up is an app for managing your regularly updated spoken-word audio samples (otherwise known as podcasts). The gPodder app from Keeper-of-the-Keys offers a lovely interface to medium on your Sailfish device. I mentioned audio, but a particularly nice feature of the app is that it handles video nicely as well. You can either download the audio or video files to your device to use your regular Media app to listen to or view them, or you can do so directly within gPodder itself.
But let’s back up a bit. Because before you’re downloading anything you’ll need to find something you’re interested in. gPodder offers a range of different ways to subscribe to podcasts. If you already have the URL of a podcast, for example taken from the Web, then you can simply hand over the URL and let gPodder do the rest. But there’s also a nice ‘Discover new podcasts’ option that will allow you to search a range of providers. My experience with this feature was varied: some providers worked great, whereas others just left me with a Silica spinner.
Having found something to listen to or watch, the way of accessing episodes is both simple and provides suitable features. The list of episodes is nice, compact and easy to navigate, with information about each episode easily to hand. A particularly nice touch is that when playing a podcast you can choose the playback speed, from half normal speed all the way up to three times normal speed. It works well for speech, there are no chipmunks here, and I was happy to see it works well for both audio and video files once the initial stuttering had settled down.
The latest version 4.14.0 of gPodder adds this nice ability to play video, as well as improved support for Apple podcasts. It’s available from the Jolla Store and OpenRepos.
Next up we have Tooterβ from perennial app-improver Mark Washeim (poetaster). As the world is seemingly moving away from X/Twitter and on to other platforms, Tooter provides you with the means to move to Mastodon if you’re a Sailfish OS user. I’ve been using Tooter myself for some time now and it’s an effective way to interact with your chosen Mastodon server.
It’s also great to see that the latest release is the product of some collaboration between Mark and Ville Nummela (one of Jolla’s sailors). Ville converted the app to use the standard Sailfish Amber Web Authentication for the OAuth capabilities, allowing Mark’s effective but bespoke Python Web server to be retired. This should make maintenance easier in future. In this release we also see updates for file selections and various other small bug fixes. Great work! You can get this latest version 4.14.0 from the Jolla Store and Chum.
The next app for today isn’t one you’ll find in the Jolla Store, but as I can’t resist a great game, especially if it’s a retro classic, I couldn’t help but include it. The fheroes2 app from Kormil allows you to play classic PC game Heroes of Might and Magic II on your phone in all its pixelated glory.
I must have sunk so many hours into this game in the nineties that I immediately felt at home running it on my phone. It’s a turn-based strategy game that sees you roaming a 2D map for resources which you then use to upgrade your homestead and recruit an army. Unlike more recent world-building games you have only limited capacity to change the landscape: you can’t change the location of the castles for example, although you can take over any castle you’re strong enough to subdue. Eventually you’ll land your hero in a battle which involves moving your troops around a map of hexagonal tiles, using the various weapons and magic at your disposal based on the troops you’ve accumulated.
You’ll need the commercial game files to play the game, but don’t worry if you’re not the proud owner of the original CD box set, you can buy yourself a copy from GOG. Alternatively if you want to try-before-you-buy you can use the demo downloader script to download yourself a copy to your computer and then copy them over to the appropriate place on your phone. Something like this should do it:
mkdir temp cd temp ./download_demo_version.sh . scp -r data demo maps \ email@example.com:~/.local/share/fheroes2
The latest version of the app includes a bunch of improvements, including better AI, a more complete map editor and over forty bugfixes. Take my advice and grab yourself a copy now from OpenRepos!
Finally today I wanted to highlight the work Olf (olf) has been doing on the FileCase app. FileCase is a venerable app providing access to the filesystem on your Sailfish OS device. Although Sailfish OS has a built in file manager, many users prefer the flexibility and configurability of a separate app, and FileCase is a classic. It’s been one of the mainstay apps on my phone for a while now and does the job nicely.
If you’ve not used the app before, a particularly nice feature is the fact that you can add remote services for browsing, to supplement access to the files on your local device. These include Box, Dropbox, Google Drive, OneDrive and WebDav. The last of these can be used, for example, as a means of accessing NextCloud servers.
Olf has made many changes recently, and while most of them are backend improvements, they’re important nevertheless. They include an improved translation pipeline, continuous integration for the repository, improved issue reporting. Plus bugfixes, cleaned-up code and a proper SailJail configuration. Version 0.4.2-RC1 of FileCase is available form OpenRepos.
Thanks once again to all the developers and contributors ensuring the Sailfish OS app ecosystem continues to provide such great apps for us users.
Hope you enjoyed reading this community newsletter! As always, please do not hesitate to share your ideas, thoughts, or suggestion for future newsletter topics.
Big thanks to everybody to make this newsletter to happen!
Please do also join us at our community meetings on IRC, Matrix and Telegram. Next community meeting will be on the 9th November.