GNUnet Messenger API: March
Hi again,
Last time I had big hopes to make enough progress for a first release. But I think I’m gonna delay that a bit (maybe still this month but we will see) even though I could actually complete the things, I anticipated. However here is finally the long promised video of it running on the Pinephone Pro because there’s still much to show.
The back-end of the messenger-gtk application called libgnunetchat now uses the GNUnet Name Store service to manage your chats instead of using a local directory and some configuration files for each chat as before. This means that it is now possible to start the application from any directory and it will properly sync the chats depending on the account/identity selected.
Next big feature is that it is possible to generate so called lobbies. Lobbies are empty chat rooms which will be shared in form of a GNS record under a newly generated zone instead of your own identity zone. This has multiple reasons:
- Technically your own key could change as the GNUnet Messenger service allows overriding your own key with another newly generated one.
- You will share the public key of the records zone and you might not want to be identified immediately via this shared URI.
- You might leave the chat room at some point or it gets closed which would make the assumption of you being member of that chat room potentially false anyway.
Anyway as a user you can share the URI pointing to your lobby in text form or as QR code which will be generated automatically. Beware that you as user decide how this lobby can be used. That means if you share this URI with only one other person, you can use it to establish a private chat to add a new person as contact for example (this is most likely the goal while using it - contact exchange). However if you share the URI with more than one person, you can totally utilize it to establish a group chat. This can also ease adding a bunch of people in potentially one go to your contacts.
So in other words the QR code of a lobby is not representing your public key to exchange, verify and add a new contact in one as with some other messengers. It is only for contact exchange and you don’t want to reuse them in most cases. Generating a new one is fairly easy to though.
Another big feature which got added is voice recording. That means the send button in a chat right at the bottom of the GUI will now actually start recording your voice if you keep it pressed down. This can’t really happen accidentally while writing a message and in worst case, you won’t send any voice recording immediately as with other messengers. You will still have to possibility to listen to your own voice (if you like to do that) as preview and decide to send or just drop it.
Then there are also some minor features added. You can now leave a chat with a button and you are able to look at your contacts details as well as renaming them if you like. It should also be possible to rename yourself from the contact details dialog while selecting yourself in a group for example. The dialog allows you to have a look at the public keys of yourself and your contacts to potentially verify them visually. Having a QR code scan for this in the future is definitely planned because this would be much more convenient but I wanted to have at least one way implemented to verify your contacts already as it is a core functionality.
There is also now a new about dialog, showing the version, license information and credits of the application. I’ve tweaked multiple events to reduce GTK calls to update information when a lot of messages stack up. So it will process the necessary things immediately but update visual information only once after all stacked messages are processed. This helps a lot with many chats and loading many messages at startup.
Another improvement is that I’ve finally adjusted the HdyFlap widgets for the menus to not interfere with some GtkListBox selections while opening them via a button. Before it could happen that you might select messages for deletion while opening a side menu in a chat and similar. This was actually pretty annoying and it only happened on touch screen devices like the Pinephone and Pinephone Pro. But that’s now solved.
Many settings are now implemented as well. So you can enable messages to be deleted automatically after sending them, delete invitations after a selected delay or disable notifications.
The last addition is that chats will now be sorted by their latest message timestamp as other messengers do it. It’s only a small thing but fairly convenient.
So all of this sounds great, right? Now why did I state I have to delay the release if things are looking feature complete as far as the core functionality of a messenger. Well, multiple reasons actually:
- The management of chats in the GNUnet Name Store is still not fully stable as with the local files before. Renaming contacts might not work with the latest GNUnet version (0.16.2) but there are currently changes on the way to address that with the next version.
- Generating lobbies failed multiple times during debugging. While I assume that the issue is probably not on the side of the messenger-gtk application but in the libgnunetchat library. It wouldn’t make much sense to rush a release of the GUI without a proper version of the back-end to rely on.
- It is still not possible to utilize the cameras on the Pinephones for scanning QR codes via zbar. So any sort of release would only focus on desktop support which is unfortunate.
- I’ve also encountered some GUI freezes and crashes at times, trying to generate a lobby. I still need to look more into this because it is overall a core feature which should work flawless or at least only show an error message instead of any instability.
I hope those reasons make sense. While trying to fix those issues I will still start with the work to package the application for several Linux distributions. Most likely I will announce a release with a flatpak to make it as convenient as possible trying it yourself.
My next monthly report will likely be more about the messenger-cli application. This month I’ve only started developing first portions of code with ncurses. The goal is to provide a command line interface to utilize libgnunetchat from any terminal without the needs of GTK or any other GUI toolkit.
Kind regards,
Jacki