349 Commits
Author SHA1 Message Date
Julian Schmidhuber cd9a9265cc Merge branch 'potentially-fix-panic' into 'master'
Fix sending a message to UUID-Only channels

See merge request schmiddi-on-mobile/flare!207
2026-03-30 08:00:39 +00:00
Julian Schmidhuber ff4c37d9a5 fix(channel): Fix that the "self" is not "is-self"
The core issue seems to be contacts not syncing (which has been observed
recently); in the case that the contacts were not available and channels
were constructed from the UUID, "is-self" was always "false".
2026-03-29 19:09:10 +02:00
Julian Schmidhuber 7083796150 hotifx(send): Fix sending a message to UUID-Only channels
As reported on Matrix. I'm not sure whether this is really the underlying
cause, but it it is certainly a wrong behavior.
2026-03-29 13:29:01 +02:00
Kamil Wolter ad3627ce5f ui(): Align UX to ground truth regarding contacts sync 2026-03-24 13:42:41 +00:00
Julian Schmidhuber 68397e839b feat(send): Immediately send message
This fixes #101.
2026-03-12 19:22:38 +01:00
Julian Schmidhuber b1b8c58032 fix(typing): Fix removal of typing notifications 2026-03-12 18:07:20 +01:00
Julian Schmidhuber 10d4a0f9e8 feat(notifications): Don't notify messages read on other devices
Fixes #58. Code is pretty ugly.
2026-03-12 15:33:07 +01:00
Julian Schmidhuber 9892e45f8d feat(group): Add typing notifications for groups
This fixes #255. The code is very ugly and not that efficient, but
probably can't do better than that without upstream changes.
2026-03-11 19:32:58 +01:00
Julian Schmidhuber a46f881e65 ui(messages): Animate first unread message when switching to channel
Fixes #10.
2026-03-11 18:37:43 +01:00
Julian Schmidhuber b87e69305f feat(channel-list): Add unread indicator in the channel list
Fixes #283.
2026-03-10 14:22:19 +01:00
Julian Schmidhuber 1e97f27c4a screenshot(): Prepare screenshot for 0.19.0 release 2026-03-08 14:19:17 +01:00
Julian Schmidhuber 730b8bd07c feat(notification): When clicking on a notification, activate the corresponding channel
Closes #280.
2026-03-08 11:21:15 +01:00
Julian Schmidhuber c01a9cee72 fix(channel-list): Fix duplicated channel when receiving messages at startup 2026-03-08 11:21:15 +01:00
Julian Schmidhuber ed788188f9 fix(preferences): Mark app as dbus activatable for background request
We have a .service-file, so I would assume that it is activatable.
2026-03-08 11:21:15 +01:00
Julian Schmidhuber 24d8358c5c ui(shortcuts): Port to the libadwaita shortcuts dialog 2026-03-08 11:21:14 +01:00
Julian Schmidhuber 0edc509a42 ui(message): Decrease message spacing for messages sent in quick succession
Closes #235.
2026-03-08 11:21:14 +01:00
Julian Schmidhuber a7ab3799af feat(startup): Add startup screen
This fixes #118 and #126.
2026-03-04 17:26:20 +01:00
Julian Schmidhuber fe52188108 fix(reactions): Potential fix for some reactions not being received 2026-03-03 14:39:59 +01:00
Julian Schmidhuber cd8a8f3216 fix(channel-list): Fix activating channel with keyboard shortcut not changing the selected channel 2026-03-02 19:47:17 +01:00
Julian Schmidhuber 30277ec272 fix(message): Fix mentions not sometimes showing up in text messages 2026-03-02 19:34:23 +01:00
Julian Schmidhuber 7677f20467 fix(message): Fix reactions not showing up when loading channel multiple times 2026-03-02 19:24:29 +01:00
Julian Schmidhuber 794c11c94e ui(messages): Automatically focus the message input when activating a channel 2026-03-02 19:15:42 +01:00
Julian Schmidhuber fabe3ad515 hotfix(): Fix for Flare not starting anymore
Fixes #289 and #290.
See related upstream MRs:

- https://github.com/whisperfish/libsignal-service-rs/pull/405
- https://github.com/whisperfish/libsignal-service-rs/pull/406
- https://github.com/whisperfish/libsignal-service-rs/pull/407
- https://github.com/whisperfish/libsignal-service-rs/pull/408
- https://github.com/whisperfish/libsignal-service-rs/pull/409
- https://github.com/whisperfish/presage/pull/369
- https://github.com/whisperfish/presage/pull/375
- https://github.com/whisperfish/presage/pull/377
- https://github.com/whisperfish/presage/pull/378
- https://github.com/whisperfish/presage/pull/379

This depends on a patched version of sqlx due to some reasons I don't
completely understand (something about requiring BoringSSL for a feature
Flare does not yet use, but will likely use in the future).
2026-03-01 16:31:14 +01:00
Julian Schmidhuber 827793d847 hotfix(): Fix crash in the backend
See https://gitlab.com/schmiddi-on-mobile/flare/-/issues/288#note_3080502435.
2026-02-13 10:26:40 +01:00
Julian Schmidhuber ae22929dd5 deps(presage): Update presage 2026-02-12 15:22:21 +01:00
Julian Schmidhuber 4a10d8cfdb fix(manager-thread): Wait for the queue empty signal before allowing to send
Potentially related to #288.
2026-02-09 11:34:27 +01:00
Julian Schmidhuber 856e3656e3 chores(deps): Update presage and libsignal to the websocket update
This was a bigger update upstream, but has worked fine for me for the
last week or so.
2026-02-09 11:34:27 +01:00
Julian Schmidhuber a5b27fe20e fix(primary): Fixes for the primary device mode
See my upstream PRs https://github.com/whisperfish/presage/pull/352 and
https://github.com/whisperfish/libsignal-service-rs/pull/383.
2026-01-09 15:26:04 +01:00
Julian Schmidhuber 6859a3d54b chores(deps): Update Rust dependencies
The biggest annoyance was gtk-rs requiring many more @implements for some
objects. Also need to update gdk-pixbuf for blurhash-rs.
2025-12-14 19:01:39 +01:00
Julian Schmidhuber 70df7e692d fix(unlink,store): Fix unlinking the device, and the store not being encrypted
The reason for unlinking being broken is twofold:
- Upstream presage incorrectly implemented clearing the store, or in case
  of clearing messages and profiles did not implement clearing it at all.
  This is fixed in <https://github.com/whisperfish/presage/pull/340>.
- The store implementation is now asynchronous, which means that it can
  happen that the window closes (and therefore also the application
  finishes) before clearing the store actually finished executing. This
  was fixed by moving the window closing into the asynchronous part of
  the signal handler.

I furthermore swapped out `clear_messages`, `clear_contacts` and
`clear_groups` out by a single `clear_contents` call that does all the
things at once in presage.

Furthermore, due to an upstream fix <https://github.com/whisperfish/presage/pull/345>,
the store is now actually encrypted, instead of having an unencrypted
sqlite store.
2025-11-30 13:16:58 +01:00
Julian Schmidhuber 9f7b7f23f0 chores(clippy): Fix clippy lints 2025-11-20 14:11:55 +01:00
Julian Schmidhuber 2887ebd771 fix(backend): Partial fix for messages loading a long time if backend busy
If the backend is busy, e.g. downloading attachments, this would block
the entire backend thread as it cannot handle multiple commands at the
same time (it will directly await on executing the first command, and
only afterwards handle the second one). Fixing this problem is very
difficult as the presage::Manager cannot be sent between threads. One
therefore needs to use tokio::task::LocalSet for the fix, which runs the
futures on the current tokio thread. This still leads to problems though
as many functions in the manager require mutable (and therefore
exclusive) access to the manager. There is no good way to fix it except
for wrapping the manager in a RwLock (I have chosen to use one from
tokio, as using the one in std would likely lead to clippy issues with
hold locks accross await points). This is only a partial fix though, if
some method requires mutable access to the manager, this still blocks
every other method from executing. But it should at least fix the most
serious contenders, like downloading attachments. I don't know a better
fix at this time.

Potentially related to #271.
2025-10-19 16:03:17 +02:00
Julian Schmidhuber 5bb693a3d3 chores(manager-thread): Rework restarting when the network changes
Previously, we restarted the manager loop whenever the device wakes up
from suspend. This required additional permissions. Instead, we can
restart the manager loop whenever the network changes to the "available"
state.
2025-10-13 14:10:06 +02:00
Julian Schmidhuber 11baa9bbbc fix(preedit): Implemented support for preedit
This fixes #272.
2025-10-09 14:03:16 +02:00
Julian Schmidhuber f3c3c03d8b chores(clippy): Fix clippy lints
Mostly merging if-let-chains into one, which was previously not possible.
2025-10-08 16:55:02 +02:00
Julian Schmidhuber 4a79f7c5cb chores(deps): Update all dependencies and the flake 2025-10-08 16:55:02 +02:00
Julian Schmidhuber ce2f0722d4 fix(profile): Fix profile name not displayed correctly
Fixes #248 and #263. I'm not completely sure what the cause of this issue is, but
presage sometimes overwrites a contact with an empty contact except for
the phone number which is set. This in particular unsets the profile key,
which we use to fetch profile information. For some reason, presage also
stores the profile key in a separate table. We can get our profile key
from there in case it is unset from a contact.
2025-07-18 11:34:29 +02:00
Julian Schmidhuber 7750694ec4 chores(presage)!: Update the presage store to sqlite
This updates the underlying store used by presage from sled to sqlite.
This change is not backwards compatible, as there currently exists no
migration between the two stores.

While the main reason behind the change from sled to sqlite was, at least
in my eyes, the features which could be implemented using a real
database, the upstream store will still not allow for such features as
there is still binary data stored inside the database, instead of
structured data like I wanted to have. I raised the concern upstream, but
it was mentioned that such a change could be done in the future.

Porting Flare to this new store required a few fixes from my side, which
I contributed upstream in the following PR: https://github.com/whisperfish/presage/pull/321.
The change also required some bigger changes from the Flare side, as
sqlx (the crate presage uses to interface with sqlite) requires a tokio
runtime, and could therefore lead to crashes if the store was used from
the glib thread. That is why I wrapped all (at least I hope I did not
miss any) calls to the store and internal manager in a tspawn. Some of
those would maybe not be required, but better be on the save side in case
the functions of presage change to access the store where they previously
did not.

I also introduced a new error in case creation of the folder holding
the database failed. There is also still one potential to panic in case
this path is not UTF-8, but I don't care about that right now.
Furthermore, presage changed the order of messages being returned from
incrementing timestamps to decrementing timestamps, I therefore had to
throw away iterator reversal I did in Flare. Other than those changes,
the rest of this commit pretty much only replaces references from the
sled store to the sqlite store.
2025-07-18 11:34:29 +02:00
Julian Schmidhuber edf111fbca chores(clippy): Fix clippy lints
This fixes warnings created in the CI due to clippy updates. The only
lint I had to fix was inserting variables into their respective format
strings.
2025-07-07 16:50:09 +02:00
Julian Schmidhuber 9c7d4c063e chores(clippy): Fix clippy lint 2025-06-14 10:23:43 +02:00
Julian Schmidhuber 5b110d64c9 chores(fmt): Run cargo format with new Rust version 2025-06-14 10:13:40 +02:00
Julian Schmidhuber 824fab6779 fix(message): Fix some bugs regarding mentions
This fixes two issues regarding mentions. The first one is that mentions
are actually not highlighted anymore in the text. This probably broke
with the introduction of the special label for messages which allows to
have the timestamp the message was sent at in-line with the actual
message. The bug was caused by overwriting the message attributes when
setting the label, instead of merging the attributes caused by mentions
and the attribute for blank space reserved for the message timestamp. To
fix the issue, the label now saves the message attributes being set and
adds those attributes to the attributes of the underlying label when it
is updated.

The second bug was that message attributes in quotes were using the
attributes of the quoting message instead of the quote itself. The fix is
just a simple change in the blueprint file, taking the attributes for the
label from the quoted message instead of the quoting message.
2025-06-02 18:35:56 +02:00
Julian Schmidhuber 4eb7ea4d88 chores(spelling): Fix spelling of error message
Fixes #261.
2025-05-29 16:19:20 +02:00
Julian Schmidhuber d90b5f734a fix(message): Fix emoji message not showing the header
This can be confusing as one could in that case interpret the message
being sent from a different sender in a group chat. The fix was just
removing a single line of code, which probably got included by accident.
2025-05-24 17:25:26 +02:00
Julian Schmidhuber 50cdfedf20 Merge branch 'stickers' into 'master'
Implement receiving stickers

Closes #237

See merge request schmiddi-on-mobile/flare!175
2025-04-22 14:09:38 +00:00
Julian Schmidhuber fa063e6db4 chores(about): Initialize about window from metainfo
This is to make it similar to other projects of Schmiddi on Mobile.
2025-04-22 15:23:17 +02:00
Julian Schmidhuber 6f67831821 feat(stickers): Implement receiving stickers
Implement receiving stickers, which can just be handled as attachments.
Some notes:

- Animated stickers do not seem to work for me.
  But I am not sure whether GIFs work in general for Flare right now,
  I remember that they did not work sometimes.
- A sticker pack I had did not set a content type for its files.
  I just hard-coded image/webp (which was the file type) for such files.
  This is extremely ugly, one may want to detect what the content type
  is in such cases. Some sticker packs also mention a completely
  different mime type to what they actually are, but this does not need
  to be handled as gtk::Picture handles that fine.
- Loading webp into a pixbuf does not work by default on the nix build.
  I needed to add an environmental variable to the flake to make it work.
2025-04-22 14:46:01 +02:00
Julian Schmidhuber 058802f3f0 fix(receive): Keep receiving messages even after an error occurred 2025-03-08 13:31:38 +01:00
Julian Schmidhuber a11dfecea2 fix(networking): Ignore one more networking error 2025-03-08 13:30:43 +01:00
Julian Schmidhuber 444c5e3b1b Merge branch 'remove-feedbackd' into 'master'
Let notification daemon handle feedback

See merge request schmiddi-on-mobile/flare!171
2025-03-06 18:09:38 +00:00