Fluffychat merge 2 (#5590)

* build: Reenable shrink resources and minify in gradle

* build: (deps): bump image from 4.6.0 to 4.7.1

Bumps [image](https://github.com/brendan-duncan/image) from 4.6.0 to 4.7.1.
- [Changelog](https://github.com/brendan-duncan/image/blob/main/CHANGELOG.md)
- [Commits](https://github.com/brendan-duncan/image/commits)

---
updated-dependencies:
- dependency-name: image
  dependency-version: 4.7.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build: (deps): bump file_picker from 10.3.7 to 10.3.8

Bumps [file_picker](https://github.com/miguelpruivo/flutter_file_picker) from 10.3.7 to 10.3.8.
- [Release notes](https://github.com/miguelpruivo/flutter_file_picker/releases)
- [Changelog](https://github.com/miguelpruivo/flutter_file_picker/blob/master/CHANGELOG.md)
- [Commits](https://github.com/miguelpruivo/flutter_file_picker/compare/v10.3.7...v10.3.8)

---
updated-dependencies:
- dependency-name: file_picker
  dependency-version: 10.3.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: Improved search

* build: Use matrix sdk vom pub.dev again

* chore: Follow up better search

* build: (deps): bump image from 4.7.1 to 4.7.2

Bumps [image](https://github.com/brendan-duncan/image) from 4.7.1 to 4.7.2.
- [Changelog](https://github.com/brendan-duncan/image/blob/main/CHANGELOG.md)
- [Commits](https://github.com/brendan-duncan/image/commits)

---
updated-dependencies:
- dependency-name: image
  dependency-version: 4.7.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: Make cross signing self sign mandatory for bootstrap

* chore: Update user device keys before creating bootstrap

* fix: Better wait for secrets after verification bootstrap

* refactor: Remove native imaging and enable web worker

* refactor: Remove unused html onfocus streams

* build: (deps): bump flutter_foreground_task from 9.1.0 to 9.2.0

Bumps [flutter_foreground_task](https://github.com/Dev-hwang/flutter_foreground_task) from 9.1.0 to 9.2.0.
- [Changelog](https://github.com/Dev-hwang/flutter_foreground_task/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Dev-hwang/flutter_foreground_task/commits)

---
updated-dependencies:
- dependency-name: flutter_foreground_task
  dependency-version: 9.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(translations): Translated using Weblate (Uzbek)

Currently translated at 99.7% (823 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uz/

* chore(translations): Translated using Weblate (Russian)

Currently translated at 99.8% (824 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ru/

* chore(translations): Translated using Weblate (Norwegian Bokmål)

Currently translated at 90.9% (750 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nb_NO/

* chore(translations): Translated using Weblate (Galician)

Currently translated at 100.0% (825 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/

* chore(translations): Translated using Weblate (Basque)

Currently translated at 99.7% (823 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/eu/

* chore(translations): Translated using Weblate (Ukrainian)

Currently translated at 100.0% (825 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/

* chore(translations): Translated using Weblate (Estonian)

Currently translated at 100.0% (825 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/

* chore(translations): Translated using Weblate (Dutch)

Currently translated at 100.0% (825 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nl/

* chore(translations): Translated using Weblate (Russian)

Currently translated at 100.0% (825 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ru/

* chore(translations): Translated using Weblate (Spanish)

Currently translated at 95.2% (788 of 827 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/es/

* chore(translations): Translated using Weblate (Spanish)

Currently translated at 96.3% (797 of 827 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/es/

* chore(translations): Translated using Weblate (Russian)

Currently translated at 100.0% (825 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ru/

* chore(translations): Translated using Weblate (Russian)

Currently translated at 100.0% (825 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ru/

* fix: Broken ruzzian plurals

* chore(translations): Translated using Weblate (Norwegian Bokmål)

Currently translated at 91.2% (753 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nb_NO/

* chore(translations): Translated using Weblate (Bengali)

Currently translated at 4.5% (38 of 827 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/bn/

* chore(translations): Translated using Weblate (French)

Currently translated at 82.3% (679 of 825 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fr/

* build: (deps): bump translations_cleaner from 0.0.5 to 0.1.0

Bumps [translations_cleaner](https://github.com/Chinmay-KB/translations_cleaner) from 0.0.5 to 0.1.0.
- [Changelog](https://github.com/Chinmay-KB/translations_cleaner/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Chinmay-KB/translations_cleaner/commits)

---
updated-dependencies:
- dependency-name: translations_cleaner
  dependency-version: 0.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(translations): Translated using Weblate (German)

Currently translated at 99.2% (821 of 827 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/de/

* chore(translations): Translated using Weblate (Estonian)

Currently translated at 100.0% (827 of 827 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/

* build: Bump version to 2.4.0

* build: (deps): bump sqflite_common_ffi from 2.3.6 to 2.3.7+1

Bumps [sqflite_common_ffi](https://github.com/tekartik/sqflite) from 2.3.6 to 2.3.7+1.
- [Commits](https://github.com/tekartik/sqflite/compare/sqflite_common_ffi_v2.3.6...sqflite_common_ffi/v2.3.7)

---
updated-dependencies:
- dependency-name: sqflite_common_ffi
  dependency-version: 2.3.7+1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(translations): Translated using Weblate (Czech)

Currently translated at 66.1% (547 of 827 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/cs/

* chore(translations): Translated using Weblate (Czech)

Currently translated at 72.7% (602 of 827 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/cs/

* chore(translations): Translated using Weblate (German)

Currently translated at 99.8% (826 of 827 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/de/

* chore: Add security.md file

* fix: Locale unlocalized strings

* build: (deps): bump matrix from 4.1.0 to 5.0.0

Bumps [matrix](https://github.com/famedly/matrix-dart-sdk) from 4.1.0 to 5.0.0.
- [Release notes](https://github.com/famedly/matrix-dart-sdk/releases)
- [Changelog](https://github.com/famedly/matrix-dart-sdk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/famedly/matrix-dart-sdk/compare/v4.1.0...v5.0.0)

---
updated-dependencies:
- dependency-name: matrix
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: Notifications on web correctly managed when tab not focused

* chore: Add changelog for android

* chore: Remove duplicated localization

* fix: Sign in label

* chore: Versionize fcm shared isolate

* build: Remove unused packag

* build: (deps): bump package_info_plus from 8.3.1 to 9.0.0

Bumps [package_info_plus](https://github.com/fluttercommunity/plus_plugins/tree/main/packages/package_info_plus) from 8.3.1 to 9.0.0.
- [Release notes](https://github.com/fluttercommunity/plus_plugins/releases)
- [Commits](https://github.com/fluttercommunity/plus_plugins/commits/package_info_plus-v9.0.0/packages/package_info_plus)

---
updated-dependencies:
- dependency-name: package_info_plus
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: Display particle animation on login page

* chore: Use fixed version of fcm shared isolate

* fix: apk crash on some platforms due new flutter version

* chore: Correct kotlin format

* fix iOS notifications

* fluffychat merge

* fluffychat merge

* fluffychat merge

* fluffychat merge

* fluffychat merge

* fluffychat merge

* add missing type annotations

* update matrix version

* fluffychat merge

* fluffychat merge

* fix notification on click actions

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Christian Kußowski <c.kussowski@famedly.com>
Co-authored-by: Krille-chan <christian-kussowski@posteo.de>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: BeMeritus <bemerituss@gmail.com>
Co-authored-by: Frank Paul Silye <frankps@gmail.com>
Co-authored-by: josé m. <correoxm@disroot.org>
Co-authored-by: xabirequejo <xabi.rn@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Co-authored-by: Jelv <post@jelv.nl>
Co-authored-by: Дмитрий Михирев <bizdelnick@gmail.com>
Co-authored-by: Kimby <kimbyqs@gmail.com>
Co-authored-by: Christian <christian-pauly@posteo.de>
Co-authored-by: Kom nake <kominak310@svcache.com>
Co-authored-by: hugues de keyzer <komputilisto@hugues.info>
Co-authored-by: nautilusx <translate@disroot.org>
Co-authored-by: Šebestová <ka.sebestova.cz@gmail.com>
This commit is contained in:
ggurdin 2026-02-10 08:01:12 -05:00 committed by GitHub
parent 48c681c074
commit e8428783e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
894 changed files with 56013 additions and 63247 deletions

1
.github/CODEOWNERS vendored
View file

@ -1,2 +1,3 @@
* @krille-chan
pubspec.* @dependabot
lib/l10n/*.arb @weblate

View file

@ -34,6 +34,28 @@ body:
placeholder: "e.g. 1.12.0"
validations:
required: true
- type: dropdown
id: platform
attributes:
label: "Platform"
description: "Select the platform where the bug occurs."
options:
- Android (PlayStore)
- Android (F-Droid)
- Android (Other)
- iOS (iPhone)
- iOS (iPad)
- Web (Chrome(ium))
- Web (Firefox)
- Web (Safari)
- Linux (Snap)
- Linux (Flatpak)
- Linux (Other)
- macOS (iOS/iPadOS version)
- macOS (Self-compiled)
- Windows (Self-compiled)
validations:
required: true
- type: input
id: platform-info
attributes:

View file

@ -1,5 +1,5 @@
blank_issues_enabled: true
blank_issues_enabled: false
contact_links:
- name: 👬 FluffyChat Community
url: https://matrix.to/#/#fluffychat:matrix.org
url: https://matrix.to/#/#fluffy-space:matrix.org
about: Please ask and answer questions here.

View file

@ -0,0 +1,50 @@
name: "Free up space"
inputs:
target:
required: true
runs:
using: "composite"
steps:
- name: Free up space
shell: bash
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/share/boost
sudo rm -rf /usr/local/share/chromium
sudo rm -rf /usr/local/share/powershell
sudo rm -rf /usr/local/share/vcpkg
sudo rm -rf /usr/local/share/miniconda
sudo rm -rf /opt/ghc
sudo rm -rf /opt/hostedtoolcache/CodeQL
sudo rm -rf /opt/hostedtoolcache/go
sudo rm -rf /opt/hostedtoolcache/Python
sudo rm -rf /opt/hostedtoolcache/node
sudo rm -rf /opt/hostedtoolcache/R
sudo rm -rf /opt/hostedtoolcache/Java
sudo rm -rf /opt/hostedtoolcache/LLVM
sudo rm -rf /opt/hostedtoolcache/Swift
sudo rm -rf /opt/hostedtoolcache/Php
sudo rm -rf /opt/hostedtoolcache/Perl
sudo rm -rf /opt/hostedtoolcache/Scala
sudo rm -rf /opt/hostedtoolcache/Julia
sudo rm -rf /opt/hostedtoolcache/Mono
sudo rm -rf /opt/hostedtoolcache/PowerShell
sudo rm -rf /opt/hostedtoolcache/Crystal
sudo rm -rf /opt/hostedtoolcache/Elixir
sudo rm -rf /opt/hostedtoolcache/Erlang
sudo rm -rf /opt/hostedtoolcache/FSharp
sudo rm -rf /opt/hostedtoolcache/Haskell
sudo rm -rf /opt/hostedtoolcache/OCaml
sudo rm -rf /opt/hostedtoolcache/Sbt
sudo rm -rf /opt/hostedtoolcache/Solidity
sudo rm -rf /opt/hostedtoolcache/VisualStudio
sudo rm -rf /opt/hostedtoolcache/WinAppDriver
sudo rm -rf /opt/hostedtoolcache/Xamarin
sudo rm -rf /opt/hostedtoolcache/Yarn
sudo rm -rf /opt/hostedtoolcache/Zephyr
sudo rm -rf /opt/hostedtoolcache/zig
sudo rm -rf /opt/hostedtoolcache/zulu
sudo rm -rf /opt/hostedtoolcache/azcopy
echo "export CARGO_BUILD_JOBS=1" >> $GITHUB_ENV

View file

@ -1,4 +1,3 @@
# #Pangea
# version: 2
# updates:
# - package-ecosystem: "pub"
@ -10,6 +9,9 @@
# commit-message:
# prefix: "build: "
# include: "scope"
# assignees:
# - "krille-chan"
# open-pull-requests-limit: 5
# - package-ecosystem: "github-actions"
# directory: "/"
# schedule:
@ -19,4 +21,3 @@
# commit-message:
# prefix: "build: "
# include: "scope"
# Pangea#

View file

@ -1,13 +1,6 @@
*Thank you so much for your contribution to FluffyChat ❤️❤️❤️*
Please make sure that your Pull Request meet the following **acceptance criteria**:
- [ ] Code formatting and import sorting has been done with `dart format lib/ test/` and `dart run import_sorter:main --no-comments`
- [ ] The commit message uses the format of [Conventional Commits](https://www.conventionalcommits.org)
- [ ] The commit message describes what has been changed, why it has been changed and how it has been changed
- [ ] Every new feature or change of the design/GUI is linked to an approved design proposal in an issue
- [ ] Every new feature in the app or the build system has a strategy how this will be tested and maintained from now on for every release, e.g. a volunteer who takes over maintainership
- [ ] I have read and understood the [contributing guidelines](https://github.com/krille-chan/fluffychat/blob/main/CONTRIBUTING.md).
### Pull Request has been tested on:

View file

@ -1,10 +1,6 @@
# #Pangea
# name: Check duplicates
on:
# on:
# issues:
# types: [opened]
@ -17,10 +13,11 @@ on:
# number: ${{ github.event.issue.number }}
# GH_TOKEN: ${{ github.token }}
# steps:
# - uses: actions/checkout@v4
# - uses: actions/checkout@v6
# - name: Check duplicates
# run: |
# issues=$(gh issue list --search '${{ env.title }}' --json number,title,url)
# title=$(printf %q "${{ env.title }}")
# issues=$(gh issue list --search '${{ title }}' --json number,title,url)
# number=${{ env.number }}
# issues_filtered=$(echo "$issues" | jq --arg num "$number" 'map(select(.number != ($num | tonumber)))')
# if [ "$(echo "$issues_filtered" | jq length)" -eq 0 ]; then
@ -29,5 +26,4 @@ on:
# issues_markdown=$(echo "$issues_filtered" | jq -r '.[] | "- [" + .title + "](" + .url + ")"')
# formatted_body=$(echo -e "@${{ env.author }}\nPossible duplication of:\n$issues_markdown")
# gh issue comment ${{ github.event.issue.number }} --body "$formatted_body"
# fi
# Pangea#
# fi

View file

@ -8,7 +8,7 @@ jobs:
code_tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- run: ./scripts/generate-locale-config.sh
- run: git diff --exit-code
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
@ -25,7 +25,7 @@ jobs:
- name: Check license compliance
run: dart run license_checker check-licenses -c licenses.yaml --problematic
- run: flutter analyze
- name: Add Firebase Messaging # Add android and analyze again
- name: Add Firebase Messaging
run: ./scripts/add-firebase-messaging.sh
- run: flutter analyze
- run: flutter test
@ -33,7 +33,7 @@ jobs:
build_debug_apk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: actions/setup-java@v5
with:
@ -43,6 +43,7 @@ jobs:
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- uses: ./.github/actions/free_up_space
- uses: moonrepo/setup-rust@v1
- name: Add Firebase Messaging
run: ./scripts/add-firebase-messaging.sh
@ -51,7 +52,7 @@ jobs:
build_debug_web:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:
@ -67,10 +68,10 @@ jobs:
build_debug_linux:
strategy:
matrix:
arch: [ arm64 ] # Pangea Disabled x64
arch: [ x64, arm64 ]
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest'}}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install git wget curl libcurl4-openssl-dev clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -y
@ -85,7 +86,7 @@ jobs:
build_debug_ios:
runs-on: macos-15
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:

View file

@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
environment: staging
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:
@ -80,7 +80,7 @@ jobs:
SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:

View file

@ -40,7 +40,7 @@ jobs:
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:
@ -64,7 +64,7 @@ jobs:
- name: Create archive
run: tar -czf pangeachat-web.tar.gz build/web/
- name: Upload Web Build
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: Web Build
path: pangeachat-web.tar.gz
@ -90,9 +90,9 @@ jobs:
env:
WEB_APP_ENV: ${{ vars.WEB_APP_ENV }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: actions/setup-java@v4
- uses: actions/setup-java@v5
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: 'zulu'
@ -131,7 +131,7 @@ jobs:
PLAY_STORE_KEYSTORE_KEY_PASSWORD: ${{ secrets.PLAY_STORE_KEYSTORE_KEY_PASSWORD }}
PLAY_STORE_CONFIG_JSON: ${{ secrets.PLAY_STORE_CONFIG_JSON }}
run: ./scripts/prepare-android-release.sh
- run: flutter build apk --release
- run: flutter build apk --release --target-platform android-arm,android-arm64
- name: Upload to release
uses: actions/upload-release-asset@v1
env:

View file

@ -1,2 +1,2 @@
FLUTTER_VERSION=3.35.3
FLUTTER_VERSION=3.38.7
JAVA_VERSION=17

1853
.gitignore vendored

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@
# This file should be version controlled.
version:
revision: "abb292a07e20d696c4568099f918f6c5f330e6b0"
revision: "fcf2c11572af6f390246c056bc905eca609533a0"
channel: "stable"
project_type: app
@ -13,11 +13,11 @@ project_type: app
migration:
platforms:
- platform: root
create_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
base_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
- platform: linux
create_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
base_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
create_revision: fcf2c11572af6f390246c056bc905eca609533a0
base_revision: fcf2c11572af6f390246c056bc905eca609533a0
- platform: android
create_revision: fcf2c11572af6f390246c056bc905eca609533a0
base_revision: fcf2c11572af6f390246c056bc905eca609533a0
# User provided section

View file

@ -1,3 +1,423 @@
## v2.4.0
FluffyChat 2.4.0 adds a new improved GUI for managing stickers with tutorials how to
easily add your own sticker packs.
It also improves the search and image gallery in chats, especially encrypted chats.
Besides that this update comes with a lot of fixes and improvements under the hood.
- feat: Create new sticker packs (krille-chan)
- feat: Edit displayname and attribution for sticker packs (krille-chan)
- feat: Improved search (Christian Kußowski)
- feat: Set usage of custom emojis and stickers (krille-chan)
- feat: Upload multiple stickers at once (krille-chan)
- build: (deps): bump actions/checkout from 5 to 6 (dependabot[bot])
- build: (deps): bump animations from 2.1.0 to 2.1.1 (dependabot[bot])
- build: (deps): bump device_info_plus from 12.2.0 to 12.3.0 (dependabot[bot])
- build: (deps): bump emoji_picker_flutter from 4.3.0 to 4.4.0 (dependabot[bot])
- build: (deps): bump file_picker from 10.3.6 to 10.3.7 (dependabot[bot])
- build: (deps): bump file_picker from 10.3.7 to 10.3.8 (dependabot[bot])
- build: (deps): bump file_selector from 1.0.4 to 1.1.0 (dependabot[bot])
- build: (deps): bump flutter_foreground_task from 9.1.0 to 9.2.0 (dependabot[bot])
- build: (deps): bump flutter_webrtc from 1.2.0 to 1.2.1 (dependabot[bot])
- build: (deps): bump go_router from 17.0.0 to 17.0.1 (dependabot[bot])
- build: (deps): bump image from 4.5.4 to 4.6.0 (dependabot[bot])
- build: (deps): bump image from 4.6.0 to 4.7.1 (dependabot[bot])
- build: (deps): bump image from 4.7.1 to 4.7.2 (dependabot[bot])
- build: (deps): bump matrix from 4.0.0 to 4.0.1 (dependabot[bot])
- build: (deps): bump shared_preferences from 2.5.3 to 2.5.4 (dependabot[bot])
- build: (deps): bump translations_cleaner from 0.0.5 to 0.1.0 (dependabot[bot])
- build: (deps): bump universal_html from 2.2.4 to 2.3.0 (dependabot[bot])
- build: Reenable shrink resources and minify in gradle (Christian Kußowski)
- build: Upgrade to flutter 3.38.4 (Christian Kußowski)
- build: Use matrix sdk vom pub.dev again (Christian Kußowski)
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
- chore(translations): Translated using Weblate (Belarusian) (Alex Katon)
- chore(translations): Translated using Weblate (Bengali) (Kom nake)
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (Creeper)
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
- chore(translations): Translated using Weblate (Croatian) (Milo Ivir)
- chore(translations): Translated using Weblate (Czech) (arxari)
- chore(translations): Translated using Weblate (Dutch) (Jelv)
- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt)
- chore(translations): Translated using Weblate (Finnish) (Ricky Tigg)
- chore(translations): Translated using Weblate (French) (hugues de keyzer)
- chore(translations): Translated using Weblate (Galician) (josé m.)
- chore(translations): Translated using Weblate (Georgian) (Nicholas Winterhalter)
- chore(translations): Translated using Weblate (Georgian) (Temuri Doghonadze)
- chore(translations): Translated using Weblate (German) (Bella)
- chore(translations): Translated using Weblate (German) (nautilusx)
- chore(translations): Translated using Weblate (Greek) (Rain4Cats)
- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
- chore(translations): Translated using Weblate (Italian) (Alessio Olivieri)
- chore(translations): Translated using Weblate (Italian) (Claudio Maradonna)
- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons)
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
- chore(translations): Translated using Weblate (Portuguese (Brazil)) (LucasMZ)
- chore(translations): Translated using Weblate (Russian) (BeMeritus)
- chore(translations): Translated using Weblate (Russian) (Christian)
- chore(translations): Translated using Weblate (Russian) (Дмитрий Михирев)
- chore(translations): Translated using Weblate (Serbian) (Luka)
- chore(translations): Translated using Weblate (Spanish) (Kimby)
- chore(translations): Translated using Weblate (Ukrainian) (Andriy Kushnir)
- chore(translations): Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
- chore(translations): Translated using Weblate (Uzbek) (BeMeritus)
- chore(translations): Translated using Weblate (Uzbek) (Maftuna Vohidjonovna)
- chore: Allow all chars for emoji search (Christian Kußowski)
- chore: Allow export of readonly sticker packs (Christian Kußowski)
- chore: delete unrelated line (ShootingStarDragons)
- chore: Display attribution for sticker packs (krille-chan)
- chore: Escape title in check duplicates job (Christian Kußowski)
- chore: ignore for now deprecated regex (Christian Kußowski)
- chore: Improve room custom emote UX (krille-chan)
- chore: Improve sticker editor UX (krille-chan)
- chore: Improve text selection color for messages (Christian Kußowski)
- chore: Improve via calculation (Christian Kußowski)
- chore: Increase padding for code blocks (Christian Kußowski)
- chore: Link how do I get stickers FAQ entry (Christian Kußowski)
- chore: Localize emoji picker (Christian Kußowski)
- chore: Make attribution url field clickable (Christian Kußowski)
- chore: Make cross signing self sign mandatory for bootstrap (Christian Kußowski)
- chore: make locale for emoji suggestions configureable (krille-chan)
- chore: Make sticker previews in editor clickable (krille-chan)
- chore: Make stickers smaller than normal image messages (Christian Kußowski)
- chore: Override sqlcipher license (Christian Kußowski)
- chore: Remove horizontal scrolling for code blocks (Christian Kußowski)
- chore: remove the userId param (ShootingStarDragons)
- chore: Replace copy action with pin event action in UI (Christian Kußowski)
- chore: Request keys for last room messages after bootstrap (krille-chan)
- chore: Simplify adaptive bottom sheet code (Christian Kußowski)
- chore: Update privacy policy links (Christian Kußowski)
- chore: Update start poll design (Christian Kußowski)
- chore: Update user device keys before creating bootstrap (Christian Kußowski)
- chore: Use license_checker from pub again (Christian Kußowski)
- chore: Wait for secrets after bootstrap verification (Christian Kußowski)
- Fix regression after new linter rules (Andriy Kushnir)
- fix: Better wait for secrets after verification bootstrap (Christian Kußowski)
- fix: Broken ruzzian plurals (Christian Kußowski)
- fix: Do not auto load history in rooms with collapsed state only (Christian Kußowski)
- fix: Do not display empty file description body (Christian Kußowski)
- fix: Do not render html in unformatted messages (Christian Kußowski)
- fix: Do not request hero users for rooms with name (Christian Kußowski)
- fix: enable users without passwords to delete their accounts by using uia request in account deletion (ggurdin)
- fix: Hide no fcm warning after dismissed (Christian Kußowski)
- fix: jump cannot work properly when there are multi users (ShootingStarDragons)
- fix: Make keyboard moving bottom sheet up (Christian Kußowski)
- fix: No description for video and audio messages displayed (Christian Kußowski)
- fix: Render not permitted html tags as text instead of hiding (Christian Kußowski)
- fix: Scrolling in fragmented timeline (Christian Kußowski)
- fix: spoiler formatting in reply (denalena)
- fix: State problem when not changing emote name (krille-chan)
- fix: Unlock app with leading 0 in pin is not possible (Christian Kußowski)
- fix: when user has multi counts,notification not works well (ShootingStarDragons)
- refactor: Adjust state event design (Christian Kußowski)
- refactor: Always open Chat Backup as page right after login (Christian Kußowski)
- refactor: Display all sticker packs in same editor with filterchips (krille-chan)
- refactor: File selector just use default FileType and remove not working zip selector (Christian Kußowski)
- refactor: Improved design and UX for sticker editor (krille-chan)
- refactor: Remove native imaging and enable web worker (Christian Kußowski)
- refactor: Remove unused feature tor browser detector (Christian Kußowski)
- refactor: Remove unused html onfocus streams (Christian Kußowski)
- refactor: Remove unused msix (Christian Kußowski)
- refactor: Remove workaround for download files (Christian Kußowski)
- refactor: Update flutter lints (Christian Kußowski)
- refactor: Update to Dart 3.10 with . shorthands (Christian Kußowski)
- refactor: Use localized emojis for suggestion input (krille-chan)
- refactor: Use own highlight rendering with working scrollbar and text selection (Christian Kußowski)
- chore: Update links to matrix spaces to avoid confusion (Andriy Kushnir)
## v2.3.0
FluffyChat v2.3.0 fixes a possible database corruption bug on Android, also fixes a
major performance leak and introduces polls and threads.
- feat: Implement polls (Christian Kußowski)
- feat: Implement threads (krille-chan)
- fix: Database corruption because notification tab isolate starts too late (Christian Kußowski)
- fix: Import sticker packs (Christian Kußowski)
- refactor: Improved UIA support for OIDC and SSO (Christian Kußowski)
- refactor: Invite users when upgrading private room (Christian Kußowski)
- build: (deps): bump cross_file from 0.3.4+2 to 0.3.5 (dependabot[bot])
- build: (deps): bump file_picker from 10.3.3 to 10.3.6 (dependabot[bot])
- build: (deps): bump go_router from 16.3.0 to 17.0.0 (dependabot[bot])
- build: (deps): bump http from 1.5.0 to 1.6.0 (dependabot[bot])
- build: (deps): bump image_picker from 1.2.0 to 1.2.1 (dependabot[bot])
- build: (deps): bump qr_code_scanner_plus from 2.0.13 to 2.0.14 (dependabot[bot])
- build: (deps): bump video_player from 2.10.0 to 2.10.1 (dependabot[bot])
- build: Switch back to stable web auth package (krille-chan)
- build: Use matrix sdk 4.0.0 (Christian Kußowski)
- build: Use secure storage from pub.dev again (krille-chan)
- chore: Remove Notification actions when using UnifiedPush (Christian Kußowski)
- chore(translations): Added translation using Weblate (Uzbek) (bahrom04)
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
- chore(translations): Translated using Weblate (Belarusian) (Alex Katon)
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
- chore(translations): Translated using Weblate (Dutch) (Jelv)
- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt)
- chore(translations): Translated using Weblate (Finnish) (Priit Jõerüüt)
- chore(translations): Translated using Weblate (Finnish) (Ricky Tigg)
- chore(translations): Translated using Weblate (French) (luneth)
- chore(translations): Translated using Weblate (Galician) (josé m.)
- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons)
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
- chore(translations): Translated using Weblate (Uzbek) (bahrom04)
- chore(translations): Translated using Weblate (Uzbek) (BeMeritus)
## v2.2.0
FluffyChat 2.2.0 introduces a new UX for spaces and adds support for restricted
join rules.
The app also now has a new design for recording voice messages including a new
pause button.
You also now see the progress when downloading files.
On web the performance for image compressing has been drastically improved. Also
the config.json file loading has finally been fixed. Please be aware that the format
has changed as the available configs are now generated automatically.
Did you know that you can set a lot of additional configs in the new config viewer
inside the app? This now supports much more options but please use with care!
On Android FluffyChat now supports notification actions (reply and mark as read) and
also now supports Android Auto integration. Please do not cause an accident when using
the app while driving!
On iOS the notifications are now localized. Stay tuned for more improvements on iOS
notifications in the next releases!
Besides that this release brings a ton of bug fixes and performance improvements and
of course updated translations. Big thanks to all the volunteers who have helped on weblate!
- feat: Add donation buttons except for PlayStore&AppStore version (Christian Kußowski)
- feat: Add iOS Notification Service Extension for localizable push notifications (Christian Kußowski)
- feat: Add notification actions (krille-chan)
- feat: Add support for restricted join rule (Christian Kußowski)
- feat: Display progress for downloading content (Christian Kußowski)
- feat: Display progress on redact events and clear archive dialogs (Christian Kußowski)
- feat: Enable native imaging for web (Christian Kußowski)
- feat: Forward notifications to Android Auto (Christian Kußowski)
- feat: Nicer record voice message UI with pause function (Christian Kußowski)
- feat: Notification actions on android (krille-chan)
- design: Improved spaces UX (Christian Kußowski)
- fix: Correctly pass through obscure text (Christian Kußowski)
- fix: Create a subdirectory in the tmp directory (Inex Code)
- fix: Cupertino text dialogs (Christian Kußowski)
- fix: Null pointer crash in chat list item (Christian Kußowski)
- chore(translations): Translated using Weblate (Arabic) (jamazi)
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
- chore(translations): Translated using Weblate (Belarusian) (Alex Katon)
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
- chore(translations): Translated using Weblate (Croatian) (Milo Ivir)
- chore(translations): Translated using Weblate (Czech) (Flibble)
- chore(translations): Translated using Weblate (Dutch) (Jelv)
- chore(translations): Translated using Weblate (Esperanto) (Anonymous)
- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt)
- chore(translations): Translated using Weblate (Finnish) (Aminda Suomalainen)
- chore(translations): Translated using Weblate (Galician) (josé m)
- chore(translations): Translated using Weblate (German) (Alex Katon)
- chore(translations): Translated using Weblate (German) (cheese1)
- chore(translations): Translated using Weblate (German) (Christian)
- chore(translations): Translated using Weblate (German) (Jana)
- chore(translations): Translated using Weblate (Greek) (Λευτέρης Τ)
- chore(translations): Translated using Weblate (Hebrew) (Anonymous)
- chore(translations): Translated using Weblate (Hungarian) (Balázs Meskó)
- chore(translations): Translated using Weblate (Indonesian) (Linerly)
- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
- chore(translations): Translated using Weblate (Japanese) (Allan Nordhøy)
- chore(translations): Translated using Weblate (Korean) (loyedison92)
- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons)
- chore(translations): Translated using Weblate (Latvian) (𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/𝕠𝕠𝕠𝕝))
- chore(translations): Translated using Weblate (Lithuanian) (Anonymous)
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
- chore(translations): Translated using Weblate (Norwegian Bokmål) (sunniva)
- chore(translations): Translated using Weblate (Polish) (Paweł Gronowski)
- chore(translations): Translated using Weblate (Portuguese (Brazil)) (LucasMZ)
- chore(translations): Translated using Weblate (Portuguese (Portugal)) (Anonymous)
- chore(translations): Translated using Weblate (Romanian) (Anonymous)
- chore(translations): Translated using Weblate (Russian) (Christian)
- chore(translations): Translated using Weblate (Russian) (Дмитрий Михирев)
- chore(translations): Translated using Weblate (Russian) (Жора Змейкин)
- chore(translations): Translated using Weblate (Serbian) (Anonymous)
- chore(translations): Translated using Weblate (Slovak) (Anonymous)
- chore(translations): Translated using Weblate (Spanish) (Kimby)
- chore(translations): Translated using Weblate (Spanish) (LucasMZ)
- chore(translations): Translated using Weblate (Turkish) (Christian)
- chore(translations): Translated using Weblate (Turkish) (Ufuk Karal)
- chore(translations): Translated using Weblate (Vietnamese) (desperadohp)
- chore: add a link to the platforms' different behaviors for the 24h format (kaanelloed)
- chore: Add ActionsPadding in column mode (Christian Kußowski)
- chore: Add close icon to snackbar in column mode (Christian Kußowski)
- chore: Adjust chat details button design (Christian Kußowski)
- chore: Adjust encryption page design (Christian Kußowski)
- chore: Adjust input bar button design (Christian Kußowski)
- chore: Adjust material dialog button design (krille-chan)
- chore: Adjust padding for status msg list (Christian Kußowski)
- chore: Adjust status header design (krille-chan)
- chore: Better display rooms without known messages (Christian Kußowski)
- chore: Better routing to space id (Christian Kußowski)
- chore: Correctly remove knockRestricted from possible join rules (Christian Kußowski)
- chore: Fix load config.json (Christian Kußowski)
- chore: Go back to pub.dev matrix dep (Christian Kußowski)
- chore: Hide restricted and knock restricted for unsupported room versions (Christian Kußowski)
- chore: Hide topic if empty and cannot be changed (Christian Kußowski)
- chore: Improve chat details icon color design (Christian Kußowski)
- chore: Improve ignore list UX (Christian Kußowski)
- chore: Leave invites and DM rooms when blocking a user (Christian Kußowski)
- chore: Make privacy url not configurable (Christian Kußowski)
- chore: Make progress indicators rounder (Christian Kußowski)
- chore: Mention rebases (Christian Kußowski)
- chore: Move emote settings button to chat popup menu (Christian Kußowski)
- chore: Move encryption button to input row (Christian Kußowski)
- chore: Revert "refactor: Make ChatListItem cache lasteventbody for better performance" (Christian Kußowski)
- chore: Translate iOS notifications into german (Christian Kußowski)
- chore: Try out refactored user device keys update method (Christian Kußowski)
- chore: Update matrix dart sdk (Christian Kußowski)
- chore: use time format based on system settings (kaanelloed)
- ci: Build only for arm64 (Christian Kußowski)
- refactor: Make ChatListItem cache lasteventbody for better performance (Christian Kußowski)
- refactor: Remove unused directories (Christian Kußowski)
- refactor: Rename models for matrix spec 1.16 (Christian Kußowski)
- refactor: Replace flutter typeahead with autocomplete to fix (Christian Kußowski)
- refactor: Use AppSettings enum based configuration everywhere and fix load from json on web (Christian Kußowski)
- build: Flutter upgrade 3.35.5 (Christian Kußowski)
- build: Matrix version 3.0.0 (Christian Kußowski)
- build: Remove dependency for telephony (Christian Kußowski)
- build: Remove openssl dependency (Christian Kußowski)
- build: Use correct fcm_shared_isolate version (Christian Kußowski)
- build: Use correct version of vodozemac for web build (Christian Kußowski)
## 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.
- feat: Collapse all state events by default (Christian Kußowski)
- feat(linux/notify): support avatar icon (ShootingStarDragons)
- build: (deps): bump archive from 3.6.1 to 4.0.7 (dependabot[bot])
- build: (deps): bump chewie from 1.11.3 to 1.12.1 (dependabot[bot])
- build: (deps): bump desktop_drop from 0.4.4 to 0.6.1 (dependabot[bot])
- build: (deps): bump device_info_plus from 10.1.2 to 11.5.0 (dependabot[bot])
- build: (deps): bump dynamic_color from 1.7.0 to 1.8.1 (dependabot[bot])
- build: (deps): bump file_picker from 10.2.0 to 10.2.1 (dependabot[bot])
- build: (deps): bump file_picker from 8.3.7 to 10.2.0 (dependabot[bot])
- build: (deps): bump flutter_foreground_task from 6.5.0 to 9.1.0 (dependabot[bot])
- build: (deps): bump flutter_local_notifications from 19.3.0 to 19.4.0 (dependabot[bot])
- build: (deps): bump flutter_map from 6.2.1 to 8.1.1 (dependabot[bot])
- build: (deps): bump flutter_map from 8.1.1 to 8.2.1 (dependabot[bot])
- build: (deps): bump flutter_native_splash from 2.4.4 to 2.4.6 (dependabot[bot])
- build: (deps): bump flutter_webrtc from 0.12.12+hotfix.1 to 1.0.0 (dependabot[bot])
- build: (deps): bump geolocator from 13.0.4 to 14.0.2 (dependabot[bot])
- build: (deps): bump go_router from 15.1.2 to 16.0.0 (dependabot[bot])
- build: (deps): bump go_router from 16.0.0 to 16.1.0 (dependabot[bot])
- build: (deps): bump just_audio from 0.9.46 to 0.10.4 (dependabot[bot])
- build: (deps): bump matrix from 1.0.1 to 1.1.0 (dependabot[bot])
- build: (deps): bump mime from 1.0.6 to 2.0.0 (dependabot[bot])
- build: (deps): bump msix from 3.16.9 to 3.16.10 (dependabot[bot])
- build: (deps): bump permission_handler from 11.4.0 to 12.0.1 (dependabot[bot])
- build: (deps): bump pretty_qr_code from 3.4.0 to 3.5.0 (dependabot[bot])
- build: (deps): bump share_plus from 10.1.4 to 11.0.0 (dependabot[bot])
- build: (deps): bump sqflite_common_ffi from 2.3.5 to 2.3.6 (dependabot[bot])
- build: (deps): bump sqlcipher_flutter_libs from 0.6.6 to 0.6.7 (dependabot[bot])
- build: (deps): bump unifiedpush from 5.0.2 to 6.0.2 (dependabot[bot])
- build: (deps): bump url_launcher from 6.3.1 to 6.3.2 (dependabot[bot])
- build: Update Flutter 3.32.8 (Christian Kußowski)
- build: Upgrade emoji picker flutter (Christian Kußowski)
- build: Use gradle in kotlin (Christian Kußowski)
- build: Use macos-latest for debug ios job (Christian Kußowski)
- chore: Add CI workflow for thank you message after issue got completed (Christian Kußowski)
- chore: Add dependabot to code owners for pubspec (Christian Kußowski)
- chore: Add ISC as compatible license to aGPLv3 (Christian Kußowski)
- chore: Better error handling for push notifications (Christian Kußowski)
- chore: Bump Flutter version in pubspec.lock (Rafał Hirsch)
- chore: do format (ShootingStarDragons)
- chore: Fix snapcraft build (krille-chan)
- chore: Nicer own reaction color design (Christian Kußowski)
- chore: Remove double quotes from screenshot filenames (Christian Kußowski)
- chore: Remove lifecyclestate logs (Christian Kußowski)
- chore: Remove unused workflow (krille-chan)
- chore: Set height for screenshots in readme (krille-chan)
- chore: Set text message max length to 16384 but make it configurable (Christian Kußowski)
- chore: Update height for screenshots in readme (krille-chan)
- chore: Update screenshots in readme (krille-chan)
- fix: Add flexible to file messages to prevent long name overflow (Kelrap)
- fix: Avoid using MediaQuery.of() (imnotlxy)
- fix: Config viewer not updating state (Christian Kußowski)
- fix: Delete database correctly after corruption (krille-chan)
- fix: Design glitches in sticker dialog (Christian Kußowski)
- fix: limit characters and lines so redact message can't be too long (avashilling)
- fix: LoadingSnackBar consistently remains visible until the upload is complete (JaWeee)
- fix: notification clicked still cannot jump (ShootingStarDragons)
- fix: open chat from notification (ShootingStarDragons)
- fix: Open database crashes on start (krille-chan)
- fix: Open external account management when trying to delete devices (Christian Kußowski)
- fix: Use retry http client (Christian Kußowski)
- fix: Workaround for reversed width and height of compressed videos sent from Android (Christian Kußowski)
- refactor: Add support for Room version 12 via matrix dart sdk update
- refactor: Better UX for accepting declining invite (krille-chan)
- refactor: ignore bubble gradient when using system high contrast mode (Christian Kußowski)
- refactor: Make notification avatars rounded (krille-chan)
- refactor: Remove unused dependencies (krille-chan)
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
- chore(translations): Translated using Weblate (Belarusian) (Alex Katon)
- chore(translations): Translated using Weblate (German) (Christian)
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
- chore(translations): Translated using Weblate (Portuguese (Brazil)) (LucasMZ)
- chore(translations): Translated using Weblate (Spanish) (Fuan200)
- chore(translations): Translated using Weblate (Tamil) (தமிழ்நேரம்)
- chore(translations): Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
- Translated using Weblate (Arabic) (LucasMZ)
- Translated using Weblate (Basque) (xabirequejo)
- Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
- Translated using Weblate (Chinese (Traditional Han script)) (miullu)
- Translated using Weblate (Czech) (LucasMZ)
- Translated using Weblate (Dutch) (Jelv)
- Translated using Weblate (English) (LucasMZ)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (German) (nautilusx)
- Translated using Weblate (Hebrew) (LucasMZ)
- Translated using Weblate (Hungarian) (LucasMZ)
- Translated using Weblate (Indonesian) (Linerly)
- Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
- Translated using Weblate (Irish) (LucasMZ)
- Translated using Weblate (Italian) (Angelo Schirinzi)
- Translated using Weblate (Italian) (LucasMZ)
- Translated using Weblate (Latvian) (Edgars Andersons)
- Translated using Weblate (Latvian) (LucasMZ)
- Translated using Weblate (Norwegian Bokmål) (Christian)
- Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
- Translated using Weblate (Persian) (Alireza Rashidi)
- Translated using Weblate (Polish) (Piotr Orzechowski)
- Translated using Weblate (Portuguese (Brazil)) (LucasMZ)
- Translated using Weblate (Portuguese) (Ana Elisa Ramos)
- Translated using Weblate (Portuguese) (LucasMZ)
- Translated using Weblate (Russian) (LucasMZ)
- Translated using Weblate (Tamil) (தமிழ்நேரம்)
- Translated using Weblate (Tamil) (LucasMZ)
- Translated using Weblate (Telugu) (LucasMZ)
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
- Translated using Weblate (Ukrainian) (LucasMZ)
- Translated using Weblate (Vietnamese) (LucasMZ)
## v2.0.0
This version migrates to Vodozemac and Matrix Dart SDK 1.0.0. This is a breaking

172
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,172 @@
# Contributing to FluffyChat
Contributions are always welcome. Yet we might lack manpower to review all of them in time.
To improve the process please make sure that you read the following guidelines carefully:
## Contributing Guidelines
1. Always create a Pull Request for any changes.
2. Whenever possible please make sure that your Pull Request only contains **one** commit. Cases where multiple commits make sense are very rare.
3. Do not add merge commits. Use rebases.
4. Every Pull Request should change only one thing. For bigger changes it is often better to split them up in multiple Pull Requests.
5. [Sign your commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits).
6. Format the commit message as [Conventional Commits](https://www.conventionalcommits.org).
7. Format (`flutter format lib`) and sort impots (`dart run import_sorter:main --no-comments`) in all code files.
8. For bigger or complex changes (more than a couple of code lines) write an issue or refer to an existing issue and ask for approval from the maintainers (@krille-chan) **before** starting to implement it. This way you reduce the risk that your Pull Request get's declined.
9. Prefer simple and easy to maintain solutions over complexity and fancy ones.
# Code Style
FluffyChat tries to be as minimal as possible even in the code style. We try to keep the code clean, simple and easy to read. The source code of the app is under `/lib` with the main entry point `/lib/main.dart`.
<!-- editorconfig-checker-disable -->
<!-- prettier-ignore-start -->
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents**
- [Directory Structure:](#directory-structure)
- [Separation of Controllers and Views](#separation-of-controllers-and-views)
- [Formatting](#formatting)
- [Code Analyzis](#code-analyzis)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<!-- prettier-ignore-end -->
<!-- editorconfig-checker-enable -->
### Directory Structure:
- /lib
- /config
- app_config.dart
- ...Constants, styles and other configurations
- /utils
- handy_function.dart
- ...Helper functions and extensions
- /pages
- /chat
- chat.dart
- chat_view.dart
- /chat_list
- chat_list.dart
- chat_list_view.dart
- ...The pages of the app separated in Controllers and Views
- /widgets
- /layouts
- ...Custom widgets created for this project
- main.dart
Most of the business model is in the Famedly Matrix Dart SDK. We try to not keep a model inside of the source code but extend it under `/utils`.
### Separation of Controllers and Views
We split views and controller logic with stateful widgets as controller where the build method just builds a stateless widget which receives the state as the only parameter. A common controller would look like this:
```dart
// /lib/controller/enter_name_controller.dart
import 'package:flutter/material.dart';
class EnterName extends StatefulWidget {
@override
EnterNameController createState() => EnterNameController();
}
class EnterNameController extends State<EnterName> {
final TextEditingController textEditingController = TextEditingController();
String name = 'Unknown';
/// Changes the name with the content in the textfield. If the textfield is
/// empty, this breaks up and displays a SnackBar.
void setNameAction() {
if (textEditingController.text.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('You have not entered your name'),
),
);
return;
}
setState(() => name = textEditingController.text);
}
@override
Widget build(BuildContext context) => EnterNameView(this);
}
```
So we have a controller for a `EnterName` view which as a `TextEditingController`, a state `name` and an action `void setNameAction()`. Actions must always be methods of a type, that we dont need to pass parameters in the corresponding view class and must have dartdoc comments.
The view class could look like this:
```dart
// /lib/views/enter_name_view.dart
import 'package:flutter/material.dart';
class EnterNameView extends StatelessWidget {
final EnterNameController controller;
const EnterNameView(this.controller, {Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Your name: ${controller.name}'),
),
body: Center(
child: TextField(
controller: controller.textEditingController,
),
),
floatingActionButton: FloatingActionButton(
onPressed: controller.setNameAction,
child: Icon(Icons.save),
),
);
}
}
```
Views should just contain code which describes the view. All other parameters or logic should be in the controller. The job of the view class is just to take the current state and build the widget tree and pipe the callbacks back. If there is any calulation necessary which is not solveable as a simple if-else or switch statement, it should be done in an external helper function unter `/lib/utils/`.
All file names must be lower_snake_case. All views must have a `View` suffix and all controller must have a `Controller` suffix. Widgets may have a controller too but they should pass the callbacks back to the view where possible. Calling one line methods directly in the view is only recommended if there is no need to pass a parameter.
To perform an action on state initialization we use the initState method:
```dart
@override
void initState() {
// TODO: implement initState
super.initState();
}
```
And the dispose method to perform an action on disposing:
```dart
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
```
To run code after the widget was created first we use the WidgetBindings in the initState:
```dart
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) {
// Do something when build is finished
});
super.initState();
}
```
### Formatting
We do not allow code with wrong formatting. Please run `flutter format lib` if your IDE doesn't do this automatically.
### Code Analyzis
We do not allow codes with dart errors or warnings. We use the [flutter_lints](https://pub.dev/packages/flutter_lints) package for static code analysis with additional rules under `analysis_options.yaml`.

View file

@ -7,8 +7,9 @@ FluffyChat is available on Android, iOS, Linux and as a web version. Desktop ver
* [Encryption](#encryption)
* [App Permissions](#app-permissions)
* [Push Notifications](#push-notifications)
* [PlayStore Safety Standards](#playstore-safety)
## Matrix<a id="matrix"/>
## <a id="matrix" href="#matrix">#</a> Matrix
FluffyChat uses the Matrix protocol. This means that FluffyChat is just a client that can be connected to any compatible matrix server. The respective data protection agreement of the server selected by the user then applies.
For convenience, one or more servers are set as default that the FluffyChat developers consider trustworthy. The developers of FluffyChat do not guarantee their trustworthiness. Before the first communication, users are informed which server they are connecting to.
@ -17,17 +18,17 @@ FluffyChat only communicates with the selected server and with [OpenStreetMap](h
More information is available at: [https://matrix.org](https://matrix.org)
## Database<a id="database"/>
## <a id="database" href="#database">#</a> Database
FluffyChat caches some data received from the server in a local sqflite database on the device of the user. On web indexedDB is used. FluffyChat always tries to encrypt the database by using SQLCipher and stores the encryption key in the [Secure Storage](https://pub.dev/packages/flutter_secure_storage) of the device.
More information is available at: [https://pub.dev/packages/sqflite](https://pub.dev/packages/sqflite) and [https://pub.dev/packages/sqlcipher_flutter_libs](https://pub.dev/packages/sqlcipher_flutter_libs)
## Encryption<a id="encryption"/>
## <a id="encryption" href="#encryption">#</a> Encryption
All communication of substantive content between Fluffychat and any server is done in secure way, using transport encryption to protect it.
FluffyChat also uses End-To-End-Encryption by using [libolm](https://gitlab.matrix.org/matrix-org/olm) and enables it by default for private chats.
FluffyChat also uses End-To-End-Encryption by using [Vodozemac](https://github.com/matrix-org/vodozemac) and enables it by default for private chats.
## App Permissions<a id="app-permissions"/>
## <a id="app-permissions" href="#app-permissions">#</a> App Permissions
The permissions are the same on Android and iOS but may differ in the name. This are the Android Permissions:
@ -50,7 +51,7 @@ The user is able to send files from the device's file system.
#### Location
FluffyChat makes it possible to share the current location via the chat. When the user shares their location, FluffyChat uses the device location service and sends the geo-data via Matrix.
## Push Notifications<a id="push-notifications"/>
## <a id="push-notifications" href="#push-notifications">#</a> Push Notifications
FluffyChat uses the Firebase Cloud Messaging service for push notifications on Android and iOS. This takes place in the following steps:
1. The matrix server sends the push notification to the FluffyChat Push Gateway
2. The FluffyChat Push Gateway forwards the message in a different format to Firebase Cloud Messaging
@ -58,7 +59,7 @@ FluffyChat uses the Firebase Cloud Messaging service for push notifications on A
4. The device receives the push notification from Firebase Cloud Messaging and displays it as a notification
The source code of the push gateway can be viewed here:
[https://gitlab.com/famedly/services/famedly-push-gateway](https://gitlab.com/famedly/services/famedly-push-gateway)
[https://github.com/krille-chan/fluffygate](https://github.com/krille-chan/fluffygate)
`event_id_only` is used as the format for the push notification. A typical push notification therefore only contains:
- Event ID
@ -94,7 +95,7 @@ A typical push notification could look like this:
FluffyChat sets the `event_id_only` flag at the Matrix Server. This server is then responsible to send the correct data.
# Explanation of FluffyChat's Compliance with Google Play Store's Safety Standards
# <a id="playstore-safety" href="#playstore-safety">#</a> Explanation of FluffyChat's Compliance with Google Play Store's Safety Standards
FluffyChat is committed to promoting a safe and respectful environment for all users. As a Matrix client, FluffyChat connects users to various Matrix servers. Please note that FluffyChat does not host or manage any servers directly, and as such, we do not have the capability to enforce content moderation or deletion within the app itself.

15
SECURITY.md Normal file
View file

@ -0,0 +1,15 @@
# Security Policy
If you believe you have discovered a security vulnerability in this project, **do not open a public issue**.
To report a security issue responsibly, please go to the Security tab or visit:
https://github.com/krille-chan/fluffychat/security/advisories/new
The following information can help us address the issue:
- Clear steps to reproduce the vulnerability
- The software version you are using
- The affected platforms
We appreciate your report and will respond as quickly as possible. Please note that this project is maintained by volunteers and is provided without guarantees.

View file

@ -14,40 +14,4 @@ analyzer:
todo: ignore
use_build_context_synchronously: ignore
exclude:
- lib/generated_plugin_registrant.dart
- lib/l10n/*.dart
- assets/l10n/*.arb
dart_code_metrics:
metrics:
cyclomatic-complexity: 20
number-of-arguments: 4
maximum-nesting-level: 5
source-lines-of-code: 50
maintainability-index: 40
rules:
- no-boolean-literal-compare
- no-empty-block
- prefer-conditional-expressions
- no-equal-then-else
- no-magic-number:
severity: style
- avoid-late-keyword:
severity: style
- avoid-non-null-assertion:
severity: style
- avoid-unused-parameters
- binary-expression-operand-order
- avoid-unnecessary-setstate
- avoid-wrapping-in-padding
- prefer-const-border-radius
- prefer-single-widget-per-file:
ignore-private-widgets: true
- prefer-extracting-callbacks
metrics-exclude:
- test/**
rules-exclude:
- test/**
anti-patterns:
- long-method
- long-parameter-list

View file

@ -8,21 +8,19 @@ plugins {
id("dev.flutter.flutter-gradle-plugin")
}
// conditionally apply google-services (keeps your original intent)
if (file("google-services.json").exists()) {
apply(plugin = "com.google.gms.google-services")
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4") // For flutter_local_notifications // Workaround for: https://github.com/MaikuB/flutter_local_notifications/issues/2286
implementation("androidx.core:core-ktx:1.17.0") // For Android Auto
implementation(platform("com.google.firebase:firebase-bom:32.8.0"))
implementation("com.google.firebase:firebase-analytics")
implementation("com.google.firebase:firebase-database")
implementation("androidx.multidex:multidex:2.0.1")
}
// Workaround for https://pub.dev/packages/unifiedpush#the-build-fails-because-of-duplicate-classes
configurations.all {
// Use the latest version published: https://central.sonatype.com/artifact/com.google.crypto.tink/tink-android
@ -37,20 +35,20 @@ configurations.all {
}
}
android {
namespace = "com.talktolearn.chat"
compileSdk = 35
// compileSdk = flutter.compileSdkVersion
// ndkVersion = "27.0.12077973"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
isCoreLibraryDesugaringEnabled = true
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
jvmTarget = JavaVersion.VERSION_11.toString()
}
signingConfigs {
@ -80,20 +78,16 @@ android {
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
ndk { // Workaround for https://github.com/flutter/flutter/issues/162153#issuecomment-2612443642
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86_64", "x86")
}
}
buildTypes {
debug {
signingConfig = signingConfigs.getByName("debug")
versionNameSuffix = "-debug"
isMinifyEnabled = false
isShrinkResources = false
}
release {
isMinifyEnabled = false
isShrinkResources = false
// use the release signing config we created above (will be used only if key properties exist)
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
}

View file

@ -17,14 +17,10 @@
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- To make app compatible with tablets -->
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.microphone" android:required="false" />
<!-- #Pangea -->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
@ -161,29 +157,13 @@
android:foregroundServiceType="camera|microphone|mediaProjection">
</service>
<service android:name="io.wazo.callkeep.VoiceConnectionService"
android:label="Wazo"
android:foregroundServiceType="camera|microphone|mediaProjection"
android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE"
android:exported="true">
<intent-filter>
<action android:name="android.telecom.ConnectionService" />
</intent-filter>
</service>
<!-- From flutter_local_notifications package for notification actions -->
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ActionBroadcastReceiver" />
<receiver android:name="org.unifiedpush.flutter.connector.UnifiedPushReceiver"
tools:replace="android:enabled"
android:enabled="false">
</receiver>
<receiver android:exported="false" android:enabled="true" android:name=".UnifiedPushReceiver">
<intent-filter>
<action android:name="org.unifiedpush.flutter.connector.MESSAGE"/>
<action android:name="org.unifiedpush.flutter.connector.UNREGISTERED"/>
<action android:name="org.unifiedpush.flutter.connector.NEW_ENDPOINT"/>
<action android:name="org.unifiedpush.flutter.connector.REGISTRATION_FAILED" />
</intent-filter>
</receiver>
<!-- To make notifications available in Android Auto -->
<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->

View file

@ -4,13 +4,11 @@ import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import android.content.Context
import androidx.multidex.MultiDex
class MainActivity : FlutterActivity() {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}

View file

@ -1,23 +0,0 @@
package chat.fluffy.fluffychat
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.dart.DartExecutor
import org.unifiedpush.flutter.connector.UnifiedPushReceiver
import android.content.Context
class UnifiedPushReceiver : UnifiedPushReceiver() {
override fun getEngine(context: Context): FlutterEngine {
var engine = MainActivity.engine
if (engine == null) {
engine = MainActivity.provideEngine(context)
engine.localizationPlugin.sendLocalesToFlutter(
context.resources.configuration
)
engine.dartExecutor.executeDartEntrypoint(
DartExecutor.DartEntrypoint.createDefault()
)
}
return engine
}
}

View file

@ -0,0 +1,3 @@
<automotiveApp>
<uses name="notification" />
</automotiveApp>

View file

@ -50,6 +50,7 @@
<locale android:name="th"/>
<locale android:name="tr"/>
<locale android:name="uk"/>
<locale android:name="uz"/>
<locale android:name="vi"/>
<locale android:name="yue"/>
<locale android:name="zh"/>

View file

@ -19,13 +19,3 @@ subprojects {
tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.google.gms:google-services:4.4.1")
}
}

View file

@ -0,0 +1,4 @@
FluffyChat 2.4.0 adds a new improved GUI for managing stickers with tutorials how to
easily add your own sticker packs.
It also improves the search and image gallery in chats, especially encrypted chats.
Besides that this update comes with a lot of fixes and improvements under the hood.

View file

@ -1,6 +1,6 @@
#Mon Mar 17 08:36:03 CET 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View file

@ -16,25 +16,13 @@ pluginManagement {
}
}
buildscript {
repositories {
mavenCentral()
maven {
url = uri("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath("com.android.tools:r8:8.2.24")
}
}
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.7.3" apply false
id("org.jetbrains.kotlin.android") version "2.1.10" apply false
id("com.android.application") version "8.9.1" apply false
id("org.jetbrains.kotlin.android") version "2.1.0" apply false
if (file("app/google-services.json").exists()) {
id("com.google.gms.google-services") version "4.3.8" apply false
}
}
}
include(":app")
include(":app")

3
appimage/.gitignore vendored
View file

@ -1,3 +0,0 @@
FluffyChat.AppDir
*.AppImage
*.AppImage.zsync

View file

@ -1,4 +0,0 @@
#!/bin/sh
cd "$(dirname "$0")"
exec ./fluffychat

View file

@ -1,9 +0,0 @@
[Desktop Entry]
Type=Application
Version=1.0
Name=FluffyChat
Comment=Matrix Client. Chat with your friends
Exec=AppRun
Icon=fluffychat
Terminal=false
Categories=Network;Chat;InstantMessaging;X-Matrix;

View file

@ -1,24 +0,0 @@
# FluffyChat AppImage
FluffyChat is provided as AppImage too. To Download, visit fluffychat.im.
## Building
- Ensure you install `appimagetool`
```shell
flutter build linux
# copy binaries to appimage dir
cp -r build/linux/{x64,arm64}/release/bundle appimage/FluffyChat.AppDir
cd appimage
# prepare AppImage files
cp FluffyChat.desktop FluffyChat.AppDir/
mkdir -p FluffyChat.AppDir/usr/share/icons
cp ../assets/logo.svg FluffyChat.AppDir/fluffychat.svg
cp AppRun FluffyChat.AppDir
# build the AppImage
appimagetool FluffyChat.AppDir
```

View file

@ -1,10 +1,29 @@
{
"application_name": "PangeaChat",
"application_welcome_message": null,
"default_homeserver": "matrix.pangea.chat",
"web_base_url": "https://web.pangea.chat",
"privacy_url": "https://pangea.chat/privacy",
"render_html": false,
"hide_redacted_events": false,
"hide_unknown_events": false
"applicationName": "PangeaChat",
"defaultHomeserver": "matrix.pangea.chat",
"privacyUrl": "https://pangea.chat/privacy",
"audioRecordingNumChannels": 1,
"audioRecordingAutoGain": true,
"audioRecordingEchoCancel": false,
"audioRecordingNoiseSuppress": true,
"audioRecordingBitRate": 64000,
"audioRecordingSamplingRate": 44100,
"renderHtml": true,
"fontSizeFactor": 1,
"hideRedactedEvents": false,
"hideUnknownEvents": true,
"separateChatTypes": false,
"autoplayImages": true,
"sendTypingNotifications": true,
"sendPublicReadReceipts": true,
"swipeRightToLeftToReply": true,
"sendOnEnter": false,
"showPresences": true,
"displayNavigationRail": false,
"experimentalVoip": false,
"shareKeysWith": "all",
"noEncryptionWarningShown": false,
"displayChatDetailsColumn": false,
"colorSchemeSeedInt": 4283835834,
"enableSoftLogout": false
}

View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2019 Tailwind Toolbox
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,91 +0,0 @@
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 647 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,183 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="utf-8">
<title>FluffyChat Official Website</title>
<meta name="identifier-url" content="https://fluffychat.im" />
<meta name="title" content="FluffyChat Official Website" />
<meta name="description" content="The cutest messenger in the Matrix network" />
<meta name="abstract" content="FluffyChat is the cutest messenger in the Matrix network" />
<meta name="keywords" content="FluffyChat, Matrix, Flutter, App" />
<meta name="author" content="Krille Fear" />
<meta name="revisit-after" content="15" />
<meta name="language" content="EN" />
<meta name="robots" content="All" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.png">
<link href="tailwind.css" rel="stylesheet">
<title>Redirecting to fluffy.chat</title>
<!-- Redirecting to another page using meta tag -->
<meta http-equiv="refresh" content="5; url =https://fluffy.chat" />
</head>
<body
class="flex flex-col items-center min-h-screen w-full bg-gradient-to-t from-purple-200 to-blue-50 dark:from-purple-900 dark:to-slate-900"
style="font-family: 'Zen Kurenaido', sans-serif;">
<div class="w-full md:h-12 min-h-12 px-4 py-4 md:py-0 mb-8">
<nav class="flex flex-wrap h-full justify-center items-center space-x-6 w-full max-w-4xl m-auto">
<a href="https://ko-fi.com/krille/posts"
class="text-lg dark:text-white hover:text-purple-800 dark:hover:text-purple-400">News</a>
<a href="https://github.com/krille-chan/fluffychat/blob/main/CHANGELOG.md"
class="text-lg dark:text-white hover:text-purple-800 dark:hover:text-purple-400">Changelog</a>
<a href="https://github.com/krille-chan/fluffychat/wiki"
class="text-lg dark:text-white hover:text-purple-800 dark:hover:text-purple-400">Wiki</a>
<a href="https://github.com/krille-chan/fluffychat"
class="text-lg dark:text-white hover:text-purple-800 dark:hover:text-purple-400">Code</a>
<div class="md:flex-grow"> </div>
<a href='https://ko-fi.com/C1C86VN53' target='_blank' class="m-2 hover:scale-110 transition-transform "><img
class="h-7" src='https://storage.ko-fi.com/cdn/kofi2.png?v=3' border='0'
alt='Buy Me a Coffee at ko-fi.com' /></a>
<a href="https://troet.cafe/@krille" rel="me" class="m-2 hover:scale-110 transition-transform "><img
src="mastodon.svg" class="h-7" /></a>
</nav>
</div>
<img src="info-logo.png" alt="FluffyChat Logo" class="h-56" />
<p class="text-xl dark:text-gray-200 text-gray-700 mb-8">The cutest messenger in [<a href="https://matrix.org"
target="_blank" class="text-xl underline hover:text-purple-800 dark:hover:text-purple-400">matrix</a>]
<body>
<h3>
Redirecting...
</h3>
<p><strong>Note:</strong> If your browser does not redirect you, please use this link:
</p>
<div class="flex flex-wrap justify-center mb-16 w-full px-8 gap-4">
<img src="screenshots/mobile.png" alt="Mobile screenshot"
class="h-96 w-auto object-contain rounded-xl border border-gray-300 shadow-xl" />
<img src="screenshots/desktop.png" alt="Desktop screenshot"
class="h-96 w-auto object-contain rounded-xl border border-gray-300 shadow-xl" />
</div>
<div class="max-w-lg mb-16 flex justify-center flex-wrap">
<a href="https://apps.apple.com/app/fluffychat/id1551469600"><img src="appstore-badge.png"
class="w-36 pr-2 mb-2 inline hover:scale-105 transition-transform"></a>
<a href="https://play.google.com/store/apps/details?id=chat.fluffy.fluffychat"><img src="google-play-badge.png"
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline">
</a><a href="https://f-droid.org/packages/chat.fluffy.fluffychat/"><img src="fdroid_button.png"
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline">
</a>
<a href="https://fluffychat.im/web">
<img src="browser-badge.png" class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline"></a>
<a href="https://snapcraft.io/fluffychat"><img src="snap-store-badge.svg"
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline"></a>
<a href="https://flathub.org/apps/details/im.fluffychat.Fluffychat"><img src="flathub-badge-en.png"
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline"></a>
</div>
<div class="grid md:grid-cols-3 md:grid-rows-3 max-w-4xl justify-center w-full mb-16">
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated dancing woman" loading="lazy" src="feature1.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Easy to use</h1>
<p class="text-center dark:text-white">FluffyChat is designed to be as easy to use as possible. No one
should be left behind.</p>
</div>
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated pencil" loading="lazy" src="feature2.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Material You</h1>
<p class="text-center dark:text-white">The well polished design is based on Material You and works great on
all platforms.</p>
</div>
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated mechanical arm" loading="lazy" src="feature3.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Secure</h1>
<p class="text-center dark:text-white">With end-to-end encryption, cross-signing and encrypted backups,
FluffyChat is one of the most secure messenger out there.</p>
</div>
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated planet earth" loading="lazy" src="feature4.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Decentral</h1>
<p class="text-center dark:text-white">You can choose the <a href="https://joinmatrix.org"
class="underline hover:text-purple-800 dark:hover:text-purple-400">server</a> you want to use or
even <a href="https://matrix.org/ecosystem/servers/"
class="underline hover:text-purple-800 dark:hover:text-purple-400">self-host</a> your own!</p>
</div>
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated bell" loading="lazy" src="feature5.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Push Notifications</h1>
<p class="text-center dark:text-white">You can choose between Firebase Cloud Messaging or the more privacy
focused <a href="https://unifiedpush.org"
class="underline hover:text-purple-800 dark:hover:text-purple-400">Unified Push</a>.</p>
</div>
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated rocket" loading="lazy" src="feature6.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Spaces</h1>
<p class="text-center dark:text-white">With spaces you can join or create a community which organizes chats
and users. Using sub-spaces you can even nest your communities.</p>
</div>
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated glass sphere" loading="lazy" src="feature7.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Video calls</h1>
<p class="text-center dark:text-white">Still an experimental feature but you can already try out video and
audio calls, compatible with other [matrix] clients.</p>
</div>
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated chick" loading="lazy" src="feature8.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Stickers</h1>
<p class="text-center dark:text-white">Create your own sticker sets and share them with your friends. You
can even use them as inline emojis.</p>
</div>
<div class="flex flex-col justify-center items-center p-8">
<img alt="Animated whoa emoji" loading="lazy" src="feature9.gif" class="h-32" />
<h1 class="text-purple-500 dark:text-purple-300 text-2xl">Compatible</h1>
<p class="text-center dark:text-white">FluffyChat is compatible with any other [matrix] client like <a
href="https://element.io"
class="underline hover:text-purple-800 dark:hover:text-purple-400">Element</a>,
<a href="https://nheko-reborn.github.io/"
class="underline hover:text-purple-800 dark:hover:text-purple-400">Nheko</a>, <a
href="https://cinny.in" class="underline hover:text-purple-800 dark:hover:text-purple-400">Cinny</a>
or <a href="https://apps.kde.org/de/neochat/"
class="underline hover:text-purple-800 dark:hover:text-purple-400">NeoChat</a>.
</p>
</div>
</div>
<!--Footer-->
<div class="w-full flex justify-center">
<footer class="w-full text-center max-w-4xl p-4 text-slate-700 dark:text-slate-200">
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
href="https://liberapay.com/KrilleChritzelius">Liberapay</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
href="https://github.com/krille-chan/fluffychat">Source
code</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
href="https://github.com/krille-chan/fluffychat/blob/main/PRIVACY.md">Privacy</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
href="https://github.com/krille-chan/fluffychat/blob/main/CHANGELOG.md">Changelog</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
href="https://hosted.weblate.org/projects/fluffychat/">Translations</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
href="https://googlefonts.github.io/noto-emoji-animation/">Noto Animated Emojis</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
href="https://keys.mailvelope.com/pks/lookup?op=get&search=christian-pauly%40posteo.de">Contact</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800 text-sm"
href="https://krille-chan.github.io">Created
by Krille-chan</a>
</footer>
</div>
<a href="https://fluffy.chat">https://fluffy.chat</a>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View file

@ -1,10 +0,0 @@
<svg width="75" height="79" viewBox="0 0 75 79" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M73.8393 17.4898C72.6973 9.00165 65.2994 2.31235 56.5296 1.01614C55.05 0.797115 49.4441 0 36.4582 0H36.3612C23.3717 0 20.585 0.797115 19.1054 1.01614C10.5798 2.27644 2.79399 8.28712 0.904997 16.8758C-0.00358524 21.1056 -0.100549 25.7949 0.0682394 30.0965C0.308852 36.2651 0.355538 42.423 0.91577 48.5665C1.30307 52.6474 1.97872 56.6957 2.93763 60.6812C4.73325 68.042 12.0019 74.1676 19.1233 76.6666C26.7478 79.2728 34.9474 79.7055 42.8039 77.9162C43.6682 77.7151 44.5217 77.4817 45.3645 77.216C47.275 76.6092 49.5123 75.9305 51.1571 74.7385C51.1797 74.7217 51.1982 74.7001 51.2112 74.6753C51.2243 74.6504 51.2316 74.6229 51.2325 74.5948V68.6416C51.2321 68.6154 51.2259 68.5896 51.2142 68.5661C51.2025 68.5426 51.1858 68.522 51.1651 68.5058C51.1444 68.4896 51.1204 68.4783 51.0948 68.4726C51.0692 68.4669 51.0426 68.467 51.0171 68.4729C45.9835 69.675 40.8254 70.2777 35.6502 70.2682C26.7439 70.2682 24.3486 66.042 23.6626 64.2826C23.1113 62.762 22.7612 61.1759 22.6212 59.5646C22.6197 59.5375 22.6247 59.5105 22.6357 59.4857C22.6466 59.4609 22.6633 59.4391 22.6843 59.422C22.7053 59.4048 22.73 59.3929 22.7565 59.3871C22.783 59.3813 22.8104 59.3818 22.8367 59.3886C27.7864 60.5826 32.8604 61.1853 37.9522 61.1839C39.1768 61.1839 40.3978 61.1839 41.6224 61.1516C46.7435 61.008 52.1411 60.7459 57.1796 59.7621C57.3053 59.7369 57.431 59.7154 57.5387 59.6831C65.4861 58.157 73.0493 53.3672 73.8178 41.2381C73.8465 40.7606 73.9184 36.2364 73.9184 35.7409C73.9219 34.0569 74.4606 23.7949 73.8393 17.4898Z" fill="url(#paint0_linear_549_34)"/>
<path d="M61.2484 27.0263V48.114H52.8916V27.6475C52.8916 23.3388 51.096 21.1413 47.4437 21.1413C43.4287 21.1413 41.4177 23.7409 41.4177 28.8755V40.0782H33.1111V28.8755C33.1111 23.7409 31.0965 21.1413 27.0815 21.1413C23.4507 21.1413 21.6371 23.3388 21.6371 27.6475V48.114H13.2839V27.0263C13.2839 22.7176 14.384 19.2946 16.5843 16.7572C18.8539 14.2258 21.8311 12.926 25.5264 12.926C29.8036 12.926 33.0357 14.5705 35.1905 17.8559L37.2698 21.346L39.3527 17.8559C41.5074 14.5705 44.7395 12.926 49.0095 12.926C52.7013 12.926 55.6784 14.2258 57.9553 16.7572C60.1531 19.2922 61.2508 22.7152 61.2484 27.0263Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear_549_34" x1="37.0692" y1="0" x2="37.0692" y2="79" gradientUnits="userSpaceOnUse">
<stop stop-color="#6364FF"/>
<stop offset="1" stop-color="#563ACC"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 433 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 952 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 951 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.4 KiB

View file

@ -1,14 +0,0 @@
module.exports = {
purge: [
'./index.html'
],
darkMode: false,
theme: {
extend: {},
},
variants: {
extend: {},
},
plugins: [],
}

4
fdroid/.gitignore vendored
View file

@ -1,4 +0,0 @@
repo
srclibs
tmp
chat.fluffy.fluffychat

View file

@ -1,13 +0,0 @@
repo_url = "https://fluffychat.im/repo/nightly/repo"
repo_name = "FluffyChat nightly repo"
repo_icon = "fdroid-icon.png"
repo_description = """
FluffyChat nightly repo
"""
archive_older = 0
local_copy_dir = "/fdroid"
keystore = "key.nightly.jks"
repo_keyalias = "vmd66783.contaboserver.net"

View file

@ -1,13 +0,0 @@
repo_url = "https://fluffychat.im/repo/stable/repo"
repo_name = "FluffyChat repo"
repo_icon = "fdroid-icon.png"
repo_description = """
FluffyChat repo
"""
archive_older = 0
local_copy_dir = "/fdroid"
keystore = "key.jks"
repo_keyalias = "key"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -1,53 +0,0 @@
Categories:
- Internet
- Phone & SMS
License: AGPL-3.0-only
AuthorName: Famedly
SourceCode: https://github.com/krille-chan/fluffychat
IssueTracker: https://github.com/krille-chan/fluffychat/-/issues
Translation: https://hosted.weblate.org/projects/fluffychat/
Changelog: https://gitlab.com/ChristianPauly/fluffychat-flutter/-/blob/main/CHANGELOG.md
AutoName: FluffyChat
Summary: "Chat with your friends with FluffyChat.\n"
Description: |
FluffyChat is an open, nonprofit and cute matrix messenger app for Ubuntu Touch, Android and iOS.
Open
Opensource and open development where everyone can join.
Nonprofit
FluffyChat is donation funded.
Cute ♥
Cute design and many theme settings including a dark mode.
One-to-one and groupchats
Unlimited groups and direct chats.
Easy
FluffyChat is made as simple to use as possible.
Free
Free to use for everyone without ads.
Decentralized
There is no "FluffyChat server" you are forced to use. Use the server you find trustworthy or host
your own.
Compatible
Compatible with Riot, Fractal, Nekho and all matrix messengers.
FluffyChat comes with a dream
Imagine a world where everyone can choose the messenger they like and is still able to chat with
all of their friends.
A world where there are no companies spying on you when you send selfies to friends and lovers.
And a world where apps are made for fluffyness and not for profit. ♥
RepoType: git
Repo: https://github.com/krille-chan/fluffychat.git
AutoUpdateMode: None
UpdateCheckMode: None

View file

@ -1,4 +1,3 @@
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/pages/chat/chat_view.dart';
import 'package:fluffychat/pages/chat_list/chat_list_body.dart';
import 'package:fluffychat/pages/chat_list/search_title.dart';
@ -6,7 +5,6 @@ import 'package:fluffychat/pages/invitation_selection/invitation_selection_view.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:integration_test/integration_test.dart';
import 'package:fluffychat/main.dart' as app;
@ -26,12 +24,8 @@ void main() {
() async {
// this random dialog popping up is super hard to cover in tests
SharedPreferences.setMockInitialValues({
SettingKeys.showNoGoogle: false,
'chat.fluffy.show_no_google': false,
});
try {
Hive.deleteFromDisk();
Hive.initFlutter();
} catch (_) {}
},
);

View file

@ -2,6 +2,7 @@ GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.3)
abbrev (0.1.2)
addressable (2.8.4)
public_suffix (>= 2.0.2, < 6.0)
artifactory (3.0.15)
@ -145,9 +146,11 @@ GEM
mini_mime (1.1.0)
multi_json (1.15.0)
multipart-post (2.0.0)
mutex_m (0.3.0)
nanaimo (0.3.0)
naturally (2.2.1)
os (1.1.1)
ostruct (0.6.3)
plist (3.6.0)
public_suffix (5.0.3)
rake (13.0.3)
@ -156,7 +159,7 @@ GEM
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.3.9)
rexml (3.4.2)
rouge (2.0.7)
ruby2_keywords (0.0.4)
rubyzip (2.3.0)
@ -199,7 +202,10 @@ PLATFORMS
ruby
DEPENDENCIES
abbrev
fastlane
mutex_m
ostruct
BUNDLED WITH
2.1.4

58
ios/Localizable.xcstrings Normal file
View file

@ -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"
}

View file

@ -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>

View file

@ -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.com.talktolearn.chat</string>
</array>
</dict>
</plist>

View file

@ -0,0 +1,65 @@
//
// 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?
// #Pangea
// 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)
// }
// }
// Pangea#
}

View file

@ -8,7 +8,7 @@
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
18EB8101724ECEB31DC90D37 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
18EB8101724ECEB31DC90D37 /* (null) in Frameworks */ = {isa = PBXBuildFile; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
3F86C7E35D199E7DD2B134F9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69EC0FDC95BB0C70B544A84C /* Pods_Runner.framework */; };
59BB4671C68B58E6B34292B2 /* Pods_FluffyChat_Share.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52740D3A973E95DFFBA1E6CD /* Pods_FluffyChat_Share.framework */; };
@ -21,6 +21,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 */
@ -32,6 +36,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 */
@ -52,6 +63,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;
@ -84,6 +96,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; };
@ -91,12 +105,33 @@
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;
buildActionMask = 2147483647;
files = (
18EB8101724ECEB31DC90D37 /* BuildFile in Frameworks */,
18EB8101724ECEB31DC90D37 /* (null) in Frameworks */,
3F86C7E35D199E7DD2B134F9 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -110,6 +145,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
C146954F2E642D400075F2F7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@ -135,9 +177,11 @@
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
C14695652E642E450075F2F7 /* Localizable.xcstrings */,
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
C1005C43261071B5002F4F32 /* FluffyChat Share */,
C14695532E642D400075F2F7 /* Notification Service Extension */,
97C146EF1CF9000F007C117D /* Products */,
E89DCAC000D371640E94E65B /* Pods */,
E4B51FC6310E8231ADAAC605 /* Frameworks */,
@ -150,6 +194,7 @@
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
C1005C42261071B5002F4F32 /* FluffyChat Share.appex */,
C14695522E642D400075F2F7 /* Notification Service Extension.appex */,
);
name = Products;
sourceTree = "<group>";
@ -227,6 +272,7 @@
);
dependencies = (
C1005C4B261071B5002F4F32 /* PBXTargetDependency */,
C14695582E642D400075F2F7 /* PBXTargetDependency */,
);
name = Runner;
productName = Runner;
@ -251,13 +297,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 = {
@ -268,23 +334,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 */
@ -299,6 +370,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;
@ -307,10 +379,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 */
@ -443,6 +524,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
C146954E2E642D400075F2F7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
@ -451,6 +539,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 */
@ -527,6 +620,7 @@
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
@ -620,6 +714,7 @@
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
@ -670,6 +765,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;
@ -780,6 +876,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_ENABLE_EXPLICIT_MODULES = NO;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@ -852,6 +949,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 = PJ8L5H7L7H;
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 = "com.talktolearn.chat.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 = PJ8L5H7L7H;
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 = "com.talktolearn.chat.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 = PJ8L5H7L7H;
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 = "com.talktolearn.chat.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 */
@ -885,6 +1102,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 */;

Some files were not shown because too many files have changed in this diff Show more