Compare commits
No commits in common. "main" and "v0.41.4" have entirely different histories.
13
.gitignore
vendored
@ -10,10 +10,11 @@
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
lib/generated_plugin_registrant.dart
|
||||
prime
|
||||
|
||||
# libolm package
|
||||
/assets/js/package
|
||||
/assets/js/package/*
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
@ -37,6 +38,7 @@ prime
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
docs/build/
|
||||
docs/.jekyll-cache/
|
||||
docs/_site/
|
||||
@ -53,11 +55,4 @@ android/keys.json
|
||||
android/Gemfile.lock
|
||||
lib/l10n_old
|
||||
ios/Flutter/.last_build_id
|
||||
ios/Podfile.lock
|
||||
|
||||
/windows/out
|
||||
/winuwp/out
|
||||
/linux/out
|
||||
/macos/out
|
||||
.vs
|
||||
olm
|
||||
ios/Podfile.lock
|
390
.gitlab-ci.yml
@ -1,7 +1,8 @@
|
||||
variables:
|
||||
FLUTTER_VERSION: 3.10.0
|
||||
image:
|
||||
name: cirrusci/flutter
|
||||
|
||||
image: ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION}
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: recursive
|
||||
|
||||
.shared_windows_runners:
|
||||
tags:
|
||||
@ -10,271 +11,143 @@ image: ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION}
|
||||
- windows-1809
|
||||
|
||||
stages:
|
||||
- test
|
||||
- build
|
||||
- coverage
|
||||
- release
|
||||
- deploy
|
||||
|
||||
code_analyze:
|
||||
stage: test
|
||||
script:
|
||||
- flutter pub get
|
||||
- dart run import_sorter:main --no-comments --exit-if-changed
|
||||
- dart format lib/ test/ --set-exit-if-changed
|
||||
- flutter analyze
|
||||
- git apply ./scripts/enable-android-google-services.patch
|
||||
- flutter pub get
|
||||
- flutter analyze
|
||||
- flutter pub run dart_code_metrics:metrics lib -r gitlab > code-quality-report.json || true
|
||||
artifacts:
|
||||
reports:
|
||||
codequality: code-quality-report.json
|
||||
stage: coverage
|
||||
script: [./scripts/code_analyze.sh]
|
||||
|
||||
widget_test:
|
||||
stage: test
|
||||
code_analyze_beta:
|
||||
extends: code_analyze
|
||||
image:
|
||||
name: cirrusci/flutter:beta
|
||||
allow_failure: true
|
||||
|
||||
test:
|
||||
stage: coverage
|
||||
script: [flutter test]
|
||||
|
||||
# the basic integration test configuration testing FLOSS builds on Synapse
|
||||
.integration_test:
|
||||
image: registry.gitlab.com/famedly/company/frontend/flutter-dockerimages/integration/stable:${FLUTTER_VERSION}
|
||||
stage: test
|
||||
services:
|
||||
- name: docker:dind
|
||||
alias: docker
|
||||
parallel:
|
||||
matrix:
|
||||
- HOMESERVER_IMPLEMENTATION:
|
||||
- synapse
|
||||
- dendrite
|
||||
- conduit
|
||||
variables:
|
||||
# activate container-to-container networking
|
||||
FF_NETWORK_PER_BUILD: "true"
|
||||
# Tell docker CLI how to talk to Docker daemon.
|
||||
DOCKER_HOST: tcp://docker:2375/
|
||||
# Use the btrfs driver for improved performance.
|
||||
DOCKER_DRIVER: btrfs
|
||||
# Disable TLS since we're running inside local network.
|
||||
DOCKER_TLS_CERTDIR: ""
|
||||
HOMESERVER: docker
|
||||
before_script:
|
||||
- scripts/integration-prepare-host.sh
|
||||
# create test user environment variables
|
||||
- source scripts/integration-create-environment-variables.sh
|
||||
# create Synapse instance
|
||||
- scripts/integration-server-${HOMESERVER_IMPLEMENTATION}.sh
|
||||
# properly set the homeserver IP and create test users
|
||||
- scripts/integration-prepare-homeserver.sh
|
||||
script:
|
||||
# start AVD and keep running in background
|
||||
- scripts/integration-start-avd.sh &
|
||||
- flutter pub get
|
||||
- scrcpy --no-display --record video.mkv &
|
||||
- flutter test integration_test --dart-define=HOMESERVER=$HOMESERVER --dart-define=USER1_NAME=$USER1_NAME --dart-define=USER2_NAME=$USER2_NAME --dart-define=USER1_PW=$USER1_PW --dart-define=USER2_PW=$USER2_PW || ( sleep 10 && exit 1 )
|
||||
after_script:
|
||||
- ffmpeg -i video.mkv -vf scale=iw/2:-2 -crf 40 -b:v 2000k -preset fast video.mp4 || true
|
||||
timeout: 30m
|
||||
retry: 2
|
||||
only:
|
||||
- tags
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
- video.mp4
|
||||
tags:
|
||||
- docker
|
||||
- famedly
|
||||
|
||||
# integration tests for Linux builds
|
||||
### disabled because of Linux headless issues
|
||||
.integration_test_linux:
|
||||
extends: .integration_test
|
||||
parallel:
|
||||
matrix:
|
||||
- HOMESERVER_IMPLEMENTATION:
|
||||
- conduit
|
||||
script:
|
||||
- apt-get update
|
||||
- apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libsecret-1-dev libjsoncpp-dev
|
||||
- flutter pub get
|
||||
- flutter test integration_test -d linux --dart-define=HOMESERVER=$HOMESERVER --dart-define=USER1_NAME=$USER1_NAME --dart-define=USER2_NAME=$USER2_NAME --dart-define=USER1_PW=$USER1_PW --dart-define=USER2_PW=$USER2_PW || ( sleep 10 && exit 1 )
|
||||
after_script: []
|
||||
artifacts:
|
||||
|
||||
# extending the default tests to test the Google-flavored builds
|
||||
.integration_test_proprietary:
|
||||
extends: .integration_test
|
||||
parallel:
|
||||
matrix:
|
||||
- HOMESERVER_IMPLEMENTATION:
|
||||
- conduit
|
||||
script:
|
||||
# start AVD and keep running in background
|
||||
- scripts/integration-start-avd.sh &
|
||||
- git apply ./scripts/enable-android-google-services.patch
|
||||
- flutter pub get
|
||||
- scrcpy --no-display --record video.mkv &
|
||||
- flutter test integration_test --dart-define=HOMESERVER=$HOMESERVER --dart-define=USER1_NAME=$USER1_NAME --dart-define=USER2_NAME=$USER2_NAME --dart-define=USER1_PW=$USER1_PW --dart-define=USER2_PW=$USER2_PW || ( sleep 10 && exit 1 )
|
||||
|
||||
release_mode_launches:
|
||||
parallel:
|
||||
matrix:
|
||||
- FLAVOR:
|
||||
- floss
|
||||
- proprietary
|
||||
image: registry.gitlab.com/famedly/company/frontend/flutter-dockerimages/integration/stable:${FLUTTER_VERSION}
|
||||
stage: test
|
||||
before_script:
|
||||
- |
|
||||
if [ "$FLAVOR" == "proprietary" ]; then
|
||||
git apply ./scripts/enable-android-google-services.patch
|
||||
fi
|
||||
script:
|
||||
# start AVD and keep running in background
|
||||
- scripts/integration-start-avd.sh &
|
||||
# generate temporary release build configuration and ensure app launches
|
||||
- scripts/integration-check-release-build.sh
|
||||
timeout: 20m
|
||||
only:
|
||||
- tags
|
||||
tags:
|
||||
- docker
|
||||
- famedly
|
||||
|
||||
build_web:
|
||||
stage: build
|
||||
stage: coverage
|
||||
before_script:
|
||||
[sudo apt update && sudo apt install curl -y, ./scripts/prepare-web.sh]
|
||||
script:
|
||||
- flutter build web --release --verbose --source-maps
|
||||
script: [./scripts/build-web.sh]
|
||||
artifacts:
|
||||
paths:
|
||||
- build/web/
|
||||
|
||||
# yes, we *do* build a Windows DLL on Linux. More reliable.
|
||||
build_olm_windows:
|
||||
image: archlinux:latest
|
||||
stage: test
|
||||
before_script:
|
||||
- pacman-key --init
|
||||
- pacman --noconfirm -Sy mingw-w64 cmake git base-devel
|
||||
script:
|
||||
- ./scripts/build-olm-windows.sh
|
||||
- mv olm/build/libolm.dll .
|
||||
artifacts:
|
||||
paths:
|
||||
- libolm.dll
|
||||
build_web_beta:
|
||||
extends: build_web
|
||||
image:
|
||||
name: cirrusci/flutter:beta
|
||||
allow_failure: true
|
||||
only:
|
||||
- main
|
||||
- tags
|
||||
|
||||
build_windows:
|
||||
extends:
|
||||
- .shared_windows_runners
|
||||
stage: test
|
||||
before_script:
|
||||
- ./scripts/prepare-windows.ps1
|
||||
# workarounding artifacts download being broken
|
||||
- $response = Invoke-WebRequest -Uri "$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/jobs" -UseBasicParsing
|
||||
- $jobs = $response | ConvertFrom-Json
|
||||
- $job = $jobs | where { $_.name -eq "build_olm_windows" }
|
||||
- $jobId = $job.id
|
||||
- Invoke-WebRequest -Uri "$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/$jobId/artifacts/libolm.dll" -UseBasicParsing -OutFile libolm.dll
|
||||
script:
|
||||
- ./scripts/build-windows.ps1
|
||||
- Copy-Item -Path "libolm.dll" -Destination "build/windows/runner/Release"
|
||||
- ./scripts/package-windows.ps1
|
||||
stage: coverage
|
||||
before_script: [./scripts/prepare-windows.ps1]
|
||||
script: [./scripts/build-windows.ps1]
|
||||
artifacts:
|
||||
paths:
|
||||
- build/windows/runner/Release
|
||||
allow_failure: true
|
||||
only:
|
||||
- main
|
||||
- tags
|
||||
|
||||
build_android_debug:
|
||||
stage: build
|
||||
script: [flutter build apk --debug]
|
||||
stage: coverage
|
||||
script: [./scripts/build-android-debug.sh]
|
||||
artifacts:
|
||||
when: on_success
|
||||
paths:
|
||||
- build/app/outputs/apk/debug/app-debug.apk
|
||||
tags:
|
||||
- docker
|
||||
- famedly
|
||||
except:
|
||||
- main
|
||||
- tags
|
||||
|
||||
build_android_apk:
|
||||
stage: build
|
||||
before_script:
|
||||
- git apply ./scripts/enable-android-google-services.patch
|
||||
- ./scripts/prepare-android-release.sh
|
||||
script: [flutter build apk --release]
|
||||
stage: coverage
|
||||
before_script: [./scripts/prepare-android-release.sh]
|
||||
script: [./scripts/build-android-apk.sh]
|
||||
artifacts:
|
||||
when: on_success
|
||||
paths:
|
||||
- build/app/outputs/apk/release/app-release.apk
|
||||
tags:
|
||||
- docker
|
||||
- famedly
|
||||
- build/android/app-release.apk
|
||||
only:
|
||||
- main
|
||||
- tags
|
||||
|
||||
deploy_playstore_internal:
|
||||
stage: deploy
|
||||
before_script:
|
||||
- git apply ./scripts/enable-android-google-services.patch
|
||||
- ./scripts/prepare-android-release.sh
|
||||
build_android_appbundle:
|
||||
stage: coverage
|
||||
before_script: [./scripts/prepare-android-release.sh]
|
||||
script: [./scripts/release-playstore-beta.sh]
|
||||
artifacts:
|
||||
when: on_success
|
||||
paths:
|
||||
- build/android/app-release.aab
|
||||
resource_group: playstore_release
|
||||
tags:
|
||||
- docker
|
||||
- famedly
|
||||
only:
|
||||
- main
|
||||
|
||||
fdroid_repo:
|
||||
image: debian:testing
|
||||
stage: deploy
|
||||
upload-fdroid:
|
||||
stage: release
|
||||
before_script:
|
||||
- apt-get update && apt-get -qy install fdroidserver wget curl jq --no-install-recommends || true
|
||||
- ./scripts/prepare-fdroid.sh || true
|
||||
- "which ssh-agent || (sudo apt-get update -y && sudo apt-get install openssh-client -y )"
|
||||
- "which rsync || (sudo apt-get update -y && sudo apt-get install rsync -y )"
|
||||
- "which pcregrep || (sudo apt-get update -y && sudo apt-get install pcregrep -y )"
|
||||
- eval $(ssh-agent -s)
|
||||
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
|
||||
- mkdir -p ~/.ssh
|
||||
- chmod 700 ~/.ssh
|
||||
- ssh-keyscan -t rsa fdroid.nordgedanken.dev >> ~/.ssh/known_hosts
|
||||
script:
|
||||
- ./scripts/create_fdroid_repos.sh || true
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
- repo
|
||||
needs:
|
||||
- "build_android_apk"
|
||||
- cd build/android/
|
||||
- export UPDATE_VERSION=$(pcregrep -o1 'version:\s([0-9]*\.[0-9]*\.[0-9]*)\+[0-9]*' ../../pubspec.yaml) && mv app-release.apk "${UPDATE_VERSION}.apk"
|
||||
- rsync -rav -e ssh ./ fluffy@fdroid.nordgedanken.dev:/opt/fdroid/fluffychat/repo
|
||||
- ssh fluffy@fdroid.nordgedanken.dev -t '/bin/bash -i -l -c "cd /opt/fdroid/fluffychat && source ../fdroidserver-env/bin/activate && fdroid update --verbose && deactivate"'
|
||||
needs: ["build_android_apk"]
|
||||
resource_group: playstore_release
|
||||
allow_failure: true
|
||||
only:
|
||||
- tags
|
||||
|
||||
upload-fdroid-nightly:
|
||||
stage: release
|
||||
before_script:
|
||||
- "which ssh-agent || (sudo apt-get update -y && sudo apt-get install openssh-client -y )"
|
||||
- "which rsync || (sudo apt-get update -y && sudo apt-get install rsync -y )"
|
||||
- "which pcregrep || (sudo apt-get update -y && sudo apt-get install pcregrep -y )"
|
||||
- eval $(ssh-agent -s)
|
||||
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
|
||||
- mkdir -p ~/.ssh
|
||||
- chmod 700 ~/.ssh
|
||||
- ssh-keyscan -t rsa fdroid.nordgedanken.dev >> ~/.ssh/known_hosts
|
||||
script:
|
||||
- cd build/android/
|
||||
- export UPDATE_VERSION=$(pcregrep -o1 'version:\s([0-9]*\.[0-9]*\.[0-9]*)\+[0-9]*' ../../pubspec.yaml) && mv app-release.apk "${UPDATE_VERSION}_$(date +%s).apk"
|
||||
- rsync -rav -e ssh ./ fluffy@fdroid.nordgedanken.dev:/opt/fdroid/fluffychat-nightly/repo
|
||||
- ssh fluffy@fdroid.nordgedanken.dev -t '/bin/bash -i -l -c "cd /opt/fdroid/fluffychat-nightly && source ../fdroidserver-env/bin/activate && fdroid update --verbose && deactivate"'
|
||||
needs: ["build_android_apk"]
|
||||
resource_group: playstore_release
|
||||
allow_failure: true
|
||||
only:
|
||||
- main
|
||||
|
||||
pages:
|
||||
needs:
|
||||
- "build_web"
|
||||
- "fdroid_repo"
|
||||
needs: ["build_web"]
|
||||
stage: deploy
|
||||
image: node:alpine
|
||||
before_script:
|
||||
- apk update
|
||||
- apk add jq unzip curl wget bash
|
||||
image: ruby:latest
|
||||
script:
|
||||
- cp PRIVACY.md docs/_includes/privacy.md
|
||||
- cp CHANGELOG.md docs/_includes/changelog.md
|
||||
- cd docs
|
||||
- npx tailwindcss -o ./tailwind.css --minify
|
||||
- gem install bundler
|
||||
- bundle install
|
||||
- bundle exec jekyll build -d public
|
||||
- cd ..
|
||||
- mv docs public
|
||||
- mv repo public || true
|
||||
- mv build/web/ public/web
|
||||
- mv docs/public/ ./
|
||||
- mv build/web/ public/web/
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
@ -282,25 +155,20 @@ pages:
|
||||
- main
|
||||
|
||||
build_linux_x86:
|
||||
stage: build
|
||||
image: registry.gitlab.com/famedly/company/frontend/flutter-dockerimages/flutter-linux/stable:${FLUTTER_VERSION}
|
||||
stage: coverage
|
||||
before_script:
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 -y
|
||||
script: [flutter build linux --release]
|
||||
tags:
|
||||
- docker
|
||||
- famedly
|
||||
[
|
||||
sudo apt update && sudo apt install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libjsoncpp1 libsecret-1-dev libsecret-1-0 librhash0 -y,
|
||||
]
|
||||
script: [./scripts/build-linux.sh]
|
||||
artifacts:
|
||||
when: on_success
|
||||
paths:
|
||||
- build/linux/x64/release/bundle/
|
||||
|
||||
build_linux_arm64:
|
||||
stage: build
|
||||
before_script:
|
||||
- flutter upgrade $FLUTTER_VERSION --force
|
||||
script: [flutter build linux --release]
|
||||
stage: coverage
|
||||
script: [./scripts/build-linux.sh]
|
||||
tags: [docker_arm64]
|
||||
only:
|
||||
- main
|
||||
@ -311,9 +179,11 @@ build_linux_arm64:
|
||||
paths:
|
||||
- build/linux/arm64/release/bundle/
|
||||
|
||||
update_dependencies:
|
||||
stage: build
|
||||
update-dependencies:
|
||||
stage: coverage
|
||||
needs: []
|
||||
tags:
|
||||
- docker
|
||||
only:
|
||||
- schedules
|
||||
variables:
|
||||
@ -336,61 +206,53 @@ update_dependencies:
|
||||
- 'git diff --exit-code || (git checkout -B ${UPDATE_BRANCH} && git add . && git commit -m "chore: Update dependencies" && git push -f origin ${UPDATE_BRANCH} && ./scripts/open-mr.sh)'
|
||||
|
||||
.release:
|
||||
stage: deploy
|
||||
stage: release
|
||||
image: curlimages/curl:latest
|
||||
rules:
|
||||
- if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
|
||||
- if: '$CI_COMMIT_TAG =~ /^rc\d+\.\d+\.\d+-\d+$/'
|
||||
before_script:
|
||||
- export RELEASE_TYPE=$(echo $CI_COMMIT_TAG | grep -oE "[a-z]+")
|
||||
- export RELEASE_VERSION=$(echo $CI_COMMIT_TAG | grep -oE "\d+\.\d+\.\d+")
|
||||
- export PACKAGE_REGISTRY_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/fluffychat/${RELEASE_VERSION}"
|
||||
|
||||
upload_android:
|
||||
upload-android:
|
||||
extends: .release
|
||||
script:
|
||||
- |
|
||||
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/app/outputs/apk/release/app-release.apk ${PACKAGE_REGISTRY_URL}/fluffychat.apk
|
||||
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/android/app-release.apk ${PACKAGE_REGISTRY_URL}/fluffychat.apk
|
||||
|
||||
upload_web:
|
||||
upload-web:
|
||||
extends: .release
|
||||
script:
|
||||
- tar czf package.tar.gz -C build/web/ .
|
||||
- |
|
||||
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-web.tar.gz
|
||||
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-web.tar.gz
|
||||
|
||||
upload_linux_x86:
|
||||
upload-linux-x86:
|
||||
extends: .release
|
||||
script:
|
||||
- tar czf package.tar.gz -C build/linux/x64/release/bundle/ .
|
||||
- |
|
||||
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-linux-x86.tar.gz
|
||||
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-linux-x86.tar.gz
|
||||
|
||||
upload_linux_arm64:
|
||||
upload-linux-arm64:
|
||||
extends: .release
|
||||
script:
|
||||
- tar czf package.tar.gz -C build/linux/arm64/release/bundle/ .
|
||||
- |
|
||||
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-linux-arm64.tar.gz
|
||||
allow_failure: true
|
||||
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-linux-arm64.tar.gz
|
||||
|
||||
upload_windows:
|
||||
upload-windows:
|
||||
extends: .release
|
||||
image: alpine:latest
|
||||
script:
|
||||
- apk add --no-cache curl zip
|
||||
- mv build/windows/runner/Release/fluffychat.msix fluffychat.msix
|
||||
- cd build/windows/runner/Release; zip -r ../../../../package.zip . ; cd -
|
||||
- |
|
||||
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.zip ${PACKAGE_REGISTRY_URL}/fluffychat-windows.zip
|
||||
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file fluffychat.msix ${PACKAGE_REGISTRY_URL}/fluffychat-windows.msix
|
||||
allow_failure: true
|
||||
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.zip ${PACKAGE_REGISTRY_URL}/fluffychat-windows.zip
|
||||
|
||||
deploy_playstore:
|
||||
stage: deploy
|
||||
before_script:
|
||||
- git apply ./scripts/enable-android-google-services.patch
|
||||
- ./scripts/prepare-android-release.sh
|
||||
upload-playstore:
|
||||
stage: release
|
||||
before_script: [./scripts/prepare-android-release.sh]
|
||||
script: [./scripts/release-playstore.sh]
|
||||
resource_group: playstore_release
|
||||
only:
|
||||
@ -407,5 +269,45 @@ release:
|
||||
--assets-link "{\"name\":\"fluffychat-linux-x86.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat-linux-x86.tar.gz\"}" \
|
||||
--assets-link "{\"name\":\"fluffychat-linux-arm64.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat-linux-arm64.tar.gz\"}" \
|
||||
--assets-link "{\"name\":\"fluffychat-windows.zip\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat-windows.zip\"}" \
|
||||
--assets-link "{\"name\":\"fluffychat-windows.msix\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat-windows.msix\"}" \
|
||||
--assets-link "{\"name\":\"fluffychat-web.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat-web.tar.gz\"}"
|
||||
|
||||
.docker: &docker_template
|
||||
image: docker:latest
|
||||
tags:
|
||||
- docker
|
||||
- famedly
|
||||
stage: deploy
|
||||
services:
|
||||
- docker:dind
|
||||
|
||||
docker-releases:
|
||||
<<: *docker_template
|
||||
script:
|
||||
- docker build --pull -t "${CI_REGISTRY_IMAGE}:latest" -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" .
|
||||
- docker push "${CI_REGISTRY_IMAGE}:latest"
|
||||
- docker push "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
|
||||
rules:
|
||||
- if: '$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
|
||||
before_script:
|
||||
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
|
||||
|
||||
docker-tags:
|
||||
<<: *docker_template
|
||||
script:
|
||||
- docker build --pull -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" .
|
||||
- docker push "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
|
||||
rules:
|
||||
- if: '$CI_COMMIT_TAG && $CI_COMMIT_TAG !~ /^v\d+\.\d+\.\d+$/'
|
||||
before_script:
|
||||
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
|
||||
|
||||
docker-branches:
|
||||
<<: *docker_template
|
||||
script:
|
||||
- docker build --pull -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}" -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}" .
|
||||
- docker push "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}"
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG == null
|
||||
before_script:
|
||||
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
|
||||
allow_failure: true
|
||||
|
20
.mailmap
@ -1,20 +0,0 @@
|
||||
Aminda Suomalainen <suomalainen+git@mikaela.info> Mikaela Suomalainen <mikaela+digitalents@mikaela.info>
|
||||
Aminda Suomalainen <suomalainen+git@mikaela.info> Mikaela Suomalainen <mikaela+git@mikaela.info>
|
||||
Aminda Suomalainen <suomalainen+git@mikaela.info> Mikaela Suomalainen <mikaela@mikaela.info>
|
||||
Anne Onyme 017 <anneonyme017@netcourrier.com> Anne017 <anneonyme017@gmail.com>
|
||||
Brendan Abolivier <contact@brendanabolivier.com> Brendan Abolivier <gitlab@brendanabolivier.com>
|
||||
Christian Pauly <christian-pauly@posteo.de> Christian <christian-pauly@posteo.de>
|
||||
Christian Pauly <christian-pauly@posteo.de> Christian Pauly <Christian-Pauly@posteo.de>
|
||||
Christian Pauly <christian-pauly@posteo.de> Christian Pauly <christianpauly@173-16-252-208.client.mchsi.com>
|
||||
Christian Pauly <christian-pauly@posteo.de> Christian Pauly <christianpauly@173-16-252-81.client.mchsi.com>
|
||||
Christian Pauly <christian-pauly@posteo.de> Christian Pauly <christianpauly@Christians-Air.fritz.box>
|
||||
Christian Pauly <christian-pauly@posteo.de> Christian Pauly <christianpauly@Krilles-Air.fritz.box>
|
||||
Christian Pauly <christian-pauly@posteo.de> Christian Pauly <christianpauly@MacBook-Air.fritz.box>
|
||||
Christian Pauly <christian-pauly@posteo.de> Krille Fear <christian-pauly@posteo.de>
|
||||
CuteTadpole <61086561+CuteTadpole@users.noreply.github.com> CuteTadpole <cute.tadpole.gen@gmail.com>
|
||||
Drews Clausen <dcl@facelift-bbt.com> Drews Clausen <gitlab@rizzek.com>
|
||||
Jelv <post+gitlab@jelv.nl> Jelv <post@jelv.nl>
|
||||
Kateřina Churanová <katerina@churanova.eu> Kateřina Churanová <katerina.churanova@gmail.com>
|
||||
Kateřina Churanová <katerina@churanova.eu> Katerina <katerina.churanova@gmail.com>
|
||||
NN708 <yuqian_1998@126.com> NN708 <nn708@outlook.com>
|
||||
S1m <git@sgougeon.fr> S1m <c+gitlab@sgougeon.fr>
|
26
.metadata
@ -1,30 +1,10 @@
|
||||
# This file tracks properties of this Flutter project.
|
||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||
#
|
||||
# This file should be version controlled.
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
|
||||
channel: stable
|
||||
revision: 18cd7a3601bcffb36fdf2f679f763b5e827c2e8e
|
||||
channel: beta
|
||||
|
||||
project_type: app
|
||||
|
||||
# Tracks metadata for the flutter migrate command
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
|
||||
base_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
|
||||
- platform: macos
|
||||
create_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
|
||||
base_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
|
||||
|
||||
# User provided section
|
||||
|
||||
# List of Local paths (relative to this file) that should be
|
||||
# ignored by the migrate tool.
|
||||
#
|
||||
# Files that are not part of the templates will be ignored by default.
|
||||
unmanaged_files:
|
||||
- 'lib/main.dart'
|
||||
- 'ios/Runner.xcodeproj/project.pbxproj'
|
||||
|
735
CHANGELOG.md
@ -1,738 +1,3 @@
|
||||
## v1.12.0
|
||||
- Added translation using Weblate (Toki Pona) (Mæve Rey)
|
||||
- Translated using Weblate (Arabic) (Rex_sa)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Polish) (lauren n. liberda)
|
||||
- Translated using Weblate (Romanian) (Riley)
|
||||
- Translated using Weblate (Russian) (DarkCoder15)
|
||||
- Translated using Weblate (Spanish) (José Muñoz)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- build: Remove dependency overwrite for ffi (Krille)
|
||||
- build: Update dependencies (Krille)
|
||||
- builds: Change minsdkversion of Android from 16 to 19 (Krille)
|
||||
- builds: Do not allow failure for linux x86 (Krille)
|
||||
- builds: Do not use verbose mode on building linux (Krille)
|
||||
- builds: Linux with flutter 3.10 (Krille)
|
||||
- builds: Remove workaround for building linux arm64 (Krille)
|
||||
- builds: Update file_picker to 5.3.0 (Krille)
|
||||
- builds: Update flutter table html (Krille)
|
||||
- builds: Update flutter_html (Krille)
|
||||
- builds: migrate to dart 3.0/flutter 3.10 (lauren n. liberda)
|
||||
- chore: Add missing blockquote style (Krille)
|
||||
- chore: Allow failure in build linux for now (Krille)
|
||||
- chore: Ask for storage persistence (Krille)
|
||||
- chore: Clean unused translations (Malin Errenst)
|
||||
- chore: Enhance room pills (Krille)
|
||||
- chore: Minor code clean up (Krille)
|
||||
- chore: Update flutter webrtc (Krille)
|
||||
- chore: Upgrade to Flutter 3.10.1 (Malin Errenst)
|
||||
- chore: change release curl calls to use --fail-with-body (Tim Flink)
|
||||
- chore: update macOS icons and add build script (TheOneWithTheBraid)
|
||||
- design: Replace anime images with neutral cupertino icons (Krille)
|
||||
- feat: Add toggle to mute notifications from chat groups (fbievan)
|
||||
- feat: Allow ruby tags in html (Krille)
|
||||
- feat: Display progress value for initial sync (Krille)
|
||||
- feat: Implement new error reporting tool when critical features break like playing audio or video messages or opening a chat (Krille)
|
||||
- feat: clean up macOS build metadata (TheOneWithTheBraid)
|
||||
- feat: set display information correctly (TheOneWithTheBraid)
|
||||
- feat: update macOS build files (TheOneWithTheBraid)
|
||||
- feat: update macOS build information for macOS Ventura (TheOneWithTheBraid)
|
||||
- fix "Unhandled Exception: VRouter.of(context) was called with a context which does not contain a VRouter." (Lauren N. Liberda)
|
||||
- fix: Broken arb file (Krille)
|
||||
- fix: Do not unnecessary request all members in public rooms (Krille)
|
||||
- fix: Remove wrong rendered linebreak in html (Krille)
|
||||
- fix: Scroll down button (Krille)
|
||||
- fix: Scroll up and scroll down buttons in chat list (Krille)
|
||||
- fix: Scrolldown button (Krille)
|
||||
- fix: Too long file name cause a render overflow (Skying)
|
||||
- fix: Try to reload timeline on IOException (Krille)
|
||||
- fix: User pills (Krille)
|
||||
- fix: broken CI artifact uploads (TheOneWithTheBraid)
|
||||
- fix: custom emote placeholder (TheOneWithTheBraid)
|
||||
- fix: path of libolm (TheOneWithTheBraid)
|
||||
- fix: Quick account switching (JHansen)
|
||||
- fix: read reciepts (JHansen)
|
||||
- perf: Use valuenotifier to not rebuild chatlist (Krille)
|
||||
- refactor: Reimplement flutter matrix html locally (Krille)
|
||||
- refactor: Update Roboto and Noto Emoji (The one with the Braid)
|
||||
- refactor: Use AnimatedSize for FAB (Krille)
|
||||
- refactor: Use DateTime for weekday localization (Malin Errenst)
|
||||
|
||||
## v1.11.2
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (Polish) (Eryk Michalak)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- feat: Permission dialog before open link in browser (Krille)
|
||||
- fix: Chats do not load (Krille)
|
||||
|
||||
## v1.11.1 - 2023-04-20
|
||||
- fix: Download files on web and iOS with correct mimetype
|
||||
|
||||
## v1.11.0 - 2023-04-14
|
||||
- feat: Add visual read marker (Krille)
|
||||
- feat: Jump to last read event (Krille)
|
||||
- feat: Use fragmented timeline to jump to event (Krille)
|
||||
- feat: change to flutterwebauth2 (ShootingStarDragons)
|
||||
- fix: Join public room (Krille)
|
||||
- fix: Set fcm priority to max on android (Krille)
|
||||
- refactor: CI scripts and old workarounds for build scripts (Krille)
|
||||
- refactor: Client in ChatPage (Krille)
|
||||
- refactor: Not nullable room in ChatPage (Krille)
|
||||
- refactor: Switch to file_picker package and get rid of some dependency overrides (Krille)
|
||||
- refactor: Use correct Matrix instance (Krille)
|
||||
- style: Make emptypage logo bigger (Krille)
|
||||
- style: Minor adjustments for modal bottom sheets (Krille)
|
||||
- style: Move chats to top (Krille)
|
||||
- style: Use SliverList for chatlist (Krille)
|
||||
- refactor: Container -> SizedBox.shrink() (noob_tea)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (French) (Anne Onyme 017)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Persian) (Parsa)
|
||||
- Translated using Weblate (Persian) (Siavash)
|
||||
- Translated using Weblate (Polish) (Luna)
|
||||
- Translated using Weblate (Swedish) (Kristoffer Grundström)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
|
||||
## v1.10.0 - 2023-02-25
|
||||
- Added translation using Weblate (Thai) (Wphaoka)
|
||||
- Added translation using Weblate (Tibetan) (Nathan Freitas)
|
||||
- Default hardcoded message when l10n is not available (fabienli)
|
||||
- Fix: The stable repo fingerprint (TODO the qr-code should be updated) (machiav3lli)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (French) (Anne Onyme 017)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Japanese) (Suguru Hirahara)
|
||||
- Translated using Weblate (Persian) (Farooq Karimi Zadeh)
|
||||
- Translated using Weblate (Swedish) (Joaquim Homrighausen)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore: Disable stable for web until script is fixed (Krille)
|
||||
- chore: Display warning when logout without backup (Krille)
|
||||
- chore: Downgrade flutter CI version (Krille)
|
||||
- chore: Follow up audioplayer on linux (Krille)
|
||||
- chore: Follow up chat encryption desgin (Krille)
|
||||
- chore: Follow up fix audioplayer on android (Christian Pauly)
|
||||
- chore: Follow up formatting (Christian Pauly)
|
||||
- chore: Follow up formatting (Krille)
|
||||
- chore: Follow up remove hero animation (Krille)
|
||||
- chore: Follow up secrity settings design (Krille)
|
||||
- chore: Follow up settings page (Krille)
|
||||
- chore: Follow up settings page design (Christian Pauly)
|
||||
- chore: Follow up style adjustments (Krille)
|
||||
- chore: Lookup l10n in pushhelper if null (Krille)
|
||||
- chore: Update matrix package to 0.17.0 (Krille)
|
||||
- chore: Update to Flutter 3.7.1 (Krille)
|
||||
- docs/qr-stable.svg: update the QR code (Aminda Suomalainen)
|
||||
- feat: Enable audioplayer for web and linux (Christian Pauly)
|
||||
- fix: Display error when user tries to send too large file (Christian Pauly)
|
||||
- refactor: Do only instantiate AudioPlayer() object when in use (Christian Pauly)
|
||||
- refactor: Remove syncstatus verbose logs (Christian Pauly)
|
||||
- refactor: Store cached files in tmp directory so OS will clear file cache from time to time (Krille)
|
||||
- style: Adjust key verification dialog (Christian Pauly)
|
||||
- style: Bootstrap design adjustments (Christian Pauly)
|
||||
- style: Encryption page adjustments (Christian Pauly)
|
||||
- style: Enhance user device settings design (Krille)
|
||||
- style: Enhanced chat details design (Krille)
|
||||
- style: Give chat list list tiles rounded corners (Krille)
|
||||
- style: Link underline color (Christian Pauly)
|
||||
- style: Make adaptive bottom sheets scrollable by default (Krille)
|
||||
- style: Make invite page more pretty (Krille)
|
||||
- style: New settings design (Krille)
|
||||
- style: Nicer chips in encryption settings and icons showing device status (Krille)
|
||||
- style: Use emojis on web as well (Christian Pauly)
|
||||
- style: Use robotomono to display device keys (Christian Pauly)
|
||||
- utils/url_launcher: force opening http(s) links in external browser (Marcus Hoffmann)
|
||||
|
||||
## v1.9.0 - 2023-01-29
|
||||
- Translated using Weblate (Czech) (Michal Bedáň)
|
||||
- Translated using Weblate (Czech) (grreby)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (German) (Christian)
|
||||
- Translated using Weblate (German) (Vri 🌈)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Korean) (Youngbin Han)
|
||||
- Translated using Weblate (Polish) (Wiktor)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore: Change invite link textfield label (Krille)
|
||||
- chore: Remove unused dependency (Krille)
|
||||
- chore: Remove unused translations (Krille)
|
||||
- chore: Update Matrix SDK and refactor (Krille)
|
||||
- chore: Update dependencies (Krille)
|
||||
- chore: Update flutter_map (Krille)
|
||||
- chore: add integration tests (TheOneWithTheBraid)
|
||||
- chore: add integration tests for spaces (TheOneWithTheBraid)
|
||||
- design: More clear chat background and rounded popup menu (Krille)
|
||||
- design: Nicer navigationrail (Krille)
|
||||
- design: Upgrade to Flutter 3.7
|
||||
- feat: Bring back disabling the header bar on Linux desktop (q234rty)
|
||||
- feat: Nicer design for abandonded DM rooms (Christian Pauly)
|
||||
- fix: Archive (Krille)
|
||||
- fix: Shared preferences package for flutter 3.7 (Christian Pauly)
|
||||
- fix: permission of web builds (TheOneWithTheBraid)
|
||||
- fix: Notification Settings (Krille)
|
||||
- refactor: Migrate to Flutter 3.7.0 (Christian Pauly)
|
||||
- refactor: Same animations everywhere in app (Krille)
|
||||
- refactor: Stories header with futurebuilder (Krille)
|
||||
- refactor: disable some redundant tests (TheOneWithTheBraid)
|
||||
- style: Animate in out search results (Krille)
|
||||
- style: New modal bottom sheets (Krille)
|
||||
- style: Redesign public room bottomsheets (Krille)
|
||||
|
||||
## v1.8.0 2022-12-30
|
||||
- Added translation using Weblate (Yue (yue_HK)) (Raatty)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Mike Evans)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (French) (Anne Onyme 017)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- design: New encryption page (Krille Fear)
|
||||
- feat: Add audio message support to linux (Krille Fear)
|
||||
- feat: Use Android system accent color (Krille Fear)
|
||||
- feat: include olm to Windows builds (TheOneWithTheBraid)
|
||||
- feat: Store drafts (Krille)
|
||||
- fix: Android push notification follow-up (TheOneWithTheBraid)
|
||||
- fix: Content banner (Krille Fear)
|
||||
- fix: Correct redacted by username (Krille Fear)
|
||||
- fix: Do not setup push on every app resume (Krille Fear)
|
||||
- fix: Encryption button is orange in public rooms (Krille Fear)
|
||||
- fix: File event design (Krille Fear)
|
||||
- fix: Hide google services warning after marked (Krille Fear)
|
||||
- fix: Improve story page appearance (Reinhart Previano Koentjoro)
|
||||
- fix: Libhandy windows (Krille Fear)
|
||||
- fix: Monochromatic icon rendering for Android 13+ (Reinhart Previano Koentjoro)
|
||||
- fix: homeserver error text not visible in app bar (TheOneWithTheBraid)
|
||||
- fix: minor issues in room list (TheOneWithTheBraid)
|
||||
|
||||
## v1.7.2 2022-12-19
|
||||
Update dependencies and translations.
|
||||
|
||||
## v1.7.1 2022-11-23
|
||||
Minor bugfix release to retrigger build for FlatPak and Android. Fixes some style bugs and updates some translations
|
||||
|
||||
## v1.7.0 2022-11-17
|
||||
FluffyChat 1.7.0 features a new way to work with spaces via a bottom navigation bar. A lot of work has also been done under the hood to make the app faster and more stable. The main color has slightly changed and the design got some finetuning.
|
||||
|
||||
- chore: Add keys to roomlist and stories header (Christian Pauly)
|
||||
- chore: Add unread badge to navigation rail and adjust design (Christian Pauly)
|
||||
- chore: Adjust colors (Christian Pauly)
|
||||
- chore: Better design chat list items (Christian Pauly)
|
||||
- chore: Better load first client (Christian Pauly)
|
||||
- design: Hide unimportant state events instead of folding (Christian Pauly)
|
||||
- design: Improve login design (Krille Fear)
|
||||
- design: Nicer display notification short texts (Christian Pauly)
|
||||
- feat: background and terminated calls [android] (td)
|
||||
- feat: New navigation design (Christian Pauly)
|
||||
- fix: Hide password at login page (Krille Fear)
|
||||
- fix: Import session on iOS (Christian Pauly)
|
||||
- fix: incorrect setState inside setState in ChatListController (td)
|
||||
- fix: Password not obscure for a second when submitting login textfield (Christian Pauly)
|
||||
- fix: Popup menu without elevation (Christian Pauly)
|
||||
- fix: Push error message (Christian Pauly)
|
||||
- fix: Remove emoji picker workaround (Christian Pauly)
|
||||
- fix: Set theme after start app (Christian Pauly)
|
||||
- fix: Settings profile picture (Christian Pauly)
|
||||
- fix: Share files (Christian Pauly)
|
||||
- fix: UIA request handler (Christian Pauly)
|
||||
- fix: Update emoji picker for web and desktop (Christian Pauly)
|
||||
- improved (most) icons/image scaling, including avatar scaling (Mg138)
|
||||
- Mention Element instead of Riot (Has been renamed about a year ago) (jooooscha)
|
||||
- refactor: Chat list body code (Christian Pauly)
|
||||
- refactor: Minor chatlist refactoring (Christian Pauly)
|
||||
- refactor: No longer need selected of chat list tile (Christian Pauly)
|
||||
- refactor: Remove unused dependencies (Krille Fear)
|
||||
- Added translation using Weblate (Hindi) (Hemish)
|
||||
- Added translation using Weblate (Occidental) (OIS)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Raatty)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (English) (Raatty)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Estonian) (Raatty)
|
||||
- Translated using Weblate (Finnish) (Aminda Suomalainen)
|
||||
- Translated using Weblate (Finnish) (Raatty)
|
||||
- Translated using Weblate (French) (Anne Onyme 017)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (German) (Jana)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Lithuanian) (Anonimas)
|
||||
- Translated using Weblate (Occidental) (OIS)
|
||||
- Translated using Weblate (Persian) (Anastázius Darián)
|
||||
- Translated using Weblate (Persian) (Anastázius Kaejatídarján)
|
||||
- Translated using Weblate (Persian) (Seyedmahdi Moosavyan)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Turkish) (Raatty)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- Translated using Weblate (Ukrainian) (Raatty)
|
||||
|
||||
## v1.6.4 - 2022-09-08
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Slovak) (Marek Ľach)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore: Adjust bubble color in dark mode (Christian Pauly)
|
||||
- chore: Update matrix sdk (Christian Pauly)
|
||||
- chore: Update to flutter 3.3.0 (Christian Pauly)
|
||||
- feat: Automatic key requests and better key error dialog (Christian Pauly)
|
||||
- fix: Styling and notification settings (Christian Pauly)
|
||||
- fix: add missing command localizations (Christian Pauly)
|
||||
|
||||
## v1.6.3 - 2022-08-25
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Finnish) (Aminda Suomalainen)
|
||||
- Translated using Weblate (Russian) (Sergey Shavin)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore: Migrate back to flutter hive collections (Christian Pauly)
|
||||
- chore: Update provider package and remove dep override (Christian Pauly)
|
||||
- fix: Do not display push events for unknown event types (Christian Pauly)
|
||||
- refactor: App widget (Christian Pauly)
|
||||
|
||||
## v1.6.0 - 2022-07-31
|
||||
FluffyChat 1.6.0 features a lot of bug fixes and improvements. The code base has been
|
||||
simplified and the drawer on the chat list page got a come-back. Some new features like
|
||||
the space hierarchy and session dump have been implemented.
|
||||
|
||||
- feat: Added monochrome entry for themed icon support in Android 13 (James Reilly)
|
||||
- feat: Display timeline of messages in android notification (Christian Pauly)
|
||||
- feat: Emoji related fixes (TheOneWithTheBraid)
|
||||
- feat: Implement deleting pushers in app (Christian Pauly)
|
||||
- feat: New material 3 design (Christian Pauly)
|
||||
- feat: Redesign bootsstrap and offer secure storage support (Christian Pauly)
|
||||
- feat: Send multiple images at once (Christian Pauly)
|
||||
- feat: implement session dump (TheOneWithTheBraid)
|
||||
- feat: implement space hierarchy (TheOneWithTheBraid)
|
||||
- feat: introduce extended integration tests (TheOneWithTheBraid)
|
||||
- feat: libhandy integration (TheOneWithTheBraid)
|
||||
- fix: Clearing push triggered when only one room got seen (Christian Pauly)
|
||||
- fix: Dont display loading dialog when adding reaction (Christian Pauly)
|
||||
- fix: Follow up for spaces hierarchy (TheOneWithTheBraid)
|
||||
- fix: Missing null checks in chat details view (Christian Pauly)
|
||||
- fix: Non FCM Android builds crash on start (Christian Pauly)
|
||||
- fix: Permission chooser dialog on iOS (Christian Pauly)
|
||||
- fix: Set avatar on only single action available (Christian Pauly)
|
||||
- fix: Sharing on iOS and iPad (Christian Pauly)
|
||||
- fix: Unread bubble is invisible in dark mode (Christian Pauly)
|
||||
- fix: appimage builds (TheOneWithTheBraid)
|
||||
- fix: only use custom http client on android (Jayesh Nirve)
|
||||
- fix: pass isrg cert to http client (Jayesh Nirve)
|
||||
- refactor: Chat view (Christian Pauly)
|
||||
- refactor: Encryption button (Christian Pauly)
|
||||
- refactor: Remove duplicated imports (Christian Pauly)
|
||||
- refactor: Remove legacy store (Christian Pauly)
|
||||
- refactor: Remove presence status feature (Christian Pauly)
|
||||
- refactor: Simplify MxcImage and replace CachedNetworkImage (Christian Pauly)
|
||||
- refactor: Switch to Hive Collections DB (Christian Pauly)
|
||||
- refactor: move start chat FAB to implementation file (TheOneWithTheBraid)
|
||||
- Translated using Weblate (Catalan) (Alfonso Montero López)
|
||||
- Translated using Weblate (Catalan) (Auri B.P)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (English) (Raatty)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Finnish) (Aminda Suomalainen)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Persian) (Amir Hossein Maher)
|
||||
- Translated using Weblate (Polish) (Przemysław Romanik)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore: Add border to avatars (Christian Pauly)
|
||||
- chore: Add fancy hero animations (Christian Pauly)
|
||||
- chore: Adjust appbar design (Christian Pauly)
|
||||
- chore: Adjust design (Christian Pauly)
|
||||
- chore: Adjust search bar design (Christian Pauly)
|
||||
- chore: Always display header elevation in chat (Christian Pauly)
|
||||
- chore: Design follow up fixes (Christian Pauly)
|
||||
- chore: Design follow up fixes (Christian Pauly)
|
||||
- chore: Disable integration tests without runners (Krille Fear)
|
||||
- chore: Enhance invitiation UX (Christian Pauly)
|
||||
- chore: Make push helper more fail safe (Christian Pauly)
|
||||
- chore: Make push helper more stable (Christian Pauly)
|
||||
- chore: Minor design improvements (Christian Pauly)
|
||||
- chore: Pinned events design (Christian Pauly)
|
||||
- chore: Remove permission handler dependency and increase compileSdkVersion (Christian Pauly)
|
||||
- chore: Switch to flutter 3.0.5 (Krille Fear)
|
||||
- chore: Update SDK (Christian Pauly)
|
||||
- chore: remove snapping sheet (TheOneWithTheBraid)
|
||||
|
||||
## v1.5.0 - 2022-06-03
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- feat: Better sign up UX and allow signup without password (Christian Pauly)
|
||||
- feat: Initial material you support (Christian Pauly)
|
||||
- feat: include Synapse into integration test (TheOneWithTheBraid)
|
||||
- fix: Broken dynamic color palette (Christian Pauly)
|
||||
- fix: Build on iOS emulator (Christian Pauly)
|
||||
- fix: Missing bottom padding in text only stories (Christian Pauly)
|
||||
- fix: Send sticker without blocking the UI (Christian Pauly)
|
||||
- fix: Sentry switch being broken (Sorunome)
|
||||
- fix: add new Play patch (TheOneWithTheBraid)
|
||||
- fix: handle matrix.to prefix when starting chat (TheOneWithTheBraid)
|
||||
- fix: minor design bugs (TheOneWithTheBraid)
|
||||
- fix: privacy in sign up (TheOneWithTheBraid)
|
||||
- fix: properly set app title in embedder (TheOneWithTheBraid)
|
||||
- fix: proprietory classes included into build (TheOneWithTheBraid)
|
||||
- fix: remove proprietary classes from build (TheOneWithTheBraid)
|
||||
- refactor: Sharing intent (Christian Pauly)
|
||||
- refactor: Stories header (Christian Pauly)
|
||||
- refactor: Update Matrix SDK (Christian Pauly)
|
||||
- refactor: Upgrade to Flutter 3.0.0 (Christian Pauly)
|
||||
- Translated using Weblate (Basque) (—X—)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Czech) (Milan Korecky)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Lithuanian) (Mind)
|
||||
- Translated using Weblate (Portuguese (Brazil)) (Hermógenes Oliveira)
|
||||
- Translated using Weblate (Portuguese (Brazil)) (mmagian)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
|
||||
## v1.4.0 - 2022-04-23
|
||||
- design: Display icon for failed sent messages (Krille Fear)
|
||||
- design: Display own stories at first place and combine with new stories button (Krille Fear)
|
||||
- feat: Add "Show related DMs in spaces" settings (20kdc)
|
||||
- feat: Better image sending experience (Krille Fear)
|
||||
- feat: Display event timestamp if selected (Krille Fear)
|
||||
- feat: Faster image resizing (Krille Fear)
|
||||
- feat: Groups and Direct Chats virtual spaces option (20kdc)
|
||||
- feat: New onboarding design (Krille Fear)
|
||||
- feat: Onboarding with dynamic homeservers from joinmatrix.org (Krille Fear)
|
||||
- feat: Play audio messages in stories (Krille Fear)
|
||||
- feat: Use native imaging for much faster thumbnail calc on mobile (Krille Fear)
|
||||
- feat: add Dockerfile for nginx/web builds (TheOneWithTheBraid)
|
||||
- feat: allow to create widgets (TheOneWithTheBraid)
|
||||
- feat: remove diacritics (henri2h)
|
||||
- feat: irish language support (Graeme Power)
|
||||
- feat: Enable screensharing on Mobile
|
||||
- feat: support AppImage builds
|
||||
- feat: Improve spaces design
|
||||
- fix: Android theme is not auto updating when system theme changes (Krille Fear)
|
||||
- fix: Chat view becomes gray for a second on sending reaction (Krille Fear)
|
||||
- fix: Don't request new thumbnail resolution on every window resize (Samuel Mezger)
|
||||
- fix: Dont display own failed-to-send events in stories (Krille Fear)
|
||||
- fix: Hide markdown in chat list preview and local notifications (Krille Fear)
|
||||
- fix: Hide pinned events if event is not accessable or loading (Krille Fear)
|
||||
- fix: Image sending (Krille Fear)
|
||||
- fix: Make audioplayer waveforms thinner and better clickable (Krille Fear)
|
||||
- fix: Some story layout bugs (Krille Fear)
|
||||
- fix: Widgets dialog crashes (Krille Fear)
|
||||
- fix: login form supports switching fields via tab (Philip Molares)
|
||||
- Added translation using Weblate (Lithuanian) (Mind)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Finnish) (Aminda Suomalainen)
|
||||
- Translated using Weblate (French) (Anne Onyme 017)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (German) (Krille)
|
||||
- Translated using Weblate (German) (qwerty287)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Japanese) (Krille)
|
||||
- Translated using Weblate (Lithuanian) (Mind)
|
||||
- Translated using Weblate (Portuguese (Brazil)) (Hermógenes Oliveira)
|
||||
- Translated using Weblate (Russian) (Arbo_Leet)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Russian) (alekseishaklov)
|
||||
- Translated using Weblate (Swedish) (Joaquim Homrighausen)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- Update TRANSLATORS_GUIDE.md to have improved punctuation, capitalization (Scott Anecito)
|
||||
- chore: Add initial integration tests (Krille Fear)
|
||||
- refactor: New push (Krille Fear)
|
||||
|
||||
## v1.3.1 - 2022-03-20
|
||||
- Allow app to be moved to external storage (Marcel)
|
||||
- Translated using Weblate (Arabic) (Mads Louis)
|
||||
- Translated using Weblate (Basque) (Sorunome)
|
||||
- Translated using Weblate (Basque) (—X—)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Czech) (Sorunome)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (English) (Raatty)
|
||||
- Translated using Weblate (French) (Anne Onyme 017)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (German) (Maciej Krüger)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Irish) (Graeme Power)
|
||||
- Translated using Weblate (Persian) (Anastázius Darián)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Swedish) (Joaquim Homrighausen)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- Update proguard rules to a more modern setup (MTRNord)
|
||||
- chore: Minor story viewer fixes (Krille Fear)
|
||||
- chore: Remove story line count and make answering to stories online (Krille Fear)
|
||||
- chore: Update dependencies (Dependency Update Bot)
|
||||
- design: Make pinned events use less vertical space (Krille Fear)
|
||||
- feat: Extended stories (Krille Fear)
|
||||
- feat: Restrict map zoom to tile server capabilities (Marcel)
|
||||
- feat: implement keyboard shortcuts (TheOneWithTheBraid)
|
||||
- fix: Build on macOS (Krille Fear)
|
||||
- fix: Emojipicker issues (Krille Fear)
|
||||
- fix: Hide redacted stories (Krille Fear)
|
||||
- fix: Mark story as read (Krille Fear)
|
||||
- fix: Open room from notification click produces errors (Krille Fear)
|
||||
- fix: SSO on Android 12 (Krille Fear)
|
||||
- fix: Send read receipts on all taps (Krille Fear)
|
||||
- fix: make fluffy usable at 720 px wide (Raatty)
|
||||
- fix: Add forgotten sendOnEnter (Krille Fear)
|
||||
- refactor: Switch to just audio for playing sounds (Krille Fear)
|
||||
|
||||
## v1.3.0 - 2022-02-12
|
||||
FluffyChat 1.3.0 makes it possible to report offensive users to server admins (not only messages). It fixes
|
||||
the video player, improves Linux desktop notifications, and the stories design.
|
||||
|
||||
The button to create a new story is now in the app bar of the main page so that users who don't want to use
|
||||
this feature no longer have a whole list item pinned at the top of the chat list.
|
||||
|
||||
FluffyChat 1.3.0 is the first release with full null safe dart code. While this is a huge change under the
|
||||
hood, it should improve the stability and performance of the app. It also builds now with Flutter 2.10.
|
||||
|
||||
Thanks to all contributors and translators!! <3
|
||||
|
||||
- Translated using Weblate (Arabic) (abidin toumi)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Czech) (Milan Korecky)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (French) (Anne Onyme 017)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (German) (Krille)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Swedish) (Joaquim Homrighausen)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore: Add missing link (Krille Fear)
|
||||
- chore: Hide FAB story buttons on focus (Krille Fear)
|
||||
- chore: Set compileSdkVersion to 31 (Krille Fear)
|
||||
- chore: Update SDK (Krille Fear)
|
||||
- chore: Update dependencies (Dependency Update Bot)
|
||||
- chore: Update privacy (Krille Fear)
|
||||
- chore: Upgrade to Flutter 2.10 (Krille Fear)
|
||||
- ci: Update olm download link (Krille Fear)
|
||||
- design: Improve create story page design (Krille Fear)
|
||||
- design: Improve story header design (Krille Fear)
|
||||
- design: Use IconButton instead of listTile for first story (Krille Fear)
|
||||
- feat: Add button to report offensive users to server admins (Krille Fear)
|
||||
- feat: Open chat button from Linux notification (Krille Fear)
|
||||
- feat: implement retreiving widgets (TheOneWithTheBraid)
|
||||
- fix: Set image width and height (Krille Fear)
|
||||
- fix: Videoplayer filenames (Krille Fear)
|
||||
- fix: cast error in html messages (Jayesh Nirve)
|
||||
- fix: linux snap notification avatar (Krille Fear)
|
||||
- fix: suggestions menu and use empty map in html messages null return (Jayesh Nirve)
|
||||
- refactor: Migrate to null safety (Krille Fear)
|
||||
|
||||
## v1.2.0 - 2022-01-27
|
||||
FluffyChat 1.2.0 brings a new stories feature, a lot of bug fixes and improved
|
||||
voice messages.
|
||||
|
||||
- change: Set client ID in invite action link (Krille Fear)
|
||||
- design: Improved animations in chat view when changing account (The one with the Braid)
|
||||
- design: Remove redundant voice message button (S1m)
|
||||
- design: Use more adaptive elements (Krille Fear)
|
||||
- feat: Add button to record a video on Android (S1m)
|
||||
- feat: Add static + button to pick reaction (S1m)
|
||||
- feat: Better in app video player (Krille Fear)
|
||||
- feat: Enable compression and thumbnails for videos (Krille Fear)
|
||||
- feat: Nicer file event design (Krille Fear)
|
||||
- feat: Recording dialog with displaying amplitude (Krille Fear)
|
||||
- feat: Remember homeserver on search page (Krille Fear)
|
||||
- feat: Save files images and videos (Krille Fear)
|
||||
- feat: Settings for stories (Krille Fear)
|
||||
- feat: Share to story (Krille Fear)
|
||||
- feat: Stories (Krille Fear)
|
||||
- fix: Add missing routes (Krille Fear)
|
||||
- fix: Better thumbnails (Krille Fear)
|
||||
- fix: Do not setup UP if init from an UP action (S1m)
|
||||
- fix: linux notifications (Raatty)
|
||||
- fix: Play video without thumbnail if none (S1m)
|
||||
- fix: Show message bubble on download only video attachments (Drews Clausen)
|
||||
- fix: Show scrollDownButton only if selectedEvents is empty (S1m)
|
||||
- fix: Snapcraft image (Krille Fear)
|
||||
- fix: Snapcraft.yaml (Krille Fear)
|
||||
- fix: Use system fonts except for desktop (Krille Fear)
|
||||
- fix: Video playback on iOS (John Francis Sukamto)
|
||||
- fix: Videoplayer (Krille Fear)
|
||||
- followup: Improve stories (Krille Fear)
|
||||
- Improve website SEO tagging (Marcel)
|
||||
- Increase font size granularity (S1m)
|
||||
- refactor: /command hints add tooltips, test for missing hints, script to generate glue code, hints for dm, create, clearcache, discardsession (Steef Hegeman)
|
||||
- refactor: Make more files null safe (Krille Fear)
|
||||
- refactor: Make style settings null safe (Krille Fear)
|
||||
- systemNavigationBarColor ← appBar.backgroundColor (Steef Hegeman)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Lynn Nakanishi Lin(林中西))
|
||||
- Translated using Weblate (Chinese (Traditional)) (Lynn Nakanishi Lin(林中西))
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Czech) (Milan Korecky)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Finnish) (Aminda Suomalainen)
|
||||
- Translated using Weblate (French) (Anne Onyme 017)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (German) (Krille)
|
||||
- Translated using Weblate (German) (Jana)
|
||||
- Translated using Weblate (German) (TeemoCell)
|
||||
- Translated using Weblate (Hebrew) (MusiCode1)
|
||||
- Translated using Weblate (Hebrew) (y batvinik)
|
||||
- Translated using Weblate (Hungarian) (Balázs Meskó)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Korean) (Kim Tae Kyeong)
|
||||
- Translated using Weblate (Polish) (KSP Atlas)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Slovenian) (John Jazbec)
|
||||
- Translated using Weblate (Spanish) (Valentino)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
|
||||
## v1.1.0 - 2021-12-08
|
||||
- CI: Add candidate release pipeline (Krille Fear)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Finnish) (Mikaela Suomalainen)
|
||||
- Translated using Weblate (Finnish) (Mikaela Suomalainen)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Korean) (Kim Tae Kyeong)
|
||||
- Translated using Weblate (Norwegian Bokmål) (Gigaa)
|
||||
- Translated using Weblate (Norwegian Bokmål) (Raatty)
|
||||
- change: Do not compress very small images (Krille Fear)
|
||||
- chore: Update Matrix SDK (Krille Fear)
|
||||
- design: Make not joined participants transparent in list (Krille Fear)
|
||||
- docs: Fix screenshots on website (Krille Fear)
|
||||
- fix: Update dependencies with flutter pub upgrade (Krille Fear)
|
||||
- fix: Well known lookup at login (Krille Fear)
|
||||
- refactor: Make most of the utils null safe (Krille Fear)
|
||||
- refactor: Make send file dialog null safe (Krille Fear)
|
||||
- refactor: Make user device list item null safe (Krille Fear)
|
||||
|
||||
## v1.0.0 - 2021-11-29
|
||||
- design: Chat backup dialog as a banner
|
||||
- design: Encrypted by design, all users valid is normal not green
|
||||
- design: Move video call button to menu
|
||||
- design: Display edit marker in new bubbles
|
||||
- design: Floating input bar
|
||||
- design: Minor color changes
|
||||
- design: Move device ID to menu
|
||||
- design: Place share button under qr code
|
||||
- design: Redesign and simplify bootstrap
|
||||
- design: Remove cupertino icons
|
||||
- feat: Display typing indicators with gif
|
||||
- feat: Fancy chat list loading animation
|
||||
- feat: New database backend with FluffyBox
|
||||
- feat: Make the main color editable for users
|
||||
- feat: Move styles one settings level up
|
||||
- feat: Multiple mute, pin and mark unread
|
||||
- feat: New chat design
|
||||
- feat: New chat details design
|
||||
- feat: New Public room bottom sheet
|
||||
- feat: New settings design
|
||||
- feat: Nicer images, stickers and videos
|
||||
- feat: nicer loading bar
|
||||
- feat: Open im.fluffychat uris
|
||||
- feat: Redesign multiaccounts and spaces
|
||||
- feat: Redesign start page
|
||||
- feat: Send reactions to multiple events
|
||||
- feat: Speed up app start
|
||||
- feat: Use SalomonBottomBar
|
||||
- feat: Drag&Drop to send multiple files on desktop and web
|
||||
- fix: Adjust color
|
||||
- fix: Automatic key requests
|
||||
- fix: Bootstrap loop
|
||||
- fix: Chat background
|
||||
- fix: Chat list flickering
|
||||
- fix: Contrast in dark mode
|
||||
- fix: Crash when there is no prev message
|
||||
- fix: Do display error image widget
|
||||
- fix: Do not display bottombar in selectmode
|
||||
- fix: Dont enable encryption with bots
|
||||
- fix: Dont loose selected events
|
||||
- fix: Dont rerun server checks
|
||||
- fix: download path for saving files
|
||||
- fix: Hide FAB in new chat page if textfield has focus
|
||||
- fix: Let bottom space bar scroll
|
||||
- fix: Load spaces on app start
|
||||
- fix: Only mark unread if actually marked
|
||||
- fix: Public room design
|
||||
- fix: Remove avatar from room
|
||||
- fix: Remove broken docker job
|
||||
- fix: Report sync status error
|
||||
- fix: Self sign while bootstrap
|
||||
- fix: Sender name prefix in DM rooms
|
||||
- fix: Set room avatar
|
||||
- fix: Various multiaccount fixes
|
||||
- fix: Wrong version in snap packages
|
||||
|
||||
## v0.42.2 - 2021-11-04
|
||||
Minor bugfix release which fixes signing up on matrix.org and make FluffyChats voice messages playable in Element.
|
||||
|
||||
- feat: Nicer registration form
|
||||
- feat: Nicer audio message design and send duration
|
||||
- fix: Signup on matrix.org
|
||||
- fix: Mark voice messages with msc3245
|
||||
- fix: Play response voice messages
|
||||
- fix: Crash on logout
|
||||
|
||||
## v0.42.1 - 2021-10-26
|
||||
Minor bugfix release.
|
||||
|
||||
- feat: Ignore users directly from bottom sheet
|
||||
- fix: Open an existing direct chat via invite link/QR scanning
|
||||
- fix: Small fix for uia request
|
||||
- fix: Enable E2EE by default in all start chat cases
|
||||
- update: Translations - Thanks to all translators <3
|
||||
- design: Make homepicker page nicer
|
||||
|
||||
## v0.42.0 - 2021-10-14
|
||||
This release fixes several bugs and makes E2EE enabled by default.
|
||||
|
||||
- feat: Enable E2EE by default for new rooms
|
||||
- feat: Display all private rooms without encryption as red
|
||||
- feat: New design for bootstrap
|
||||
- feat: New design for emoji verification
|
||||
- feat: Display own MXID in the settings
|
||||
- feat: More finetuning for font sizes
|
||||
- chore: Updated translations (Thanks to all translators!)
|
||||
- fix: App crash on logout
|
||||
- fix: Temporary disable sign-up for matrix.org (Currently gives "500: Internal Server Error" while FluffyChat **should** send the same requests like Element)
|
||||
- fix: Implement Roboto font to fix font issues on Linux Desktop and mobile
|
||||
- fix: QR Code scanning
|
||||
|
||||
## v0.41.3 - 2021-10-08
|
||||
Minor bugfix release.
|
||||
|
||||
|
@ -13,15 +13,17 @@ FluffyChat tries to be as minimal as possible even in the code style. We try to
|
||||
- handy_function.dart
|
||||
- ...Helper functions and extensions
|
||||
- /pages
|
||||
- /chat
|
||||
- chat.dart
|
||||
- chat_view.dart
|
||||
- /chat_list
|
||||
- chat_list.dart
|
||||
- chat_list_view.dart
|
||||
- /ui
|
||||
- home_view.dart
|
||||
- details_view.dart
|
||||
- settings_view.dart
|
||||
- home.dart
|
||||
- details.dart
|
||||
- settings.dart
|
||||
- ...The pages of the app separated in Controllers and Views
|
||||
- /widgets
|
||||
- /layouts
|
||||
- /dialogs
|
||||
- /list_items
|
||||
- ...Custom widgets created for this project
|
||||
- main.dart
|
||||
|
||||
@ -122,7 +124,7 @@ To run code after the widget was created first we use the WidgetBindings in the
|
||||
```dart
|
||||
@override
|
||||
void initState() {
|
||||
WidgetsBinding.instance!.addPostFrameCallback((_) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
// Do something when build is finished
|
||||
});
|
||||
super.initState();
|
30
CONTRIBUTING.md
Normal file
@ -0,0 +1,30 @@
|
||||
# How you can contribute to FluffyChat
|
||||
|
||||
Thanks for using FluffyChat and thanks for your decision to contribute. ❤❤❤ There are multiple ways how you can help us.
|
||||
|
||||
## Code contributions
|
||||
Pick one of the issues in the issue tracker, fork this project, fix the issue and create a merge request. Please be aware that this has to follow some rules:
|
||||
|
||||
- Your code changes should follow the clean code principles where it is possible
|
||||
- You should test the changes on all platforms that are affected
|
||||
- The CI pipeline must be green so you need to format the code correctly and follow the lint rules
|
||||
- Please be aware that we always need to device if your changes fit in the project
|
||||
|
||||
## Social Media:
|
||||
We always need help with social media stuff. We don't have much time and the time we have we spend in developing. So we often lack to spread news about new features to the world.
|
||||
Just contact us at [#fluffychat:matrix.org](https://matrix.to/#/#fluffychat:matrix.org).
|
||||
|
||||
## Translations:
|
||||
You can help with translations on [Weblate](https://hosted.weblate.org/projects/fluffychat/). To translate the website to your language, you need to fork the repository and edit the needed files.
|
||||
|
||||
## Bug reports:
|
||||
Bug reporting and issue tracking is a huge task. We need help with:
|
||||
1. Sort and label issues.
|
||||
2. Find duplications.
|
||||
3. Track issues over the whole life cycle.
|
||||
4. Find bugs and add them to the issue list.
|
||||
|
||||
## Donations:
|
||||
If you don't have any time but too much money you could either buy Apple products or support the development of FluffyChat. 😇 There are two ways of donations:
|
||||
- [Buy me a coffee](https://ko-fi.com/krille)
|
||||
- [Monthly donations](https://liberapay.com/Krille)
|
20
Dockerfile
@ -1,10 +1,16 @@
|
||||
FROM ghcr.io/cirruslabs/flutter as builder
|
||||
RUN sudo apt update && sudo apt install curl -y
|
||||
COPY . /app
|
||||
WORKDIR /app
|
||||
# Based upon https://github.com/Starbix/dockerimages/commit/b0c3e408263a90ee467d30aed0e855a610eb537a
|
||||
|
||||
FROM cirrusci/flutter:2.2.3 AS builder
|
||||
|
||||
RUN mkdir /fluffychat
|
||||
WORKDIR /fluffychat
|
||||
|
||||
COPY ./ /fluffychat
|
||||
|
||||
RUN ./scripts/prepare-web.sh
|
||||
RUN ./scripts/build-web.sh
|
||||
|
||||
FROM docker.io/nginx:alpine
|
||||
RUN rm -rf /usr/share/nginx/html
|
||||
COPY --from=builder /app/build/web /usr/share/nginx/html
|
||||
FROM nginx:alpine
|
||||
|
||||
COPY --from=builder /fluffychat/build/web/ /usr/share/nginx/html
|
||||
COPY --from=builder /fluffychat/config.sample.json /usr/share/nginx/html/config.json
|
||||
|
48
PRIVACY.md
@ -2,15 +2,14 @@
|
||||
|
||||
FluffyChat is available on Android, iOS and as a web version. Desktop versions for Windows, Linux and macOS may follow.
|
||||
|
||||
* [Matrix](#matrix)
|
||||
* Sentry
|
||||
* [Database](#database)
|
||||
* [Encryption](#encryption)
|
||||
* [App Permissions](#app-permissions)
|
||||
* [Push Notifications](#push-notifications)
|
||||
* [Stories](#stories)
|
||||
* [Matrix](#1)
|
||||
* [Sentry](#2)
|
||||
* [Database](#3)
|
||||
* [Encryption](#4)
|
||||
* [App Permissions](#5)
|
||||
* [Push Notifications](#6)
|
||||
|
||||
## Matrix<a id="matrix"/>
|
||||
## Matrix<a id="1"/>
|
||||
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.
|
||||
@ -19,17 +18,22 @@ FluffyChat only communicates with the selected server, with sentry.io if enabled
|
||||
|
||||
More information is available at: [https://matrix.org](https://matrix.org)
|
||||
|
||||
## Database<a id="database"/>
|
||||
## Sentry<a id="2"/>
|
||||
FluffyChat uses Sentry for crash reports if the user allows it.
|
||||
|
||||
More information is available at: [https://sentry.io](https://sentry.io)
|
||||
|
||||
## Database<a id="3"/>
|
||||
FluffyChat caches some data received from the server in a local database on the device of the user.
|
||||
|
||||
More information is available at: [https://pub.dev/packages/hive](https://pub.dev/packages/hive)
|
||||
|
||||
## Encryption<a id="encryption"/>
|
||||
## Encryption<a id="4"/>
|
||||
All communication of substantive content between Fluffychat and any server is done in secure way, using transport encryption to protect it.
|
||||
|
||||
FluffyChat is able to use End-To-End-Encryption as a tech preview.
|
||||
|
||||
## App Permissions<a id="app-permissions"/>
|
||||
## App Permissions<a id="5"/>
|
||||
|
||||
The permissions are the same on Android and iOS but may differ in the name. This are the Android Permissions:
|
||||
|
||||
@ -52,7 +56,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"/>
|
||||
## Push Notifications<a id="6"/>
|
||||
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
|
||||
@ -94,23 +98,3 @@ 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.
|
||||
|
||||
## Stories<a id="stories"/>
|
||||
|
||||
FluffyChat supports stories which is a feature similar to WhatsApp status or Instagram stories. However it is just a different GUI for the same room-related communication. More information about the feature can be found here:
|
||||
|
||||
https://github.com/krillefear/matrix-doc/blob/main/proposals/3588-stories-as-rooms.md
|
||||
|
||||
Stories are basically:
|
||||
|
||||
- End to end encrypted rooms
|
||||
- Read-only rooms with only one admin who can post stuff (while there is no technical limitation to have multiple admins)
|
||||
|
||||
By default:
|
||||
|
||||
- The user has to invite all contacts manually to a story room
|
||||
- The user can only invite contacts (matrix users the user shares a DM room with) to the story room
|
||||
- The story room is created when the first story is posted
|
||||
- User can mute and leave story rooms
|
||||
|
||||
The user is informed in the app that in theory all contacts can see each other in the story room. The user must give consent here. However the user is at any time able to create a group chat and invite all of their contacts to this chat in any matrix client which has the same result.
|
||||
|
194
README.md
@ -3,44 +3,172 @@
|
||||
<p align="center">
|
||||
<a href="https://matrix.to/#/#fluffychat:matrix.org" target="new">Join the community</a> - <a href="https://metalhead.club/@krille" target="new">Follow me on Mastodon</a> - <a href="https://hosted.weblate.org/projects/fluffychat/" target="new">Translate FluffyChat</a> - <a href="https://gitlab.com/ChristianPauly/fluffychat-website" target="new">Translate the website</a> - <a href="https://fluffychat.im" target="new">Website</a> - <a href="https://gitlab.com/famedly/famedlysdk" target="new">Famedly Matrix SDK</a> - <a href="https://famedly.com/kontakt">Server hosting and professional support</a>
|
||||
</p>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
|
||||
FluffyChat is an open source, nonprofit and cute matrix messenger app. The app is easy to use but secure and decentralized.
|
||||
|
||||
## Features
|
||||
|
||||
- Send all kinds of messages, images and files
|
||||
- Voice messages
|
||||
- Location sharing
|
||||
- Push notifications
|
||||
- Unlimited private and public group chats
|
||||
- Public channels with thousands of participants
|
||||
- Feature rich group moderation including all matrix features
|
||||
- Discover and join public groups
|
||||
- Dark mode
|
||||
- Custom themes
|
||||
- Hides complexity of Matrix IDs behind simple QR codes
|
||||
- Custom emotes and stickers
|
||||
- Spaces
|
||||
- Compatible with Element, Nheko, NeoChat and all other Matrix apps
|
||||
- End to end encryption
|
||||
- Emoji verification & cross signing
|
||||
- And much more...
|
||||
|
||||
# Installation
|
||||
|
||||
Please visit our website for installation instructions:
|
||||
|
||||
https://fluffychat.im
|
||||
FluffyChat is a multi-platform Matrix client written in Dart/Flutter. It compiles to native code on Android, iOS, macOS, Windows and Linux and renders with Skia on the web. FluffyChat is just a hobby project from the developers of [Famedly](https://famedly.com) and licensed under AGPLv3. It follows a [design philosophy](https://ko-fi.com/post/FluffyChats-Design-Philosophy-W7W63A6YS) to be minimalistic, inclusive and easy to use.
|
||||
|
||||
# How to build
|
||||
|
||||
Please visit our Wiki for build instructions:
|
||||
1. [Install flutter](https://flutter.dev)
|
||||
|
||||
https://gitlab.com/famedly/fluffychat/-/wikis/How-To-Build
|
||||
2. Clone the repo:
|
||||
```
|
||||
git clone --recurse-submodules https://gitlab.com/famedly/fluffychat
|
||||
cd fluffychat
|
||||
```
|
||||
|
||||
3. Choose your target platform below and enable support for it.
|
||||
|
||||
3.1 If you want, enable Googles Firebase Cloud Messaging:
|
||||
|
||||
`git apply ./scripts/enable-android-google-services.patch`
|
||||
|
||||
4. Debug with: `flutter run`
|
||||
|
||||
### Android
|
||||
|
||||
* Install CMake from the SDK Manager
|
||||
|
||||
* Install ninja:
|
||||
```
|
||||
sudo apt install ninja-build
|
||||
```
|
||||
|
||||
* Build with: `flutter build apk`
|
||||
|
||||
### iOS / iPadOS
|
||||
|
||||
* Have a Mac with Xcode installed, and set up for Xcode-managed app signing
|
||||
* If you want automatic app installation to connected devices, make sure you have Apple Configurator installed, with the Automation Tools (`cfgutil`) enabled
|
||||
* Set a few environment variables
|
||||
* FLUFFYCHAT_NEW_TEAM: the Apple Developer team that your certificates should live under
|
||||
* FLUFFYCHAT_NEW_GROUP: the group you want App IDs and such to live under (ie: com.example.fluffychat)
|
||||
* FLUFFYCHAT_INSTALL_IPA: set to `1` if you want the IPA to be deployed to connected devices after building, otherwise unset
|
||||
* Run `./scripts/build-ios.sh`
|
||||
|
||||
### Web
|
||||
|
||||
* Enable web support in Flutter: https://flutter.dev/docs/get-started/web
|
||||
|
||||
* Build with:
|
||||
```bash
|
||||
./scripts/prepare-web.sh
|
||||
flutter build web --release
|
||||
```
|
||||
|
||||
* Optionally configure by serving a `config.json` at the same path as fluffychat.
|
||||
An example can be found at `config.sample.json`. None of these
|
||||
values have to exist, the ones stated here are the default ones. If you e.g. only want
|
||||
to change the default homeserver, then only modify the `default_homeserver` key.
|
||||
|
||||
### Desktop (Linux, Windows, macOS)
|
||||
|
||||
* Enable Desktop support in Flutter: https://flutter.dev/desktop
|
||||
|
||||
* Build with one of these:
|
||||
```bash
|
||||
flutter build linux --release
|
||||
flutter build windows --release
|
||||
flutter build macos --release
|
||||
```
|
||||
|
||||
|
||||
# Special thanks
|
||||
# How to add translations for your language
|
||||
|
||||
You can use Weblate to translate the app to your language:
|
||||
|
||||
https://hosted.weblate.org/projects/fluffychat/
|
||||
|
||||
If you want to get your translated strings approved, please ask in our
|
||||
<a href="https://matrix.to/#/#fluffychat:matrix.org" target="new">support room</a>!
|
||||
|
||||
1. Replace the non-translated string in the codebase:
|
||||
```
|
||||
Text("Hello world"),
|
||||
```
|
||||
with a method call:
|
||||
```
|
||||
Text(L10n.of(context).helloWorld),
|
||||
```
|
||||
|
||||
and add the following import if missing:
|
||||
|
||||
```
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
```
|
||||
|
||||
2. Add the string to `/lib/l10n/l10n_en.arb`:
|
||||
|
||||
(The following example need to be sorounded by the usual json `{}` and after the `@@locale` key)
|
||||
|
||||
Example A:
|
||||
```
|
||||
"helloWorld": "Hello World!",
|
||||
"@helloWorld": {
|
||||
"description": "The conventional newborn programmer greeting"
|
||||
}
|
||||
```
|
||||
|
||||
Example B:
|
||||
```
|
||||
"hello": "Hello {userName}",
|
||||
"@hello": {
|
||||
"description": "A message with a single parameter",
|
||||
"placeholders": {
|
||||
"userName": {
|
||||
"type": “String”,
|
||||
“example”: “Bob”
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
3. For testing just run a regular build without extras
|
||||
|
||||
# Android push notifications without FCM
|
||||
Fluffychat has the ability to receive push notifications on android without FCM via the
|
||||
[UnifiedPush](https://github.com/UnifiedPush) project, e.g. using gotify as push backend. As the project is still pretty new
|
||||
there might still be some bugs, overall it seems to be working, though.
|
||||
|
||||
While UnifiedPush also supports p2p push via [NoProvider2Push](https://github.com/NoProvider2Push/android)
|
||||
here the gotify setup will be outlined. Adapt re-write proxies accordingly, if you want to use a different push provider.
|
||||
|
||||
For self-hosted push with gotify you have to install and configure [gotify-server](https://github.com/gotify/server)
|
||||
with [UnifiedPush](https://github.com/UnifiedPush/contrib/blob/main/providers/gotify.md) support.
|
||||
|
||||
Next, you add the `repo.unifiedpush.org` repository to fdroid and install the gotify client via it. Log into your gotify account and push notifications should work!
|
||||
|
||||
## Matrix-specific re-write proxy
|
||||
Until [MSC2970](https://github.com/matrix-org/matrix-doc/pull/2970) is figured out we unfortunately
|
||||
need another simple re-write proxy. By default the one at https://matrix.gateway.unifiedpush.org
|
||||
is used, however you can easily self-host it. For that, add to your nginx config on the same domain you serve gotify the following (change *relay.example.tld*):
|
||||
```
|
||||
resolver 9.9.9.9;
|
||||
|
||||
location /_matrix/push/v1/notify {
|
||||
set $target '';
|
||||
if ($request_method = GET ) {
|
||||
return 200 '{"gateway":"matrix","unifiedpush":{"gateway":"matrix"}}';
|
||||
}
|
||||
access_by_lua_block {
|
||||
local cjson = require("cjson")
|
||||
ngx.req.read_body()
|
||||
local body = ngx.req.get_body_data()
|
||||
local parsedBody = cjson.decode(body)
|
||||
local accepted = "https://relay.example.tld/"
|
||||
ngx.var.target = parsedBody["notification"]["devices"][1]["pushkey"]
|
||||
ngx.req.set_body_data(body)
|
||||
if(string.sub(ngx.var.target,1,string.len(accepted))~=accepted) then ngx.var.target="http://0.0.0.0/"
|
||||
end
|
||||
}
|
||||
proxy_set_header Content-Type application/json;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass $target;
|
||||
}
|
||||
```
|
||||
|
||||
# Special thanks to
|
||||
|
||||
* <a href="https://github.com/fabiyamada">Fabiyamada</a> is a graphics designer from Brasil and has made the fluffychat logo and the banner. Big thanks for her great designs.
|
||||
|
||||
@ -48,10 +176,10 @@ https://gitlab.com/famedly/fluffychat/-/wikis/How-To-Build
|
||||
|
||||
* Thanks to MTRNord and Sorunome for developing.
|
||||
|
||||
* Thanks to Mark for all his support and the chat background.
|
||||
|
||||
* Also thanks to all translators and testers! With your help, fluffychat is now available in more than 12 languages.
|
||||
|
||||
* <a href="https://github.com/googlefonts/noto-emoji/">Noto Emoji Font</a> for the awesome emojis.
|
||||
|
||||
* <a href="https://github.com/madsrh/WoodenBeaver">WoodenBeaver</a> sound theme for the notification sound.
|
||||
|
||||
* The Matrix Foundation for making and maintaining the [emoji translations](https://github.com/matrix-org/matrix-doc/blob/main/data-definitions/sas-emoji.json) used for emoji verification, licensed Apache 2.0
|
||||
|
@ -1,35 +0,0 @@
|
||||
# Translators Guide
|
||||
|
||||
There are 3 main types of strings to be translated.
|
||||
|
||||
## Simple
|
||||
```
|
||||
Add new friend
|
||||
```
|
||||
They are just plain text and are to be translated in full.
|
||||
|
||||
## Placeholder
|
||||
```
|
||||
{username} changed their avatar
|
||||
```
|
||||
Contains one or more words surrounded by curly brackets "`{}`". Anything outside of the curly brackets is to be translated as normal, but the words in the curly brackets are **NOT** to be translated. In the above example "`{username}`" will be replaced by the users actual username by FluffyChat.
|
||||
|
||||
## Plural
|
||||
|
||||
- {count,plural, =1{**1 more event**} other{{count} **more events**}}
|
||||
|
||||
This is the most complicated string type, the parts in bold are the only parts that need translating in this string. You can identify plural strings by seeing the pattern `{word,plural,` at the start. `=1` and `other` are "selectors" so you can have multiple different translations for different quantities. `other` is the only required selector and will be chosen if the count does not match any other selectors.
|
||||
|
||||
Selector | Matches
|
||||
---|---
|
||||
=0 | a count of exactly 0
|
||||
=1 | a count of exactly 1
|
||||
=2 | a count of exactly 2
|
||||
other | any number unless it matches a more specific rule
|
||||
|
||||
There is also "few" and "many", but they seem to have language specific meaning.
|
||||
|
||||
Also the selectors do not need to match the English version such as your language may not even use different words for when there is more than one of something so:
|
||||
- {count,plural, other{{count} \<insert translation here\>}}
|
||||
|
||||
could be a perfectly resonable way to translate.
|
@ -1,4 +1,4 @@
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
include: package:pedantic/analysis_options.yaml
|
||||
|
||||
linter:
|
||||
rules:
|
||||
@ -8,46 +8,10 @@ linter:
|
||||
- prefer_final_locals
|
||||
- prefer_final_in_for_each
|
||||
- sort_pub_dependencies
|
||||
- require_trailing_commas
|
||||
|
||||
analyzer:
|
||||
errors:
|
||||
todo: ignore
|
||||
use_build_context_synchronously: ignore
|
||||
exclude:
|
||||
- lib/generated_plugin_registrant.dart
|
||||
- lib/l10n/*.dart
|
||||
|
||||
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
|
||||
|
6
android/.gitignore
vendored
@ -5,9 +5,3 @@ gradle-wrapper.jar
|
||||
/gradlew.bat
|
||||
/local.properties
|
||||
GeneratedPluginRegistrant.java
|
||||
|
||||
# Remember to never publicly share your keystore.
|
||||
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
|
||||
key.properties
|
||||
**/*.keystore
|
||||
**/*.jks
|
||||
|
@ -32,7 +32,7 @@ if (keystorePropertiesFile.exists()) {
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
compileSdkVersion 30
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
@ -44,12 +44,11 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
applicationId "chat.fluffy.fluffychat"
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 31
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
multiDexEnabled true
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
@ -68,6 +67,9 @@ android {
|
||||
}
|
||||
release {
|
||||
signingConfig signingConfigs.release
|
||||
minifyEnabled true
|
||||
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -79,7 +81,10 @@ flutter {
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
//implementation 'com.google.firebase:firebase-messaging:19.0.1' // Workaround for https://github.com/microg/android_packages_apps_GmsCore/issues/313#issuecomment-617651698
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||
implementation 'com.github.UnifiedPush:android-connector:1.2.0' // needed for unifiedpush
|
||||
}
|
||||
|
||||
//apply plugin: 'com.google.gms.google-services'
|
||||
|
9
android/app/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
-optimizationpasses 5
|
||||
## Flutter wrapper
|
||||
-keep class io.flutter.app.** { *; }
|
||||
-keep class io.flutter.plugin.** { *; }
|
||||
-keep class io.flutter.util.** { *; }
|
||||
-keep class io.flutter.view.** { *; }
|
||||
-keep class io.flutter.** { *; }
|
||||
-keep class io.flutter.plugins.** { *; }
|
||||
-dontwarn io.flutter.embedding.**
|
@ -1,7 +1,6 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="chat.fluffy.fluffychat">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="chat.fluffy.fluffychat" android:installLocation="auto">
|
||||
package="chat.fluffy.fluffychat">
|
||||
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
|
||||
calls FlutterMain.startInitialization(this); in its onCreate method.
|
||||
In most cases you can leave this as-is, but you if you want to provide
|
||||
@ -14,35 +13,21 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<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.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.CALL_PHONE" />
|
||||
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
|
||||
<uses-sdk
|
||||
tools:overrideLibrary="io.wazo.callkeep, net.touchcapture.qr.flutterqr, com.cloudwebrtc.webrtc, org.webrtc, com.it_nomads.fluttersecurestorage, com.pichillilorenzo.flutter_inappwebview, com.example.video_compress, com.otaliastudios.transcoder, com.otaliastudios.opengl, com.kineapps.flutter_file_dialog, com.llfbandit.record, com.pravera.flutter_foreground_task"/>
|
||||
<application
|
||||
android:name=".Application"
|
||||
android:label="FluffyChat"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:allowBackup="false"
|
||||
android:fullBackupContent="false"
|
||||
>
|
||||
android:fullBackupContent="false">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
android:hardwareAccelerated="true"
|
||||
android:showOnLockScreen="false"
|
||||
android:turnScreenOn="true"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:exported="true">
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
@ -51,6 +36,14 @@
|
||||
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data
|
||||
android:scheme="im.fluffychat" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
@ -65,12 +58,6 @@
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="matrix" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="im.fluffychat" android:host="chat" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
@ -91,51 +78,24 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="video/*" />
|
||||
</intent-filter>
|
||||
|
||||
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="com.linusu.flutter_web_auth_2.CallbackActivity"
|
||||
android:exported="true">
|
||||
<intent-filter android:label="flutter_web_auth">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="im.fluffychat" android:host="login"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<service android:name=".FcmPushService"
|
||||
<!-- <service android:name=".FcmPushService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
|
||||
</intent-filter>
|
||||
</service>
|
||||
</service> -->
|
||||
|
||||
<service android:name="com.pravera.flutter_foreground_task.service.ForegroundService"
|
||||
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>
|
||||
|
||||
<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">
|
||||
<receiver android:exported="true" 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" />
|
||||
<action android:name="org.unifiedpush.android.connector.MESSAGE"/>
|
||||
<action android:name="org.unifiedpush.android.connector.UNREGISTERED"/>
|
||||
<action android:name="org.unifiedpush.android.connector.NEW_ENDPOINT"/>
|
||||
<action android:name="org.unifiedpush.android.connector.REGISTRATION_FAILED" />
|
||||
<action android:name="org.unifiedpush.android.connector.REGISTRATION_REFUSED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
|
@ -0,0 +1,17 @@
|
||||
package chat.fluffy.fluffychat
|
||||
|
||||
import io.flutter.app.FlutterApplication
|
||||
import io.flutter.plugin.common.PluginRegistry
|
||||
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
|
||||
import io.flutter.view.FlutterMain
|
||||
|
||||
class Application : FlutterApplication(), PluginRegistrantCallback {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
FlutterMain.startInitialization(this)
|
||||
}
|
||||
|
||||
override fun registerWith(registry: PluginRegistry?) {
|
||||
}
|
||||
}
|
@ -4,15 +4,14 @@ import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
|
||||
import android.content.Context
|
||||
import androidx.multidex.MultiDex
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.WindowManager
|
||||
|
||||
class MainActivity : FlutterActivity() {
|
||||
|
||||
override fun attachBaseContext(base: Context) {
|
||||
super.attachBaseContext(base)
|
||||
MultiDex.install(this)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
};
|
||||
|
||||
override fun provideFlutterEngine(context: Context): FlutterEngine? {
|
||||
return provideEngine(this)
|
||||
@ -25,7 +24,7 @@ class MainActivity : FlutterActivity() {
|
||||
companion object {
|
||||
var engine: FlutterEngine? = null
|
||||
fun provideEngine(context: Context): FlutterEngine {
|
||||
val eng = engine ?: FlutterEngine(context, emptyArray(), true, false)
|
||||
var eng = engine ?: FlutterEngine(context, emptyArray(), true, false)
|
||||
engine = eng
|
||||
return eng
|
||||
}
|
||||
|
@ -1,23 +1,36 @@
|
||||
package chat.fluffy.fluffychat
|
||||
|
||||
import org.unifiedpush.flutter.connector.UnifiedPushHandler
|
||||
|
||||
import chat.fluffy.fluffychat.MainActivity
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.embedding.engine.dart.DartExecutor
|
||||
import org.unifiedpush.flutter.connector.UnifiedPushReceiver
|
||||
import io.flutter.view.FlutterMain
|
||||
import io.flutter.embedding.engine.dart.DartExecutor.DartEntrypoint
|
||||
import org.unifiedpush.android.connector.MessagingReceiver
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.WindowManager
|
||||
|
||||
class UnifiedPushReceiver : UnifiedPushReceiver() {
|
||||
val receiverHandler = object : UnifiedPushHandler() {
|
||||
override fun getEngine(context: Context): FlutterEngine {
|
||||
return provideEngine(context)
|
||||
}
|
||||
|
||||
fun provideEngine(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()
|
||||
)
|
||||
engine.getLocalizationPlugin().sendLocalesToFlutter(
|
||||
context.getResources().getConfiguration())
|
||||
engine.getDartExecutor().executeDartEntrypoint(
|
||||
DartEntrypoint.createDefault())
|
||||
}
|
||||
return engine
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class UnifiedPushReceiver : MessagingReceiver(receiverHandler)
|
||||
|
@ -2,5 +2,4 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
|
||||
</adaptive-icon>
|
@ -1,7 +1,6 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="chat.fluffy.fluffychat">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
@ -1,12 +1,12 @@
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.8.0'
|
||||
ext.kotlin_version = '1.4.32'
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.1.2'
|
||||
classpath 'com.android.tools.build:gradle:4.2.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
//classpath 'com.google.gms:google-services:4.3.8'
|
||||
}
|
||||
@ -15,7 +15,7 @@ buildscript {
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,6 +27,6 @@ subprojects {
|
||||
project.evaluationDependsOn(':app')
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete) {
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
|
@ -44,11 +44,7 @@ platform :android do
|
||||
upload_to_play_store(track: 'internal', aab: '../build/app/outputs/bundle/release/app-release.aab', version_code: "#{last_version+1}")
|
||||
end
|
||||
|
||||
lane :deploy_candidate do
|
||||
upload_to_play_store(track: 'internal', track_promote_to: "beta", deactivate_on_promote: false, skip_upload_changelogs: true)
|
||||
end
|
||||
|
||||
lane :deploy_release do
|
||||
upload_to_play_store(track: 'beta', track_promote_to: "production", deactivate_on_promote: false, skip_upload_changelogs: true)
|
||||
upload_to_play_store(track: 'internal', track_promote_to: "production", deactivate_on_promote: false, skip_upload_changelogs: true)
|
||||
end
|
||||
end
|
||||
|
@ -1,56 +1,39 @@
|
||||
fastlane documentation
|
||||
----
|
||||
|
||||
================
|
||||
# Installation
|
||||
|
||||
Make sure you have the latest version of the Xcode command line tools installed:
|
||||
|
||||
```sh
|
||||
```
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
|
||||
Install _fastlane_ using
|
||||
```
|
||||
[sudo] gem install fastlane -NV
|
||||
```
|
||||
or alternatively using `brew install fastlane`
|
||||
|
||||
# Available Actions
|
||||
|
||||
## Android
|
||||
|
||||
### android set_build_code_internal
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android set_build_code_internal
|
||||
### android set_build_code_beta
|
||||
```
|
||||
fastlane android set_build_code_beta
|
||||
```
|
||||
|
||||
|
||||
|
||||
### android deploy_internal_test
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy_internal_test
|
||||
### android deploy_beta_test
|
||||
```
|
||||
|
||||
|
||||
|
||||
### android deploy_candidate
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy_candidate
|
||||
fastlane android deploy_beta_test
|
||||
```
|
||||
|
||||
|
||||
|
||||
### android deploy_release
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy_release
|
||||
```
|
||||
|
||||
fastlane android deploy_release
|
||||
```
|
||||
|
||||
|
||||
----
|
||||
|
||||
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
|
||||
|
||||
More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
|
||||
|
||||
The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
|
||||
This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
|
||||
More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
|
||||
The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
|
||||
|
@ -1,68 +0,0 @@
|
||||
FluffyChat 1.6.0 features a lot of bug fixes and improvements. The code base has been
|
||||
simplified and the drawer on the chat list page got a come-back. Some new features like
|
||||
the space hierarchy and session dump have been implemented.
|
||||
|
||||
- feat: Added monochrome entry for themed icon support in Android 13 (James Reilly)
|
||||
- feat: Display timeline of messages in android notification (Christian Pauly)
|
||||
- feat: Emoji related fixes (TheOneWithTheBraid)
|
||||
- feat: Implement deleting pushers in app (Christian Pauly)
|
||||
- feat: New material 3 design (Christian Pauly)
|
||||
- feat: Redesign bootsstrap and offer secure storage support (Christian Pauly)
|
||||
- feat: Send multiple images at once (Christian Pauly)
|
||||
- feat: implement session dump (TheOneWithTheBraid)
|
||||
- feat: implement space hierarchy (TheOneWithTheBraid)
|
||||
- feat: introduce extended integration tests (TheOneWithTheBraid)
|
||||
- feat: libhandy integration (TheOneWithTheBraid)
|
||||
- fix: Clearing push triggered when only one room got seen (Christian Pauly)
|
||||
- fix: Dont display loading dialog when adding reaction (Christian Pauly)
|
||||
- fix: Follow up for spaces hierarchy (TheOneWithTheBraid)
|
||||
- fix: Missing null checks in chat details view (Christian Pauly)
|
||||
- fix: Non FCM Android builds crash on start (Christian Pauly)
|
||||
- fix: Permission chooser dialog on iOS (Christian Pauly)
|
||||
- fix: Set avatar on only single action available (Christian Pauly)
|
||||
- fix: Sharing on iOS and iPad (Christian Pauly)
|
||||
- fix: Unread bubble is invisible in dark mode (Christian Pauly)
|
||||
- fix: appimage builds (TheOneWithTheBraid)
|
||||
- fix: only use custom http client on android (Jayesh Nirve)
|
||||
- fix: pass isrg cert to http client (Jayesh Nirve)
|
||||
- refactor: Chat view (Christian Pauly)
|
||||
- refactor: Encryption button (Christian Pauly)
|
||||
- refactor: Remove duplicated imports (Christian Pauly)
|
||||
- refactor: Remove legacy store (Christian Pauly)
|
||||
- refactor: Remove presence status feature (Christian Pauly)
|
||||
- refactor: Simplify MxcImage and replace CachedNetworkImage (Christian Pauly)
|
||||
- refactor: Switch to Hive Collections DB (Christian Pauly)
|
||||
- refactor: move start chat FAB to implementation file (TheOneWithTheBraid)
|
||||
- Translated using Weblate (Catalan) (Alfonso Montero López)
|
||||
- Translated using Weblate (Catalan) (Auri B.P)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (English) (Raatty)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Finnish) (Aminda Suomalainen)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Persian) (Amir Hossein Maher)
|
||||
- Translated using Weblate (Polish) (Przemysław Romanik)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore: Add border to avatars (Christian Pauly)
|
||||
- chore: Add fancy hero animations (Christian Pauly)
|
||||
- chore: Adjust appbar design (Christian Pauly)
|
||||
- chore: Adjust design (Christian Pauly)
|
||||
- chore: Adjust search bar design (Christian Pauly)
|
||||
- chore: Always display header elevation in chat (Christian Pauly)
|
||||
- chore: Design follow up fixes (Christian Pauly)
|
||||
- chore: Design follow up fixes (Christian Pauly)
|
||||
- chore: Disable integration tests without runners (Krille Fear)
|
||||
- chore: Enhance invitiation UX (Christian Pauly)
|
||||
- chore: Make push helper more fail safe (Christian Pauly)
|
||||
- chore: Make push helper more stable (Christian Pauly)
|
||||
- chore: Minor design improvements (Christian Pauly)
|
||||
- chore: Pinned events design (Christian Pauly)
|
||||
- chore: Remove permission handler dependency and increase compileSdkVersion (Christian Pauly)
|
||||
- chore: Switch to flutter 3.0.5 (Krille Fear)
|
||||
- chore: Update SDK (Christian Pauly)
|
||||
- chore: remove snapping sheet (TheOneWithTheBraid)
|
@ -22,11 +22,11 @@ Decentralized
|
||||
There is no "FluffyChat server" you are forced to use. Use the server you find trustworthy or host your own.
|
||||
|
||||
Compatible
|
||||
Compatible with Element, Fractal, Nekho and all matrix messengers.
|
||||
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. ♥
|
||||
And a world where apps are made for fluffyness and not for profit. ♥
|
After Width: | Height: | Size: 141 KiB |
After Width: | Height: | Size: 196 KiB |
After Width: | Height: | Size: 721 KiB |
@ -5,17 +5,17 @@
|
||||
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="0: update_fastlane" time="1.455419">
|
||||
<testcase classname="fastlane.lanes" name="0: update_fastlane" time="0.094148">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="1: default_platform" time="0.000127">
|
||||
<testcase classname="fastlane.lanes" name="1: default_platform" time="0.000809">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="2: google_play_track_version_codes" time="2.638619">
|
||||
<testcase classname="fastlane.lanes" name="2: google_play_track_version_codes" time="1.408525">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
org.gradle.jvmargs=-Xmx1536M
|
||||
android.enableR8=true
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
@ -1,6 +1,5 @@
|
||||
#Fri Jun 23 08:50:38 CEST 2017
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
|
||||
|
@ -1,11 +1,15 @@
|
||||
include ':app'
|
||||
|
||||
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
|
||||
def properties = new Properties()
|
||||
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
|
||||
|
||||
assert localPropertiesFile.exists()
|
||||
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
|
||||
def plugins = new Properties()
|
||||
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
|
||||
if (pluginsFile.exists()) {
|
||||
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
|
||||
}
|
||||
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
||||
plugins.each { name, path ->
|
||||
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
|
||||
include ":$name"
|
||||
project(":$name").projectDir = pluginDirectory
|
||||
}
|
||||
|
1
android/settings_aar.gradle
Normal file
@ -0,0 +1 @@
|
||||
include ':app'
|
3
appimage/.gitignore
vendored
@ -1,3 +0,0 @@
|
||||
FluffyChat.AppDir
|
||||
*.AppImage
|
||||
*.AppImage.zsync
|
@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
exec ./fluffychat
|
@ -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;
|
@ -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
|
||||
```
|
Before Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 18 KiB |
@ -1,168 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 640 640"
|
||||
xml:space="preserve"
|
||||
id="svg24"
|
||||
sodipodi:docname="info-logo.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14, custom)"
|
||||
width="640"
|
||||
height="640"
|
||||
inkscape:export-filename="info-logo.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs29" /><sodipodi:namedview
|
||||
id="namedview26"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.4142136"
|
||||
inkscape:cx="235.113"
|
||||
inkscape:cy="375.4737"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1012"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg24" />
|
||||
<style
|
||||
type="text/css"
|
||||
id="style2">
|
||||
.st0{fill:url(#SVGID_1_);}
|
||||
.st1{fill:#F094BE;}
|
||||
.st2{fill:#4D3F92;}
|
||||
.st3{fill:#FFFFFF;}
|
||||
</style>
|
||||
|
||||
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:26.6667px;line-height:1.25;font-family:'Noto Sans Linear B';-inkscape-font-specification:'Noto Sans Linear B';display:none;fill:#ff0000;fill-opacity:0.993491"
|
||||
x="94.643097"
|
||||
y="633.18518"
|
||||
id="text455"
|
||||
inkscape:label="Note: I do not know the original font used...."
|
||||
sodipodi:insensitive="true"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan453"
|
||||
x="0"
|
||||
y="0"
|
||||
style="font-size:26.6667px;fill:#ff0000;fill-opacity:0.993491">Note: I do not know the original font used....</tspan></text><g
|
||||
id="Capa_2"
|
||||
transform="matrix(1.6168892,0,0,1.6168895,172.88889,94.00966)"
|
||||
style="image-rendering:auto">
|
||||
<g
|
||||
id="g21"
|
||||
transform="translate(9.4535881e-5,0.46581846)">
|
||||
<path
|
||||
class="st2"
|
||||
d="m 151.6,95.1 c 1.5,-0.3 2.8,-1 3.8,-2 4,-5.3 0.8,-11.8 -4.5,-12.6 -0.8,0 -1.5,-0.8 -1.5,-1.5 0,-0.3 0,-0.5 0,-0.5 0.8,-0.8 1.5,-1.8 2.5,-3.3 8.1,-10.8 11.8,-50.6 3.8,-53.7 -9.8,-3.3 -29.7,6.3 -38.3,17.4 -0.5,-0.3 -1,-1 -1,-1.8 0.3,-3 -1.3,-5.5 -3.5,-6.8 -4.5,-2.3 -8.8,0 -10.6,3.3 -0.5,0.8 -1.3,1.3 -2,1 -0.8,0 -1.5,-0.8 -1.5,-1.5 -0.5,-2.5 -2,-4.5 -4.3,-5.5 -4.8,-2 -9.8,0.8 -10.6,5.3 -0.3,0.8 -0.8,1.5 -1.5,1.5 -0.8,0.3 -1.5,-0.3 -2,-1 -1.5,-2.3 -4,-3.8 -6.5,-3.8 -4,0 -7.6,3.3 -7.8,7.3 v 0.3 0.3 c 0,0.8 -0.5,1.5 -1,1.8 H 64.8 C 56.5,28.5 36.3,18.6 26.3,21.9 c -8.1,2.8 -4.3,42.6 4,53.4 1.5,2 2.8,3.5 3.8,4.5 -0.3,0.8 -1,1.5 -1.8,1.5 -1.3,0 -2.5,0.5 -3.5,1.3 -5.3,5 -2.3,12.1 3,13.4 0.8,0.3 1.5,1 1.5,1.8 0,0.8 -0.5,1.8 -1.3,2 -1,0.5 -2,1 -2.8,2 -4,5.8 0,12.3 5.5,12.3 0.8,0 1.5,0.5 1.8,1.3 0.3,0.8 0.3,1.5 -0.5,2 -1.5,1.5 -2.3,3.5 -2,5.5 0.3,2.8 2,5.3 4.8,6.5 1.5,0.8 3,0.8 4.5,0.5 0.8,-0.3 1.5,0 2,0.8 0.5,0.5 0.5,1.5 0.3,2 -0.8,1.5 -1,3.3 -0.5,5 0.8,2.8 2.8,4.8 5.5,5.5 2.5,0.5 4.3,-0.3 5.5,-0.8 0.5,-0.3 -3.3,9.1 -6,15.4 -0.8,2 1.3,4.3 3.5,3.3 8.3,-3.8 22.2,-10.3 22.2,-9.8 0.5,5.3 6.5,9.1 12.3,5.3 1.3,-0.8 2,-2.3 2.3,-3.5 0.3,-0.8 1,-1.5 2,-1.5 1,0 1.8,0.5 2,1.5 0.3,1.3 0.8,2.3 1.8,3 5.8,4.5 12.3,0.8 12.8,-4.8 0,-0.8 0.5,-1.5 1.3,-1.8 0.8,-0.3 1.5,0 2,0.5 1.5,1.5 3.3,2.5 5.3,2.5 v 0 c 2.5,0 5,-1.3 6.5,-3.8 1,-1.5 1.3,-3 1,-5 0,-0.8 0.3,-1.5 0.8,-2 0.5,-0.5 1.5,-0.5 2,0 1.5,0.8 3.3,1.3 5,0.8 2.8,-0.5 5,-2.8 5.8,-5.3 0.5,-1.8 0.3,-3.5 -0.5,-5.3 -0.3,-0.8 -0.3,-1.5 0.3,-2 0.6,-0.5 1.3,-0.8 2,-0.8 1.8,0.3 3.3,0.3 4.8,-0.5 2.3,-1 3.8,-3 4.3,-5.5 0.5,-2.5 -0.3,-4.8 -2,-6.5 -0.5,-0.5 -0.8,-1.3 -0.5,-2 0.3,-0.7 1,-1.3 1.8,-1.3 1.8,0 3.8,-0.5 5,-2 4.3,-4.5 2.3,-10.6 -2.5,-12.6 -0.8,-0.3 -1.3,-1 -1.3,-2 0,-0.9 0.7,-1.6 1.5,-1.6 z"
|
||||
id="path7"
|
||||
style="stroke:#ffffff;stroke-width:4.32930058;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" />
|
||||
<path
|
||||
class="st3"
|
||||
d="m 131.4,42.2 c 0.5,1.5 0.5,3 0,4.5 -0.3,0.8 0,1.5 0.5,2 0.5,0.5 1.3,0.8 2,0.5 1,-0.5 2,-0.5 3,-0.5 2.3,0 4.3,1 5.8,3 1,1.3 1.8,3 1.5,4.8 0,1.5 -0.5,2.8 -1.3,4 -0.5,0.5 -0.5,1.5 0,2 0.3,0.3 0.5,0.8 1,0.8 1,-0.3 2,-1 2.8,-2 4.5,-6.3 5.3,-26.2 0.8,-27.7 -4.5,-1.5 -12.3,1.5 -17.9,6 1.1,0.5 1.6,1.3 1.8,2.6 z"
|
||||
id="path9" />
|
||||
<path
|
||||
class="st3"
|
||||
d="m 39,63.6 c 0.3,-0.3 0.5,-0.5 0.8,-0.8 0.5,-0.8 0.3,-1.5 0,-2 C 38.5,59 38.2,57 38.5,55 39,52.2 41.3,50 44,49.2 c 1.5,-0.5 3,-0.3 4.5,0.3 0.8,0.3 1.5,0 2,-0.5 0.5,-0.5 0.8,-1.3 0.5,-2 -0.5,-1.5 -0.5,-3 0,-4.5 0.3,-1 0.8,-2 1.5,-2.8 -5.5,-4.5 -13.9,-7.8 -18.4,-6.3 -4.5,1.5 -3.7,21.4 0.9,27.7 1,1.5 2.2,2.2 4,2.5 z"
|
||||
id="path11" />
|
||||
<g
|
||||
id="g19">
|
||||
<circle
|
||||
class="st3"
|
||||
cx="60.900002"
|
||||
cy="94.599998"
|
||||
r="9.3000002"
|
||||
id="circle13" />
|
||||
<path
|
||||
class="st3"
|
||||
d="m 100.7,94.6 c 0,5.3 -4.3,9.3 -9.3,9.3 -5.3,0 -9.3,-4.3 -9.3,-9.3 0,-5 18.6,-5.3 18.6,0 z"
|
||||
id="path15" />
|
||||
<circle
|
||||
class="st3"
|
||||
cx="121.6"
|
||||
cy="94.599998"
|
||||
r="9.3000002"
|
||||
id="circle17" />
|
||||
</g>
|
||||
</g>
|
||||
</g><g
|
||||
id="g2720"
|
||||
inkscape:label="fluffychat"
|
||||
style="display:inline;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
transform="matrix(0.92025338,0,0,0.92025338,-6.3220161,-4.7055202)"><g
|
||||
id="g14535"
|
||||
inkscape:label="chat"
|
||||
style="fill:#00a1bc;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"><path
|
||||
style="color:#000000;fill:#00a1bc;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m 562.92197,448.4866 c -2.60917,-0.30486 -5.17384,1.64339 -5.69858,4.21245 -0.55728,2.72842 -0.24323,7.91189 -0.24323,7.91189 -2.74579,-0.0686 -5.55869,-0.59559 -7.95219,1.32171 -2.65609,2.12765 -2.58626,7.00643 0,8.95134 2.34163,1.76095 7.95219,1.25707 7.95219,1.25707 0,10.01284 3.8e-4,19.77116 0,29.784 0.49843,4.92696 4.90461,8.87339 9.77862,9.22679 3.37489,0.31796 6.92487,0.1972 10.13895,-0.94458 2.75868,-1.13315 4.655,-4.36744 3.42462,-7.26639 -0.79803,-2.84864 -4.22476,-3.70476 -6.73165,-2.71773 -2.98388,1.72425 -4.84172,-1.67013 -4.47089,-4.25546 -0.0315,-8.02703 0.014,-16.05409 0.003,-24.08114 2.70412,-0.0577 5.42586,0.12654 8.11662,-0.11491 4.83581,-0.90643 5.26253,-8.45876 0.98226,-10.6606 -1.74161,-0.89591 -5.46982,-0.20326 -9.09888,-0.20326 0,0 0.006,-8.17372 -0.31554,-8.93716 -0.95528,-2.26675 -3.55257,-3.48402 -5.8856,-3.48402 z"
|
||||
id="path14479"
|
||||
sodipodi:nodetypes="sscssscccsscccscsss"
|
||||
inkscape:label="t" /><path
|
||||
style="color:#000000;fill:#00a1bc;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m 533.83203,458.7646 c -3.15141,-0.34296 -5.3587,2.78921 -5.64507,5.62849 -4.36454,-3.26144 -9.61516,-5.8459 -15.20756,-5.3963 -6.1831,0.04 -12.19324,2.65617 -16.52963,7.04459 -4.78443,4.13385 -6.10787,10.65878 -6.45154,16.67045 -0.74696,9.79875 2.9723,20.42469 11.3567,26.07195 4.72285,3.21814 10.72707,3.94029 16.29823,3.34602 3.96818,-0.47405 7.23684,-2.99092 10.0626,-5.63903 0.94876,3.35182 4.62364,5.93313 8.09234,4.68427 2.67575,-0.73754 4.24888,-3.52866 3.90033,-6.20541 -0.023,-13.74703 0.0461,-27.49708 -0.0348,-41.24221 -0.22956,-2.88413 -2.96011,-5.18257 -5.84164,-4.96282 z m -5.64507,23.94723 c 1.07828,6.5283 -1.60114,14.12719 -7.86545,17.06103 -4.79574,2.30687 -11.28382,1.71783 -14.76373,-2.60852 -4.1706,-4.99711 -5.43623,-12.34122 -2.74467,-18.33861 1.20342,-3.17686 3.3771,-6.03449 6.51321,-7.48705 5.19868,-2.91069 11.95962,-0.98785 15.64553,3.45474 1.89114,2.17769 3.29829,4.97591 3.21511,7.91841 z"
|
||||
id="path12957"
|
||||
sodipodi:nodetypes="ccsssscccscccscc"
|
||||
inkscape:label="a" /><path
|
||||
style="color:#000000;fill:#00a1bc;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m 443.06641,439.94141 c -3.26433,-0.0465 -6.38452,2.89404 -5.90305,6.25001 0.0229,19.9673 -0.0459,39.93753 0.0344,59.903 0.62565,4.36445 6.57701,6.42025 9.82803,3.46417 2.47654,-1.86092 1.63462,-5.09581 1.78481,-7.74763 0.014,-6.16519 -0.16754,-10.96992 0,-17.13031 0.10617,-3.90402 0.32092,-9.9351 3.79481,-12.41759 3.66729,-2.85819 10.09275,-3.39125 13.27607,-0.31533 3.28466,3.17383 3.05437,10.54267 3.05369,11.74336 -0.005,8.0496 -0.0355,16.10183 0.0353,24.14882 0.80701,3.40737 5.32389,3.39114 8.08366,2.86381 3.60962,-0.47168 4.05352,-4.29795 3.6902,-7.21157 -0.059,-9.29553 0.25875,-18.60594 -0.25343,-27.89111 -0.49072,-5.78736 -2.03801,-10.89373 -6.23092,-13.58338 -5.57775,-3.57799 -14.24081,-3.55982 -19.88013,0 l -5.56919,3.51556 c -0.0217,-6.95923 0.0434,-13.9211 -0.0327,-20.87868 -0.34574,-2.71871 -3.05656,-4.71379 -5.71157,-4.71313 z"
|
||||
id="path12939"
|
||||
sodipodi:nodetypes="sscssscssssscascccs"
|
||||
inkscape:label="h" /><path
|
||||
style="color:#000000;fill:#00a1bc;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m 391.91477,465.80108 c -7.57016,7.75562 -8.50788,19.94372 -5.30926,29.86701 3.38934,9.70476 13.24407,16.98333 23.65486,16.44674 6.17898,0.0435 12.93496,-1.24727 17.5401,-5.62829 2.78827,-3.46147 -0.34158,-10.49924 -5.13073,-8.5498 -3.84026,1.83312 -7.88892,3.96797 -12.31147,3.2528 -7.29184,-0.63102 -13.62087,-6.9993 -13.71248,-14.4019 -0.47868,-6.96567 3.61497,-14.86735 10.88009,-16.32616 4.0948,-0.89565 8.1361,0.43964 11.84821,2.0877 2.74473,1.20129 6.92733,2.38997 8.54085,-1.1092 2.05726,-3.93759 -1.06922,-8.39249 -4.75218,-9.94292 -7.03297,-3.7132 -15.61905,-3.33367 -23.00158,-0.92478 -3.03694,1.2244 -5.80603,3.05639 -8.24641,5.2288 z"
|
||||
id="path12912"
|
||||
sodipodi:nodetypes="ssssscccssssssccccss"
|
||||
inkscape:label="c" /></g><g
|
||||
id="g14529"
|
||||
inkscape:label="fluffy"
|
||||
style="fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"><path
|
||||
style="color:#000000;fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m 364.1013,507.69269 c -0.28866,4.09909 -1.36926,8.95002 -5.67816,10.59919 -4.72351,1.73746 -10.372,1.86184 -14.85523,-0.654 -3.7123,-2.44424 -9.3586,0.29378 -8.95093,4.93619 0.18108,4.54251 4.91635,6.57172 8.83075,6.98673 8.42045,1.69401 18.29318,1.4336 25.17485,-4.32187 4.05818,-3.36451 7.25406,-8.26315 6.89092,-13.72643 0.55108,-15.0706 0.12618,-30.15744 0.2469,-45.233 0,-5.07272 -4.90962,-8.01177 -8.99688,-5.70693 -3.44378,2.45795 -2.39927,9.5583 -2.66313,14.77473 -0.0893,6.25566 0.19851,12.54437 -0.16132,18.7791 -1.9182,7.73184 -13.50136,9.71442 -18.10525,3.34532 -2.59461,-4.37765 -1.10335,-9.66951 -1.51487,-14.47456 -0.1096,-6.36844 0.2575,-12.78073 -0.2057,-19.12097 -1.55752,-5.57454 -11.54277,-5.31263 -11.57028,0.97725 -0.0947,10.73576 -0.20144,21.49831 0.0772,32.23681 0.40229,5.90824 3.9844,11.55506 9.57033,13.81024 7.19201,3.59272 15.68253,1.22319 21.91078,-3.2078 z"
|
||||
id="path8185"
|
||||
sodipodi:nodetypes="sasssccccccszssssss"
|
||||
inkscape:label="y" /><use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path8140"
|
||||
id="use8146-8"
|
||||
transform="translate(160.70024)"
|
||||
inkscape:label="f"
|
||||
style="fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path8140"
|
||||
id="use8146"
|
||||
transform="translate(120.79317)"
|
||||
inkscape:label="f"
|
||||
style="fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><path
|
||||
style="color:#000000;fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m 203.09961,459.81323 c -3.4821,0.005 -6.38987,3.50283 -5.7894,6.9306 0.0673,9.26978 -0.15327,18.54633 0.13261,27.81164 0.35452,5.09017 2.57678,10.21523 6.82972,13.22644 5.55736,4.38774 13.10608,4.7518 19.86263,3.9702 6.13229,-0.79837 11.54541,-4.96558 14.38597,-10.38016 2.82972,-5.25148 2.04801,-11.37621 2.1897,-17.10493 -0.10216,-6.59361 0.13071,-13.20167 -0.0996,-19.78723 -0.72775,-3.82018 -5.84877,-6.11481 -8.99816,-3.58329 -2.51578,1.5391 -2.9212,4.6479 -2.62583,7.32275 -0.008,7.68886 0.16168,15.38634 -0.0559,23.06981 -0.48698,3.93482 -2.69157,8.39569 -6.95923,9.17239 -3.94192,0.90809 -9.00029,0.30019 -11.2182,-3.51487 -2.44119,-4.33438 -1.38965,-9.47747 -1.63329,-14.21621 -0.005,-5.96309 0.0606,-11.92636 -0.006,-17.88931 -0.48316,-2.81114 -3.21405,-4.945 -6.01521,-5.02783 z"
|
||||
id="path1096"
|
||||
inkscape:label="u"
|
||||
sodipodi:nodetypes="sssssssssssasss" /><path
|
||||
style="color:#000000;fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m 178.07031,440.24903 c -2.94273,-0.099 -6.12137,2.26392 -5.66929,5.43981 0.006,20.3714 -0.0127,40.74317 0.01,61.11433 0.23114,3.95816 5.38988,5.36394 8.48062,3.72849 2.17789,-0.83721 3.06822,-3.17125 2.82068,-5.34227 0,-20.07299 0,-40.14599 0,-60.21898 0.0267,-2.89989 -3.02815,-4.71312 -5.64156,-4.72138 z"
|
||||
id="path1226"
|
||||
inkscape:label="l"
|
||||
sodipodi:nodetypes="sssssss" /><path
|
||||
style="color:#000000;fill:#444444;fill-opacity:1;stroke:#ffffff;stroke-width:7.6066007;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m 139.73461,448.98277 c -1.14826,3.54622 -0.82212,7.38974 -0.94471,11.07629 -3.09968,0.1617 -6.7129,-0.69772 -9.15473,1.75098 -2.7547,2.92023 -1.92459,9.01668 2.44338,9.87866 2.20538,0.45339 4.47409,0.19142 6.71135,0.26152 0.0152,11.5529 -0.0304,23.10713 0.0229,34.65919 -0.10894,3.56452 3.75176,4.97291 6.73777,4.56755 3.00221,0.16258 5.93165,-2.21911 5.51966,-5.39349 0,-11.27775 0,-22.5555 0,-33.83325 3.22434,-0.0869 6.4758,0.20412 9.67787,-0.21167 4.22512,-0.5039 5.63076,-6.354 2.95775,-9.24029 -2.71637,-2.28723 -6.44022,-1.38284 -9.70112,-1.5715 -0.97817,0 -1.95633,0 -2.9345,0 -0.005,-2.94202 -0.4927,-6.38548 1.50629,-8.82582 2.27205,-1.97081 5.68412,-1.89124 8.14223,-0.31788 3.12241,1.35659 5.95844,-2.03832 6.28128,-4.89774 0.55889,-3.56544 -2.59547,-6.6544 -6.01774,-6.93035 -7.34549,-1.08714 -15.56841,1.21331 -20.11043,7.37767 -0.40614,0.53074 -0.78524,1.08209 -1.13728,1.65013 z"
|
||||
id="path8140"
|
||||
inkscape:label="f"
|
||||
sodipodi:nodetypes="scszscszscszscsszcs" /></g></g></svg>
|
Before Width: | Height: | Size: 15 KiB |
1
assets/js/package/olm.js
Normal file
@ -0,0 +1 @@
|
||||
// Dummy file :-)
|
@ -1,25 +1,30 @@
|
||||
{
|
||||
"@@last_modified": "2021-08-14 12:41:10.154280",
|
||||
"about": "সম্পর্কে",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"accept": "স্বীকার করি",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"acceptedTheInvitation": "{username} আমন্ত্রণ গ্রহণ করেছে",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"account": "অ্যাকাউন্ট",
|
||||
"@account": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
"@@last_modified": "2021-08-14 12:41:10.154280",
|
||||
"about": "সম্পর্কে",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"accept": "স্বীকার করি",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"acceptedTheInvitation": "{username} আমন্ত্রণ গ্রহণ করেছে",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"account": "অ্যাকাউন্ট",
|
||||
"@account": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"accountInformation": "অ্যাকাউন্ট তথ্য",
|
||||
"@accountInformation": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
{}
|
@ -1 +0,0 @@
|
||||
{}
|
@ -1 +0,0 @@
|
||||
{}
|
1551
assets/l10n/intl_hy.arb
Normal file
@ -1,120 +1,3 @@
|
||||
{
|
||||
"@@last_modified": "2021-08-14 12:41:09.940318",
|
||||
"copiedToClipboard": "Copiada para a área de transferência",
|
||||
"@copiedToClipboard": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"login": "Iniciar sessão",
|
||||
"@login": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"about": "Sobre",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"admin": "Admin",
|
||||
"@admin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areYouSure": "Tens a certeza?",
|
||||
"@areYouSure": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"notifications": "Notificações",
|
||||
"@notifications": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"account": "Conta",
|
||||
"@account": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cancel": "Cancelar",
|
||||
"@cancel": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"delete": "Eliminar",
|
||||
"@delete": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"dateAndTimeOfDay": "{date}, {timeOfDay}",
|
||||
"@dateAndTimeOfDay": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"date": {},
|
||||
"timeOfDay": {}
|
||||
}
|
||||
},
|
||||
"dateWithYear": "{day}-{month}-{year}",
|
||||
"@dateWithYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"year": {},
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"help": "Ajuda",
|
||||
"@help": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"messages": "Mensagens",
|
||||
"@messages": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"reason": "Razão",
|
||||
"@reason": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"privacy": "Privacidade",
|
||||
"@privacy": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"openCamera": "Abrir câmara",
|
||||
"@openCamera": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"settings": "Configurações",
|
||||
"@settings": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"logout": "Terminar sessão",
|
||||
"@logout": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"search": "Pesquisar",
|
||||
"@search": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"users": "Utilizadores",
|
||||
"@users": {},
|
||||
"close": "Fechar",
|
||||
"@close": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"dateWithoutYear": "{day}-{month}",
|
||||
"@dateWithoutYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
}
|
||||
"@@last_modified": "2021-08-14 12:41:09.940318"
|
||||
}
|
374
assets/l10n/intl_si.arb
Normal file
@ -0,0 +1,374 @@
|
||||
{
|
||||
"@@last_modified": "2021-08-14 12:41:09.895217",
|
||||
"about": "පිළිබඳව",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"accept": "පිළිගන්න",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"account": "ගිණුම",
|
||||
"@account": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"accountInformation": "ගිණුමේ තොරතුරු",
|
||||
"@accountInformation": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addEmail": "වි-තැපෑල එකතු කරන්න",
|
||||
"@addEmail": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"admin": "පරිපාලක",
|
||||
"@admin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allChats": "සියලුම සංවාද",
|
||||
"@allChats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"alreadyHaveAnAccount": "දැනටමත් ගිණුමක් තිබේද?",
|
||||
"@alreadyHaveAnAccount": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"anyoneCanJoin": "ඕනෑම කෙනෙකුට එක්විය හැකිය",
|
||||
"@anyoneCanJoin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"archive": "සංරක්ෂිතය",
|
||||
"@archive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"archivedRoom": "සංරක්ෂිත කාමරය",
|
||||
"@archivedRoom": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areGuestsAllowedToJoin": "ආගන්තුක පරිශීලකයින්ට එක්වීමට අවසර තිබේද",
|
||||
"@areGuestsAllowedToJoin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areYouSure": "ඔබට විශ්වාසද?",
|
||||
"@areYouSure": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areYouSureYouWantToLogout": "ඔබට නික්මීමට අවශ්ය බව විශ්වාසද?",
|
||||
"@areYouSureYouWantToLogout": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"audioPlayerPlay": "ධාවනය",
|
||||
"@audioPlayerPlay": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"blockDevice": "උපාංගය අවහිර කරන්න",
|
||||
"@blockDevice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cachedKeys": "යතුරු නිහිතගතයි",
|
||||
"@cachedKeys": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cancel": "අවලංගු කරන්න",
|
||||
"@cancel": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeDeviceName": "උපාංගයේ නම වෙනස් කරන්න",
|
||||
"@changeDeviceName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changePassword": "මුරපදය වෙනස් කරන්න",
|
||||
"@changePassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chat": "සංවාදය",
|
||||
"@chat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackup": "සංවාද උපස්ථය",
|
||||
"@chatBackup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatDetails": "සංවාදයේ විස්තර",
|
||||
"@chatDetails": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chats": "සංවාද",
|
||||
"@chats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAStrongPassword": "ශක්තිමත් මුරපදයක් තෝරන්න",
|
||||
"@chooseAStrongPassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAUsername": "පරිශීලක නාමයක් තෝරන්න",
|
||||
"@chooseAUsername": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"clearArchive": "සංරක්ෂිතය හිස් කරන්න",
|
||||
"@clearArchive": {},
|
||||
"close": "වසන්න",
|
||||
"@close": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHintJoin": "දී ඇති කාමරයට එක්වන්න",
|
||||
"@commandHintJoin": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /join"
|
||||
},
|
||||
"commandHintLeave": "මෙම කාමරය හැරයන්න",
|
||||
"@commandHintLeave": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /leave"
|
||||
},
|
||||
"commandInvalid": "විධානය වලංගු නොවේ",
|
||||
"@commandInvalid": {
|
||||
"type": "text"
|
||||
},
|
||||
"commandMissing": "{{command} විධානයක් නොවේ.",
|
||||
"@commandMissing": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"command": {}
|
||||
},
|
||||
"description": "State that {command} is not a valid /command."
|
||||
},
|
||||
"compareEmojiMatch": "සසඳා බලා පහත දැක්වෙන ඉමොජි අනෙක් උපාංගයට නිසැකවම ගැලපෙන බවට වග බලා ගන්න:",
|
||||
"@compareEmojiMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareNumbersMatch": "සංසන්දනය කර පහත දැක්වෙන අංක අනෙක් උපාංගට නිසැකව ගැලපෙන බවට වග බලා ගන්න:",
|
||||
"@compareNumbersMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"confirm": "තහවුරු කරන්න",
|
||||
"@confirm": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"connect": "සබඳින්න",
|
||||
"@connect": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"connectionAttemptFailed": "සබැඳීමේ උත්සාහය අසාර්ථකයි",
|
||||
"@connectionAttemptFailed": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contactHasBeenInvitedToTheGroup": "සමූහය වෙත සබඳතාවයකට ආරාධනා කර ඇත",
|
||||
"@contactHasBeenInvitedToTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copy": "පිටපත්",
|
||||
"@copy": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"create": "සාදන්න",
|
||||
"@create": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createAccountNow": "දැන් ගිණුමක් සාදන්න",
|
||||
"@createAccountNow": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createNewGroup": "නව සමූහයක් සාදන්න",
|
||||
"@createNewGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"donate": "පරිත්යාග",
|
||||
"@donate": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"encryption": "සංකේතාංකනය",
|
||||
"@encryption": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"everythingReady": "සියල්ල සූදානම්!",
|
||||
"@everythingReady": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"fontSize": "මුද්රණඅකුරේ ප්රමාණය",
|
||||
"@fontSize": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"goToTheNewRoom": "නව කාමරයට යන්න",
|
||||
"@goToTheNewRoom": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"joinRoom": "කාමරයට එක්වන්න",
|
||||
"@joinRoom": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"keysCached": "යතුරු නිහිතගත යි",
|
||||
"@keysCached": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"next": "ඊලඟ",
|
||||
"@next": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"noPublicRoomsFound": "ප්රසිද්ධ කාමර හමු නොවිණි…",
|
||||
"@noPublicRoomsFound": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"people": "මිනිසුන්",
|
||||
"@people": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"publicGroups": "ප්රසිද්ධ සමූහ",
|
||||
"@publicGroups": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"removeDevice": "උපාංගය ඉවත්කරන්න",
|
||||
"@removeDevice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"roomVersion": "කාමරයේ අනුවාදය",
|
||||
"@roomVersion": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"savedFileAs": "ලෙස ගොනුව සුරකින්න {filename}",
|
||||
"@savedFileAs": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"filename": {}
|
||||
}
|
||||
},
|
||||
"saveFile": "ගොනුව සුරකින්න",
|
||||
"@saveFile": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"saveFileToFolder": "ගොනුව මෙම බහාලුමට සුරකින්න",
|
||||
"@saveFileToFolder": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"securityKey": "ආරක්ෂක යතුර",
|
||||
"@securityKey": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"securityKeyLost": "ආරක්ෂක යතුර නැතිවුනාද?",
|
||||
"@securityKeyLost": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"send": "යවන්න",
|
||||
"@send": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"showPassword": "මුරපදය පෙන්වන්න",
|
||||
"@showPassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"sunday": "ඉරිදා",
|
||||
"@sunday": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"username": "පරිශීලක නාමය",
|
||||
"@username": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"videoCall": "දෘශ්ය ඇමතුම",
|
||||
"@videoCall": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"wallpaper": "බිතුපත",
|
||||
"@wallpaper": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"warning": "අවවාදයයි!",
|
||||
"@warning": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"wednesday": "බදාදා",
|
||||
"@wednesday": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"writeAMessage": "පණිවිඩයක් ලියන්න…",
|
||||
"@writeAMessage": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"yes": "ඔව්",
|
||||
"@yes": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"you": "ඔබ",
|
||||
"@you": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"yourOwnUsername": "ඔබට හිමි පරිශීලකනාමය",
|
||||
"@yourOwnUsername": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"zoomIn": "විශාලනය",
|
||||
"@zoomIn": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"zoomOut": "කුඩාලනය",
|
||||
"@zoomOut": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
@ -1,606 +0,0 @@
|
||||
{
|
||||
"passwordsDoNotMatch": "Geslo se ne ujema!",
|
||||
"@passwordsDoNotMatch": {},
|
||||
"pleaseEnterValidEmail": "Vnesite veljaven elektronski naslov.",
|
||||
"@pleaseEnterValidEmail": {},
|
||||
"repeatPassword": "Ponovite geslo",
|
||||
"@repeatPassword": {},
|
||||
"about": "O aplikaciji",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"accept": "Sprejmi",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"account": "Račun",
|
||||
"@account": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"activatedEndToEndEncryption": "Uporabnik {username} je aktiviral šifriranje od konca do konca",
|
||||
"@activatedEndToEndEncryption": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"addEmail": "Dodajte e-pošto",
|
||||
"@addEmail": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addGroupDescription": "Dodajte opis skupine",
|
||||
"@addGroupDescription": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addToSpace": "Dodajte v prostor",
|
||||
"@addToSpace": {},
|
||||
"alias": "vzdevek",
|
||||
"@alias": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"all": "Vse",
|
||||
"@all": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allChats": "Vsi klepeti",
|
||||
"@allChats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"answeredTheCall": "Oseba {senderName} je odgovorila na klic",
|
||||
"@answeredTheCall": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"senderName": {}
|
||||
}
|
||||
},
|
||||
"anyoneCanJoin": "Pridruži se lahko vsak",
|
||||
"@anyoneCanJoin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"appLock": "Zaklepanje aplikacije",
|
||||
"@appLock": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"askSSSSSign": "Če želite podpisati drugo osebo, vnesite geslo za varno trgovino ali obnovitveni ključ.",
|
||||
"@askSSSSSign": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"askVerificationRequest": "Ali želite sprejeti to zahtevo za preverjanje od {username}?",
|
||||
"@askVerificationRequest": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"autoplayImages": "Samodejno predvajajte animirane nalepke in čustva",
|
||||
"@autoplayImages": {
|
||||
"type": "text",
|
||||
"placeholder": {}
|
||||
},
|
||||
"badServerLoginTypesException": "Domači strežnik podpira vrste prijave:\n{serverVersions}\nToda ta aplikacija podpira samo:\n{supportedVersions}",
|
||||
"@badServerLoginTypesException": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"serverVersions": {},
|
||||
"supportedVersions": {}
|
||||
}
|
||||
},
|
||||
"sendOnEnter": "Pošlji ob vstopu",
|
||||
"@sendOnEnter": {},
|
||||
"banFromChat": "Prepoved klepeta",
|
||||
"@banFromChat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"banned": "Prepovedano",
|
||||
"@banned": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"bannedUser": "{username} je prepovedan v {targetName}",
|
||||
"@bannedUser": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"targetName": {}
|
||||
}
|
||||
},
|
||||
"blockDevice": "Blokirana naprava",
|
||||
"@blockDevice": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"blocked": "Blokirano",
|
||||
"@blocked": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"botMessages": "Botova sporočila",
|
||||
"@botMessages": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cancel": "Prekliči",
|
||||
"@cancel": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cantOpenUri": "URI-ja {uri} ni mogoče odpreti",
|
||||
"@cantOpenUri": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"uri": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatAvatar": "{username} je spremenil avatar za klepet",
|
||||
"@changedTheChatAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatPermissions": "{username} je spremenila dovoljenja za klepet",
|
||||
"@changedTheChatPermissions": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheDisplaynameTo": "{username} je spremenil svoje prikazno ime v: '{displayname}'",
|
||||
"@changedTheDisplaynameTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"displayname": {}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRules": "{username} je spremenila pravila dostopa za goste",
|
||||
"@changedTheGuestAccessRules": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRulesTo": "{username} je spremenila pravila dostopa za goste v: {rules}",
|
||||
"@changedTheGuestAccessRulesTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"rules": {}
|
||||
}
|
||||
},
|
||||
"changedTheHistoryVisibilityTo": "{username} je spremenil vidnost zgodovine v: {rules}",
|
||||
"@changedTheHistoryVisibilityTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"rules": {}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRules": "{username} je spremenil pravila za pridružitev",
|
||||
"@changedTheJoinRules": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRulesTo": "{username} je spremenila pravila pridružitve v: {joinRules}",
|
||||
"@changedTheJoinRulesTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"joinRules": {}
|
||||
}
|
||||
},
|
||||
"changedTheProfileAvatar": "{username} je spremenil avatar",
|
||||
"@changedTheProfileAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheRoomAliases": "{username} je spremenil vzdevke sobe",
|
||||
"@changedTheRoomAliases": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheRoomInvitationLink": "{username} je spremenil povezavo za povabilo",
|
||||
"@changedTheRoomInvitationLink": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changePassword": "Spremeni geslo",
|
||||
"@changePassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheHomeserver": "Spremenite domači strežnik",
|
||||
"@changeTheHomeserver": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheme": "Spremenite svoj slog",
|
||||
"@changeTheme": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheNameOfTheGroup": "Spremenite ime skupine",
|
||||
"@changeTheNameOfTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeYourAvatar": "Spremenite svoj avatar",
|
||||
"@changeYourAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chat": "Klepet",
|
||||
"@chat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"yourChatBackupHasBeenSetUp": "Varnostna kopija klepeta je nastavljena.",
|
||||
"@yourChatBackupHasBeenSetUp": {},
|
||||
"chatBackup": "Varnostno kopiranje klepeta",
|
||||
"@chatBackup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatDetails": "Podrobnosti klepeta",
|
||||
"@chatDetails": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatHasBeenAddedToThisSpace": "Klepet je bil dodan v ta prostor",
|
||||
"@chatHasBeenAddedToThisSpace": {},
|
||||
"chats": "Klepeti",
|
||||
"@chats": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAStrongPassword": "Izberite močno geslo",
|
||||
"@chooseAStrongPassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAUsername": "Izberi uporabniško ime",
|
||||
"@chooseAUsername": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"clearArchive": "Počisti arhiv",
|
||||
"@clearArchive": {},
|
||||
"close": "Zapri",
|
||||
"@close": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_ban": "Izključi določenega uporabnika iz te sobe",
|
||||
"@commandHint_ban": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /ban"
|
||||
},
|
||||
"commandHint_html": "Pošljite besedilo v obliki HTML",
|
||||
"@commandHint_html": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /html"
|
||||
},
|
||||
"commandHint_invite": "Povabi danega uporabnika v to sobo",
|
||||
"@commandHint_invite": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /invite"
|
||||
},
|
||||
"commandHint_join": "Pridružite se dani sobi",
|
||||
"@commandHint_join": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /join"
|
||||
},
|
||||
"commandHint_kick": "Odstranite danega uporabnika iz te sobe",
|
||||
"@commandHint_kick": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /kick"
|
||||
},
|
||||
"commandHint_me": "Opisi sebe",
|
||||
"@commandHint_me": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /me"
|
||||
},
|
||||
"commandHint_myroomavatar": "Nastavite svojo sliko za to sobo",
|
||||
"@commandHint_myroomavatar": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /myroomavatar"
|
||||
},
|
||||
"commandHint_op": "Nastavite raven moči danega uporabnika (privzeto: 50)",
|
||||
"@commandHint_op": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /op"
|
||||
},
|
||||
"commandHint_react": "Pošljite odgovor kot reakcijo",
|
||||
"@commandHint_react": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /react"
|
||||
},
|
||||
"commandHint_send": "Pošlji besedilo",
|
||||
"@commandHint_send": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /send"
|
||||
},
|
||||
"commandHint_unban": "Prekliči izključitev določenega uporabnika iz te sobe",
|
||||
"@commandHint_unban": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /unban"
|
||||
},
|
||||
"commandInvalid": "Ukaz ni veljaven",
|
||||
"@commandInvalid": {
|
||||
"type": "text"
|
||||
},
|
||||
"commandMissing": "{command} is not a command.",
|
||||
"@commandMissing": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"command": {}
|
||||
},
|
||||
"description": "State that {command} is not a valid /command."
|
||||
},
|
||||
"compareEmojiMatch": "Primerjajte in se prepričajte, da se naslednji emoji ujemajo s tistimi iz druge naprave:",
|
||||
"@compareEmojiMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareNumbersMatch": "Primerjajte in se prepričajte, da se naslednje številke ujemajo s številkami druge naprave:",
|
||||
"@compareNumbersMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"configureChat": "Konfigurirajte klepet",
|
||||
"@configureChat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"confirm": "Potrdi",
|
||||
"@confirm": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"containsDisplayName": "Vsebuje prikazno ime",
|
||||
"@containsDisplayName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"containsUserName": "Vsebuje uporabniško ime",
|
||||
"@containsUserName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"pleaseChooseAtLeastChars": "Izberite najmanj {min} znakov.",
|
||||
"@pleaseChooseAtLeastChars": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"min": {}
|
||||
}
|
||||
},
|
||||
"archive": "Arhiv",
|
||||
"@archive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areYouSure": "Ali si prepričan?",
|
||||
"@areYouSure": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"acceptedTheInvitation": "{username} je sprejel povabilo",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"areYouSureYouWantToLogout": "Ali ste prepričani, da se želite odjaviti?",
|
||||
"@areYouSureYouWantToLogout": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheChatDescriptionTo": "{username} je spremenil opis klepeta v: '{description}'",
|
||||
"@changedTheChatDescriptionTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"description": {}
|
||||
}
|
||||
},
|
||||
"areGuestsAllowedToJoin": "Ali se lahko gostujoči uporabniki pridružijo",
|
||||
"@areGuestsAllowedToJoin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"admin": "Admin",
|
||||
"@admin": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"badServerVersionsException": "Domači strežnik podpira različice Spec:\n{serverVersions}\nToda ta aplikacija podpira samo {supportedVersions}",
|
||||
"@badServerVersionsException": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"serverVersions": {},
|
||||
"supportedVersions": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatNameTo": "{username} je spremenil ime klepeta v: '{chatname}'",
|
||||
"@changedTheChatNameTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"chatname": {}
|
||||
}
|
||||
},
|
||||
"changeDeviceName": "Spremenite ime naprave",
|
||||
"@changeDeviceName": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeWallpaper": "Spremeni ozadje",
|
||||
"@changeWallpaper": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheHistoryVisibility": "{username} je spremenila vidnost zgodovine",
|
||||
"@changedTheHistoryVisibility": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"channelCorruptedDecryptError": "Šifriranje je poškodovano",
|
||||
"@channelCorruptedDecryptError": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contentHasBeenReported": "Vsebina je bila prijavljena skrbnikom strežnika",
|
||||
"@contentHasBeenReported": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackupDescription": "Varnostna kopija klepeta je zavarovana z varnostnim ključem. Prosimo, pazite, da ga ne izgubite.",
|
||||
"@chatBackupDescription": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_myroomnick": "Nastavite prikazno ime za to sobo",
|
||||
"@commandHint_myroomnick": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /myroomnick"
|
||||
},
|
||||
"connect": "Povežite se",
|
||||
"@connect": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contactHasBeenInvitedToTheGroup": "Kontakt je bil povabljen v skupino",
|
||||
"@contactHasBeenInvitedToTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_leave": "Zapusti to sobo",
|
||||
"@commandHint_leave": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /leave"
|
||||
},
|
||||
"commandHint_plain": "Pošlji neformatirano besedilo",
|
||||
"@commandHint_plain": {
|
||||
"type": "text",
|
||||
"description": "Usage hint for the command /plain"
|
||||
},
|
||||
"copiedToClipboard": "Kopirano v odložišče",
|
||||
"@copiedToClipboard": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copy": "Kopiraj",
|
||||
"@copy": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copyToClipboard": "Kopiraj v odložišče",
|
||||
"@copyToClipboard": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"couldNotDecryptMessage": "Sporočila ni bilo mogoče dešifrirati: {error}",
|
||||
"@couldNotDecryptMessage": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"countParticipants": "{count} udeležencev",
|
||||
"@countParticipants": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"count": {}
|
||||
}
|
||||
},
|
||||
"create": "Ustvari",
|
||||
"@create": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createNewGroup": "Ustvari novo skupino",
|
||||
"@createNewGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createNewSpace": "Nov prostor",
|
||||
"@createNewSpace": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"currentlyActive": "Trenutno aktiven",
|
||||
"@currentlyActive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"darkTheme": "Temno",
|
||||
"@darkTheme": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"defaultPermissionLevel": "Privzeta raven dovoljenja",
|
||||
"@defaultPermissionLevel": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"dateWithYear": "{day}-{month}-{year}",
|
||||
"@dateWithYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"year": {},
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"dateWithoutYear": "{month}-{day}",
|
||||
"@dateWithoutYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"createdTheChat": "{username} je ustvaril klepet",
|
||||
"@createdTheChat": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"dateAndTimeOfDay": "{date}, {timeOfDay}",
|
||||
"@dateAndTimeOfDay": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"date": {},
|
||||
"timeOfDay": {}
|
||||
}
|
||||
},
|
||||
"deactivateAccountWarning": "S tem boste deaktivirali vaš uporabniški račun. Tega ni mogoče razveljaviti! Ali si prepričan?",
|
||||
"@deactivateAccountWarning": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
@ -1,20 +1,20 @@
|
||||
{
|
||||
"@@last_modified": "2021-08-14 12:41:09.826673",
|
||||
"acceptedTheInvitation": "{username} அழைப்பை ஏற்றுக்கொண்டார்",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"accept": "ஏற்றுக்கொள்",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"about": "பற்றி",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
"@@last_modified": "2021-08-14 12:41:09.826673",
|
||||
"acceptedTheInvitation": "{username} அழைப்பை ஏற்றுக்கொண்டார்",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"accept": "ஏற்றுக்கொள்",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"about": "பற்றி",
|
||||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
|
@ -1 +0,0 @@
|
||||
{}
|
BIN
assets/login_wallpaper.jpg
Normal file
After Width: | Height: | Size: 211 KiB |
Before Width: | Height: | Size: 146 KiB |
BIN
assets/private_chat_wallpaper.png
Normal file
After Width: | Height: | Size: 44 KiB |