Development News December 2021 and January 2022

Gajim development news

Development News December 2021 and January 2022

Gajim development news

Work on Gajim 1.4 is making big steps forward! After nine months of developing Gajim’s new main window, the code was finally ready to be merged into the master branch. This enables automatic builds of nightlies for Linux and Windows.

Changes in Gajim

Gajim’s new main window brings many changes: a new window layout, featuring workspaces and an all new conversation view with better message styling and lots of improvements. You can read more about that in previous posts.

If you follow Gajim’s development closely, you might have noticed lots of code commits regarding type annotations. Adding type annotations in all places helps us developers to resolve issues before they surface. They make code easier to understand, help document the code, and they allow automatic checks to be run against the code while developing. Since Gajim is built upon python-gobject, the type checker has to be aware of types used an returned by GObject’s classes and methods. For this, we started to write so-called stubs: pygobject-stubs as well as ‘builder stubs’ for Glade user interface files used by Gajim.

On the server side we switched our automatic type checking from mypy to pyright, which is much faster. Since type checking can also help finding structural flaws, many places in Gajim have been refactored in the process of adding type annotations.

Another big step forward has been made for message styling. Gajim now features real-time message styling in the chat input box. The text formatting menu has been repurposed to use XEP-0393 Message Styling elements. Furthermore, message styling now has feature parity on Windows and Linux. Finally, emoji parsing for Windows has been fixed and /me message parsing works again.

Upgrading your Gajim installation on Windows should now run a lot smoother. It detects a previously installed version and runs the uninstaller automatically and silently (after you confirm, of course).

What else happened:

  • You can now use drag and drop to move chats between workspaces
  • The chat list now offers a ‘Mark as read’ menu item
  • Unread counts are stored, so you still see which message you haven’t read yet
  • Code widget has been improved for large code snippets
  • File preview now features a download progress bar
  • Improvements for moderated group chats (chat input disabled, short explanation, a new button for ‘requesting voice’)
  • New and improved group chat inviter
  • Minimum width of Gajim’s window has been reduced, so it fits better on your screen
  • It’s now possible to set custom shortcuts for some Gajim actions, for example changing Ctrl+N for starting a new chat
  • History Manager has been obsoleted: exporting and purging chat history is now possible from Gajim
  • Calls now feature echo suppression and ringing/dialing sounds thanks to @emil
  • If a server shuts down, Gajim will show a notification
  • XML Console: syntax highlighting for the XML stream
  • Removed XEP-0107 (User Mood), XEP-0108 (User Activity), and XEP-0209 (Metacontacts)

Plugin updates

Gajim’s Triggers plugin has been refactored and adapted in order to work with the new notification system.

Changes in python-nbxmpp

The Websocket implementation has been adapted to the stanza size limit currently seen in production.

As always, feel free to join to discuss with us.