Compare commits
1 commit
main
...
krille/mae
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea6d0ab594 |
46 changed files with 304 additions and 850 deletions
12
.github/workflows/integrate.yaml
vendored
12
.github/workflows/integrate.yaml
vendored
|
|
@ -28,10 +28,6 @@ jobs:
|
|||
- name: Check license compliance
|
||||
run: dart run license_checker check-licenses -c licenses.yaml --problematic
|
||||
- run: flutter analyze
|
||||
- name: Search unused dependencies
|
||||
run: |
|
||||
dart pub global activate dependency_validator
|
||||
dart pub global run dependency_validator
|
||||
- run: dart run dart_code_linter:metrics analyze lib --reporter=github
|
||||
- run: dart run dart_code_linter:metrics check-unused-code lib
|
||||
- run: dart run dart_code_linter:metrics check-unused-files lib
|
||||
|
|
@ -202,12 +198,12 @@ jobs:
|
|||
cache: true
|
||||
- uses: remarkablemark/setup-maestro-cli@v1
|
||||
- name: Load integration test env
|
||||
run: cat integration_test/data/integration_users.env >> $GITHUB_ENV
|
||||
run: cat .maestro/data/integration_users.env >> $GITHUB_ENV
|
||||
- name: Prepare Homeserver
|
||||
run: |
|
||||
docker run -d --name synapse --tmpfs /data \
|
||||
--volume="$(pwd)/integration_test/synapse/data/homeserver.yaml":/data/homeserver.yaml:rw \
|
||||
--volume="$(pwd)/integration_test/synapse/data/localhost.log.config":/data/localhost.log.config:rw \
|
||||
--volume="$(pwd)/.maestro/data/synapse/homeserver.yaml":/data/homeserver.yaml:rw \
|
||||
--volume="$(pwd)/.maestro/data/synapse/localhost.log.config":/data/localhost.log.config:rw \
|
||||
-p 80:80 matrixdotorg/synapse:latest
|
||||
while ! curl -XGET "http://$HOMESERVER/_matrix/client/v3/login" >/dev/null 2>/dev/null; do
|
||||
echo "Waiting for homeserver to be available... (GET http://$HOMESERVER/_matrix/client/v3/login)"
|
||||
|
|
@ -237,7 +233,7 @@ jobs:
|
|||
script: |
|
||||
flutter run --use-application-binary=$PWD/app-debug.apk > flutter_logs.txt 2>&1 &
|
||||
FLUTTER_PID=$!
|
||||
maestro test integration_test/login.yaml --env HOMESERVER=10.0.2.2 --env USER1_NAME=${USER1_NAME} --env USER1_PW=${USER1_PW}
|
||||
maestro test .maestro/ --env HOMESERVER=10.0.2.2 --env USER1_NAME=${USER1_NAME} --env USER1_PW=${USER1_PW}
|
||||
kill $FLUTTER_PID 2>/dev/null || true
|
||||
cp flutter_logs.txt ~/.maestro/tests/
|
||||
- name: Upload Flutter and Maestro logs
|
||||
|
|
|
|||
2
.github/workflows/release.yaml
vendored
2
.github/workflows/release.yaml
vendored
|
|
@ -48,7 +48,7 @@ jobs:
|
|||
asset_content_type: application/gzip
|
||||
- name: Clone fluffychat website
|
||||
run: |
|
||||
git clone https://github.com/krille-chan/fluffychat-website.git
|
||||
git@github.com:krille-chan/fluffychat-website.git
|
||||
cp CHANGELOG.md fluffychat-website/
|
||||
cp PRIVACY.md fluffychat-website/
|
||||
- name: Build website
|
||||
|
|
|
|||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -72,3 +72,4 @@ web/pkg/package.json
|
|||
web/pkg/vodozemac_bindings_dart_bg.wasm
|
||||
web/pkg/vodozemac_bindings_dart.js
|
||||
web/native_executor.js*
|
||||
scripts/run_maestro_android.sh
|
||||
|
|
|
|||
7
.maestro/config.yaml
Normal file
7
.maestro/config.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
executionOrder:
|
||||
continueOnFailure: false
|
||||
flowsOrder:
|
||||
- initial_login
|
||||
- flows/login_and_skip_bootstrap.yaml
|
||||
- create_room
|
||||
- flows/logout.yaml
|
||||
17
.maestro/create_room.yaml
Normal file
17
.maestro/create_room.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
appId: chat.fluffy.fluffychat
|
||||
---
|
||||
#- runFlow: flows/login_and_skip_bootstrap.yaml
|
||||
- tapOn:
|
||||
id: "start_chat_fab"
|
||||
- tapOn: "Create group"
|
||||
- inputText: "PartyGroup42"
|
||||
- pressKey: "back"
|
||||
- tapOn: "Create a group and invite users"
|
||||
- tapOn: "Back"
|
||||
- tapOn:
|
||||
id: "chat_input_field"
|
||||
- inputText: "Hello world"
|
||||
- tapOn: "Send"
|
||||
- assertVisible: "Hello world"
|
||||
- tapOn: "Back"
|
||||
#- runFlow: flows/logout.yaml
|
||||
|
|
@ -12,25 +12,9 @@ appId: chat.fluffy.fluffychat
|
|||
- pressKey: "back"
|
||||
- tapOn:
|
||||
id: "homeserver_tile_0"
|
||||
- tapOn:
|
||||
id: "connect_to_homeserver_button"
|
||||
- tapOn: "Continue"
|
||||
- assertVisible: "Log in to http://${HOMESERVER}"
|
||||
- inputText: "${USER1_NAME}"
|
||||
- tapOn: "Password"
|
||||
- inputText: "${USER1_PW}"
|
||||
- tapOn: "Login" # Click the login button
|
||||
- tapOn:
|
||||
id: "store_in_secure_storage"
|
||||
- tapOn: "Next"
|
||||
- tapOn:
|
||||
text: "Close"
|
||||
index: 1
|
||||
- assertVisible: "Push notifications not available"
|
||||
- tapOn: "Do not show again"
|
||||
- tapOn:
|
||||
id: "accounts_and_settings" # Open the popup menu
|
||||
- tapOn: "Settings"
|
||||
- scrollUntilVisible:
|
||||
element: "Logout"
|
||||
- tapOn: "Logout"
|
||||
- tapOn: "Logout" # Confirm logout dialog
|
||||
- tapOn: "Login" # Click the login button
|
||||
8
.maestro/flows/login_and_skip_bootstrap.yaml
Normal file
8
.maestro/flows/login_and_skip_bootstrap.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
appId: chat.fluffy.fluffychat
|
||||
---
|
||||
- runFlow: login.yaml
|
||||
- tapOn: "Close"
|
||||
- tapOn: "Skip"
|
||||
- tapOn:
|
||||
text: "Do not show again"
|
||||
optional: true
|
||||
9
.maestro/flows/logout.yaml
Normal file
9
.maestro/flows/logout.yaml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
appId: chat.fluffy.fluffychat
|
||||
---
|
||||
- tapOn:
|
||||
id: "accounts_and_settings" # Open the popup menu
|
||||
- tapOn: "Settings"
|
||||
- scrollUntilVisible:
|
||||
element: "Logout"
|
||||
- tapOn: "Logout"
|
||||
- tapOn: "Logout" # Confirm logout dialog
|
||||
13
.maestro/initial_login.yaml
Normal file
13
.maestro/initial_login.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
appId: chat.fluffy.fluffychat
|
||||
---
|
||||
- runFlow: flows/login.yaml
|
||||
- tapOn:
|
||||
id: "store_in_secure_storage"
|
||||
- tapOn: "Next"
|
||||
- tapOn:
|
||||
text: "Close"
|
||||
index: 1
|
||||
- tapOn:
|
||||
text: "Do not show again"
|
||||
optional: true
|
||||
- runFlow: flows/logout.yaml
|
||||
159
CHANGELOG.md
159
CHANGELOG.md
|
|
@ -1,162 +1,3 @@
|
|||
## v2.5.0
|
||||
FluffyChat 2.5.0 introduces a new homeserver picker for onboarding, better image compression performance and several smaller new features, design adjustments and bug fixes.
|
||||
|
||||
- feat: Add mute notification action (Christian Kußowski)
|
||||
- feat: Add presetHomeserver config to enforce a homeserver for web (Christian Kußowski)
|
||||
- feat: Display particle animation on login page (Christian Kußowski)
|
||||
- feat: Display read receipts for every event (Christian Kußowski)
|
||||
- feat: Enable audio recording on web (Christian Kußowski)
|
||||
- feat: Implement low priority for rooms (Christian Kußowski)
|
||||
- feat: Implement matrix native oidc (Christian Kußowski)
|
||||
- feat: Implement new sign in flow (Christian Kußowski)
|
||||
- feat: OIDC Login on same page (Christian Kußowski)
|
||||
- feat: Reenable native imaging for all platforms (Christian Kußowski)
|
||||
- feat: Remember last successful logged in homeserver (Christian Kußowski)
|
||||
- Add lld to install custom dependency for Linux in README (Stephen)
|
||||
- build: Add llvm-18 to packages for snap (krille-chan)
|
||||
- build: Add maestro based integration tests (Christian Kußowski)
|
||||
- chore(translations): Added translation using Weblate (Albanian) (Besnik Bleta)
|
||||
- chore(translations): Added translation using Weblate (Kabyle) (Amadɣas)
|
||||
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
|
||||
- chore(translations): Translated using Weblate (Catalan) (fadelkon)
|
||||
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
|
||||
- chore(translations): Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- chore(translations): Translated using Weblate (Czech) (Matyáš Caras)
|
||||
- chore(translations): Translated using Weblate (Danish) (Øjvind Fritjof Arnfred)
|
||||
- chore(translations): Translated using Weblate (Dutch) (Jelv)
|
||||
- chore(translations): Translated using Weblate (English) (Christian)
|
||||
- chore(translations): Translated using Weblate (English) (SpikyBee)
|
||||
- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- chore(translations): Translated using Weblate (Galician) (josé m.)
|
||||
- chore(translations): Translated using Weblate (Georgian) (Dimitri Tabatadze)
|
||||
- chore(translations): Translated using Weblate (Georgian) (Temuri Doghonadze)
|
||||
- chore(translations): Translated using Weblate (German) (Christian)
|
||||
- chore(translations): Translated using Weblate (German) (Ettore Atalan)
|
||||
- chore(translations): Translated using Weblate (German) (nautilusx)
|
||||
- chore(translations): Translated using Weblate (Hindi) (Vishal Singh)
|
||||
- chore(translations): Translated using Weblate (Indonesian) (Arif Budiman)
|
||||
- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
|
||||
- chore(translations): Translated using Weblate (Japanese) (NPL)
|
||||
- chore(translations): Translated using Weblate (Japanese) (Sayaka Halton)
|
||||
- chore(translations): Translated using Weblate (Kabyle) (Amadɣas)
|
||||
- chore(translations): Translated using Weblate (Kabyle) (ButterflyOfFire)
|
||||
- chore(translations): Translated using Weblate (Kabyle) (Christian)
|
||||
- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons)
|
||||
- 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 (Persian) (saok91)
|
||||
- chore(translations): Translated using Weblate (Polish) (gredzikk)
|
||||
- chore(translations): Translated using Weblate (Portuguese (Brazil)) (Logaritmica)
|
||||
- chore(translations): Translated using Weblate (Russian) (-)
|
||||
- chore(translations): Translated using Weblate (Russian) (Artem Pereverzev)
|
||||
- chore(translations): Translated using Weblate (Russian) (mikinol)
|
||||
- chore(translations): Translated using Weblate (Spanish) (Kimby)
|
||||
- chore(translations): Translated using Weblate (Spanish) (SpikyBee)
|
||||
- chore(translations): Translated using Weblate (Swedish) (Malva Jakobsson)
|
||||
- chore(translations): Translated using Weblate (Swedish) (spinningpaprika)
|
||||
- chore(translations): Translated using Weblate (Tamil) (தமிழ்நேரம்)
|
||||
- chore(translations): Translated using Weblate (Ukrainian) (Andriy Kushnir)
|
||||
- chore(translations): Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore(translations): Translated using Weblate (Uzbek) (BeMeritus)
|
||||
- chore: Add config search textfield (Christian Kußowski)
|
||||
- chore: Add matrix notify workflow (Christian Kußowski)
|
||||
- chore: Add recommended homeservers (Christian Kußowski)
|
||||
- chore: Add reset button for config viewer (Christian Kußowski)
|
||||
- chore: Add support button everywhere (Christian Kußowski)
|
||||
- chore: Added deeplinks to test protocol (Christian Kußowski)
|
||||
- chore: Adjust avatar size and chat list item design (krille-chan)
|
||||
- chore: Adjust chat input row design (Christian Kußowski)
|
||||
- chore: Adjust design (Christian Kußowski)
|
||||
- chore: Adjust design of navrail (Christian Kußowski)
|
||||
- chore: Adjust design of space avatars and more (Christian Kußowski)
|
||||
- chore: Adjust design of user viewer and popup buttons (Christian Kußowski)
|
||||
- chore: Adjust join space child UX (Christian Kußowski)
|
||||
- chore: Adjust paddings (krille-chan)
|
||||
- chore: Adjust power level UX (Christian Kußowski)
|
||||
- chore: Adjust search field design (Christian Kußowski)
|
||||
- chore: Adjust status header design (Christian Kußowski)
|
||||
- chore: Adjust styles and animations (Christian Kußowski)
|
||||
- chore: Adjust support button design (Christian Kußowski)
|
||||
- chore: Always show filter for messages (Christian Kußowski)
|
||||
- chore: Avoid unnecessary lambdas (Christian Kußowski)
|
||||
- chore: Better context menu for space children (Christian Kußowski)
|
||||
- chore: bump ios version (ShootingStarDragons)
|
||||
- chore: Check conventional commits in CI (krille-chan)
|
||||
- chore: Check if pubspec.lock is up to date in CI (Christian Kußowski)
|
||||
- chore: Check of unused localizations (Christian Kußowski)
|
||||
- chore: Clean up pages build (Christian Kußowski)
|
||||
- chore: Display spaces filter chip when spaces present even without children (Christian Kußowski)
|
||||
- chore: Execute dart code linter in CI (Christian Kußowski)
|
||||
- chore: Exempt assignees from stale (Christian Kußowski)
|
||||
- chore: Fix oidc login on web (Christian Kußowski)
|
||||
- chore: Give issues and PRs more time for stale (Christian Kußowski)
|
||||
- chore: Hide homepage button if not preset (Christian Kußowski)
|
||||
- chore: Hide status list by default (Christian Kußowski)
|
||||
- chore: Implement pick SSO provider from dialog and add tchncs.de (Christian Kußowski)
|
||||
- chore: Introduce tool versions file (Christian Kußowski)
|
||||
- chore: Login with localhost (Christian Kußowski)
|
||||
- chore: Make banner light red (Christian Kußowski)
|
||||
- chore: Make key fingerprints in chat encryption page selectable (Christian Kußowski)
|
||||
- chore: make sendTimelineEventTimeout configurable (Christian Kußowski)
|
||||
- chore: Make unread bubble full round (Christian Kußowski)
|
||||
- chore: Move file cache to subdirectory (Christian Kußowski)
|
||||
- chore: Move show image viewer one step up (Christian Kußowski)
|
||||
- chore: Move website back to fluffychat.im (Christian Kußowski)
|
||||
- chore: Only show confirm dialog once (Christian Kußowski)
|
||||
- chore: Put oidc behind a feature flag until fixed (Christian Kußowski)
|
||||
- chore: Remove converser from recommended homeservers as it doesn't have open registration (Christian Kußowski)
|
||||
- chore: Remove frei.chat from homeserver list (Christian Kußowski)
|
||||
- chore: Remove web notification custom sound (Christian Kußowski)
|
||||
- chore: Replace duplicate check for stale bot (Christian Kußowski)
|
||||
- chore: Retry sign in tap in tests (Christian Kußowski)
|
||||
- chore: Run matrix notification in pull request target (Christian Kußowski)
|
||||
- chore: Sanitize hash param for oidc (Christian Kußowski)
|
||||
- chore: Set erase flag true on account deactivation (krille-chan)
|
||||
- chore: Set operations per run to 1000 (krille-chan)
|
||||
- chore: Skip matrix notify for events from myself (Christian Kußowski)
|
||||
- chore: Update locale config (Christian Kußowski)
|
||||
- chore: Update matrix ID localization (Christian Kußowski)
|
||||
- chore: Update recommended homeservers (Christian Kußowski)
|
||||
- chore: Update redirect android scheme (Christian Kußowski)
|
||||
- chore: Use fixed version of fcm shared isolate (Christian Kußowski)
|
||||
- fix: Add app id to TileLayer user agent (Vespe-r)
|
||||
- fix: Add missing @@locale (Krille-chan)
|
||||
- fix: Audioplayer on web buggy (Christian Kußowski)
|
||||
- fix: build failed on archlinux (ShootingStarDragons)
|
||||
- fix: Do not cancel notification on reply (Christian Kußowski)
|
||||
- fix: Do not display formatted body if body is just filename (Christian Kußowski)
|
||||
- fix: Do not route to backup on soft logout (Christian Kußowski)
|
||||
- fix: Edit space child button opens space details page and not space child details page (Christian Kußowski)
|
||||
- fix: Fix formatting of messages with newlines (Philip Fritzsche)
|
||||
- fix: get correct aspect ratio from VideoPlayerController (Matias)
|
||||
- fix: Join room by alias even if not found (Christian Kußowski)
|
||||
- fix: Open deep links (Christian Kußowski)
|
||||
- fix: Receipt row not auto updating (Christian Kußowski)
|
||||
- fix: Receipts disappear after reaction (Christian Kußowski)
|
||||
- fix: Reply voice message displays a broken html body (Christian Kußowski)
|
||||
- fix: Send reply to voice messages (Christian Kußowski)
|
||||
- fix: Set mimetype for video player on web (Christian Kußowski)
|
||||
- fix: Use correct own person for android notification replies (Christian Kußowski)
|
||||
- fix: Wrong placeholder in kab (Christian Kußowski)
|
||||
- refactor: Add Flutter lints (Christian Kußowski)
|
||||
- refactor: Add more linter rules (Christian Kußowski)
|
||||
- refactor: Add more stricter lints (Christian Kußowski)
|
||||
- refactor: Avoid redundant async (Christian Kußowski)
|
||||
- refactor: Avoid unnecessary bool comparison (Christian Kußowski)
|
||||
- refactor: Better UX for create space children (Christian Kußowski)
|
||||
- refactor: Disable custom image resizer for macOS and windows (Christian Kußowski)
|
||||
- refactor: Do show message bubble even for big emotes (Christian Kußowski)
|
||||
- refactor: Enable avoid-returning-widgets lint (Christian Kußowski)
|
||||
- refactor: Enable more strict lints (Christian Kußowski)
|
||||
- refactor: Enable rule avoid dynamic (Christian Kußowski)
|
||||
- refactor: Make file events more fail safe for failed to send (Christian Kußowski)
|
||||
- refactor: Remove animation dependency (Christian Kußowski)
|
||||
- refactor: Remove unused localizations (Christian Kußowski)
|
||||
- refactor: Remove unused translations (Christian Kußowski)
|
||||
- refactor: Use getCryptoIdentityState to check backup state (krille-chan)
|
||||
- refactor: Use more robust and performant way to detect single emoji messages (Christian Kußowski)
|
||||
- refactor: Use native uri data from bytes instead of html (Christian Kußowski)
|
||||
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
FluffyChat 2.5.0 introduces a new homeserver picker for onboarding,
|
||||
better image compression performance and several smaller new features,
|
||||
design adjustments and bug fixes.
|
||||
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.
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
ignore:
|
||||
- handy_window
|
||||
- sqlcipher_flutter_libs
|
||||
|
|
@ -1,327 +0,0 @@
|
|||
# This is the Dendrite configuration file.
|
||||
#
|
||||
# The configuration is split up into sections - each Dendrite component has a
|
||||
# configuration section, in addition to the "global" section which applies to
|
||||
# all components.
|
||||
|
||||
# The version of the configuration file.
|
||||
version: 2
|
||||
|
||||
# Global Matrix configuration. This configuration applies to all components.
|
||||
global:
|
||||
# The domain name of this homeserver.
|
||||
server_name: localhost
|
||||
|
||||
# The path to the signing private key file, used to sign requests and events.
|
||||
# Note that this is NOT the same private key as used for TLS! To generate a
|
||||
# signing key, use "./bin/generate-keys --private-key matrix_key.pem".
|
||||
private_key: matrix_key.pem
|
||||
|
||||
# The paths and expiry timestamps (as a UNIX timestamp in millisecond precision)
|
||||
# to old signing private keys that were formerly in use on this domain. These
|
||||
# keys will not be used for federation request or event signing, but will be
|
||||
# provided to any other homeserver that asks when trying to verify old events.
|
||||
old_private_keys:
|
||||
# - private_key: old_matrix_key.pem
|
||||
# expired_at: 1601024554498
|
||||
|
||||
# How long a remote server can cache our server signing key before requesting it
|
||||
# again. Increasing this number will reduce the number of requests made by other
|
||||
# servers for our key but increases the period that a compromised key will be
|
||||
# considered valid by other homeservers.
|
||||
key_validity_period: 168h0m0s
|
||||
|
||||
# Global database connection pool, for PostgreSQL monolith deployments only. If
|
||||
# this section is populated then you can omit the "database" blocks in all other
|
||||
# sections. For polylith deployments, or monolith deployments using SQLite databases,
|
||||
# you must configure the "database" block for each component instead.
|
||||
database:
|
||||
connection_string:
|
||||
max_open_conns:
|
||||
max_idle_conns:
|
||||
conn_max_lifetime:
|
||||
|
||||
# Configuration for in-memory caches. Caches can often improve performance by
|
||||
# keeping frequently accessed items (like events, identifiers etc.) in memory
|
||||
# rather than having to read them from the database.
|
||||
cache:
|
||||
# The estimated maximum size for the global cache in bytes, or in terabytes,
|
||||
# gigabytes, megabytes or kilobytes when the appropriate 'tb', 'gb', 'mb' or
|
||||
# 'kb' suffix is specified. Note that this is not a hard limit, nor is it a
|
||||
# memory limit for the entire process. A cache that is too small may ultimately
|
||||
# provide little or no benefit.
|
||||
max_size_estimated: 1gb
|
||||
|
||||
# The maximum amount of time that a cache entry can live for in memory before
|
||||
# it will be evicted and/or refreshed from the database. Lower values result in
|
||||
# easier admission of new cache entries but may also increase database load in
|
||||
# comparison to higher values, so adjust conservatively. Higher values may make
|
||||
# it harder for new items to make it into the cache, e.g. if new rooms suddenly
|
||||
# become popular.
|
||||
max_age: 1h
|
||||
|
||||
# The server name to delegate server-server communications to, with optional port
|
||||
# e.g. localhost:443
|
||||
well_known_server_name: ""
|
||||
|
||||
# Lists of domains that the server will trust as identity servers to verify third
|
||||
# party identifiers such as phone numbers and email addresses.
|
||||
trusted_third_party_id_servers:
|
||||
- matrix.org
|
||||
- vector.im
|
||||
|
||||
# Disables federation. Dendrite will not be able to communicate with other servers
|
||||
# in the Matrix federation and the federation API will not be exposed.
|
||||
disable_federation: false
|
||||
|
||||
# Configures the handling of presence events. Inbound controls whether we receive
|
||||
# presence events from other servers, outbound controls whether we send presence
|
||||
# events for our local users to other servers.
|
||||
presence:
|
||||
enable_inbound: false
|
||||
enable_outbound: false
|
||||
|
||||
# Configures phone-home statistics reporting. These statistics contain the server
|
||||
# name, number of active users and some information on your deployment config.
|
||||
# We use this information to understand how Dendrite is being used in the wild.
|
||||
report_stats:
|
||||
enabled: false
|
||||
endpoint: https://matrix.org/report-usage-stats/push
|
||||
|
||||
# Server notices allows server admins to send messages to all users on the server.
|
||||
server_notices:
|
||||
enabled: false
|
||||
# The local part, display name and avatar URL (as a mxc:// URL) for the user that
|
||||
# will send the server notices. These are visible to all users on the deployment.
|
||||
local_part: "_server"
|
||||
display_name: "Server Alerts"
|
||||
avatar_url: ""
|
||||
# The room name to be used when sending server notices. This room name will
|
||||
# appear in user clients.
|
||||
room_name: "Server Alerts"
|
||||
|
||||
# Configuration for NATS JetStream
|
||||
jetstream:
|
||||
# A list of NATS Server addresses to connect to. If none are specified, an
|
||||
# internal NATS server will be started automatically when running Dendrite in
|
||||
# monolith mode. For polylith deployments, it is required to specify the address
|
||||
# of at least one NATS Server node.
|
||||
addresses:
|
||||
# - localhost:4222
|
||||
|
||||
# Persistent directory to store JetStream streams in. This directory should be
|
||||
# preserved across Dendrite restarts.
|
||||
storage_path: ./
|
||||
|
||||
# The prefix to use for stream names for this homeserver - really only useful
|
||||
# if you are running more than one Dendrite server on the same NATS deployment.
|
||||
topic_prefix: Dendrite
|
||||
|
||||
# Configuration for Prometheus metric collection.
|
||||
metrics:
|
||||
enabled: false
|
||||
basic_auth:
|
||||
username: metrics
|
||||
password: metrics
|
||||
|
||||
# Optional DNS cache. The DNS cache may reduce the load on DNS servers if there
|
||||
# is no local caching resolver available for use.
|
||||
dns_cache:
|
||||
enabled: false
|
||||
cache_size: 256
|
||||
cache_lifetime: "5m" # 5 minutes; https://pkg.go.dev/time@master#ParseDuration
|
||||
|
||||
# Configuration for the Appservice API.
|
||||
app_service_api:
|
||||
database:
|
||||
connection_string: file:app_service_api.db
|
||||
|
||||
# Disable the validation of TLS certificates of appservices. This is
|
||||
# not recommended in production since it may allow appservice traffic
|
||||
# to be sent to an insecure endpoint.
|
||||
disable_tls_validation: true
|
||||
|
||||
# Appservice configuration files to load into this homeserver.
|
||||
config_files:
|
||||
# - /path/to/appservice_registration.yaml
|
||||
|
||||
# Configuration for the Client API.
|
||||
client_api:
|
||||
# Prevents new users from being able to register on this homeserver, except when
|
||||
# using the registration shared secret below.
|
||||
registration_disabled: false
|
||||
|
||||
# Prevents new guest accounts from being created. Guest registration is also
|
||||
# disabled implicitly by setting 'registration_disabled' above.
|
||||
guests_disabled: true
|
||||
|
||||
# If set, allows registration by anyone who knows the shared secret, regardless
|
||||
# of whether registration is otherwise disabled.
|
||||
registration_shared_secret: ""
|
||||
|
||||
# Whether to require reCAPTCHA for registration. If you have enabled registration
|
||||
# then this is HIGHLY RECOMMENDED to reduce the risk of your homeserver being used
|
||||
# for coordinated spam attacks.
|
||||
enable_registration_captcha: false
|
||||
|
||||
# Settings for ReCAPTCHA.
|
||||
recaptcha_public_key: ""
|
||||
recaptcha_private_key: ""
|
||||
recaptcha_bypass_secret: ""
|
||||
recaptcha_siteverify_api: ""
|
||||
|
||||
# TURN server information that this homeserver should send to clients.
|
||||
turn:
|
||||
turn_user_lifetime: ""
|
||||
turn_uris:
|
||||
# - turn:turn.server.org?transport=udp
|
||||
# - turn:turn.server.org?transport=tcp
|
||||
turn_shared_secret: ""
|
||||
turn_username: ""
|
||||
turn_password: ""
|
||||
|
||||
# Settings for rate-limited endpoints. Rate limiting kicks in after the threshold
|
||||
# number of "slots" have been taken by requests from a specific host. Each "slot"
|
||||
# will be released after the cooloff time in milliseconds. Server administrators
|
||||
# and appservice users are exempt from rate limiting by default.
|
||||
rate_limiting:
|
||||
enabled: true
|
||||
threshold: 5
|
||||
cooloff_ms: 500
|
||||
exempt_user_ids:
|
||||
# - "@user:domain.com"
|
||||
|
||||
# Configuration for the Federation API.
|
||||
federation_api:
|
||||
database:
|
||||
connection_string: file:federation_api.db
|
||||
|
||||
# How many times we will try to resend a failed transaction to a specific server. The
|
||||
# backoff is 2**x seconds, so 1 = 2 seconds, 2 = 4 seconds, 3 = 8 seconds etc. Once
|
||||
# the max retries are exceeded, Dendrite will no longer try to send transactions to
|
||||
# that server until it comes back to life and connects to us again.
|
||||
send_max_retries: 16
|
||||
|
||||
# Disable the validation of TLS certificates of remote federated homeservers. Do not
|
||||
# enable this option in production as it presents a security risk!
|
||||
disable_tls_validation: false
|
||||
|
||||
# Perspective keyservers to use as a backup when direct key fetches fail. This may
|
||||
# be required to satisfy key requests for servers that are no longer online when
|
||||
# joining some rooms.
|
||||
key_perspectives:
|
||||
- server_name: matrix.org
|
||||
keys:
|
||||
- key_id: ed25519:auto
|
||||
public_key: Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw
|
||||
- key_id: ed25519:a_RXGa
|
||||
public_key: l8Hft5qXKn1vfHrg3p4+W8gELQVo8N13JkluMfmn2sQ
|
||||
|
||||
# This option will control whether Dendrite will prefer to look up keys directly
|
||||
# or whether it should try perspective servers first, using direct fetches as a
|
||||
# last resort.
|
||||
prefer_direct_fetch: false
|
||||
|
||||
# Configuration for the Media API.
|
||||
media_api:
|
||||
database:
|
||||
connection_string: file:media_api.db
|
||||
|
||||
# Storage path for uploaded media. May be relative or absolute.
|
||||
base_path: ./media_store
|
||||
|
||||
# The maximum allowed file size (in bytes) for media uploads to this homeserver
|
||||
# (0 = unlimited). If using a reverse proxy, ensure it allows requests at least
|
||||
#this large (e.g. the client_max_body_size setting in nginx).
|
||||
max_file_size_bytes: 10485760
|
||||
|
||||
# Whether to dynamically generate thumbnails if needed.
|
||||
dynamic_thumbnails: false
|
||||
|
||||
# The maximum number of simultaneous thumbnail generators to run.
|
||||
max_thumbnail_generators: 10
|
||||
|
||||
# A list of thumbnail sizes to be generated for media content.
|
||||
thumbnail_sizes:
|
||||
- width: 32
|
||||
height: 32
|
||||
method: crop
|
||||
- width: 96
|
||||
height: 96
|
||||
method: crop
|
||||
- width: 640
|
||||
height: 480
|
||||
method: scale
|
||||
|
||||
# Configuration for enabling experimental MSCs on this homeserver.
|
||||
mscs:
|
||||
database:
|
||||
connection_string: file:mscs.db
|
||||
mscs:
|
||||
# - msc2836 # (Threading, see https://github.com/matrix-org/matrix-doc/pull/2836)
|
||||
# - msc2946 # (Spaces Summary, see https://github.com/matrix-org/matrix-doc/pull/2946)
|
||||
|
||||
# Configuration for the Sync API.
|
||||
sync_api:
|
||||
# This option controls which HTTP header to inspect to find the real remote IP
|
||||
# address of the client. This is likely required if Dendrite is running behind
|
||||
# a reverse proxy server.
|
||||
# real_ip_header: X-Real-IP
|
||||
database:
|
||||
connection_string: file:sync_api.db
|
||||
|
||||
key_server:
|
||||
database:
|
||||
connection_string: file:key_server.db
|
||||
|
||||
room_server:
|
||||
database:
|
||||
connection_string: file:room_server.db
|
||||
|
||||
|
||||
# Configuration for the User API.
|
||||
user_api:
|
||||
account_database:
|
||||
connection_string: file:user_api.db
|
||||
|
||||
# The cost when hashing passwords on registration/login. Default: 10. Min: 4, Max: 31
|
||||
# See https://pkg.go.dev/golang.org/x/crypto/bcrypt for more information.
|
||||
# Setting this lower makes registration/login consume less CPU resources at the cost
|
||||
# of security should the database be compromised. Setting this higher makes registration/login
|
||||
# consume more CPU resources but makes it harder to brute force password hashes. This value
|
||||
# can be lowered if performing tests or on embedded Dendrite instances (e.g WASM builds).
|
||||
bcrypt_cost: 10
|
||||
|
||||
# The length of time that a token issued for a relying party from
|
||||
# /_matrix/client/r0/user/{userId}/openid/request_token endpoint
|
||||
# is considered to be valid in milliseconds.
|
||||
# The default lifetime is 3600000ms (60 minutes).
|
||||
# openid_token_lifetime_ms: 3600000
|
||||
|
||||
# Configuration for Opentracing.
|
||||
# See https://github.com/matrix-org/dendrite/tree/master/docs/tracing for information on
|
||||
# how this works and how to set it up.
|
||||
tracing:
|
||||
enabled: false
|
||||
jaeger:
|
||||
serviceName: ""
|
||||
disabled: false
|
||||
rpc_metrics: false
|
||||
tags: []
|
||||
sampler: null
|
||||
reporter: null
|
||||
headers: null
|
||||
baggage_restrictions: null
|
||||
throttler: null
|
||||
|
||||
# Logging configuration. The "std" logging type controls the logs being sent to
|
||||
# stdout. The "file" logging type controls logs being written to a log folder on
|
||||
# the disk. Supported log levels are "debug", "info", "warn", "error".
|
||||
logging:
|
||||
- type: std
|
||||
level: info
|
||||
- type: file
|
||||
level: info
|
||||
params:
|
||||
path: ./logs
|
||||
|
||||
|
|
@ -2780,7 +2780,7 @@
|
|||
"createNewAccount": "Neues Konto erstellen",
|
||||
"signUpGreeting": "FluffyChat ist dezentral! Wähle einen Server, auf dem du dein Konto erstellen möchtest, und los geht's!",
|
||||
"signInGreeting": "Du hast bereits ein Konto bei Matrix? Willkommen zurück! Wähle deinen Homeserver aus und melde dich an.",
|
||||
"appIntro": "Mit FluffyChat kannst du mit deinen Freunden chatten. Es ist ein sicherer, dezentralisierter [Matrix]-Messenger! Erfahre mehr auf https://matrix.org wenn du möchtest, oder melde dich einfach an.",
|
||||
"appIntro": "Mit FluffyChat kannst du mit deinen Freunden chatten. Es ist ein sicherer, dezentralisierter [Matrix]-Messenger! Erfahre mehr auf https://matrix.org, wenn du möchtest, oder melde dich einfach an.",
|
||||
"theProcessWasCanceled": "Der Vorgang wurde abgebrochen.",
|
||||
"federationBaseUrl": "Basis-URL der Föderation",
|
||||
"clientWellKnownInformation": "Bekannte Informationen zum Client:",
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@
|
|||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"askSSSSSign": "Selleks, et teist osapoolt identifitseerivat allkirja anda, palun sisesta oma turvahoidla salafraas või taastevõti.",
|
||||
"askSSSSSign": "Selleks, et teist osapoolt identifitseerivat allkirja anda, palun sisesta oma turvahoidla paroolifraas või taastevõti.",
|
||||
"@askSSSSSign": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
@ -339,7 +339,7 @@
|
|||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheNameOfTheGroup": "Muuda jututoa nime",
|
||||
"changeTheNameOfTheGroup": "Muuda vestlusrühma nime",
|
||||
"@changeTheNameOfTheGroup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
@ -489,7 +489,7 @@
|
|||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contactHasBeenInvitedToTheGroup": "Sinu kontakt on kutsutud liituma jututoaga",
|
||||
"contactHasBeenInvitedToTheGroup": "Sinu kontakt on kutsutud liituma vestlusrühma",
|
||||
"@contactHasBeenInvitedToTheGroup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
@ -776,22 +776,22 @@
|
|||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"group": "Jututuba",
|
||||
"group": "Vestlusrühm",
|
||||
"@group": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"groupIsPublic": "Jututuba on avalik",
|
||||
"groupIsPublic": "Vestlusrühm on avalik",
|
||||
"@groupIsPublic": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"groups": "Jututoad",
|
||||
"groups": "Vestlusrühmad",
|
||||
"@groups": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"groupWith": "Jututuba {displayname} kasutajanimega",
|
||||
"groupWith": "Vestlusrühm {displayname} kasutajanimega",
|
||||
"@groupWith": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
|
|
@ -862,7 +862,7 @@
|
|||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"incorrectPassphraseOrKey": "Vigane salafraas või taastevõti",
|
||||
"incorrectPassphraseOrKey": "Vigane paroolifraas või taastevõti",
|
||||
"@incorrectPassphraseOrKey": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
@ -877,7 +877,7 @@
|
|||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"inviteContactToGroup": "Kutsu sõpru ja tuttavaid {groupName} jututoa liikmeks",
|
||||
"inviteContactToGroup": "Kutsu sõpru ja tuttavaid {groupName} liikmeks",
|
||||
"@inviteContactToGroup": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
|
|
@ -1221,7 +1221,7 @@
|
|||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"passphraseOrKey": "salafraas või taastevõti",
|
||||
"passphraseOrKey": "paroolifraas või taastevõti",
|
||||
"@passphraseOrKey": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
@ -1839,7 +1839,7 @@
|
|||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"whoIsAllowedToJoinThisGroup": "Kes võivad selle jututoaga liituda",
|
||||
"whoIsAllowedToJoinThisGroup": "Kes võivad selle vestlusrühmaga liituda",
|
||||
"@whoIsAllowedToJoinThisGroup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
@ -1927,7 +1927,7 @@
|
|||
"type": "String",
|
||||
"description": "Usage hint for the command /dm"
|
||||
},
|
||||
"commandHint_create": "Loo tühi jututuba\nKrüptimise keelamiseks kasuta --no-encryption võtit",
|
||||
"commandHint_create": "Loo tühi vestlusrühm\nKrüptimise keelamiseks kasuta --no-encryption võtit",
|
||||
"@commandHint_create": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /create"
|
||||
|
|
@ -2049,7 +2049,7 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"commandHint_markasgroup": "Märgi jututoaks",
|
||||
"commandHint_markasgroup": "Märgi vestlusrühmaks",
|
||||
"commandHint_markasdm": "Märgi otsevestusluseks antud Matrixi ID jaoks",
|
||||
"whyIsThisMessageEncrypted": "Miks see sõnum pole loetav?",
|
||||
"noKeyForThisMessage": "See võib juhtuda, kui sõnum oli saadetud enne, kui siin seadmes oma kontoga sisse logisid.\n\nSamuti võib juhtuda siis, kui saatja on lugemises selles seadmes blokeerinud või on tekkinud tõrkeid veebiühenduses.\n\nAga mõnes teises seadmes saad seda sõnumit lugeda? Siis sa võid sõnumi sealt üle tõsta. Ava Seadistused -> Seadmed ning kontrolli, et kõik sinu seadmed on omavahel verifitseeritud. Kui avad selle vestluse või jututoa ning mõlemad sessioonid on avatud, siis vajalikud krüptovõtmed saadetakse automaatset.\n\nKas sa soovid vältida krüptovõtmete kadumist väljalogimisel ja seadmete vahetusel? Siis palun kontrolli, et seadistuses on krüptovõtmete varundus sisse lülitatud.",
|
||||
|
|
@ -2130,7 +2130,7 @@
|
|||
"importNow": "Impordi kohe",
|
||||
"importEmojis": "Impordi emojid",
|
||||
"sendTypingNotifications": "Saada kirjutamise teavitusi",
|
||||
"createGroup": "Loo jututuba",
|
||||
"createGroup": "Loo vestlusrühm",
|
||||
"tryAgain": "Proovi uuesti",
|
||||
"chatPermissions": "Vestluse õigused",
|
||||
"chatDescription": "Vestluse kirjeldus",
|
||||
|
|
@ -2166,7 +2166,7 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"inviteGroupChat": "📨 Kutse jututuppa",
|
||||
"inviteGroupChat": "📨 Kutse vestlusrühma",
|
||||
"emoteKeyboardNoRecents": "Hiljuti kasutatud emotikonid kuvame siin...",
|
||||
"@emoteKeyboardNoRecents": {
|
||||
"type": "String",
|
||||
|
|
@ -2201,9 +2201,9 @@
|
|||
"pleaseEnterANumber": "Palun sisesta 0'st suurem number",
|
||||
"kickUserDescription": "See kasutaja on nüüd jutuoast välja müksatud, kuid talle pole seatud suhtluskeeldu. Avaliku jututoa puhul saab ta alati uuesti liituda.",
|
||||
"blockListDescription": "Sul on võimalik blokeerida neid kasutajaid, kes sind segavad. Oma isiklikku blokerimisloendisse lisatud kasutajad ei saa sulle saata sõnumeid ega kutseid.",
|
||||
"createGroupAndInviteUsers": "Lisa jututuba ja kutsu sinna kasutajaid",
|
||||
"createGroupAndInviteUsers": "Lisavestlusrühm ja kutsu sinna kasutajaid",
|
||||
"blockedUsers": "Blokeeritud kasutajad",
|
||||
"groupCanBeFoundViaSearch": "Jututuba on leitav otsinguga",
|
||||
"groupCanBeFoundViaSearch": "Vestlusrühm on leitav otsinguga",
|
||||
"noUsersFoundWithQuery": "Päringuga „{query}“ ei leidunud kahkus ühtegi kasutajat. Palun kontrolli, et päringus poleks vigu.",
|
||||
"@noUsersFoundWithQuery": {
|
||||
"type": "String",
|
||||
|
|
@ -2218,7 +2218,7 @@
|
|||
"commandHint_sendraw": "Saada json oma algupärasel kujul",
|
||||
"wrongRecoveryKey": "Vabandust..., see ei tundu olema korrektne taastevõti.",
|
||||
"blockUsername": "Eira kasutajanime",
|
||||
"groupName": "Jututoa nimi",
|
||||
"groupName": "Vestlusrühma nimi",
|
||||
"databaseMigrationTitle": "Andmebaas on optimeeritud",
|
||||
"searchChatsRooms": "Otsi #vestlusi, @kasutajaid...",
|
||||
"databaseMigrationBody": "Palun oota üks hetk. Natuke võib kuluda aega.",
|
||||
|
|
@ -2442,7 +2442,7 @@
|
|||
"changeGeneralChatSettings": "Muuda vestluse üldiseid seadistusi",
|
||||
"inviteOtherUsers": "Kutsu teisi osalejaid sellesse vestlusesse",
|
||||
"changeTheChatPermissions": "Muuda vestluse õigusi",
|
||||
"changeTheDescriptionOfTheGroup": "Muuda vestluse/jututoa kirjeldust",
|
||||
"changeTheDescriptionOfTheGroup": "Muuda vestluse kirjeldust",
|
||||
"chatPermissionsDescription": "Määra erinevatele kasutajatele selles vestluses vajalikud õigused. Tüüpiliselt on need 0, 50 ja 100 (vastavalt kasutajad, moderaatorid ja peakasutajad), kuid igasugused vahepealsed variatsioonid on ka võimalikud.",
|
||||
"invitedBy": "📩 Kutsujaks {user}",
|
||||
"@invitedBy": {
|
||||
|
|
@ -2791,14 +2791,5 @@
|
|||
"@mute": {
|
||||
"description": "This should be a very short string because there is not much space in the button!"
|
||||
},
|
||||
"createNewChat": "Loo uus vestlus",
|
||||
"reset": "Lähtesta",
|
||||
"supportFluffyChat": "Toeta FluffyChati",
|
||||
"support": "Toeta meid",
|
||||
"iAlreadySupportFluffyChat": "Ma juba toetan FluffyChati arendust",
|
||||
"fluffyChatSupportBannerMessage": "FluffyChat vajab SINU abi!\n❤️❤️❤️\nFluffyChat jääb alati vabaks ja vabalt saadavaks, aga arendus ja serveriteenused vajavad ikkagi rahastamist.\nMeie projekti tulevik sõltub sinust ja teistest kasutajatest, nagu sina.",
|
||||
"skipSupportingFluffyChat": "Jäta FluffyChati toetamine vahele",
|
||||
"iDoNotWantToSupport": "Ma ei soovi toetada",
|
||||
"setLowPriority": "Märgi vähetähtsaks",
|
||||
"unsetLowPriority": "Eemalda märkimine vähetähtsaks"
|
||||
}
|
||||
"createNewChat": "Loo uus vestlus"
|
||||
}
|
||||
|
|
@ -2798,11 +2798,5 @@
|
|||
"description": "This should be a very short string because there is not much space in the button!"
|
||||
},
|
||||
"createNewChat": "Cruthaigh comhrá nua",
|
||||
"reset": "Athshocraigh",
|
||||
"supportFluffyChat": "Tacaigh le FluffyChat",
|
||||
"support": "Tacaíocht",
|
||||
"fluffyChatSupportBannerMessage": "Tá DO chabhair ag teastáil ó FluffyChat!\n❤️❤️❤️\nBeidh FluffyChat saor in aisce i gcónaí, ach cosnaíonn forbairt agus óstáil airgead fós.\nBraitheann todhchaí an tionscadail ar thacaíocht ó dhaoine cosúil leatsa.",
|
||||
"skipSupportingFluffyChat": "Seachain tacú le FluffyChat",
|
||||
"iDoNotWantToSupport": "Nílim ag iarraidh tacú leis",
|
||||
"iAlreadySupportFluffyChat": "Tacaím le FluffyChat cheana féin"
|
||||
}
|
||||
"reset": "Athshocraigh"
|
||||
}
|
||||
|
|
@ -2791,14 +2791,5 @@
|
|||
"@mute": {
|
||||
"description": "This should be a very short string because there is not much space in the button!"
|
||||
},
|
||||
"createNewChat": "Crear nova conversa",
|
||||
"reset": "Restablecer",
|
||||
"supportFluffyChat": "Apoia a FluffyChat",
|
||||
"support": "Axuda",
|
||||
"fluffyChatSupportBannerMessage": "FluffyChat precisa a TÚA axuda!\n❤️❤️❤️\nFluffyChat vai ser sempre gratuíta, pero o desenvolvemento e a hospedaxe costan cartos.\nO futuro do proxecto depende da axuda de persoas coma ti.",
|
||||
"skipSupportingFluffyChat": "Omitir apoiar a FluffyChat",
|
||||
"iDoNotWantToSupport": "Non quero axudar",
|
||||
"iAlreadySupportFluffyChat": "Xa apoiei a FluffyChat",
|
||||
"setLowPriority": "Establecer prioridade baixa",
|
||||
"unsetLowPriority": "Non establecer prioridade baixa"
|
||||
}
|
||||
"createNewChat": "Crear nova conversa"
|
||||
}
|
||||
|
|
@ -2799,13 +2799,5 @@
|
|||
"description": "This should be a very short string because there is not much space in the button!"
|
||||
},
|
||||
"createNewChat": "Opprett ny chat",
|
||||
"reset": "Nullstill",
|
||||
"supportFluffyChat": "Støtt FluffyChat",
|
||||
"support": "Støtte",
|
||||
"fluffyChatSupportBannerMessage": "FluffyChat trenger DIN hjelp!\n❤️❤️❤️\nFluffyChat vil alltid være gratis, men utvikling og drift koster fortsatt penger. \nProsjektets fremtid avhenger av støtte fra folk som deg.",
|
||||
"skipSupportingFluffyChat": "Hopp over støtte til FluffyChat",
|
||||
"iDoNotWantToSupport": "Jeg ønsker ikke å støtte",
|
||||
"iAlreadySupportFluffyChat": "Jeg støtter allerede FluffyChat",
|
||||
"setLowPriority": "Sett lav prioritet",
|
||||
"unsetLowPriority": "Fjern lav prioritet"
|
||||
}
|
||||
"reset": "Nullstill"
|
||||
}
|
||||
|
|
@ -2792,12 +2792,8 @@
|
|||
},
|
||||
"createNewChat": "Creëer nieuw chat",
|
||||
"reset": "Herstellen",
|
||||
"fluffyChatSupportBannerMessage": "Fluffy Chat heeft JOUW hulp nodig. _\n❤️❤️❤️\nFluffyChat zal altijd gratis zijn, maar ontwikkeling en hosting kost geld.\nDe toekomst van het project hangt af van steun van mensen zoals jij.",
|
||||
"fluffyChatSupportBannerMessage": "Fluffy Chat heeft JOUW hulp nodig. _\n\nFluffyChat zal altijd gratis zijn, maar ontwikkeling en hosting kost geld.\nDe toekomst van het project hangt af van steun van mensen zoals jij.",
|
||||
"skipSupportingFluffyChat": "FluffyChat steunen overslaan",
|
||||
"iDoNotWantToSupport": "Ik wil niet ondersteunen",
|
||||
"iAlreadySupportFluffyChat": "Ik steun FluffyChat al",
|
||||
"supportFluffyChat": "FluffyChat steunen",
|
||||
"support": "Steunen",
|
||||
"setLowPriority": "Lage prioriteit instellen",
|
||||
"unsetLowPriority": "Lage prioriteit uitschakelen"
|
||||
"iAlreadySupportFluffyChat": "Ik steun FluffyChat al"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2795,10 +2795,8 @@
|
|||
"reset": "重置",
|
||||
"supportFluffyChat": "支持 FluffyChat",
|
||||
"support": "支持",
|
||||
"fluffyChatSupportBannerMessage": "FluffyChat 需要您的帮助!\n❤️❤️❤️\nFluffyChat 将始终免费,但开发和托管仍然要花钱。\n项目的未来仰赖像您这样的人的支持。",
|
||||
"fluffyChatSupportBannerMessage": "❤️❤️❤️ FluffyChat 需要您的帮助! ❤️❤️❤️\n\nFluffyChat 将始终免费,但开发和托管仍然要花钱。\n项目的未来仰赖像您这样的人的支持。",
|
||||
"skipSupportingFluffyChat": "跳过支持 FluffyChar",
|
||||
"iDoNotWantToSupport": "我不想支持",
|
||||
"iAlreadySupportFluffyChat": "我已支持 FluffyChat",
|
||||
"setLowPriority": "设置低优先级",
|
||||
"unsetLowPriority": "取消设置低优先级"
|
||||
"iAlreadySupportFluffyChat": "我已支持 FluffyChat"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -388,48 +388,51 @@ class InputBar extends StatelessWidget {
|
|||
focusNode: focusNode,
|
||||
textEditingController: controller,
|
||||
optionsBuilder: getSuggestions,
|
||||
fieldViewBuilder: (context, controller, focusNode, _) => TextField(
|
||||
controller: controller,
|
||||
focusNode: focusNode,
|
||||
readOnly: readOnly,
|
||||
contextMenuBuilder: (c, e) => MarkdownContextBuilder(
|
||||
editableTextState: e,
|
||||
fieldViewBuilder: (context, controller, focusNode, _) => Semantics(
|
||||
identifier: 'chat_input_field',
|
||||
child: TextField(
|
||||
controller: controller,
|
||||
),
|
||||
contentInsertionConfiguration: ContentInsertionConfiguration(
|
||||
onContentInserted: (KeyboardInsertedContent content) {
|
||||
final data = content.data;
|
||||
if (data == null) return;
|
||||
focusNode: focusNode,
|
||||
readOnly: readOnly,
|
||||
contextMenuBuilder: (c, e) => MarkdownContextBuilder(
|
||||
editableTextState: e,
|
||||
controller: controller,
|
||||
),
|
||||
contentInsertionConfiguration: ContentInsertionConfiguration(
|
||||
onContentInserted: (KeyboardInsertedContent content) {
|
||||
final data = content.data;
|
||||
if (data == null) return;
|
||||
|
||||
final file = MatrixFile(
|
||||
mimeType: content.mimeType,
|
||||
bytes: data,
|
||||
name: content.uri.split('/').last,
|
||||
);
|
||||
room.sendFileEvent(file, shrinkImageMaxDimension: 1600);
|
||||
final file = MatrixFile(
|
||||
mimeType: content.mimeType,
|
||||
bytes: data,
|
||||
name: content.uri.split('/').last,
|
||||
);
|
||||
room.sendFileEvent(file, shrinkImageMaxDimension: 1600);
|
||||
},
|
||||
),
|
||||
minLines: minLines,
|
||||
maxLines: maxLines,
|
||||
keyboardType: keyboardType,
|
||||
textInputAction: textInputAction,
|
||||
autofocus: autofocus!,
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter((maxPDUSize / 3).floor()),
|
||||
],
|
||||
onSubmitted: (text) {
|
||||
// fix for library for now
|
||||
// it sets the types for the callback incorrectly
|
||||
onSubmitted!(text);
|
||||
},
|
||||
maxLength: AppSettings.textMessageMaxLength.value,
|
||||
decoration: decoration,
|
||||
onChanged: (text) {
|
||||
// fix for the library for now
|
||||
// it sets the types for the callback incorrectly
|
||||
onChanged!(text);
|
||||
},
|
||||
textCapitalization: TextCapitalization.sentences,
|
||||
),
|
||||
minLines: minLines,
|
||||
maxLines: maxLines,
|
||||
keyboardType: keyboardType,
|
||||
textInputAction: textInputAction,
|
||||
autofocus: autofocus!,
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter((maxPDUSize / 3).floor()),
|
||||
],
|
||||
onSubmitted: (text) {
|
||||
// fix for library for now
|
||||
// it sets the types for the callback incorrectly
|
||||
onSubmitted!(text);
|
||||
},
|
||||
maxLength: AppSettings.textMessageMaxLength.value,
|
||||
decoration: decoration,
|
||||
onChanged: (text) {
|
||||
// fix for the library for now
|
||||
// it sets the types for the callback incorrectly
|
||||
onChanged!(text);
|
||||
},
|
||||
textCapitalization: TextCapitalization.sentences,
|
||||
),
|
||||
optionsViewBuilder: (c, onSelected, s) {
|
||||
final suggestions = s.toList();
|
||||
|
|
|
|||
|
|
@ -578,44 +578,42 @@ class ChatListController extends State<ChatList>
|
|||
],
|
||||
),
|
||||
),
|
||||
if (!room.isLowPriority)
|
||||
PopupMenuItem(
|
||||
value: ChatContextAction.favorite,
|
||||
child: Row(
|
||||
mainAxisSize: .min,
|
||||
children: [
|
||||
Icon(
|
||||
room.isFavourite ? Icons.push_pin : Icons.push_pin_outlined,
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Text(
|
||||
room.isFavourite
|
||||
? L10n.of(context).unpin
|
||||
: L10n.of(context).pin,
|
||||
),
|
||||
],
|
||||
),
|
||||
PopupMenuItem(
|
||||
value: ChatContextAction.favorite,
|
||||
child: Row(
|
||||
mainAxisSize: .min,
|
||||
children: [
|
||||
Icon(
|
||||
room.isFavourite ? Icons.push_pin : Icons.push_pin_outlined,
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Text(
|
||||
room.isFavourite
|
||||
? L10n.of(context).unpin
|
||||
: L10n.of(context).pin,
|
||||
),
|
||||
],
|
||||
),
|
||||
if (!room.isFavourite)
|
||||
PopupMenuItem(
|
||||
value: ChatContextAction.lowPriority,
|
||||
child: Row(
|
||||
mainAxisSize: .min,
|
||||
children: [
|
||||
Icon(
|
||||
room.isLowPriority
|
||||
? Icons.low_priority
|
||||
: Icons.low_priority_outlined,
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Text(
|
||||
room.isLowPriority
|
||||
? L10n.of(context).unsetLowPriority
|
||||
: L10n.of(context).setLowPriority,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
PopupMenuItem(
|
||||
value: ChatContextAction.lowPriority,
|
||||
child: Row(
|
||||
mainAxisSize: .min,
|
||||
children: [
|
||||
Icon(
|
||||
room.isLowPriority
|
||||
? Icons.low_priority
|
||||
: Icons.low_priority_outlined,
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Text(
|
||||
room.isLowPriority
|
||||
? L10n.of(context).unsetLowPriority
|
||||
: L10n.of(context).setLowPriority,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
if (spacesWithPowerLevels.isNotEmpty)
|
||||
PopupMenuItem(
|
||||
value: ChatContextAction.addToSpace,
|
||||
|
|
|
|||
|
|
@ -9,13 +9,16 @@ class StartChatFab extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return FloatingActionButton(
|
||||
heroTag: 'start_chat_fab',
|
||||
backgroundColor: Theme.of(context).colorScheme.primary,
|
||||
foregroundColor: Theme.of(context).colorScheme.onPrimary,
|
||||
onPressed: () => context.go('/rooms/newprivatechat'),
|
||||
tooltip: L10n.of(context).newChat,
|
||||
child: const Icon(Icons.edit_square),
|
||||
return Semantics(
|
||||
identifier: 'start_chat_fab',
|
||||
child: FloatingActionButton(
|
||||
heroTag: 'start_chat_fab',
|
||||
backgroundColor: Theme.of(context).colorScheme.primary,
|
||||
foregroundColor: Theme.of(context).colorScheme.onPrimary,
|
||||
onPressed: () => context.go('/rooms/newprivatechat'),
|
||||
tooltip: L10n.of(context).newChat,
|
||||
child: const Icon(Icons.edit_square),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -339,7 +339,7 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
|
|||
}
|
||||
|
||||
Future<void> createVoipPlugin() async {
|
||||
if (!AppSettings.experimentalVoip.value) {
|
||||
if (AppSettings.experimentalVoip.value) {
|
||||
voipPlugin = null;
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
91
pubspec.lock
91
pubspec.lock
|
|
@ -242,7 +242,7 @@ packages:
|
|||
source: hosted
|
||||
version: "1.0.2"
|
||||
cupertino_icons:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: cupertino_icons
|
||||
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
|
||||
|
|
@ -462,6 +462,11 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_driver:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_foreground_task:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -669,6 +674,11 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.0"
|
||||
fuchsia_remote_debug_protocol:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
geoclue:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -901,6 +911,11 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.6.0"
|
||||
integration_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
intl:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -998,7 +1013,7 @@ packages:
|
|||
source: hosted
|
||||
version: "1.6.2"
|
||||
linkify:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: linkify
|
||||
sha256: "4139ea77f4651ab9c315b577da2dd108d9aa0bd84b5d03d33323f1970c645832"
|
||||
|
|
@ -1237,6 +1252,54 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.0"
|
||||
permission_handler:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: permission_handler
|
||||
sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "12.0.1"
|
||||
permission_handler_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_android
|
||||
sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "13.0.1"
|
||||
permission_handler_apple:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_apple
|
||||
sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.4.7"
|
||||
permission_handler_html:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_html
|
||||
sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.3+5"
|
||||
permission_handler_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_platform_interface
|
||||
sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.3.0"
|
||||
permission_handler_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_windows
|
||||
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.1"
|
||||
petitparser:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -1738,6 +1801,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
sync_http:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sync_http
|
||||
sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.1"
|
||||
synchronized:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -2046,18 +2117,18 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: wakelock_plus
|
||||
sha256: e4e125b7c1a2f0e491e5452afdc0e25ab77b2d2775a7caa231fcc1c1f2162c47
|
||||
sha256: "9296d40c9adbedaba95d1e704f4e0b434be446e2792948d0e4aa977048104228"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.5.0"
|
||||
version: "1.4.0"
|
||||
wakelock_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: wakelock_plus_platform_interface
|
||||
sha256: "24b84143787220a403491c2e5de0877fbbb87baf3f0b18a2a988973863db4b03"
|
||||
sha256: "036deb14cd62f558ca3b73006d52ce049fabcdcb2eddfe0bf0fe4e8a943b5cf2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.4.0"
|
||||
version: "1.3.0"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -2099,6 +2170,14 @@ packages:
|
|||
url: "https://github.com/google/webcrypto.dart.git"
|
||||
source: git
|
||||
version: "0.6.0"
|
||||
webdriver:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webdriver
|
||||
sha256: "2f3a14ca026957870cfd9c635b83507e0e51d8091568e90129fbf805aba7cade"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.0"
|
||||
webkit_inspection_protocol:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ publish_to: none
|
|||
# On version bump please also increase:
|
||||
# 1. The build number (for F-Droid)
|
||||
# 2. The version in /snap/snapcraft.yaml
|
||||
version: 2.5.0+3547
|
||||
version: 2.4.0+3546
|
||||
|
||||
environment:
|
||||
sdk: ">=3.11.1 <4.0.0"
|
||||
|
|
@ -17,6 +17,7 @@ dependencies:
|
|||
chewie: ^1.13.0
|
||||
collection: ^1.18.0
|
||||
cross_file: ^0.3.5
|
||||
cupertino_icons: any
|
||||
desktop_drop: ^0.7.0
|
||||
desktop_notifications: ^0.6.3
|
||||
device_info_plus: ^12.3.0
|
||||
|
|
@ -49,6 +50,7 @@ dependencies:
|
|||
intl: any
|
||||
just_audio: ^0.10.5
|
||||
latlong2: ^0.9.1
|
||||
linkify: ^5.0.0
|
||||
matrix: ^6.2.0
|
||||
mime: ^2.0.0
|
||||
native_imaging: ^0.4.0
|
||||
|
|
@ -57,6 +59,7 @@ dependencies:
|
|||
particles_network: ^1.9.3
|
||||
path: ^1.9.0
|
||||
path_provider: ^2.1.2
|
||||
permission_handler: ^12.0.1
|
||||
pretty_qr_code: ^3.6.0
|
||||
provider: ^6.0.2
|
||||
punycode: ^1.0.0
|
||||
|
|
@ -77,7 +80,7 @@ dependencies:
|
|||
url_launcher: ^6.3.2
|
||||
video_compress: ^3.1.4
|
||||
video_player: ^2.11.1
|
||||
wakelock_plus: ^1.5.0
|
||||
wakelock_plus: ^1.3.3
|
||||
webrtc_interface: ^1.3.0
|
||||
|
||||
dev_dependencies:
|
||||
|
|
@ -87,6 +90,8 @@ dev_dependencies:
|
|||
flutter_test:
|
||||
sdk: flutter
|
||||
import_sorter: ^4.6.0
|
||||
integration_test:
|
||||
sdk: flutter
|
||||
license_checker: ^1.6.2
|
||||
translations_cleaner: ^0.1.1
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
flutter doctor
|
||||
flutter config --enable-windows-desktop
|
||||
flutter clean
|
||||
flutter pub get
|
||||
|
||||
flutter build windows --release -v
|
||||
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
GITLAB_PROJECT_ID="16112282"
|
||||
|
||||
# repo directory for build
|
||||
mkdir fdroid/repo
|
||||
# ... and for deployment
|
||||
mkdir repo
|
||||
|
||||
git fetch
|
||||
|
||||
# building nightly repo
|
||||
|
||||
cd fdroid
|
||||
|
||||
cp config.nightly.py config.py
|
||||
|
||||
PIPELINES="$(curl https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/pipelines\?ref=main\&status=success\&order_by=updated_at | jq '.[].id' | head -n3)"
|
||||
|
||||
cp ../build/android/app-release.apk repo/fluffychat-latest.apk
|
||||
|
||||
for PIPELINE in $PIPELINES
|
||||
do
|
||||
JOB="$(curl https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/pipelines/$PIPELINE/jobs | jq -r '.[] | select(.name == "build_android_apk").id')"
|
||||
if [ -n $JOB ]; then
|
||||
URI="https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/jobs/$JOB/artifacts/build/android/app-release.apk"
|
||||
FILENAME="fluffychat-$PIPELINE.apk"
|
||||
echo "Downloading $FILENAME from $URI ..."
|
||||
wget --output-document="$FILENAME" "$URI"
|
||||
mv "$FILENAME" repo
|
||||
fi
|
||||
done
|
||||
|
||||
fdroid update --rename-apks
|
||||
mkdir /fdroid && fdroid deploy
|
||||
rm -rf /fdroid/archive
|
||||
cd .. && mv -v /fdroid repo/nightly
|
||||
|
||||
# building stable + RC repo
|
||||
|
||||
rm -rf /fdroid fdroid/repo
|
||||
|
||||
mkdir fdroid/repo
|
||||
|
||||
cd fdroid
|
||||
rm -f repo/*.apk
|
||||
|
||||
cp config.stable.py config.py
|
||||
|
||||
PIPELINES="$(curl https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/pipelines\?scope=tags\&status=success\&order_by=updated_at | jq '.[].id' | head -n3)"
|
||||
|
||||
for PIPELINE in $PIPELINES
|
||||
do
|
||||
JOB="$(curl https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/pipelines/$PIPELINE/jobs | jq -r '.[] | select(.name == "build_android_apk").id')"
|
||||
if [ -n $JOB ]; then
|
||||
URI="https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/jobs/$JOB/artifacts/build/android/app-release.apk"
|
||||
FILENAME="fluffychat-$PIPELINE.apk"
|
||||
echo "Downloading $FILENAME from $URI ..."
|
||||
wget --output-document="$FILENAME" "$URI"
|
||||
mv "$FILENAME" repo
|
||||
fi
|
||||
done
|
||||
|
||||
fdroid update --rename-apks
|
||||
mkdir /fdroid && fdroid deploy
|
||||
rm -rf /fdroid/archive
|
||||
cd .. && mv -v /fdroid repo/stable
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# generate a temporary signing key adn apply its configuration
|
||||
cd android
|
||||
KEYFILE="$(pwd)/key.jks"
|
||||
echo "Generating signing configuration with $KEYFILE..."
|
||||
keytool -genkey -keyalg RSA -alias key -keysize 4096 -dname "cn=FluffyChat CI, ou=Head of bad integration tests, o=FluffyChat HQ, c=TLH" -keypass FLUFFYCHAT -storepass FLUFFYCHAT -validity 1 -keystore "$KEYFILE" -storetype "pkcs12"
|
||||
echo "storePassword=FLUFFYCHAT" >> key.properties
|
||||
echo "keyPassword=FLUFFYCHAT" >> key.properties
|
||||
echo "keyAlias=key" >> key.properties
|
||||
echo "storeFile=$KEYFILE" >> key.properties
|
||||
ls | grep key
|
||||
cd ..
|
||||
|
||||
# build release mode APK
|
||||
flutter pub get
|
||||
flutter build apk --release
|
||||
|
||||
# install and launch APK
|
||||
flutter install
|
||||
adb shell am start -n chat.fluffy.fluffychat/chat.fluffy.fluffychat.MainActivity
|
||||
|
||||
sleep 5
|
||||
|
||||
# check whether FluffyChat runs
|
||||
adb shell ps | awk '{print $9}' | grep chat.fluffy.fluffychat
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
|
||||
while ! curl -XGET "http://localhost/_matrix/client/v3/login" >/dev/null 2>/dev/null; do
|
||||
echo "Waiting for homeserver to be available... (GET http://localhost/_matrix/client/v3/login)"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# create users
|
||||
curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER1_NAME\", \"password\":\"$USER1_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://localhost/_matrix/client/r0/register"
|
||||
curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER2_NAME\", \"password\":\"$USER2_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://localhost/_matrix/client/r0/register"
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
if ! command -v apk &>/dev/null; then
|
||||
apt update && apt install -y -qq docker.io ldnsutils grep scrcpy ffmpeg
|
||||
else
|
||||
apk update && apk add docker drill grep scrcpy ffmpeg
|
||||
fi
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
docker run -d \
|
||||
-e CONDUIT_SERVER_NAME="localhost" \
|
||||
-e CONDUIT_PORT="8008" \
|
||||
-e CONDUIT_DATABASE_BACKEND="rocksdb" \
|
||||
-e CONDUIT_ALLOW_REGISTRATION=true \
|
||||
-e CONDUIT_ALLOW_FEDERATION=true \
|
||||
-e CONDUIT_MAX_REQUEST_SIZE="20000000" \
|
||||
-e CONDUIT_TRUSTED_SERVERS="[\"conduit.rs\"]" \
|
||||
-e CONDUIT_MAX_CONCURRENT_REQUESTS="100" \
|
||||
-e CONDUIT_LOG="info,rocket=off,_=off,sled=off" \
|
||||
--name conduit -p 80:8008 matrixconduit/matrix-conduit:latest
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
chown -R 991:991 integration_test/dendrite
|
||||
|
||||
# creating integration test SSL certificates
|
||||
docker run --rm --entrypoint="" \
|
||||
--volume="$(pwd)/integration_test/dendrite/data":/mnt:rw \
|
||||
matrixdotorg/dendrite-monolith:latest \
|
||||
/usr/bin/generate-keys \
|
||||
-private-key /mnt/matrix_key.pem \
|
||||
-tls-cert /mnt/server.crt \
|
||||
-tls-key /mnt/server.key
|
||||
|
||||
docker run -d --volume="$(pwd)/integration_test/dendrite/data":/etc/dendrite:rw \
|
||||
--name dendrite -p 80:8008 matrixdotorg/dendrite-monolith:latest -really-enable-open-registration
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
docker run -d --name synapse --tmpfs /data \
|
||||
--volume="$(pwd)/integration_test/synapse/data/homeserver.yaml":/data/homeserver.yaml:rw \
|
||||
--volume="$(pwd)/integration_test/synapse/data/localhost.log.config":/data/localhost.log.config:rw \
|
||||
-p 80:80 matrixdotorg/synapse:latest
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
chmod 777 -R /dev/kvm
|
||||
adb start-server
|
||||
emulator -avd test -wipe-data -no-audio -no-boot-anim -no-window -accel on -gpu swiftshader_indirect
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
cp -r android/fastlane fdroid/metadata/chat.fluffy.fluffychat
|
||||
cd fdroid
|
||||
echo $FDROID_KEY | base64 --decode --ignore-garbage > key.jks
|
||||
echo $FDROID_NIGHTLY_KEY | base64 --decode --ignore-garbage > key.nightly.jks
|
||||
echo "keypass=\"${FDROID_KEY_PASS}\"" >> config.stable.py
|
||||
echo "keystorepass=\"${FDROID_KEY_PASS}\"" >> config.stable.py
|
||||
echo "keypass=\"${FDROID_NIGHTLY_KEY_PASS}\"" >> config.nightly.py
|
||||
echo "keystorepass=\"${FDROID_NIGHTLY_KEY_PASS}\"" >> config.nightly.py
|
||||
chmod 600 config.stable.py key.jks config.nightly.py key.nightly.jks
|
||||
cd ..
|
||||
23
scripts/run_maestro_android.sh
Executable file
23
scripts/run_maestro_android.sh
Executable file
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
source .maestro/data/integration_users.env
|
||||
|
||||
docker rm -f synapse 2>/dev/null || true
|
||||
|
||||
docker run -d --name synapse --tmpfs /data \
|
||||
--volume="$(pwd)/.maestro/data/synapse/homeserver.yaml":/data/homeserver.yaml:rw \
|
||||
--volume="$(pwd)/.maestro/data/synapse/localhost.log.config":/data/localhost.log.config:rw \
|
||||
-p 80:80 matrixdotorg/synapse:latest
|
||||
|
||||
while ! curl -XGET "http://$HOMESERVER/_matrix/client/v3/login" >/dev/null 2>/dev/null; do
|
||||
echo "Waiting for homeserver to be available... (GET http://$HOMESERVER/_matrix/client/v3/login)"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "Homeserver is online!"
|
||||
|
||||
# create users
|
||||
curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER1_NAME\", \"password\":\"$USER1_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://$HOMESERVER/_matrix/client/r0/register"
|
||||
curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER2_NAME\", \"password\":\"$USER2_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://$HOMESERVER/_matrix/client/r0/register"
|
||||
|
||||
maestro test .maestro/ --env HOMESERVER=10.0.2.2 --env USER1_NAME=${USER1_NAME} --env USER1_PW=${USER1_PW}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh -ve
|
||||
flutter pub upgrade --major-versions
|
||||
flutter pub get
|
||||
dart fix --apply
|
||||
flutter format lib test
|
||||
flutter pub run import_sorter:main --no-comments
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
name: fluffychat
|
||||
title: FluffyChat
|
||||
base: core24
|
||||
version: 2.5.0
|
||||
version: 2.4.0
|
||||
license: AGPL-3.0
|
||||
summary: The cutest messenger in the Matrix network
|
||||
description: |
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
|
||||
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
|
||||
#include <geolocator_windows/geolocator_windows.h>
|
||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||
#include <record_windows/record_windows_plugin_c_api.h>
|
||||
#include <screen_retriever_windows/screen_retriever_windows_plugin_c_api.h>
|
||||
#include <share_plus/share_plus_windows_plugin_c_api.h>
|
||||
|
|
@ -40,6 +41,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
|||
registry->GetRegistrarForPlugin("FlutterWebRTCPlugin"));
|
||||
GeolocatorWindowsRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("GeolocatorWindows"));
|
||||
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
|
||||
RecordWindowsPluginCApiRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("RecordWindowsPluginCApi"));
|
||||
ScreenRetrieverWindowsPluginCApiRegisterWithRegistrar(
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
|||
flutter_secure_storage_windows
|
||||
flutter_webrtc
|
||||
geolocator_windows
|
||||
permission_handler_windows
|
||||
record_windows
|
||||
screen_retriever_windows
|
||||
share_plus
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue