This is the second post of a news series about Gajim’s development. In these posts I (wurstsalat) will try to summarize a month of development around Gajim. Sometimes these posts will also cover python-nbxmpp and XMPP in general. November’s development brought improvements to group chats, theming, drag and drop actions, OMEMO, and more. Feel free to join email@example.com to discuss with us.
Changes in Gajim
The group chat window received a great number of design changes. Besides the new participants list mentioned in October’s development news, most of the group chat related dialogs have been replaced by ‘pages’ overlaying the chat window. The idea first came up when we were looking for a place to display group chat infos (which can be quite a lot). An example of how these infos are displayed in the future can be seen in the screenshot below.
Over the past few months, more and more dialogs have been migrated to this new approach. From within the chat window users are now able to:
- change their nickname
- change the group chat’s subject
- kick/ban users
- enter passwords/captchas
- destroy the group chat
- rename the group chat (locally)
Gajim is now capable of displaying the group chat’s name (the one the creator chose) (#5406) within the contact list, tabs, and the banner area above the chat. If the user chooses a different name (which is now possible from the contact list as well as from within the group chat (#9783), it will be used instead.
Drag and drop, themes, server infos
During the past months there have been many drag and drop improvements for Gajim. It is now possible to invite a contact to a group chat by drag and drop. Dropping a file on the contact list now starts a file transfer to the contact the file was dropped on.
Many users were complaining about the Theme window’s usability. We tried to simplify the workflow by automating the manual steps we previously required users to do (#9886). If a user wants to change a theme setting (e.g. font size) it’s now a simple click on ‘Add Setting’ which will a) add a new theme, b) switch to that newly added theme, and c) add the desired setting. This also enables users to see a live preview of their intended changes. Removing a currently active theme will now automatically fall back to the default theme without asking to switch first.
In Gajim 1.0, a Server Info dialog has been introduced. This dialog helps users to assess the capabilities of the service they are using by listing features supported by the server. In addition to the list of features, we now also show connection infos (e.g. transport security, chosen cipher, used proxy) (#6096). The server’s certificate can also be viewed from the Server Info dialog. Some servers offer contact addresses for support, feedback, or admin questions. These contact addresses are now displayed as well (#9848).
In an effort to unify the dialogs Gajim is showing when it needs the user’s confirmation or input, the old dialog system gets replaced step by step. Many old dialogs have been removed or replaced already, resulting in a more consistent appearance.
Gajim’s code for internally setting shortcuts has been improved. This brings us one step closer to offer customizable shortcuts in the future. Also, we added Ctrl+E to open the Plugins window and Ctrl+Shift+X to view the XML console. Many of the shortcuts available in Gajim are listed in About > Shortcuts.
Gajim’s Flatpak version also had some updates this month, including a bug fix for opening links and an update for plugins and their dependencies. Both automatic status messages and screensaver detection have been reworked for the Flatpak version.
In order to be able to fix bugs it is often necessary for developers to gather debug logs. It is possible to display such a debug log when Gajim is being started via terminal (using the right parameters). Because this is a bit technical and because we would like to enable every user to gather these logs, Gajim has a preference setting (Preferences > Advanced) to store debug logs in a file. To further simplify these steps we added a button to quickly navigate to the folder containing stored debug logs.
In this month a lot of code has been cleaned up. This includes the removal of unused code, as well as fixing many linting errors, making the code more comprehensible.
What else happened
- Removed ReStructured text (rst) to XHTML conversion feature
- Removed setting for custom ‘open with’ applications (system’s default we be used instead)
- Removed remains of SI file transfer code (this method is deprecated)
- Removed the ability to choose a resource when opening a chat using the context menu (#8471)
- Gajim’s logs database (where chat history is saved among others) received some performance improvements and will now store both message and XHTML data
- Opening files from within Gajim has been reworked
- A certificate’s issue/expiry date is now displayed in the user’s locale
- Gajim’s XML console now features a search bar (Ctrl+F to search, F3 to search next)
- Bug fix for private messages wrongly appearing in a group chat’s chat window (#9488)
- Gajim now uses bare JIDs when sending messages to a group of contacts (#9738)
- When blocking a group of contacts, the correct dialog will be shown (#7524)
- Fixes for import warnings (#9874)
This month brought many bug fixes for Gajim’s OMEMO plugin. Receiving a message which was not encrypted for the user’s device will now trigger an error message (#452). A bug where an archive (MAM) message could not be mapped to a JID (#457) and an error in the plugin’s configuration dialog (happening if no account is available) have been fixed. Moreover, Gajim will now detect all group chat configuration changes and will be more consistent about OMEMO capable group chats (#445). In addition to viewing an OMEMO encrypted file, it is now also possible to open the folder containing the file (#430, #425).
Changes in python-nbxmpp
While working on Gajim’s account removal dialog, python-nbxmpp received support for In-Band Registration (XEP-0077) and further bug fixes for stanza handling.
One of the benefits of using XMPP is freedom of choice. Users are free to choose which server they would like to use (or even host one by themselves), and they can choose from many available clients. Sometimes this freedom of choice also comes with clients not behaving after protocol specifications. Gajim has to deal with that, of course. One of these cases where a client was sending malformed stanzas has been fixed recently (#89).