Compare commits
No commits in common. "main" and "v0.22.0" have entirely different histories.
20
.gitignore
vendored
@ -5,15 +5,16 @@
|
||||
*.swp
|
||||
*.snap
|
||||
.DS_Store
|
||||
.local/
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
lib/generated_plugin_registrant.dart
|
||||
google-services.json
|
||||
prime
|
||||
|
||||
# libolm package
|
||||
/assets/js/package
|
||||
/assets/js/package/*
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
@ -37,9 +38,7 @@ prime
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
docs/build/
|
||||
docs/.jekyll-cache/
|
||||
docs/_site/
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# Exceptions to above rules.
|
||||
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
|
||||
@ -49,15 +48,4 @@ docs/_site/
|
||||
/android/key.properties
|
||||
**/android/app/.cxx
|
||||
android/key.jks
|
||||
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
|
||||
|
418
.gitlab-ci.yml
@ -1,319 +1,188 @@
|
||||
variables:
|
||||
FLUTTER_VERSION: 3.10.0
|
||||
image:
|
||||
name: registry.gitlab.com/famedly/containers/flutter-dockerimages:stable
|
||||
|
||||
image: ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION}
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: recursive
|
||||
|
||||
.shared_windows_runners:
|
||||
tags:
|
||||
- shared-windows
|
||||
- windows
|
||||
- windows-1809
|
||||
- shared-windows
|
||||
- windows
|
||||
- windows-1809
|
||||
|
||||
stages:
|
||||
- test
|
||||
- build
|
||||
- deploy
|
||||
- coverage
|
||||
- publish
|
||||
- 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
|
||||
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
|
||||
before_script:
|
||||
[sudo apt update && sudo apt install curl -y, ./scripts/prepare-web.sh]
|
||||
script:
|
||||
- flutter build web --release --verbose --source-maps
|
||||
stage: coverage
|
||||
image: registry.gitlab.com/famedly/containers/flutter-dockerimages:beta
|
||||
before_script: [sudo apt update && sudo apt install curl -y, ./scripts/prepare-web.sh]
|
||||
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
|
||||
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
|
||||
stage: coverage
|
||||
script:
|
||||
- ./scripts/build-windows.ps1
|
||||
- Copy-Item -Path "libolm.dll" -Destination "build/windows/runner/Release"
|
||||
- ./scripts/package-windows.ps1
|
||||
# Install chocolately
|
||||
- Set-ExecutionPolicy Bypass -Scope Process
|
||||
- Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
|
||||
- choco install git -y
|
||||
- choco install visualstudio2019community -y --package-parameters "--add Microsoft.VisualStudio.Product.BuildTools --includeRecommended --includeOptional --passive --locale en-US"
|
||||
- cd ..; git clone https://github.com/flutter/flutter.git -b dev; $env:path += ";C:\GitLab-Runner\builds\ChristianPauly\flutter\bin"; cd fluffychat-flutter
|
||||
- flutter doctor
|
||||
- flutter config --enable-windows-desktop
|
||||
- flutter build windows
|
||||
needs: []
|
||||
artifacts:
|
||||
paths:
|
||||
- build/windows/runner/Release
|
||||
- build/windows/runner/Release/
|
||||
name: "Binaries"
|
||||
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]
|
||||
variables:
|
||||
FDROID_KEY: ${FDROID_KEY}
|
||||
FDROID_KEY_PASS: ${FDROID_KEY_PASS}
|
||||
GOOGLE_SERVICES: ${GOOGLE_SERVICES}
|
||||
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
|
||||
script: [./scripts/release-playstore-beta.sh]
|
||||
build_android_appbundle:
|
||||
stage: coverage
|
||||
before_script: [./scripts/prepare-android-release.sh]
|
||||
script: [./scripts/build-android-appbundle.sh]
|
||||
variables:
|
||||
FDROID_KEY: ${FDROID_KEY}
|
||||
FDROID_KEY_PASS: ${FDROID_KEY_PASS}
|
||||
GOOGLE_SERVICES: ${GOOGLE_SERVICES}
|
||||
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_to_fdroid_repo:
|
||||
stage: publish
|
||||
before_script:
|
||||
- apt-get update && apt-get -qy install fdroidserver wget curl jq --no-install-recommends || true
|
||||
- ./scripts/prepare-fdroid.sh || true
|
||||
##
|
||||
## Install ssh-agent if not already installed.
|
||||
##
|
||||
- 'which ssh-agent || (sudo apt-get update -y && sudo apt-get install openssh-client -y )'
|
||||
##
|
||||
## Install rsync if not already installed.
|
||||
##
|
||||
- 'which rsync || (sudo apt-get update -y && sudo apt-get install rsync -y )'
|
||||
##
|
||||
## Install pcregrep if not already installed.
|
||||
##
|
||||
- 'which pcregrep || (sudo apt-get update -y && sudo apt-get install pcregrep -y )'
|
||||
##
|
||||
## Run ssh-agent (inside the build environment)
|
||||
##
|
||||
- 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"
|
||||
resource_group: playstore_release
|
||||
allow_failure: true
|
||||
- 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:/fdroid/repo
|
||||
- ssh fluffy@fdroid.nordgedanken.dev "cd fdroid && fdroid update"
|
||||
needs: ["build_android_apk"]
|
||||
only:
|
||||
- main
|
||||
- tags
|
||||
|
||||
pages:
|
||||
needs:
|
||||
- "build_web"
|
||||
- "fdroid_repo"
|
||||
stage: deploy
|
||||
image: node:alpine
|
||||
before_script:
|
||||
- apk update
|
||||
- apk add jq unzip curl wget bash
|
||||
script:
|
||||
- cd docs
|
||||
- npx tailwindcss -o ./tailwind.css --minify
|
||||
- cd ..
|
||||
- mv docs public
|
||||
- mv repo public || true
|
||||
- mv build/web/ public/web
|
||||
image: alpine:latest
|
||||
script: [mv build/web/ public]
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
only:
|
||||
- main
|
||||
|
||||
build_linux_x86:
|
||||
stage: build
|
||||
image: registry.gitlab.com/famedly/company/frontend/flutter-dockerimages/flutter-linux/stable:${FLUTTER_VERSION}
|
||||
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
|
||||
build_linux:
|
||||
stage: coverage
|
||||
image: registry.gitlab.com/famedly/containers/flutter-dockerimages:dev
|
||||
before_script: [sudo apt update && sudo apt install clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev -y]
|
||||
script: [./scripts/build-linux.sh]
|
||||
artifacts:
|
||||
when: on_success
|
||||
paths:
|
||||
- build/linux/x64/release/bundle/
|
||||
- build/linux/release/bundle/
|
||||
allow_failure: true
|
||||
|
||||
build_linux_arm64:
|
||||
stage: build
|
||||
before_script:
|
||||
- flutter upgrade $FLUTTER_VERSION --force
|
||||
script: [flutter build linux --release]
|
||||
tags: [docker_arm64]
|
||||
snap:edge:
|
||||
stage: publish
|
||||
image: "cibuilds/snapcraft:core18"
|
||||
variables:
|
||||
SNAPCRAFT_LOGIN_FILE: ${SNAPCRAFT_LOGIN_FILE}
|
||||
only:
|
||||
- main
|
||||
- tags
|
||||
allow_failure: true
|
||||
script: [./scripts/publish-snap-edge.sh]
|
||||
artifacts:
|
||||
when: on_success
|
||||
paths:
|
||||
- build/linux/arm64/release/bundle/
|
||||
- './*.snap'
|
||||
when: on_success
|
||||
allow_failure: true
|
||||
|
||||
update_dependencies:
|
||||
stage: build
|
||||
snap:publish:
|
||||
stage: publish
|
||||
image: "cibuilds/snapcraft:core18"
|
||||
variables:
|
||||
SNAPCRAFT_LOGIN_FILE: ${SNAPCRAFT_LOGIN_FILE}
|
||||
only:
|
||||
- tags
|
||||
script: [./scripts/publish-snap-stable.sh]
|
||||
artifacts:
|
||||
paths:
|
||||
- './*.snap'
|
||||
when: on_success
|
||||
expire_in: 1 week
|
||||
needs: []
|
||||
allow_failure: true
|
||||
|
||||
update-dependencies:
|
||||
stage: coverage
|
||||
needs: []
|
||||
tags:
|
||||
- docker
|
||||
only:
|
||||
- schedules
|
||||
variables:
|
||||
@ -336,65 +205,41 @@ 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
|
||||
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/android/app-release.aab ${PACKAGE_REGISTRY_URL}/fluffychat.aab
|
||||
|
||||
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:
|
||||
extends: .release
|
||||
script:
|
||||
- tar czf package.tar.gz -C build/linux/x64/release/bundle/ .
|
||||
- tar czf package.tar.gz -C build/linux/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.tar.gz
|
||||
|
||||
upload_linux_arm64:
|
||||
upload-windows:
|
||||
extends: .release
|
||||
script:
|
||||
- tar czf package.tar.gz -C build/linux/arm64/release/bundle/ .
|
||||
- tar czf package.tar.gz -C build/windows/runner/Release/ .
|
||||
- |
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
deploy_playstore:
|
||||
stage: deploy
|
||||
before_script:
|
||||
- git apply ./scripts/enable-android-google-services.patch
|
||||
- ./scripts/prepare-android-release.sh
|
||||
script: [./scripts/release-playstore.sh]
|
||||
resource_group: playstore_release
|
||||
only:
|
||||
- tags
|
||||
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-windows.tar.gz
|
||||
|
||||
release:
|
||||
extends: .release
|
||||
@ -404,8 +249,7 @@ release:
|
||||
- |
|
||||
release-cli create --name "Release ${CI_COMMIT_TAG}" --tag-name $CI_COMMIT_TAG \
|
||||
--assets-link "{\"name\":\"fluffychat.apk\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat.apk\"}" \
|
||||
--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.aab\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat.aab\"}" \
|
||||
--assets-link "{\"name\":\"fluffychat-linux.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat-linux.tar.gz\"}" \
|
||||
--assets-link "{\"name\":\"fluffychat-windows.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat-windows.tar.gz\"}" \
|
||||
--assets-link "{\"name\":\"fluffychat-web.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/fluffychat-web.tar.gz\"}"
|
||||
|
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'
|
||||
|
1604
CHANGELOG.md
32
CONTRIBUTING.md
Normal file
@ -0,0 +1,32 @@
|
||||
# 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:
|
||||
|
||||
## 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 add translations for your language easily. Just download this file [intl_messages.arb](https://gitlab.com/ChristianPauly/fluffychat-flutter/-/raw/master/lib/l10n/intl_messages.arb) and translate it to your language. Then you can either send us the file and we add it to the project or you can do this by yourself in these steps (for more experienced users):
|
||||
|
||||
1. Create a GitLab account if you don't have one.
|
||||
2. Fork the project.
|
||||
3. Create a new .arb file in /lib/l10n and name it with the country code of your language. For example with klingon you name it **intl_kl.arb**.
|
||||
4. (Optional) If you are a Flutter developer, execute this command to add the translations to the project:
|
||||
```
|
||||
flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/l10n/l10n.dart lib/l10n/intl_*.arb
|
||||
```
|
||||
5. Append the country code of your language to the list in the `isSupported` method at the top of `/lib/l10n/l10n.dart`, as well as to the `supportedLocales` list in `/lib/main.dart`.
|
||||
6. Start a new Merge Request and become a hero. ❤❤❤
|
||||
|
||||
## 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)
|
10
Dockerfile
@ -1,10 +0,0 @@
|
||||
FROM ghcr.io/cirruslabs/flutter as builder
|
||||
RUN sudo apt update && sudo apt install curl -y
|
||||
COPY . /app
|
||||
WORKDIR /app
|
||||
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
|
8
Gemfile
Normal file
@ -0,0 +1,8 @@
|
||||
source "https://rubygems.org"
|
||||
ruby RUBY_VERSION
|
||||
|
||||
# This will help ensure the proper Jekyll version is running.
|
||||
gem "jekyll", "3.4.0"
|
||||
|
||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
|
48
Gemfile.lock
Normal file
@ -0,0 +1,48 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
addressable (2.5.0)
|
||||
public_suffix (~> 2.0, >= 2.0.2)
|
||||
colorator (1.1.0)
|
||||
ffi (1.9.17)
|
||||
forwardable-extended (2.6.0)
|
||||
jekyll (3.4.0)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 1.1)
|
||||
kramdown (~> 1.3)
|
||||
liquid (~> 3.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 1.7)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-sass-converter (1.5.0)
|
||||
sass (~> 3.4)
|
||||
jekyll-watch (1.5.0)
|
||||
listen (~> 3.0, < 3.1)
|
||||
kramdown (1.13.2)
|
||||
liquid (3.0.6)
|
||||
listen (3.0.8)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
mercenary (0.3.6)
|
||||
pathutil (0.14.0)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (2.0.5)
|
||||
rb-fsevent (0.9.8)
|
||||
rb-inotify (0.9.8)
|
||||
ffi (>= 0.5.0)
|
||||
rouge (1.11.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.4.23)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
jekyll (= 3.4.0)
|
||||
tzinfo-data
|
||||
|
||||
RUBY VERSION
|
||||
ruby 2.3.1p112
|
57
PRIVACY.md
@ -2,34 +2,38 @@
|
||||
|
||||
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.
|
||||
|
||||
FluffyChat only communicates with the selected server, with sentry.io if enabled and with [OpenStreetMap](https://openstreetmap.org) to display maps.
|
||||
FluffyChat only communicates with the selected server and 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)
|
||||
More information is available at: [https://pub.dev/packages/moor](https://pub.dev/packages/moor)
|
||||
|
||||
## 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:
|
||||
|
||||
@ -49,10 +53,7 @@ The user is able to save received files and therefore app needs this permission.
|
||||
#### Read External Storage
|
||||
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
|
||||
@ -69,7 +70,7 @@ The source code of the push gateway can be viewed here:
|
||||
- Information about the device that is to receive the message
|
||||
|
||||
A typical push notification could look like this:
|
||||
```json
|
||||
```
|
||||
{
|
||||
"notification": {
|
||||
"event_id": "$3957tyerfgewrf384",
|
||||
@ -94,23 +95,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.
|
||||
|
175
README.md
@ -1,46 +1,149 @@
|
||||

|
||||
|
||||
<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>
|
||||
<a target="new" href="https://play.google.com/store/apps/details?id=chat.fluffy.fluffychat">
|
||||
<img height="66px" src="https://christianpauly.gitlab.io/fluffychat-website/assets/images/google-play-badge.png" />
|
||||
</a>
|
||||
<a target="new" href="https://fluffychat.im/en/fdroid.html">
|
||||
<img height="66px" src="https://christianpauly.gitlab.io/fluffychat-website/assets/images/fdroid_button.png " />
|
||||
</a>
|
||||
<br>
|
||||
<a href="https://web.fluffychat.im" target="new">Open FluffyChat in the browser</a> - <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/ChristianPauly/fluffychat-flutter/-/jobs/artifacts/main/browse?job=build_android_apk" target="new">Download latest APK</a> - <a href="https://gitlab.com/famedly/famedlysdk" target="new">Famedly Matrix SDK</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
|
||||
# Features
|
||||
* Single and group chats
|
||||
* Send images and files
|
||||
* Voice messages
|
||||
* Offline chat history
|
||||
* Push Notifications
|
||||
* Account settings
|
||||
* Display user avatars
|
||||
* Themes, chat wallpapers and dark mode
|
||||
* Device management
|
||||
* Edit chat settings and permissions
|
||||
* Kick, ban and unban users
|
||||
* Display and edit chat topics
|
||||
* Change chat & user avatars
|
||||
* Archived chats
|
||||
* Discover public chats on the user's homeserver
|
||||
* Registration
|
||||
* Disable account
|
||||
* Change password
|
||||
* End-To-End-Encryption
|
||||
|
||||
# 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/ChristianPauly/fluffychat-flutter
|
||||
cd fluffychat-flutter
|
||||
```
|
||||
|
||||
3. Choose your target platform below and enable support for it.
|
||||
|
||||
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
|
||||
|
||||
* With xcode you can't build a release version without our cert. :-/ Use `flutter run --profile` to have a working version on your iOS device.
|
||||
|
||||
### Web
|
||||
|
||||
* Enable web support in Flutter: https://flutter.dev/docs/get-started/web
|
||||
|
||||
* Build with:
|
||||
```bash
|
||||
./scripts/prepare-web.sh
|
||||
flutter clean
|
||||
flutter pub get
|
||||
flutter build web --release --verbose
|
||||
```
|
||||
|
||||
* 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/
|
||||
|
||||
|
||||
|
||||
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
|
||||
|
||||
# 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 +151,6 @@ 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.
|
18
_config.yml
Normal file
@ -0,0 +1,18 @@
|
||||
# Welcome to Jekyll!
|
||||
#
|
||||
# This config file is meant for settings that affect your whole blog, values
|
||||
# which you are expected to set up once and rarely need to edit after that.
|
||||
# For technical reasons, this file is *NOT* reloaded automatically when you use
|
||||
# 'jekyll serve'. If you change this file, please restart the server process.
|
||||
|
||||
# Site settings
|
||||
title: FluffyChat
|
||||
email: christian-pauly@posteo.de
|
||||
description: Chat with your friends.
|
||||
baseurl: "/fluffychat-flutter" # the subpath of your site, e.g. /blog
|
||||
url: "/" # the base hostname & protocol for your site
|
||||
gitlab_username: christianpauly
|
||||
|
||||
# Build settings
|
||||
markdown: kramdown
|
||||
exclude: [ "README.md", "LICENSE"]
|
@ -1,53 +1,13 @@
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
include: package:pedantic/analysis_options.yaml
|
||||
|
||||
linter:
|
||||
rules:
|
||||
- camel_case_types
|
||||
- avoid_print
|
||||
- constant_identifier_names
|
||||
- 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
|
||||
|
@ -1,3 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "fastlane"
|
@ -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'
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -78,8 +80,11 @@ 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'
|
||||
implementation 'com.google.firebase:firebase-messaging:19.0.1' // Workaround for https://github.com/microg/android_packages_apps_GmsCore/issues/313#issuecomment-617651698
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||
implementation "net.zetetic:android-database-sqlcipher:4.4.0" // needed for moor_ffi w/ sqlcipher
|
||||
}
|
||||
|
||||
//apply plugin: 'com.google.gms.google-services'
|
||||
apply plugin: 'com.google.gms.google-services'
|
@ -1,46 +0,0 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "865731724731",
|
||||
"project_id": "fluffychat-ef3e8",
|
||||
"storage_bucket": "fluffychat-ef3e8.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:865731724731:android:ec427b3b1dcd4a1e64309e",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.fluffy.fluffychat"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "865731724731-od6969v178ul9970elgacpt936v5t7qg.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBLdZpGSPjcinikB4lAU6awW_h88NG17Sg"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "865731724731-od6969v178ul9970elgacpt936v5t7qg.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
},
|
||||
{
|
||||
"client_id": "865731724731-ofdr7e6m04murgb1bvchlj9oaos0q5i3.apps.googleusercontent.com",
|
||||
"client_type": 2,
|
||||
"ios_info": {
|
||||
"bundle_id": "im.fluffychat.app"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
11
android/app/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
-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.**
|
||||
## Sqlite Encryption
|
||||
-keep class net.sqlcipher.** { *; }
|
@ -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
|
||||
@ -11,38 +10,17 @@
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<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:icon="@mipmap/launcher_icon">
|
||||
<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 +29,7 @@
|
||||
<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" />
|
||||
@ -59,18 +38,6 @@
|
||||
android:scheme="https"
|
||||
android:host="matrix.to"/>
|
||||
</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="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,54 +58,9 @@
|
||||
<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"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
|
||||
</intent-filter>
|
||||
</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">
|
||||
<intent-filter>
|
||||
<action android:name="org.unifiedpush.flutter.connector.MESSAGE"/>
|
||||
<action android:name="org.unifiedpush.flutter.connector.UNREGISTERED"/>
|
||||
<action android:name="org.unifiedpush.flutter.connector.NEW_ENDPOINT"/>
|
||||
<action android:name="org.unifiedpush.flutter.connector.REGISTRATION_FAILED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
<meta-data
|
||||
|
@ -0,0 +1,31 @@
|
||||
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.plugins.firebasemessaging.FirebaseMessagingPlugin
|
||||
import io.flutter.view.FlutterMain
|
||||
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
|
||||
import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin
|
||||
import com.tekartik.sqflite.SqflitePlugin
|
||||
import com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin
|
||||
import io.flutter.plugins.pathprovider.PathProviderPlugin
|
||||
|
||||
class Application : FlutterApplication(), PluginRegistrantCallback {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
FlutterFirebaseMessagingService.setPluginRegistrant(this);
|
||||
FlutterMain.startInitialization(this)
|
||||
}
|
||||
|
||||
override fun registerWith(registry: PluginRegistry?) {
|
||||
if (!registry!!.hasPlugin("io.flutter.plugins.firebasemessaging")) {
|
||||
FirebaseMessagingPlugin.registerWith(registry!!.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
|
||||
FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));
|
||||
SqflitePlugin.registerWith(registry.registrarFor("com.tekartik.sqflite.SqflitePlugin"));
|
||||
PathProviderPlugin.registerWith(registry.registrarFor("io.flutter.plugins.pathprovider.PathProviderPlugin"));
|
||||
FlutterSecureStoragePlugin.registerWith(registry.registrarFor("com.it_nomads.fluttersecurestorage"));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
/*package chat.fluffy.fluffychat
|
||||
|
||||
import com.famedly.fcm_shared_isolate.FcmSharedIsolateService
|
||||
|
||||
import chat.fluffy.fluffychat.MainActivity
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.view.FlutterMain
|
||||
import io.flutter.embedding.engine.dart.DartExecutor.DartEntrypoint
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.WindowManager
|
||||
|
||||
class FcmPushService : FcmSharedIsolateService() {
|
||||
override fun getEngine(): FlutterEngine {
|
||||
return provideEngine(getApplicationContext())
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun provideEngine(context: Context): FlutterEngine {
|
||||
var engine = MainActivity.engine
|
||||
if (engine == null) {
|
||||
engine = MainActivity.provideEngine(context)
|
||||
engine.getLocalizationPlugin().sendLocalesToFlutter(
|
||||
context.getResources().getConfiguration())
|
||||
engine.getDartExecutor().executeDartEntrypoint(
|
||||
DartEntrypoint.createDefault())
|
||||
}
|
||||
return engine
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
@ -1,33 +1,12 @@
|
||||
package chat.fluffy.fluffychat
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugins.GeneratedPluginRegistrant
|
||||
|
||||
import android.content.Context
|
||||
import androidx.multidex.MultiDex
|
||||
|
||||
class MainActivity : FlutterActivity() {
|
||||
|
||||
override fun attachBaseContext(base: Context) {
|
||||
super.attachBaseContext(base)
|
||||
MultiDex.install(this)
|
||||
}
|
||||
|
||||
|
||||
override fun provideFlutterEngine(context: Context): FlutterEngine? {
|
||||
return provideEngine(this)
|
||||
}
|
||||
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
// do nothing, because the engine was been configured in provideEngine
|
||||
}
|
||||
|
||||
companion object {
|
||||
var engine: FlutterEngine? = null
|
||||
fun provideEngine(context: Context): FlutterEngine {
|
||||
val eng = engine ?: FlutterEngine(context, emptyArray(), true, false)
|
||||
engine = eng
|
||||
return eng
|
||||
}
|
||||
class MainActivity: FlutterActivity() {
|
||||
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
|
||||
GeneratedPluginRegistrant.registerWith(flutterEngine);
|
||||
}
|
||||
}
|
||||
|
@ -1,23 +0,0 @@
|
||||
package chat.fluffy.fluffychat
|
||||
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.embedding.engine.dart.DartExecutor
|
||||
import org.unifiedpush.flutter.connector.UnifiedPushReceiver
|
||||
|
||||
import android.content.Context
|
||||
|
||||
class UnifiedPushReceiver : UnifiedPushReceiver() {
|
||||
override fun getEngine(context: Context): FlutterEngine {
|
||||
var engine = MainActivity.engine
|
||||
if (engine == null) {
|
||||
engine = MainActivity.provideEngine(context)
|
||||
engine.localizationPlugin.sendLocalesToFlutter(
|
||||
context.resources.configuration
|
||||
)
|
||||
engine.dartExecutor.executeDartEntrypoint(
|
||||
DartExecutor.DartEntrypoint.createDefault()
|
||||
)
|
||||
}
|
||||
return engine
|
||||
}
|
||||
}
|
@ -1,15 +1,28 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:viewportWidth="80.21739"
|
||||
android:viewportHeight="80.21739"
|
||||
android:tint="#FFFFFF">
|
||||
<group android:scaleX="0.15715303"
|
||||
android:scaleY="0.15715303"
|
||||
android:translateX="0.96"
|
||||
android:translateY="0.96">
|
||||
<group android:translateX="3.2086957"
|
||||
android:translateY="3.2086957">
|
||||
<path
|
||||
android:pathData="M130.9,0a50.8,50.8 0,0 0,-34.2 18c-0.5,-0.2 -1,-1 -1,-1.7a7,7 0,0 0,-3.5 -6.8,7.8 7.8,0 0,0 -10.6,3.3c-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,-1a8,8 0,0 0,-6.5 -3.8,8 8,0 0,0 -7.8,7.3v0.6c0,0.8 -0.5,1.5 -1,1.8L44,18.5C35.8,7.7 15.6,-2.2 5.6,1c-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.3a7.7,7.7 0,0 0,3 13.4c0.8,0.3 1.5,1 1.5,1.8s-0.5,1.8 -1.3,2c-1,0.5 -2,1 -2.8,2 -4,5.8 0,12.3 5.5,12.3a2,2 0,0 1,1.8 1.3c0.3,0.8 0.3,1.5 -0.5,2a6.5,6.5 0,0 0,-2 5.5c0.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,5a7.7,7.7 0,0 0,5.5 5.5c2.5,0.5 4.3,-0.3 5.5,-0.8 0.5,-0.3 -3.3,9 -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 12.3,5.3 1.3,-0.8 2,-2.3 2.3,-3.5 0.3,-0.8 1,-1.5 2,-1.5s1.8,0.5 2,1.5c0.3,1.3 0.8,2.3 1.8,3 5.8,4.5 12.3,0.8 12.8,-4.8a2,2 0,0 1,1.3 -1.8c0.8,-0.3 1.5,0 2,0.5a7.6,7.6 0,0 0,5.3 2.5c2.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,-2s1.5,-0.5 2,0c1.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,-2s1.3,-0.8 2,-0.8c1.8,0.3 3.3,0.3 4.8,-0.5 2.3,-1 3.8,-3 4.3,-5.5a7,7 0,0 0,-2 -6.5c-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,-2a7.6,7.6 0,0 0,-2.5 -12.6c-0.8,-0.3 -1.3,-1 -1.3,-2s0.7,-1.6 1.5,-1.6c1.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.5v-0.5c0.8,-0.8 1.5,-1.8 2.5,-3.3 8,-10.8 11.8,-50.6 3.8,-53.7 -1.3,-0.5 -2.6,-0.7 -4.1,-0.7zM16.3,12.2c4.6,0.1 11,3 15.5,6.7 -0.7,0.8 -1.2,1.8 -1.5,2.8a7,7 0,0 0,0 4.5c0.3,0.7 0,1.5 -0.5,2s-1.2,0.8 -2,0.5c-1.5,-0.6 -3,-0.8 -4.5,-0.3 -2.7,0.8 -5,3 -5.5,5.8 -0.3,2 0,4 1.3,5.8 0.3,0.5 0.5,1.2 0,2l-0.8,0.8c-1.8,-0.3 -3,-1 -4,-2.5 -4.6,-6.3 -5.4,-26.2 -1,-27.7 1,-0.3 1.9,-0.4 3,-0.4zM123.9,12.4c1,0 2,0 2.9,0.4 4.5,1.5 3.7,21.4 -0.8,27.7 -0.8,1 -1.8,1.7 -2.8,2 -0.5,0 -0.7,-0.5 -1,-0.8 -0.5,-0.5 -0.5,-1.5 0,-2a7,7 0,0 0,1.3 -4c0.3,-1.8 -0.5,-3.5 -1.5,-4.8a7,7 0,0 0,-5.8 -3c-1,0 -2,0 -3,0.5 -0.7,0.3 -1.5,0 -2,-0.5s-0.8,-1.2 -0.5,-2a7,7 0,0 0,0 -4.5c-0.2,-1.3 -0.7,-2.1 -1.8,-2.6a27.6,27.6 0,0 1,15 -6.4zM40.2,64.4a9.3,9.3 0,0 1,9.3 9.4,9.3 9.3,0 0,1 -9.3,9.3 9.3,9.3 0,0 1,-9.3 -9.3,9.3 9.3,0 0,1 9.3,-9.3zM100.9,64.4a9.3,9.3 0,0 1,9.3 9.4,9.3 9.3,0 0,1 -9.3,9.3 9.3,9.3 0,0 1,-9.3 -9.3,9.3 9.3,0 0,1 9.3,-9.3zM70.7,70c4.6,0 9.3,1.2 9.3,3.9a9.3,9.3 0,1 1,-18.6 0c0,-2.5 4.6,-3.9 9.3,-3.9z"
|
||||
android:fillColor="#4d3f92"/>
|
||||
android:pathData="M60.9,38.5c0.6,-0.1 1.1,-0.4 1.5,-0.8c1.6,-2.1 0.3,-4.7 -1.8,-5c-0.3,0 -0.6,-0.3 -0.6,-0.6c0,-0.1 0,-0.2 0,-0.2c0.3,-0.3 0.6,-0.7 1,-1.3c3.2,-4.3 4.7,-20.1 1.5,-21.3c-3.9,-1.3 -11.8,2.5 -15.2,6.9c-0.2,-0.1 -0.4,-0.4 -0.4,-0.7c0.1,-1.2 -0.5,-2.2 -1.4,-2.7c-1.8,-0.9 -3.5,0 -4.2,1.3c-0.2,0.3 -0.5,0.5 -0.8,0.4c-0.3,0 -0.6,-0.3 -0.6,-0.6c-0.2,-1 -0.8,-1.8 -1.7,-2.2c-1.9,-0.8 -3.9,0.3 -4.2,2.1c-0.1,0.3 -0.3,0.6 -0.6,0.6c-0.3,0.1 -0.6,-0.1 -0.8,-0.4C32,13.1 31,12.5 30,12.5c-1.6,0 -3,1.3 -3.1,2.9c0,0 0,0.1 0,0.1l0,0.1c0,0.3 -0.2,0.6 -0.4,0.7c0,0 -0.1,0 -0.1,0C23.1,12 15.1,8.1 11.1,9.4c-3.2,1.1 -1.7,16.9 1.6,21.2c0.6,0.8 1.1,1.4 1.5,1.8c-0.1,0.3 -0.4,0.6 -0.7,0.6c-0.5,0 -1,0.2 -1.4,0.5c-2.1,2 -0.9,4.8 1.2,5.3c0.3,0.1 0.6,0.4 0.6,0.7c0,0.3 -0.2,0.7 -0.5,0.8c-0.4,0.2 -0.8,0.4 -1.1,0.8c-1.6,2.3 0,4.9 2.2,4.9c0.3,0 0.6,0.2 0.7,0.5c0.1,0.3 0.1,0.6 -0.2,0.8c-0.6,0.6 -0.9,1.4 -0.8,2.2c0.1,1.1 0.8,2.1 1.9,2.6c0.6,0.3 1.2,0.3 1.8,0.2c0.3,-0.1 0.6,0 0.8,0.3c0.2,0.2 0.2,0.6 0.1,0.8c-0.3,0.6 -0.4,1.3 -0.2,2c0.3,1.1 1.1,1.9 2.2,2.2c1,0.2 1.7,-0.1 2.2,-0.3c0.2,-0.1 -1.3,3.6 -2.4,6.1c-0.3,0.8 0.5,1.7 1.4,1.3c3.3,-1.5 8.8,-4.1 8.8,-3.9c0.2,2.1 2.6,3.6 4.9,2.1c0.5,-0.3 0.8,-0.9 0.9,-1.4c0.1,-0.3 0.4,-0.6 0.8,-0.6c0.4,0 0.7,0.2 0.8,0.6c0.1,0.5 0.3,0.9 0.7,1.2c2.3,1.8 4.9,0.3 5.1,-1.9c0,-0.3 0.2,-0.6 0.5,-0.7c0.3,-0.1 0.6,0 0.8,0.2c0.6,0.6 1.3,1 2.1,1c0,0 0,0 0,0c1,0 2,-0.5 2.6,-1.5c0.4,-0.6 0.5,-1.2 0.4,-2c0,-0.3 0.1,-0.6 0.3,-0.8c0.2,-0.2 0.6,-0.2 0.8,0c0.6,0.3 1.3,0.5 2,0.3c1.1,-0.2 2,-1.1 2.3,-2.1c0.2,-0.7 0.1,-1.4 -0.2,-2.1c-0.1,-0.3 -0.1,-0.6 0.1,-0.8c0.2,-0.2 0.5,-0.3 0.8,-0.3c0.7,0.1 1.3,0.1 1.9,-0.2c0.9,-0.4 1.5,-1.2 1.7,-2.2c0.2,-1 -0.1,-1.9 -0.8,-2.6c-0.2,-0.2 -0.3,-0.5 -0.2,-0.8c0.1,-0.3 0.4,-0.5 0.7,-0.5c0.7,0 1.5,-0.2 2,-0.8c1.7,-1.8 0.9,-4.2 -1,-5c-0.3,-0.1 -0.5,-0.4 -0.5,-0.8C60.3,38.8 60.6,38.5 60.9,38.5z"
|
||||
android:fillColor="#4C3D91"/>
|
||||
<path
|
||||
android:pathData="M52.9,17.5c0.2,0.6 0.2,1.2 0,1.8c-0.1,0.3 0,0.6 0.2,0.8c0.2,0.2 0.5,0.3 0.8,0.2c0.4,-0.2 0.8,-0.2 1.2,-0.2c0.9,0 1.7,0.4 2.3,1.2c0.4,0.5 0.7,1.2 0.6,1.9c0,0.6 -0.2,1.1 -0.5,1.6c-0.2,0.2 -0.2,0.6 0,0.8c0.1,0.1 0.2,0.3 0.4,0.3c0.4,-0.1 0.8,-0.4 1.1,-0.8c1.8,-2.5 2.1,-10.4 0.3,-11c-1.8,-0.6 -4.9,0.6 -7.1,2.4C52.6,16.7 52.8,17 52.9,17.5z"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
<path
|
||||
android:pathData="M16.2,26c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.2,-0.3 0.1,-0.6 0,-0.8c-0.5,-0.7 -0.6,-1.5 -0.5,-2.3c0.2,-1.1 1.1,-2 2.2,-2.3c0.6,-0.2 1.2,-0.1 1.8,0.1c0.3,0.1 0.6,0 0.8,-0.2c0.2,-0.2 0.3,-0.5 0.2,-0.8c-0.2,-0.6 -0.2,-1.2 0,-1.8c0.1,-0.4 0.3,-0.8 0.6,-1.1c-2.2,-1.8 -5.5,-3.1 -7.3,-2.5c-1.8,0.6 -1.5,8.5 0.3,11C15,25.6 15.5,25.9 16.2,26z"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
<path
|
||||
android:pathData="M24.9,38.3m-3.7,0a3.7,3.7 0,1 1,7.4 0a3.7,3.7 0,1 1,-7.4 0"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
<path
|
||||
android:pathData="M40.7,38.3c0,2.1 -1.7,3.7 -3.7,3.7c-2.1,0 -3.7,-1.7 -3.7,-3.7S40.7,36.2 40.7,38.3z"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
<path
|
||||
android:pathData="M49,38.3m-3.7,0a3.7,3.7 0,1 1,7.4 0a3.7,3.7 0,1 1,-7.4 0"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
</group>
|
||||
</vector>
|
||||
|
Before Width: | Height: | Size: 803 B After Width: | Height: | Size: 68 B |
Before Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 579 B After Width: | Height: | Size: 68 B |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 70 B |
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
Before Width: | Height: | Size: 70 B |
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
Before Width: | Height: | Size: 68 B |
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 68 B |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 68 B |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 68 B |
@ -1,29 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<group android:scaleX="0.33822063"
|
||||
android:scaleY="0.33822063"
|
||||
android:translateX="30.24"
|
||||
android:translateY="31.24">
|
||||
<path
|
||||
android:pathData="M130.9,74.3c1.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.5v-0.5c0.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.8a7,7 0,0 0,-3.5 -6.8,7.8 7.8,0 0,0 -10.6,3.3c-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,-1a8,8 0,0 0,-6.5 -3.8,8 8,0 0,0 -7.8,7.3v0.6c0,0.8 -0.5,1.5 -1,1.8h-0.3c-8.3,-10.8 -28.5,-20.7 -38.5,-17.4 -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.3a7.7,7.7 0,0 0,3 13.4c0.8,0.3 1.5,1 1.5,1.8s-0.5,1.8 -1.3,2c-1,0.5 -2,1 -2.8,2 -4,5.8 0,12.3 5.5,12.3a2,2 0,0 1,1.8 1.3c0.3,0.8 0.3,1.5 -0.5,2a6.5,6.5 0,0 0,-2 5.5c0.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,5a7.7,7.7 0,0 0,5.5 5.5c2.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.5s1.8,0.5 2,1.5c0.3,1.3 0.8,2.3 1.8,3 5.8,4.5 12.3,0.8 12.8,-4.8a2,2 0,0 1,1.3 -1.8c0.8,-0.3 1.5,0 2,0.5a7.6,7.6 0,0 0,5.3 2.5c2.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,-2s1.5,-0.5 2,0c1.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,-2s1.3,-0.8 2,-0.8c1.8,0.3 3.3,0.3 4.8,-0.5 2.3,-1 3.8,-3 4.3,-5.5a7,7 0,0 0,-2 -6.5c-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,-2a7.6,7.6 0,0 0,-2.5 -12.6c-0.8,-0.3 -1.3,-1 -1.3,-2 0,-0.9 0.7,-1.6 1.5,-1.6z"
|
||||
android:fillColor="#4d3f92"/>
|
||||
<path
|
||||
android:pathData="M110.7,21.4a7,7 0,0 1,0 4.5c-0.3,0.8 0,1.5 0.5,2s1.3,0.8 2,0.5c1,-0.5 2,-0.5 3,-0.5a7,7 0,0 1,5.8 3c1,1.3 1.8,3 1.5,4.8a7,7 0,0 1,-1.3 4c-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.7s-12.3,1.5 -17.9,6c1.1,0.5 1.6,1.3 1.8,2.6z"
|
||||
android:fillColor="#fff"/>
|
||||
<path
|
||||
android:pathData="M18.3,42.8l0.8,-0.8c0.5,-0.8 0.3,-1.5 0,-2a7.6,7.6 0,0 1,-1.3 -5.8c0.5,-2.8 2.8,-5 5.5,-5.8 1.5,-0.5 3,-0.3 4.5,0.3 0.8,0.3 1.5,0 2,-0.5s0.8,-1.3 0.5,-2a7,7 0,0 1,0 -4.5c0.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.5z"
|
||||
android:fillColor="#fff"/>
|
||||
<path
|
||||
android:pathData="M40.2,73.8m-9.3,0a9.3,9.3 0,1 1,18.6 0a9.3,9.3 0,1 1,-18.6 0"
|
||||
android:fillColor="#fff"/>
|
||||
<path
|
||||
android:pathData="M80,73.8a9.3,9.3 0,1 1,-18.6 0c0,-5 18.6,-5.3 18.6,0z"
|
||||
android:fillColor="#fff"/>
|
||||
<path
|
||||
android:pathData="M100.9,73.8m-9.3,0a9.3,9.3 0,1 1,18.6 0a9.3,9.3 0,1 1,-18.6 0"
|
||||
android:fillColor="#fff"/>
|
||||
</group>
|
||||
</vector>
|
@ -1,9 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
<item android:drawable="@android:color/white" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
</layer-list>
|
28
android/app/src/main/res/drawable/notifications_icon.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="80.21739"
|
||||
android:viewportHeight="80.21739"
|
||||
android:tint="#FFFFFF">
|
||||
<group android:translateX="3.2086957"
|
||||
android:translateY="3.2086957">
|
||||
<path
|
||||
android:pathData="M60.9,38.5c0.6,-0.1 1.1,-0.4 1.5,-0.8c1.6,-2.1 0.3,-4.7 -1.8,-5c-0.3,0 -0.6,-0.3 -0.6,-0.6c0,-0.1 0,-0.2 0,-0.2c0.3,-0.3 0.6,-0.7 1,-1.3c3.2,-4.3 4.7,-20.1 1.5,-21.3c-3.9,-1.3 -11.8,2.5 -15.2,6.9c-0.2,-0.1 -0.4,-0.4 -0.4,-0.7c0.1,-1.2 -0.5,-2.2 -1.4,-2.7c-1.8,-0.9 -3.5,0 -4.2,1.3c-0.2,0.3 -0.5,0.5 -0.8,0.4c-0.3,0 -0.6,-0.3 -0.6,-0.6c-0.2,-1 -0.8,-1.8 -1.7,-2.2c-1.9,-0.8 -3.9,0.3 -4.2,2.1c-0.1,0.3 -0.3,0.6 -0.6,0.6c-0.3,0.1 -0.6,-0.1 -0.8,-0.4C32,13.1 31,12.5 30,12.5c-1.6,0 -3,1.3 -3.1,2.9c0,0 0,0.1 0,0.1l0,0.1c0,0.3 -0.2,0.6 -0.4,0.7c0,0 -0.1,0 -0.1,0C23.1,12 15.1,8.1 11.1,9.4c-3.2,1.1 -1.7,16.9 1.6,21.2c0.6,0.8 1.1,1.4 1.5,1.8c-0.1,0.3 -0.4,0.6 -0.7,0.6c-0.5,0 -1,0.2 -1.4,0.5c-2.1,2 -0.9,4.8 1.2,5.3c0.3,0.1 0.6,0.4 0.6,0.7c0,0.3 -0.2,0.7 -0.5,0.8c-0.4,0.2 -0.8,0.4 -1.1,0.8c-1.6,2.3 0,4.9 2.2,4.9c0.3,0 0.6,0.2 0.7,0.5c0.1,0.3 0.1,0.6 -0.2,0.8c-0.6,0.6 -0.9,1.4 -0.8,2.2c0.1,1.1 0.8,2.1 1.9,2.6c0.6,0.3 1.2,0.3 1.8,0.2c0.3,-0.1 0.6,0 0.8,0.3c0.2,0.2 0.2,0.6 0.1,0.8c-0.3,0.6 -0.4,1.3 -0.2,2c0.3,1.1 1.1,1.9 2.2,2.2c1,0.2 1.7,-0.1 2.2,-0.3c0.2,-0.1 -1.3,3.6 -2.4,6.1c-0.3,0.8 0.5,1.7 1.4,1.3c3.3,-1.5 8.8,-4.1 8.8,-3.9c0.2,2.1 2.6,3.6 4.9,2.1c0.5,-0.3 0.8,-0.9 0.9,-1.4c0.1,-0.3 0.4,-0.6 0.8,-0.6c0.4,0 0.7,0.2 0.8,0.6c0.1,0.5 0.3,0.9 0.7,1.2c2.3,1.8 4.9,0.3 5.1,-1.9c0,-0.3 0.2,-0.6 0.5,-0.7c0.3,-0.1 0.6,0 0.8,0.2c0.6,0.6 1.3,1 2.1,1c0,0 0,0 0,0c1,0 2,-0.5 2.6,-1.5c0.4,-0.6 0.5,-1.2 0.4,-2c0,-0.3 0.1,-0.6 0.3,-0.8c0.2,-0.2 0.6,-0.2 0.8,0c0.6,0.3 1.3,0.5 2,0.3c1.1,-0.2 2,-1.1 2.3,-2.1c0.2,-0.7 0.1,-1.4 -0.2,-2.1c-0.1,-0.3 -0.1,-0.6 0.1,-0.8c0.2,-0.2 0.5,-0.3 0.8,-0.3c0.7,0.1 1.3,0.1 1.9,-0.2c0.9,-0.4 1.5,-1.2 1.7,-2.2c0.2,-1 -0.1,-1.9 -0.8,-2.6c-0.2,-0.2 -0.3,-0.5 -0.2,-0.8c0.1,-0.3 0.4,-0.5 0.7,-0.5c0.7,0 1.5,-0.2 2,-0.8c1.7,-1.8 0.9,-4.2 -1,-5c-0.3,-0.1 -0.5,-0.4 -0.5,-0.8C60.3,38.8 60.6,38.5 60.9,38.5z"
|
||||
android:fillColor="#4C3D91"/>
|
||||
<path
|
||||
android:pathData="M52.9,17.5c0.2,0.6 0.2,1.2 0,1.8c-0.1,0.3 0,0.6 0.2,0.8c0.2,0.2 0.5,0.3 0.8,0.2c0.4,-0.2 0.8,-0.2 1.2,-0.2c0.9,0 1.7,0.4 2.3,1.2c0.4,0.5 0.7,1.2 0.6,1.9c0,0.6 -0.2,1.1 -0.5,1.6c-0.2,0.2 -0.2,0.6 0,0.8c0.1,0.1 0.2,0.3 0.4,0.3c0.4,-0.1 0.8,-0.4 1.1,-0.8c1.8,-2.5 2.1,-10.4 0.3,-11c-1.8,-0.6 -4.9,0.6 -7.1,2.4C52.6,16.7 52.8,17 52.9,17.5z"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
<path
|
||||
android:pathData="M16.2,26c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.2,-0.3 0.1,-0.6 0,-0.8c-0.5,-0.7 -0.6,-1.5 -0.5,-2.3c0.2,-1.1 1.1,-2 2.2,-2.3c0.6,-0.2 1.2,-0.1 1.8,0.1c0.3,0.1 0.6,0 0.8,-0.2c0.2,-0.2 0.3,-0.5 0.2,-0.8c-0.2,-0.6 -0.2,-1.2 0,-1.8c0.1,-0.4 0.3,-0.8 0.6,-1.1c-2.2,-1.8 -5.5,-3.1 -7.3,-2.5c-1.8,0.6 -1.5,8.5 0.3,11C15,25.6 15.5,25.9 16.2,26z"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
<path
|
||||
android:pathData="M24.9,38.3m-3.7,0a3.7,3.7 0,1 1,7.4 0a3.7,3.7 0,1 1,-7.4 0"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
<path
|
||||
android:pathData="M40.7,38.3c0,2.1 -1.7,3.7 -3.7,3.7c-2.1,0 -3.7,-1.7 -3.7,-3.7S40.7,36.2 40.7,38.3z"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
<path
|
||||
android:pathData="M49,38.3m-3.7,0a3.7,3.7 0,1 1,7.4 0a3.7,3.7 0,1 1,-7.4 0"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
</group>
|
||||
</vector>
|
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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>
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 544 B |
BIN
android/app/src/main/res/mipmap-hdpi/launcher_icon.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 442 B |
BIN
android/app/src/main/res/mipmap-mdpi/launcher_icon.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 721 B |
BIN
android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 1.0 KiB |
BIN
android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
@ -5,7 +5,6 @@
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
Flutter draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
<item name="android:windowFullscreen">false</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
|
@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#FFFFFF</color>
|
||||
</resources>
|
@ -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,21 +1,21 @@
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.8.0'
|
||||
ext.kotlin_version = '1.3.50'
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.1.2'
|
||||
classpath 'com.android.tools.build:gradle:3.5.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
//classpath 'com.google.gms:google-services:4.3.8'
|
||||
classpath 'com.google.gms:google-services:4.3.2'
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,6 +27,6 @@ subprojects {
|
||||
project.evaluationDependsOn(':app')
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete) {
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
|
@ -1,2 +0,0 @@
|
||||
json_key_file("keys.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
|
||||
package_name("chat.fluffy.fluffychat") # e.g. com.krausefx.app
|
@ -1,54 +0,0 @@
|
||||
# This file contains the fastlane.tools configuration
|
||||
# You can find the documentation at https://docs.fastlane.tools
|
||||
#
|
||||
# For a list of all available actions, check out
|
||||
#
|
||||
# https://docs.fastlane.tools/actions
|
||||
#
|
||||
# For a list of all available plugins, check out
|
||||
#
|
||||
# https://docs.fastlane.tools/plugins/available-plugins
|
||||
#
|
||||
|
||||
# Uncomment the line if you want fastlane to automatically update itself
|
||||
update_fastlane
|
||||
|
||||
default_platform(:android)
|
||||
|
||||
platform :android do
|
||||
lane :set_build_code_internal do
|
||||
versions = google_play_track_version_codes(
|
||||
track: "internal",
|
||||
json_key: "./keys.json"
|
||||
)
|
||||
last_version = versions[0].to_i
|
||||
Dir.chdir("../..") do
|
||||
re = /version:\s([0-9]*\.[0-9]*\.[0-9]*)\+[0-9]*/i
|
||||
config = File.read("./pubspec.yaml")
|
||||
version_name = config.match(re).captures
|
||||
|
||||
subst = "version: #{version_name[0]}+#{last_version+2}"
|
||||
|
||||
result = config.gsub(re, subst)
|
||||
|
||||
File.open("./pubspec.yaml", 'w') { |file| file.write(result) }
|
||||
end
|
||||
end
|
||||
|
||||
lane :deploy_internal_test do
|
||||
versions = google_play_track_version_codes(
|
||||
track: "internal",
|
||||
json_key: "./keys.json"
|
||||
)
|
||||
last_version = versions[0].to_i
|
||||
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)
|
||||
end
|
||||
end
|
@ -1,56 +0,0 @@
|
||||
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)
|
||||
|
||||
# Available Actions
|
||||
|
||||
## Android
|
||||
|
||||
### android set_build_code_internal
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android set_build_code_internal
|
||||
```
|
||||
|
||||
|
||||
|
||||
### android deploy_internal_test
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy_internal_test
|
||||
```
|
||||
|
||||
|
||||
|
||||
### android deploy_candidate
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy_candidate
|
||||
```
|
||||
|
||||
|
||||
|
||||
### android deploy_release
|
||||
|
||||
```sh
|
||||
[bundle exec] 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).
|
@ -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)
|
@ -1 +0,0 @@
|
||||
Check out https://gitlab.com/ChristianPauly/fluffychat-flutter/-/blob/main/CHANGELOG.md for the changelog.
|
@ -1,32 +0,0 @@
|
||||
FluffyChat is an open, nonprofit and cute matrix messenger app for Ubuntu Touch, Android and iOS.
|
||||
|
||||
Open
|
||||
Opensource and open development where everyone can join.
|
||||
|
||||
Nonprofit
|
||||
FluffyChat is donation funded.
|
||||
|
||||
Cute ♥
|
||||
Cute design and many theme settings including a dark mode.
|
||||
|
||||
One-to-one and groupchats
|
||||
Unlimited groups and direct chats.
|
||||
|
||||
Easy
|
||||
FluffyChat is made as simple to use as possible.
|
||||
|
||||
Free
|
||||
Free to use for everyone without ads.
|
||||
|
||||
Decentralized
|
||||
There is no "FluffyChat server" you are forced to use. Use the server you find trustworthy or host your own.
|
||||
|
||||
Compatible
|
||||
Compatible with Element, 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. ♥
|
Before Width: | Height: | Size: 233 KiB |
Before Width: | Height: | Size: 32 KiB |
@ -1 +0,0 @@
|
||||
Chat with your friends with FluffyChat.
|
@ -1 +0,0 @@
|
||||
FluffyChat
|
@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuites>
|
||||
<testsuite name="fastlane.lanes">
|
||||
|
||||
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="0: update_fastlane" time="1.455419">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="1: default_platform" time="0.000127">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="2: google_play_track_version_codes" time="2.638619">
|
||||
|
||||
</testcase>
|
||||
|
||||
</testsuite>
|
||||
</testsuites>
|
@ -1,3 +1,4 @@
|
||||
org.gradle.jvmargs=-Xmx1536M
|
||||
android.enableR8=true
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
@ -3,4 +3,4 @@ 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-5.6.2-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
|
||||
}
|
||||
|
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: 66 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 44 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 +0,0 @@
|
||||
{
|
||||
"@@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": {}
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
{}
|