Development News December 2019

Gajim development news

Development News December 2019

Gajim development news

This is the third 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. December’s development brought improvements to HTTP file transfers, contact list tooltips, and more. Feel free to join to discuss with us.

Changes in Gajim

The replacement of Gajim’s old message dialog system (see November’s development news) has been completed this month. We are still in the process of removing dialogs where they are not necessary, but this is already a good step forward. To give an example for an unnecessary message dialog: when a contact confirms your subscription request, a message dialog with a single OK button would appear to inform you about that event. Instead, Gajim will now issue a simple notification (which is less intruding).

For a long time now, you could hover a group chat in Gajim’s contact list and it would display a tooltip with basic information about that chat. In the past that tooltip used to display the group chat’s topic as well (and it did not shorten the text). We decided to replace the topic with the group chat’s description, if given. The topic can still be viewed by opening the group chat’s information page. Additionally, limits for text length have been set for every information, resulting in a compact tooltip.

For some actions, Gajim needs an assistant-like process to guide users through multiple steps of input. Gajim now features an extensible assistant for this purpose. Two workflows have already been migrated to the new assistant: password change and account removal. When removing an account for example, users may choose if they want to remove it locally or entirely, meaning both locally and from the server. This is a dynamic process where steps may go wrong (e.g. server does not offer account removal, connection lost, …) or additional user input would be required. Using the new assistant enables Gajim to show options, progress, errors and so on within a single window without using additional dialogs. The next action to be migrated will be the account creation wizard, a crucial part of user onboarding.

For file transfers via HTTP File Upload (XEP-0363), as well as other HTTP downloads and uploads, Gajim has been using python threads for a long time. This hasn’t proven to work in every case, sometimes resulting in GUI freezes. In order to make HTTP transfers work asynchronously, Gajim now makes use of the ’libsoup’ library. While working on this, the code around file transfers has been simplified as well. In the future this should also enable users to set up proxies for HTTP connections (e.g. URL image preview, plugin installer).

What else happened

  • Fixed bugs in message input where long messages with no line breaks were not fully visible (#8980, #9574)
  • Fixed bug in serverless messaging (#9926)
  • ‘Start Chat’ and ‘Create Group Chat’ menu items are now disabled when the user is not connected
  • Closing a chat with unread messages will now show a dynamic dialog message, taking history settings into account
  • Improved Audio/Video source selection in preferences

In an ongoing effort to improve code quality by tightening pylint rules, many linting warnings and errors have been fixed.

Plugin updates

Gajim’s URL image preview plugin has been adapted to HTTP file transfer changes. This also included a complete rework of the plugin, which also fixed #456 and #320. In the past, the plugin was able to display geo:-URIs (links to locations) on a map using either Google Maps or OpenStreetMap via Map Quest. Today, both services are rate-limited or require a payed membership, rendering the plugin’s use of these services useless. When receiving a geo:-URI, the preview plugin will now display a clickable map icon which opens the web browser. Most browsers do support these links by opening a map service using the supplied coordinates.

Gajim’s OMEMO plugin has been adapted to the HTTP file transfer changes as well, which also fixed #467 and #419.

Furthermore, two plugins received a complete rework: Clickable Nicknames (#454) and Message Box Size.

Changes in python-nbxmpp

Support for HTTP File Upload (XEP-0363) has been added to python-nbxmpp.