Skip to content

Commit 4dbd1a3

Browse files
authored
Merge branch 'main' into krille/use-rhttp
2 parents bfe459f + 07a2c9a commit 4dbd1a3

File tree

25 files changed

+9721
-9271
lines changed

25 files changed

+9721
-9271
lines changed

.github/workflows/integrate.yaml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,16 @@ jobs:
8282
- run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
8383

8484
build_debug_ios:
85-
runs-on: macos-latest
85+
runs-on: macos-15
8686
steps:
8787
- uses: actions/checkout@v5
8888
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
8989
- uses: subosito/flutter-action@v2
9090
with:
9191
flutter-version: ${{ env.FLUTTER_VERSION }}
9292
cache: true
93-
- name: Setup Xcode version
94-
uses: maxim-lobanov/[email protected]
95-
with:
96-
xcode-version: latest
93+
- name: Use Xcode 16.4
94+
run: sudo xcode-select --switch /Applications/Xcode_16.4.app
9795
- run: brew install sqlcipher
9896
- uses: moonrepo/setup-rust@v1
9997
- name: Add Firebase Messaging

.github/workflows/release.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ jobs:
109109
strategy:
110110
matrix:
111111
arch: [ x64, arm64 ]
112-
runs-on: ${{ matrix.arch == 'arm64' && 'self-hosted' || 'ubuntu-latest'}}
112+
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest'}}
113113
steps:
114114
- uses: actions/checkout@v5
115115
- run: cat .github/workflows/versions.env >> $GITHUB_ENV

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
## v2.1.1
2+
Bugfix release to trigger flatpak arm64 release again.
3+
4+
- build: (deps): bump actions/checkout from 4 to 5 (dependabot[bot])
5+
- build: (deps): bump app_links from 6.4.0 to 6.4.1 (dependabot[bot])
6+
- build: (deps): bump file_picker from 10.2.3 to 10.3.1 (dependabot[bot])
7+
- build: (deps): bump msix from 3.16.10 to 3.16.12 (dependabot[bot])
8+
- build: (deps): bump package_info_plus from 8.3.0 to 8.3.1 (dependabot[bot])
9+
- build: (deps): bump share_plus from 11.0.0 to 11.1.0 (dependabot[bot])
10+
- build: Also build linux on github runners (Christian Kußowski)
11+
- build: Update macos podfile (Christian Kußowski)
12+
- chore: Follow up subtitle font style (Christian Kußowski)
13+
- chore: Slightly adjust font sizes and design (Christian Kußowski)
14+
- chore(translations): Translated using Weblate (Chinese (Traditional Han script)) (miullu)
15+
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
16+
- chore(translations): Translated using Weblate (Polish) (Piotr Orzechowski)
17+
- feat: support xdp selector for linux (ShootingStarDragons)
18+
- fix: Follow up fix rectangle avatars (Christian Kußowski)
19+
- refactor: Remove broken push error reporter (Christian Kußowski)
20+
121
## v2.1.0
222
FluffyChat 2.1.0 brings support for room version 12 and a lot of bugfixes, updated translations and performance improvements. Also chat state events are now collapsed by default.
323

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
FluffyChat 2.1.0 brings support for room version 12 and a lot of bugfixes, updated translations and performance improvements. Also chat state events are now collapsed by default.
1+
Fixes broken error reporter for push notifications and wrong clipped avatars. Also updates dependencies and translations.

ios/Localizable.xcstrings

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
{
2+
"sourceLanguage" : "en",
3+
"strings" : {
4+
"%lld unread messages" : {
5+
"comment" : "Default notification title",
6+
"localizations" : {
7+
"de" : {
8+
"variations" : {
9+
"plural" : {
10+
"one" : {
11+
"stringUnit" : {
12+
"state" : "translated",
13+
"value" : "Ungelesene Nachricht"
14+
}
15+
},
16+
"other" : {
17+
"stringUnit" : {
18+
"state" : "translated",
19+
"value" : "%lld ungelesene nachrichten"
20+
}
21+
}
22+
}
23+
}
24+
},
25+
"en" : {
26+
"variations" : {
27+
"plural" : {
28+
"one" : {
29+
"stringUnit" : {
30+
"state" : "translated",
31+
"value" : "Unread message"
32+
}
33+
},
34+
"other" : {
35+
"stringUnit" : {
36+
"state" : "new",
37+
"value" : "%lld unread messages"
38+
}
39+
}
40+
}
41+
}
42+
}
43+
}
44+
},
45+
"New message - open app to read" : {
46+
"comment" : "Default notification body",
47+
"localizations" : {
48+
"de" : {
49+
"stringUnit" : {
50+
"state" : "translated",
51+
"value" : "Neue Nachricht - App öffnen zum lesen"
52+
}
53+
}
54+
}
55+
}
56+
},
57+
"version" : "1.0"
58+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>NSExtension</key>
6+
<dict>
7+
<key>NSExtensionPointIdentifier</key>
8+
<string>com.apple.usernotifications.service</string>
9+
<key>NSExtensionPrincipalClass</key>
10+
<string>$(PRODUCT_MODULE_NAME).NotificationService</string>
11+
</dict>
12+
</dict>
13+
</plist>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.application-groups</key>
6+
<array>
7+
<string>group.im.fluffychat.app</string>
8+
</array>
9+
</dict>
10+
</plist>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//
2+
// NotificationService.swift
3+
// Notification Extension
4+
//
5+
// Created by Christian Pauly on 26.08.25.
6+
//
7+
8+
import UserNotifications
9+
import os
10+
11+
class NotificationService: UNNotificationServiceExtension {
12+
13+
var contentHandler: ((UNNotificationContent) -> Void)?
14+
var bestAttemptContent: UNMutableNotificationContent?
15+
16+
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
17+
self.contentHandler = contentHandler
18+
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
19+
20+
if let bestAttemptContent = bestAttemptContent {
21+
// Uncomment to read the push message payload:
22+
// os_log("[FluffyChatPushHelper] New message received: %{public}@", log: .default, type: .error, bestAttemptContent.userInfo)
23+
os_log("[FluffyChatPushHelper] New message received")
24+
25+
guard let roomId = bestAttemptContent.userInfo["room_id"] as? String,
26+
let eventId = bestAttemptContent.userInfo["event_id"] as? String else {
27+
os_log("[FluffyChatPushHelper] Room ID or Event ID is missing!")
28+
let emptyContent = UNMutableNotificationContent()
29+
contentHandler(emptyContent)
30+
return
31+
}
32+
bestAttemptContent.threadIdentifier = roomId
33+
34+
if
35+
let jsonString = bestAttemptContent.userInfo["counts"] as? String,
36+
let jsonData = jsonString.data(using: .utf8),
37+
let jsonMap = try? JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any],
38+
let unread = jsonMap["unread"] as? Int {
39+
bestAttemptContent.title = String(
40+
localized: "\(unread) unread messages",
41+
comment: "Default notification title"
42+
)
43+
bestAttemptContent.badge = NSNumber(integerLiteral: unread)
44+
}
45+
46+
// TODO: Download and decrypt event to display a better body:
47+
bestAttemptContent.body = String(
48+
localized: "New message - open app to read",
49+
comment: "Default notification body"
50+
)
51+
52+
contentHandler(bestAttemptContent)
53+
}
54+
}
55+
56+
override func serviceExtensionTimeWillExpire() {
57+
// Called just before the extension will be terminated by the system.
58+
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
59+
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
60+
contentHandler(bestAttemptContent)
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)