v0.11.0
Added
- Tuba has moved to Codeberg and formally implemented the same AI guidelines as Loupe and libadwaita (#1650)
Moving all my repos to Codeberg was something I had planned for a while and promised my good friends involved with Codeberg years ago, but the CI situation and migration workflow wasn't that good. Until all the pieces fell into place, so this is Tuba's new home! While all the issues have moved over, the ones on GitHub will stay up at the same time, in case of missing information or having to contact users that don't have a Codeberg account (and of course the source will be mirrored over). Translations also moved to Codeberg's weblate instance.
I took this opportunity to also adopt formal LLM guidelines, following the likes of many projects under GNOME, including Loupe, libadwaita, GNOME Software and GNOME Calendar (authored by Sophie Herold, CC0). TLDR: Banned.
If there are disagreements with either decision, feel free to contact me.
- Full Mastodon quote support (#1701, #1708)
Support for non-Mastodon quotes was added to Tuba years ago and in the last few Mastodon versions, a new kind of quotes was introduced. Mastodon's quotes are concent-based that allows users to opt-out of being quoted by anyone and revoke quotes, so while they were only partially supported. Now they are fully supported, including for Scheduled/Draft posts, pasting in the composer, revoking, changing quote policy and everything else. Give quoting a post by clicking the quote button on Tuba's 0.11.0 release post or by pasting a link to it in your composer!
- Mastodon Collections (#1669)
This release includes full support for Collections; Mastodon's consent-based user lists! You can view, create, revoke consent, share, edit, report and everything else you'd expect to be able to do, using Tuba. Paste this one in a post or in search to try it out! https://floss.social/collections/116766801946848216
- Hashtag lists (#1677)
Ever wanted to combine multiple hashtags into one timeline? Well, now you can, with Hashtag Lists!
- Unifiedpush (#1689, #1744, #1760, thanks @s1m)
To receive push notifications for your accounts, Tuba needs to be running in the background and keep a few websocket connections alive. But it doesn't have to be that way, mobile phone operating systems have solved this by keeping a single connection alive and the amazing UnifiedPush project has brought this to Linux (as well as provide an alternative to the proprietary Android solution, obviously). You can read more on what makes it power efficient and how it works on its website.
- Selectable custom font size, replacing the "larger font size" setting (#1680)
When "Larger font size" is enabled, the font size of posts would increase, without affecting the rest of the UI or requiring you to change your font size system-wide. However, it felt a bit too limited over a custom font-size option, since such option would conflict with the host's default font size and relevant accessibility options. Well, you can now set a font size multiplier that will respect those, using a slider in Preferences or Ctrl-, Ctrl+, Ctrl0!
- Warning before boosting a post that has attachments without alt text (#1686)
- Custom thumbnail support for videos/audio attachments in the composer (#1596)
- Custom Emoji Picker was re-written to optimize for thousands of custom emojis (#1728)
The emoji picker for custom emojis, copied the structure and layout of the built-in unicode one. Unfortunately, it was definitely not made for loading up to 10k images at the same time, the amount of custom emojis many fedi instances have. The solution is to use recycler views, that 'recycle' widgets as you scroll, loading only a portion of them at a time. However, there's a small limitation at the moment, outside Tuba's control, that requires splitting the categories and the emojis into two different views, instead of a unified one, like the previous chooser and the built-in one.
- Profile notes are now more prominent, show the full content and are easier to edit (#1698)
- Moved to AdwShortcutsDialog (#1573)
- Match Media Viewer controls with Loupe's and animate zoom (#1682)
- Media Viewer zoom towards point instead of center (#1683)
The Media Viewer draws inspiration (and sometimes code) from Fractal and Loupe. Since the initial design, Loupe has changed the controls to a more animated and unified approach which Tuba now follows. Additionally, due to laziness, the Media Viewer would center the viewport instead of zooming towards the double clicked or pinched position. It does now, with animations too.
- More compact spacing on narrow window sizes (#1693)
- Replaced big profile views when displaying accounts with smaller more compact ones in some timelines, matching the Mastodon-web design (#1696)
- "Open Folder" action on the saved media toast (#1592)
- Android builds (#1659, thanks @sp1rit, @mar-v-in)
GTK has relatively recently added Android support. Yes, you heard that right, real Android support. It's not as straight-forward yet and many of Tuba's dependencies required patching to get them in a working state, but with the help of Pixiewood, many parts of the process are painless. Android building is now part of the CI, and while there are many much better options for Android, it opens up many opportunities and allowed me to finally understand and fix some of the annoyances and UX papercuts Linux mobile users have that can't be easily reproduced on desktop. Consider supporting Florian "sp1rit" who single-handedly made this whole thing possible! You can find the nightly builds and other Android builds of GTK apps on https://gtk4android.geopjr.dev/.
- Haiku OS support by applying the same workarounds used on non-Linux platforms (#1656, thanks @Begasus)
Begasus ported Tuba to Haiku OS!
(Image from https://mastodon-belgium.be/@begasus/116709348097899653)
- Respect content warnings of desktop push notifications (#1692)
- Poll and attachments at the same time support for the Composer on supported fedi software (#1707)
- Workflow to re-authenticate or remove accounts that had their tokens revoked by the instance (#1721)
- Regular update of post stats of a threads and notification of newly found replies (#1726, #1730)
- User confirmation before loading
UNKNOWNmedia (unhandled media types or sometimes unproxied media) from remote instances and let the Media Viewer handle them (#1731)
- Support for Mastodon's "Featured", "Media" and media replies profile toggles (#1732)
The latest Mastodon version added another set of user profile controls, tab controls. User can disable the "Featured" and "Show Media" tabs and "Hide Media Replies from the Media tab" and Tuba respects those settings and supports toggling them in the Profile Editor.
- Greatly improved focus workflow (#1740)
Since I got to try Tuba on my Android phone, one huge pain point I found was around focus. When I'd delete a post, the focus would shift to the first item of the timeline and scroll all the way to the top so it's in view. That prompted me to write a smarter focus workflow that solves that and other annoying papercuts. When a timeline finishes its initial loading, the focus will move to the first item. If the focused item gets removed it will attempt to either focus to the next item or the previous one if it was the last one.
- Proper account searching for the Advanced Search Dialog (#1747)
The advanced search dialog has a button that takes the account entry text and "auto-corrects" it by searching for it and replacing it with the first result. It has been replaced with a proper selector.
Request, the API that handled all web requests, was re-written to use a more standard and lambda-less Vala syntax and made JSON parsing completely async (#1643, thanks @bugaevc)
- Revocation of account tokens when users "Forget an account" (#1719)
- Periodically update date labels on posts (#1691)
- Support for scheduling and drafting replies and quotes (#1703)
- Button that converts a scheduled post into a draft (#1716)
- Drafts is now the default "post" button for the empty Composer and a "post" button menu entry to view drafts was added, allowing users to fill it with one of their draft posts (#1716)
- Scheduling and drafting already scheduled or drafted posts is supported now from inside the comoser, instead of just their dedicated views (#1716)
- Removed glitch-soc's local-only eyeball-emoji-based implementation now that it uses and only accepts the standard one, when the supported version matches (#1714)
- Sensitive media blurring is now done in snapshot and can be disabled, in an attempt to help unoptimized rendering backends and underpowered devices (#1722, #1742)
- Desktop push notifications now limit display names to 20 characters as to not hide the notification action and replaces empty names with the account handles (#1733)
- More compact Composer's "Post" button and earlier "narrow mode" layout as to not hide important information (#1734)
- Replaced hardcoded character limits with the ones the latest Mastodon versions announce (for profile field values, display name, bio...) (#1732)
- Favoriting hashtags (aka adding to the sidebar) doesn't require the user to first follow them anymore and can be done from inside the hashtag's timeline (#1736)
- Alphabetically sorting of hashtags and accounts (#1741)
- Author account handle below filter on filtered posts, to provide more info without revealing the actual content (#1745)
- Gracefully re-initialize accounts if the initial network state of the app was offline (#1756)
- Filters now use AdwButtonRows over header suffixes (#1685)
- More accurate message when trying to view the followers/followings of an account that hides them (#1675)
- Updated to the latest version of Clapper (#1435)
- GOTOSOCIAL was added to the InstanceFlags for GoToSocial specific features (#1762)
- Profile Editor setting for GoToSocial's RSS option (#1762)
- Combined
style,style-hcandstyle-darkinto one using the newly availableprefers-color-schemeandprefers-contrast(#1574)
- Custom LWW-enabled StatusPage-like widget to display custom emojis in display names inside the last page of the NewAccount dialog (#1591)
- CtrlS saving shortcut in the Media Viewer
Fixed
- Segfault due to a race condition when adding attachment to the composer (#1582)
- Non-default accent color on screenshots (#1577, thanks @bertob)
- 'Delete and Redraft' not preserving the replying-to status id (#1597)
- Providing form_data arrays as single values when there's only one item, causing some fedi software to fail (#1671)
- Profile fields values not handling custom emojis due to not passing them to it (#1674)
- Posts from the previous account showing up on Home after switching accounts due to a race condition (#1689)
- Composer callbacks not properly handling
ScheduledStatusobjects (#1702)
- Image orientation metadata not being applied to the preview in the Composer, for local files (#1672)
- Match post stats tab order to the same as the post action order (#1673)
- Media Viewer controls being visible while animating it back to its original spot (#1684)
- Added a missing "Cancel" button on the reschedule dialog as it has no window controls to cancel it with (#1716)
- Profile stats overflowing in some languages due to the labels accidentally not being wrapped (#1724)
- Count character graphemes for profile edit entries (#1732)
- Move the profile list editor into its own widget (#1723)
- Hashtag follow state not be reactive enough if it changes from a nested hashtag timeline (#1735)
- Another attempt at reconnecting websockets after sleep without actually checking for wakeup (#1748, #1758)
- Incorrect parameters when searching Tags that some fedi software (correctly) denies (#1762)
- Initial instance flags from the New Account Dialog not being passed to the saved account (#1762)
- Composer completion providers querying the APIs with empty captured queries (#1762)
- Profile edit dialog attempting to save with no changes and passing no content-type in that case (#1762)
- Windows 11 builds missing dependencies (#1634, #1657, thanks @shreyas-malhotra)
- Windows CI now uses ucrt instead of mingw (#1655)
- Latest GTK deprecations (#1670)
- Center Media Viewer spinners by 1px (#1676)
Package maintainers
While libunifiedpush is now an optional dependency, it's disabled by default for now. If you'd like to support it, I suggest working with the upstream to streamline packaging.
I need help maintaining the Snap, if you have what it takes, dive in.
Developer's Notes
Huge thank you to the translators! Tuba has 985 strings which requires a significant amount of work to translate; https://translate.codeberg.org/engage/tuba/
The 0.11.0 release took longer than usual to make, some features required huge codebase rewrites and I also took a break from Tuba for a while. This year has been very, very rough and I need to replace my aging and malfunctioning laptop. If you've enjoyed any of my projects or contributions, and have cash to spare, consider donating.
Otherwise, consider donating to organizations Tuba depends on: GNOME, Codeberg, elementary, Mastodon, or your fedi instance admins.
Next
Now that Tuba has finally caught up to Mastodon's latest release, I can focus on performance, older issues and feature requests. Especially on further supporting unique features of GoToSocial and other fedi software.
Full Changelog: https://codeberg.org/GeopJr/Tuba/compare/v0.10.3...v0.11.0