Merge branch 'main' into dependabot/github_actions/actions/setup-java-5

pull/2154/head
Krille-chan 1 month ago committed by GitHub
commit 5bf6039e50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -82,7 +82,7 @@ jobs:
- run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
build_debug_ios:
runs-on: macos-latest
runs-on: macos-15
steps:
- uses: actions/checkout@v5
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
@ -90,10 +90,8 @@ jobs:
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Setup Xcode version
uses: maxim-lobanov/setup-xcode@v1.6.0
with:
xcode-version: latest
- name: Use Xcode 16.4
run: sudo xcode-select --switch /Applications/Xcode_16.4.app
- run: brew install sqlcipher
- uses: moonrepo/setup-rust@v1
- name: Add Firebase Messaging

@ -1,3 +1,23 @@
## v2.1.1
Bugfix release to trigger flatpak arm64 release again.
- build: (deps): bump actions/checkout from 4 to 5 (dependabot[bot])
- build: (deps): bump app_links from 6.4.0 to 6.4.1 (dependabot[bot])
- build: (deps): bump file_picker from 10.2.3 to 10.3.1 (dependabot[bot])
- build: (deps): bump msix from 3.16.10 to 3.16.12 (dependabot[bot])
- build: (deps): bump package_info_plus from 8.3.0 to 8.3.1 (dependabot[bot])
- build: (deps): bump share_plus from 11.0.0 to 11.1.0 (dependabot[bot])
- build: Also build linux on github runners (Christian Kußowski)
- build: Update macos podfile (Christian Kußowski)
- chore: Follow up subtitle font style (Christian Kußowski)
- chore: Slightly adjust font sizes and design (Christian Kußowski)
- chore(translations): Translated using Weblate (Chinese (Traditional Han script)) (miullu)
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
- chore(translations): Translated using Weblate (Polish) (Piotr Orzechowski)
- feat: support xdp selector for linux (ShootingStarDragons)
- fix: Follow up fix rectangle avatars (Christian Kußowski)
- refactor: Remove broken push error reporter (Christian Kußowski)
## v2.1.0
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 +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.
Fixes broken error reporter for push notifications and wrong clipped avatars. Also updates dependencies and translations.

@ -0,0 +1,58 @@
{
"sourceLanguage" : "en",
"strings" : {
"%lld unread messages" : {
"comment" : "Default notification title",
"localizations" : {
"de" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ungelesene Nachricht"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "%lld ungelesene nachrichten"
}
}
}
}
},
"en" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "Unread message"
}
},
"other" : {
"stringUnit" : {
"state" : "new",
"value" : "%lld unread messages"
}
}
}
}
}
}
},
"New message - open app to read" : {
"comment" : "Default notification body",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Neue Nachricht - App öffnen zum lesen"
}
}
}
}
},
"version" : "1.0"
}

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.usernotifications.service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).NotificationService</string>
</dict>
</dict>
</plist>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.im.fluffychat.app</string>
</array>
</dict>
</plist>

@ -0,0 +1,63 @@
//
// NotificationService.swift
// Notification Extension
//
// Created by Christian Pauly on 26.08.25.
//
import UserNotifications
import os
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Uncomment to read the push message payload:
// os_log("[FluffyChatPushHelper] New message received: %{public}@", log: .default, type: .error, bestAttemptContent.userInfo)
os_log("[FluffyChatPushHelper] New message received")
guard let roomId = bestAttemptContent.userInfo["room_id"] as? String,
let eventId = bestAttemptContent.userInfo["event_id"] as? String else {
os_log("[FluffyChatPushHelper] Room ID or Event ID is missing!")
let emptyContent = UNMutableNotificationContent()
contentHandler(emptyContent)
return
}
bestAttemptContent.threadIdentifier = roomId
if
let jsonString = bestAttemptContent.userInfo["counts"] as? String,
let jsonData = jsonString.data(using: .utf8),
let jsonMap = try? JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any],
let unread = jsonMap["unread"] as? Int {
bestAttemptContent.title = String(
localized: "\(unread) unread messages",
comment: "Default notification title"
)
bestAttemptContent.badge = NSNumber(integerLiteral: unread)
}
// TODO: Download and decrypt event to display a better body:
bestAttemptContent.body = String(
localized: "New message - open app to read",
comment: "Default notification body"
)
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}

@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
@ -19,6 +19,10 @@
C1005C48261071B5002F4F32 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C1005C46261071B5002F4F32 /* MainInterface.storyboard */; };
C1005C4C261071B5002F4F32 /* FluffyChat Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C1005C42261071B5002F4F32 /* FluffyChat Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
C137635E2AD1446100A8F905 /* notification.caf in Resources */ = {isa = PBXBuildFile; fileRef = C137635D2AD1446100A8F905 /* notification.caf */; };
C14695592E642D400075F2F7 /* Notification Service Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C14695522E642D400075F2F7 /* Notification Service Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
C14695662E642E450075F2F7 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = C14695652E642E450075F2F7 /* Localizable.xcstrings */; };
C14695672E642E450075F2F7 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = C14695652E642E450075F2F7 /* Localizable.xcstrings */; };
C14695682E642E450075F2F7 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = C14695652E642E450075F2F7 /* Localizable.xcstrings */; };
C149567C25C7274F00A16396 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C149567B25C7274F00A16396 /* GoogleService-Info.plist */; };
/* End PBXBuildFile section */
@ -30,6 +34,13 @@
remoteGlobalIDString = C1005C41261071B5002F4F32;
remoteInfo = "FluffyChat Share";
};
C14695572E642D400075F2F7 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
proxyType = 1;
remoteGlobalIDString = C14695512E642D400075F2F7;
remoteInfo = "Notification Service Extension";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@ -50,6 +61,7 @@
dstSubfolderSpec = 13;
files = (
C1005C4C261071B5002F4F32 /* FluffyChat Share.appex in Embed App Extensions */,
C14695592E642D400075F2F7 /* Notification Service Extension.appex in Embed App Extensions */,
);
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
@ -81,6 +93,8 @@
C1005C49261071B5002F4F32 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
C1005C53261072D4002F4F32 /* FluffyChat Share.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "FluffyChat Share.entitlements"; sourceTree = "<group>"; };
C137635D2AD1446100A8F905 /* notification.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = notification.caf; sourceTree = "<group>"; };
C14695522E642D400075F2F7 /* Notification Service Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Notification Service Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
C14695652E642E450075F2F7 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
C149567B25C7274F00A16396 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
C149567D25C7276200A16396 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
C9EB6E6475A19949A37A2634 /* Pods_FluffyChat_Share.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FluffyChat_Share.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@ -88,6 +102,27 @@
F3778959E67CDA0CDB0D97BC /* Pods-FluffyChat Share.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FluffyChat Share.release.xcconfig"; path = "Target Support Files/Pods-FluffyChat Share/Pods-FluffyChat Share.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
C146955D2E642D400075F2F7 /* Exceptions for "Notification Service Extension" folder in "Notification Service Extension" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = C14695512E642D400075F2F7 /* Notification Service Extension */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
C14695532E642D400075F2F7 /* Notification Service Extension */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
C146955D2E642D400075F2F7 /* Exceptions for "Notification Service Extension" folder in "Notification Service Extension" target */,
);
path = "Notification Service Extension";
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
@ -105,6 +140,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
C146954F2E642D400075F2F7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@ -131,9 +173,11 @@
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
C14695652E642E450075F2F7 /* Localizable.xcstrings */,
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
C1005C43261071B5002F4F32 /* FluffyChat Share */,
C14695532E642D400075F2F7 /* Notification Service Extension */,
97C146EF1CF9000F007C117D /* Products */,
E89DCAC000D371640E94E65B /* Pods */,
075EE1BE25359E34308E0B78 /* Frameworks */,
@ -145,6 +189,7 @@
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
C1005C42261071B5002F4F32 /* FluffyChat Share.appex */,
C14695522E642D400075F2F7 /* Notification Service Extension.appex */,
);
name = Products;
sourceTree = "<group>";
@ -213,6 +258,7 @@
);
dependencies = (
C1005C4B261071B5002F4F32 /* PBXTargetDependency */,
C14695582E642D400075F2F7 /* PBXTargetDependency */,
);
name = Runner;
productName = Runner;
@ -237,13 +283,33 @@
productReference = C1005C42261071B5002F4F32 /* FluffyChat Share.appex */;
productType = "com.apple.product-type.app-extension";
};
C14695512E642D400075F2F7 /* Notification Service Extension */ = {
isa = PBXNativeTarget;
buildConfigurationList = C146955E2E642D400075F2F7 /* Build configuration list for PBXNativeTarget "Notification Service Extension" */;
buildPhases = (
C146954E2E642D400075F2F7 /* Sources */,
C146954F2E642D400075F2F7 /* Frameworks */,
C14695502E642D400075F2F7 /* Resources */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
C14695532E642D400075F2F7 /* Notification Service Extension */,
);
name = "Notification Service Extension";
productName = "Notification Service Extension";
productReference = C14695522E642D400075F2F7 /* Notification Service Extension.appex */;
productType = "com.apple.product-type.app-extension";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1240;
LastSwiftUpdateCheck = 1640;
LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
@ -254,23 +320,28 @@
C1005C41261071B5002F4F32 = {
CreatedOnToolsVersion = 12.4;
};
C14695512E642D400075F2F7 = {
CreatedOnToolsVersion = 16.4;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
de,
);
mainGroup = 97C146E51CF9000F007C117D;
preferredProjectObjectVersion = 77;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
C1005C41261071B5002F4F32 /* FluffyChat Share */,
C14695512E642D400075F2F7 /* Notification Service Extension */,
);
};
/* End PBXProject section */
@ -285,6 +356,7 @@
C149567C25C7274F00A16396 /* GoogleService-Info.plist in Resources */,
C137635E2AD1446100A8F905 /* notification.caf in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
C14695672E642E450075F2F7 /* Localizable.xcstrings in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -293,10 +365,19 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C14695682E642E450075F2F7 /* Localizable.xcstrings in Resources */,
C1005C48261071B5002F4F32 /* MainInterface.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
C14695502E642D400075F2F7 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C14695662E642E450075F2F7 /* Localizable.xcstrings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
@ -308,10 +389,14 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
@ -400,10 +485,14 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
@ -429,6 +518,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
C146954E2E642D400075F2F7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
@ -437,6 +533,11 @@
target = C1005C41261071B5002F4F32 /* FluffyChat Share */;
targetProxy = C1005C4A261071B5002F4F32 /* PBXContainerItemProxy */;
};
C14695582E642D400075F2F7 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = C14695512E642D400075F2F7 /* Notification Service Extension */;
targetProxy = C14695572E642D400075F2F7 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
@ -512,6 +613,7 @@
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
@ -604,6 +706,7 @@
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
@ -654,6 +757,7 @@
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
@ -832,6 +936,126 @@
};
name = Profile;
};
C146955A2E642D400075F2F7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "Notification Service Extension/Notification Service Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4NXF6Z997G;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Notification Service Extension/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "Notification Service Extension";
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "im.fluffychat.app.Notification-Service-Extension";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
C146955B2E642D400075F2F7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "Notification Service Extension/Notification Service Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4NXF6Z997G;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Notification Service Extension/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "Notification Service Extension";
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "im.fluffychat.app.Notification-Service-Extension";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
C146955C2E642D400075F2F7 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "Notification Service Extension/Notification Service Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4NXF6Z997G;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Notification Service Extension/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "Notification Service Extension";
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "im.fluffychat.app.Notification-Service-Extension";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Profile;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@ -865,6 +1089,16 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C146955E2E642D400075F2F7 /* Build configuration list for PBXNativeTarget "Notification Service Extension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C146955A2E642D400075F2F7 /* Debug */,
C146955B2E642D400075F2F7 /* Release */,
C146955C2E642D400075F2F7 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;

@ -102,9 +102,6 @@ abstract class FluffyThemes {
systemNavigationBarColor: colorScheme.surface,
),
),
listTileTheme: ListTileThemeData(
subtitleTextStyle: TextStyle(color: colorScheme.outline, fontSize: 14),
),
outlinedButtonTheme: OutlinedButtonThemeData(
style: OutlinedButton.styleFrom(
side: BorderSide(

@ -2400,5 +2400,83 @@
"changeGeneralChatSettings": "Endre generelle chatinnstillinger",
"@changeGeneralChatSettings": {},
"changeTheChatPermissions": "Endre chattillatelsene",
"@changeTheChatPermissions": {}
"@changeTheChatPermissions": {},
"youInvitedToBy": "📩 Du har blitt invitert via lenke til:\n{alias}",
"@youInvitedToBy": {
"placeholders": {
"alias": {
"type": "String"
}
}
},
"youInvitedBy": "📩 Du har blitt invitert av {user}",
"@youInvitedBy": {
"placeholders": {
"user": {
"type": "String"
}
}
},
"invitedBy": "📩 Invitert av {user}",
"@invitedBy": {
"placeholders": {
"user": {
"type": "String"
}
}
},
"youInvitedUser": "📩 Du inviterte {user}",
"@youInvitedUser": {
"placeholders": {
"user": {
"type": "String"
}
}
},
"youKicked": "👞 You sparket ut {user}",
"@youKicked": {
"placeholders": {
"user": {
"type": "String"
}
}
},
"youKickedAndBanned": "🙅 Du sparket og stengte ute {user}",
"@youKickedAndBanned": {
"placeholders": {
"user": {
"type": "String"
}
}
},
"countFiles": "{count} filer",
"@countFiles": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"noOtherDevicesFound": "Ingen andre enheter funnet",
"@noOtherDevicesFound": {},
"fileIsTooBigForServer": "Kan ikke sende! Serveren støtter bare vedlegg opptil {max}.",
"@fileIsTooBigForServer": {
"type": "String",
"placeholders": {
"max": {
"type": "String"
}
}
},
"fileHasBeenSavedAt": "Filen er lagret på {path}",
"@fileHasBeenSavedAt": {
"type": "String",
"placeholders": {
"path": {
"type": "String"
}
}
},
"jumpToLastReadMessage": "Hopp til sist leste melding",
"@jumpToLastReadMessage": {}
}

@ -1727,7 +1727,7 @@
},
"link": "Link",
"@link": {},
"roomHasBeenUpgraded": "Pokój zostać zaktualizowany",
"roomHasBeenUpgraded": "Pokój został zaktualizowany",
"@roomHasBeenUpgraded": {
"type": "String",
"placeholders": {}
@ -3346,7 +3346,7 @@
}
}
},
"sentVoiceMessage": "🎙️ {duration} - {sender}",
"sentVoiceMessage": "🎙️ {duration} - Wiadomość głosowa od: {sender}",
"@sentVoiceMessage": {
"type": "String",
"placeholders": {
@ -3383,5 +3383,7 @@
"customReaction": "Własna reakcja",
"@customReaction": {},
"moreEvents": "Więcej zdarzeń",
"@moreEvents": {}
"@moreEvents": {},
"declineInvitation": "Odrzuć zaproszenie",
"@declineInvitation": {}
}

@ -3349,5 +3349,14 @@
"pleaseWaitUntilInvited": "直到聊天室裡有人邀請您前,請等候。",
"@pleaseWaitUntilInvited": {},
"notificationRuleIsUserMentionDescription": "被@時通知他們。",
"@notificationRuleIsUserMentionDescription": {}
"@notificationRuleIsUserMentionDescription": {},
"countInvited": "已邀請{count}位",
"@countInvited": {
"type": "String",
"placeholders": {
"count": {
"type": "int"
}
}
}
}

@ -78,10 +78,10 @@ class ChatAppBarTitle extends StatelessWidget {
builder: (context, presence) {
final lastActiveTimestamp =
presence?.lastActiveTimestamp;
final style = Theme.of(context)
.listTileTheme
.subtitleTextStyle
?.copyWith(fontSize: 12);
final style = TextStyle(
fontSize: 12,
color: Theme.of(context).colorScheme.outline,
);
if (presence?.currentlyActive == true) {
return Text(
L10n.of(context).currentlyActive,

@ -15,7 +15,6 @@ import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_list/chat_list_view.dart';
import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
@ -421,8 +420,6 @@ class ChatListController extends State<ChatList>
_checkTorBrowser();
ErrorReporter(context).consumeTemporaryErrorLogFile();
super.initState();
}

@ -1,13 +1,9 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_highlighter/flutter_highlighter.dart';
import 'package:flutter_highlighter/themes/shades-of-purple.dart';
import 'package:matrix/matrix.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:fluffychat/config/app_config.dart';
@ -28,31 +24,6 @@ class ErrorReporter {
"HandshakeException",
};
Future<File> _getTemporaryErrorLogFile() async {
final tempDir = await getTemporaryDirectory();
return File(path.join(tempDir.path, 'error_log.txt'));
}
Future<void> writeToTemporaryErrorLogFile(
Object error, [
StackTrace? stackTrace,
]) async {
if (ingoredTypes.contains(error.runtimeType.toString())) return;
final file = await _getTemporaryErrorLogFile();
if (await file.exists()) await file.delete();
await file.writeAsString(
'[${DateTime.now().toIso8601String()}] $message - $error\n$stackTrace',
);
}
Future<void> consumeTemporaryErrorLogFile() async {
final file = await _getTemporaryErrorLogFile();
if (!(await file.exists())) return;
final content = await file.readAsString();
_onErrorCallback(content);
await file.delete();
}
void onErrorCallback(Object error, [StackTrace? stackTrace]) {
if (ingoredTypes.contains(error.runtimeType.toString())) return;
Logs().e(message ?? 'Error caught', error, stackTrace);

@ -14,7 +14,6 @@ import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/client_download_content_extension.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
@ -38,9 +37,6 @@ Future<void> pushHelper(
} catch (e, s) {
Logs().e('Push Helper has crashed! Writing into temporary file', e, s);
const ErrorReporter(null, 'Push Helper has crashed!')
.writeToTemporaryErrorLogFile(e, s);
l10n ??= await lookupL10n(const Locale('en'));
flutterLocalNotificationsPlugin.show(
notification.roomId?.hashCode ?? 0,

@ -1,5 +1,5 @@
PODS:
- app_links (1.0.0):
- app_links (6.4.1):
- FlutterMacOS
- audio_session (0.0.1):
- FlutterMacOS
@ -25,9 +25,9 @@ PODS:
- FlutterMacOS
- flutter_web_auth_2 (3.0.0):
- FlutterMacOS
- flutter_webrtc (0.12.6):
- flutter_webrtc (1.0.0):
- FlutterMacOS
- WebRTC-SDK (= 125.6422.06)
- WebRTC-SDK (= 137.7151.02)
- FlutterMacOS (1.0.0)
- geolocator_apple (1.2.0):
- Flutter
@ -37,8 +37,6 @@ PODS:
- FlutterMacOS
- package_info_plus (0.0.1):
- FlutterMacOS
- pasteboard (0.0.1):
- FlutterMacOS
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
@ -49,17 +47,14 @@ PODS:
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- SQLCipher (4.8.0):
- SQLCipher/standard (= 4.8.0)
- SQLCipher/common (4.8.0)
- SQLCipher/standard (4.8.0):
- SQLCipher (4.10.0):
- SQLCipher/standard (= 4.10.0)
- SQLCipher/common (4.10.0)
- SQLCipher/standard (4.10.0):
- SQLCipher/common
- sqlcipher_flutter_libs (0.0.1):
- FlutterMacOS
- SQLCipher (~> 4.8.0)
- SQLCipher (~> 4.10.0)
- url_launcher_macos (0.0.1):
- FlutterMacOS
- video_compress (0.3.0):
@ -69,7 +64,7 @@ PODS:
- FlutterMacOS
- wakelock_plus (0.0.1):
- FlutterMacOS
- WebRTC-SDK (125.6422.06)
- WebRTC-SDK (137.7151.02)
- window_to_front (0.0.1):
- FlutterMacOS
@ -92,12 +87,10 @@ DEPENDENCIES:
- geolocator_apple (from `Flutter/ephemeral/.symlinks/plugins/geolocator_apple/darwin`)
- just_audio (from `Flutter/ephemeral/.symlinks/plugins/just_audio/darwin`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- pasteboard (from `Flutter/ephemeral/.symlinks/plugins/pasteboard/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- record_macos (from `Flutter/ephemeral/.symlinks/plugins/record_macos/macos`)
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`)
- sqlcipher_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlcipher_flutter_libs/macos`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- video_compress (from `Flutter/ephemeral/.symlinks/plugins/video_compress/macos`)
@ -147,8 +140,6 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/just_audio/darwin
package_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
pasteboard:
:path: Flutter/ephemeral/.symlinks/plugins/pasteboard/macos
path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
record_macos:
@ -157,8 +148,6 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos
shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
sqflite_darwin:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin
sqlcipher_flutter_libs:
:path: Flutter/ephemeral/.symlinks/plugins/sqlcipher_flutter_libs/macos
url_launcher_macos:
@ -173,37 +162,35 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/window_to_front/macos
SPEC CHECKSUMS:
app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
app_links: 05a6ec2341985eb05e9f97dc63f5837c39895c3f
audio_session: eaca2512cf2b39212d724f35d11f46180ad3a33e
desktop_drop: e0b672a7d84c0a6cbc378595e82cdb15f2970a43
device_info_plus: a56e6e74dbbd2bb92f2da12c64ddd4f67a749041
dynamic_color: b820c000cc68df65e7ba7ff177cb98404ce56651
desktop_drop: 248706031734554504f939cab1ad4c5fbc9c9c72
device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76
dynamic_color: cb7c2a300ee67ed3bd96c3e852df3af0300bf610
emoji_picker_flutter: 51ca408e289d84d1e460016b2a28721ec754fcf7
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
file_selector_macos: 6280b52b459ae6c590af5d78fc35c7267a3c4b31
flutter_local_notifications: 7e5a17a1dbc00d83dc10d43c2c4c05f2ceed233c
flutter_local_notifications: 4bf37a31afde695b56091b4ae3e4d9c7a7e6cda0
flutter_new_badger: 6fe9bf7e42793a164032c21f164c0ad9985cd0f2
flutter_secure_storage_macos: 7f45e30f838cf2659862a4e4e3ee1c347c2b3b54
flutter_vodozemac: fd2ea9cb3e2a37beaac883a369811fbfe042fc53
flutter_web_auth_2: 62b08da29f15a20fa63f144234622a1488d45b65
flutter_webrtc: 377dbcebdde6fed0fc40de87bcaaa2bffcec9a88
flutter_webrtc: 0d70bd8782c19bde286dc52f766eebbea26de201
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e
just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed
package_info_plus: f0052d280d17aa382b932f399edf32507174e870
pasteboard: 278d8100149f940fb795d6b3a74f0720c890ecb7
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
record_macos: 295d70bd5fb47145df78df7b80e6697cd18403c0
share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
SQLCipher: 908f846ca79d74be4e1776b3b86c6ad9e6c0b04f
sqlcipher_flutter_libs: 72569ed27a3f8d3502571be15fdc3e28f8f8570c
SQLCipher: eb79c64049cb002b4e9fcb30edb7979bf4706dfc
sqlcipher_flutter_libs: 01ead34db27ae5e49987cae46c8a34199eb22cfe
url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
video_compress: 752b161da855df2492dd1a8fa899743cc8fe9534
video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b
wakelock_plus: 21ddc249ac4b8d018838dbdabd65c5976c308497
WebRTC-SDK: 79942c006ea64f6fb48d7da8a4786dfc820bc1db
WebRTC-SDK: d20de357dcbf7c9696b124b39f3ff62125107e4b
window_to_front: 9e76fd432e36700a197dac86a0011e49c89abe0a
PODFILE CHECKSUM: d0975b16fbdecb73b109d8fbc88aa77ffe4c7a8d

@ -1091,26 +1091,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0"
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
version: "11.0.1"
version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
version: "3.0.10"
version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "3.0.1"
license_checker:
dependency: "direct dev"
description:
@ -1920,26 +1920,26 @@ packages:
dependency: transitive
description:
name: test
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e"
url: "https://pub.dev"
source: hosted
version: "1.26.2"
version: "1.25.15"
test_api:
dependency: transitive
description:
name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
version: "0.7.6"
version: "0.7.4"
test_core:
dependency: transitive
description:
name: test_core
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa"
url: "https://pub.dev"
source: hosted
version: "0.6.11"
version: "0.6.8"
timezone:
dependency: transitive
description:
@ -2128,10 +2128,10 @@ packages:
dependency: transitive
description:
name: vector_math
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
version: "2.1.4"
video_compress:
dependency: "direct main"
description:

@ -2,7 +2,7 @@ name: fluffychat
description: Chat with your friends.
publish_to: none
# On version bump also increase the build number for F-Droid
version: 2.1.0+3542
version: 2.1.1+3543
environment:
sdk: ">=3.0.0 <4.0.0"

@ -1,6 +1,6 @@
#!/usr/bin/env bash
flutter pub add fcm_shared_isolate
flutter pub add fcm_shared_isolate:0.1.0
flutter pub get
if [[ "$OSTYPE" == "darwin"* ]]; then

@ -1,7 +1,7 @@
name: fluffychat
title: FluffyChat
base: core24
version: 2.1.0
version: 2.1.1
license: AGPL-3.0
summary: The cutest messenger in the Matrix network
description: |

Loading…
Cancel
Save