Merge branch 'main' of https://gitlab.com/ChristianPauly/fluffychat-flutter into yiffed
This commit is contained in:
commit
d5d7a254e3
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -11,6 +11,7 @@
|
|||
.svn/
|
||||
lib/generated_plugin_registrant.dart
|
||||
google-services.json
|
||||
prime
|
||||
|
||||
# libolm package
|
||||
/assets/js/package/*
|
||||
|
|
|
@ -158,8 +158,7 @@ upload_to_fdroid_repo:
|
|||
- 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 && mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc && fdroid update"
|
||||
dependencies:
|
||||
- build_android_apk
|
||||
needs: ["build_android_apk"]
|
||||
only:
|
||||
- tags
|
||||
|
||||
|
@ -174,8 +173,7 @@ pages:
|
|||
- cd build/web/ && bundle install && cd ../../
|
||||
- cd build/web/ && bundle exec jekyll build -d public && cd ../../
|
||||
- mv build/web/public ./
|
||||
dependencies:
|
||||
- build_web
|
||||
needs: ["build_web"]
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
|
@ -215,3 +213,4 @@ snap:publish:
|
|||
- './*.snap'
|
||||
when: on_success
|
||||
expire_in: 1 week
|
||||
needs: []
|
||||
|
|
|
@ -7,6 +7,7 @@ An experimental fork of FluffyChat.
|
|||
* Removed Sentry
|
||||
* Double check of .well-known
|
||||
* Get Jitsi instance from .well-known
|
||||
* Redesigned settings
|
||||
|
||||
# Features
|
||||
* Single and group chats
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
arb-dir: lib/l10n
|
||||
template-arb-file: intl_en.arb
|
||||
output-localization-file: l10n.dart
|
||||
output-class: L10n
|
||||
output-class: L10n
|
||||
preferred-supported-locales: ["en"]
|
|
@ -11,7 +11,6 @@ import 'package:furrychat/utils/user_status.dart';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:localstorage/localstorage.dart';
|
||||
import 'package:universal_html/prefer_universal/html.dart' as html;
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
|
@ -77,8 +76,7 @@ class MatrixState extends State<Matrix> {
|
|||
void clean() async {
|
||||
if (!kIsWeb) return;
|
||||
|
||||
final storage = LocalStorage('LocalStorage');
|
||||
await storage.ready;
|
||||
final storage = await getLocalStorage();
|
||||
await storage.deleteItem(widget.clientName);
|
||||
}
|
||||
|
||||
|
|
|
@ -189,7 +189,7 @@
|
|||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheDisplaynameTo": "{username} غيّر اسمه الى {displayname}",
|
||||
"changedTheDisplaynameTo": "{username} غيّر اسمه العلني الى {displayname}",
|
||||
"@changedTheDisplaynameTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
|
@ -375,7 +375,7 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"couldNotSetDisplayname": "تعذر تعيين الاسم",
|
||||
"couldNotSetDisplayname": "تعذر تعيين الاسم العلني",
|
||||
"@couldNotSetDisplayname": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
|
@ -489,7 +489,7 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"displaynameHasBeenChanged": "غُيِّر الاسم",
|
||||
"displaynameHasBeenChanged": "غُيِّر الاسم العلني",
|
||||
"@displaynameHasBeenChanged": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
|
@ -499,7 +499,7 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editDisplayname": "حرر الاسم",
|
||||
"editDisplayname": "حرر الاسم العلني",
|
||||
"@editDisplayname": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
|
@ -514,7 +514,7 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteWarnNeedToPick": "اختر صورة ورمزا للانفعالة",
|
||||
"emoteWarnNeedToPick": "اختر صورة ورمزا للانفعالة!",
|
||||
"@emoteWarnNeedToPick": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
|
@ -1374,7 +1374,7 @@
|
|||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"useAmoledTheme": "",
|
||||
"useAmoledTheme": "هل تريد استخدم ألوان متوافقة مع Amoled؟",
|
||||
"@useAmoledTheme": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
|
@ -1507,14 +1507,14 @@
|
|||
"unreadCount": {}
|
||||
}
|
||||
},
|
||||
"unreadMessages": "",
|
||||
"unreadMessages": "{unreadEvents} رسالة غير مقروءة",
|
||||
"@unreadMessages": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"unreadEvents": {}
|
||||
}
|
||||
},
|
||||
"unreadMessagesInChats": "",
|
||||
"unreadMessagesInChats": "{unreadEvents} رسالة غير مقروءة من {unreadChats} محادثة",
|
||||
"@unreadMessagesInChats": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
|
@ -1702,5 +1702,10 @@
|
|||
"@yourOwnUsername": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"privacy": "الخصوصية",
|
||||
"@privacy": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -194,5 +194,272 @@
|
|||
"@about": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteMessage": "Cancella messaggio",
|
||||
"@deleteMessage": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteAccount": "Elimina account",
|
||||
"@deleteAccount": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deactivateAccountWarning": "Disabiliterà il tuo account. Non puoi tornare indietro! Sei sicuro?",
|
||||
"@deactivateAccountWarning": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"delete": "Cancella",
|
||||
"@delete": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"dateWithYear": "{day}-{month}-{year}",
|
||||
"@dateWithYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"year": {},
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"dateWithoutYear": "{month}-{day}",
|
||||
"@dateWithoutYear": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"month": {},
|
||||
"day": {}
|
||||
}
|
||||
},
|
||||
"dateAndTimeOfDay": "{date}, {timeOfDay}",
|
||||
"@dateAndTimeOfDay": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"date": {},
|
||||
"timeOfDay": {}
|
||||
}
|
||||
},
|
||||
"currentlyActive": "Attualmente attivo",
|
||||
"@currentlyActive": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createNewGroup": "Crea un nuovo gruppo",
|
||||
"@createNewGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createdTheChat": "{username} ha creato la chat",
|
||||
"@createdTheChat": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"createAccountNow": "Crea ora un account",
|
||||
"@createAccountNow": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"create": "Crea",
|
||||
"@create": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"countParticipants": "{count} partecipanti",
|
||||
"@countParticipants": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"count": {}
|
||||
}
|
||||
},
|
||||
"couldNotSetDisplayname": "Impossibile impostare nome",
|
||||
"@couldNotSetDisplayname": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"couldNotSetAvatar": "Impossibile impostare avatar",
|
||||
"@couldNotSetAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"couldNotDecryptMessage": "Impossibile decriptare messaggio: {error}",
|
||||
"@couldNotDecryptMessage": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"error": {}
|
||||
}
|
||||
},
|
||||
"copy": "Copia",
|
||||
"@copy": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copiedToClipboard": "Copiato negli Appunti",
|
||||
"@copiedToClipboard": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contentViewer": "Visualizzatore contenuti",
|
||||
"@contentViewer": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contactHasBeenInvitedToTheGroup": "Il contatto è stato invitato nel gruppo",
|
||||
"@contactHasBeenInvitedToTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"connectionAttemptFailed": "Tentativo di connessione fallito",
|
||||
"@connectionAttemptFailed": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"connect": "Connetti",
|
||||
"@connect": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"confirm": "Conferma",
|
||||
"@confirm": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareNumbersMatch": "Confronta e assicurati che le seguenti emoji corrispondano a quelle dell'altro dispositivo:",
|
||||
"@compareNumbersMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareEmojiMatch": "Confronta e assicurati che le seguenti emoji corrispondano a quelle dell'altro dispositivo:",
|
||||
"@compareEmojiMatch": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"close": "Chiudi",
|
||||
"@close": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAUsername": "Scegli un username",
|
||||
"@chooseAUsername": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAStrongPassword": "Scegli una password complessa",
|
||||
"@chooseAStrongPassword": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatDetails": "Dettagli chat",
|
||||
"@chatDetails": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chat": "Chat",
|
||||
"@chat": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"channelCorruptedDecryptError": "La crittografia è corrotta",
|
||||
"@channelCorruptedDecryptError": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheServer": "Cambia server",
|
||||
"@changeTheServer": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeWallpaper": "Cambia sfondo",
|
||||
"@changeWallpaper": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheNameOfTheGroup": "Cambia il nome del gruppo",
|
||||
"@changeTheNameOfTheGroup": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changelog": "Registro cambiamenti",
|
||||
"@changelog": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheRoomInvitationLink": "{username} ha cambiato il link di invito",
|
||||
"@changedTheRoomInvitationLink": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheRoomAliases": "{username} ha cambiato il nome delle stanze",
|
||||
"@changedTheRoomAliases": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheProfileAvatar": "{username} ha cambiato il loro avatar",
|
||||
"@changedTheProfileAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRulesTo": "{username} ha cambiato le regole per unirsi in: {joinRules}",
|
||||
"@changedTheJoinRulesTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"joinRules": {}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRules": "{username} ha cambiato le regole per unirsi",
|
||||
"@changedTheJoinRules": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheHistoryVisibilityTo": "{username} ha cambiato la visibilità della cronologia in: {rules}",
|
||||
"@changedTheHistoryVisibilityTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"rules": {}
|
||||
}
|
||||
},
|
||||
"changedTheHistoryVisibility": "{username} ha cambiato la visibilità della cronologia",
|
||||
"@changedTheHistoryVisibility": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRulesTo": "{username} ha cambiato le regole di accesso per ospiti con: {rules}",
|
||||
"@changedTheGuestAccessRulesTo": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {},
|
||||
"rules": {}
|
||||
}
|
||||
},
|
||||
"changedTheChatAvatar": "{username} ha cambiato avatar",
|
||||
"@changedTheChatAvatar": {
|
||||
"type": "text",
|
||||
"placeholders": {
|
||||
"username": {}
|
||||
}
|
||||
},
|
||||
"askSSSSSign": "Per entrare con l'altro utente, per favore inserisci la tua passphrase o recovery key.",
|
||||
"@askSSSSSign": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"askSSSSCache": "Per favore inserisci la tua passphrase o recovery key per la cache delle chiavi.",
|
||||
"@askSSSSCache": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -8,7 +8,6 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:localstorage/localstorage.dart';
|
||||
import 'package:universal_html/prefer_universal/html.dart' as html;
|
||||
|
||||
import 'components/matrix.dart';
|
||||
|
@ -21,8 +20,6 @@ void main() {
|
|||
runZonedGuarded(
|
||||
() => runApp(App()),
|
||||
(error, stackTrace) async {
|
||||
final storage = LocalStorage('LocalStorage');
|
||||
await storage.ready;
|
||||
debugPrint(error.toString());
|
||||
debugPrint(stackTrace.toString());
|
||||
},
|
||||
|
|
|
@ -6,12 +6,22 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:localstorage/localstorage.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:core';
|
||||
import './database/shared.dart';
|
||||
import 'package:olm/olm.dart' as olm; // needed for migration
|
||||
import 'package:random_string/random_string.dart';
|
||||
|
||||
Future<LocalStorage> getLocalStorage() async {
|
||||
final directory = PlatformInfos.isBetaDesktop
|
||||
? await getApplicationSupportDirectory()
|
||||
: await getApplicationDocumentsDirectory();
|
||||
final localStorage = LocalStorage('LocalStorage', directory.path);
|
||||
await localStorage.ready;
|
||||
return localStorage;
|
||||
}
|
||||
|
||||
Future<Database> getDatabase(Client client) async {
|
||||
while (_generateDatabaseLock) {
|
||||
await Future.delayed(Duration(milliseconds: 50));
|
||||
|
|
|
@ -18,8 +18,8 @@ Future<MatrixImageFile> resizeImage(MatrixImageFile file,
|
|||
try {
|
||||
final nativeImg = native.Image();
|
||||
await nativeImg.loadEncoded(file.bytes);
|
||||
file.width = nativeImg.width();
|
||||
file.height = nativeImg.height();
|
||||
file.width = nativeImg.width;
|
||||
file.height = nativeImg.height;
|
||||
args = _IsolateArgs(
|
||||
width: file.width, height: file.height, bytes: file.bytes, max: max);
|
||||
nativeImg.free();
|
||||
|
@ -96,8 +96,8 @@ Future<_IsolateResponse> _isolateFunction(_IsolateArgs args) async {
|
|||
final ret = _IsolateResponse(
|
||||
blurhash: blurhash,
|
||||
jpegBytes: jpegBytes,
|
||||
width: nativeImg.width(),
|
||||
height: nativeImg.height());
|
||||
width: nativeImg.width,
|
||||
height: nativeImg.height);
|
||||
|
||||
nativeImg.free();
|
||||
|
||||
|
|
|
@ -171,7 +171,6 @@ class _LoginState extends State<Login> {
|
|||
readOnly: loading,
|
||||
autocorrect: false,
|
||||
autofocus: true,
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
onChanged: (t) => _checkWellKnownWithCoolDown(t, context),
|
||||
controller: usernameController,
|
||||
decoration: InputDecoration(
|
||||
|
|
|
@ -553,7 +553,7 @@ packages:
|
|||
description:
|
||||
path: "."
|
||||
ref: master
|
||||
resolved-ref: bd24832f96537447174aa34ba78eaed7ff05bb8e
|
||||
resolved-ref: c8eb59c25c4e3a568bd64e4722108ec45259e157
|
||||
url: "https://gitlab.com/famedly/libraries/native_imaging.git"
|
||||
source: git
|
||||
version: "0.0.1"
|
||||
|
|
59
snap/snapcraft.yaml
Normal file
59
snap/snapcraft.yaml
Normal file
|
@ -0,0 +1,59 @@
|
|||
name: fluffychat
|
||||
base: core18 # the base snap is the execution environment for this snap
|
||||
version: git # just for humans, typically '1.2+git' or '1.3.2'
|
||||
summary: Open. Nonprofit. Cute ♥
|
||||
description: |
|
||||
FluffyChat - Chat with your friends
|
||||
|
||||
9 greatest FluffyChat features:
|
||||
1. Opensource and open development where everyone can join.
|
||||
2. Nonprofit - FluffyChat is donation funded.
|
||||
3. Cute design and many theme settings including a dark mode.
|
||||
4. Unlimited groups and direct chats.
|
||||
5. FluffyChat is made as simple to use as possible.
|
||||
6. Free to use for everyone without ads.
|
||||
7. FluffyChat can use your addressbook to find your friends or you can use
|
||||
usernames.
|
||||
8. There is no "FluffyChat server" you are forced to use. Use the server
|
||||
you find trustworthy or host your own.
|
||||
9. Compatible with Riot, Fractal, Nekho and all matrix messengers.
|
||||
|
||||
Join the community: fluffychat://+ubports_community:matrix.org
|
||||
Website: http://fluffy.chat
|
||||
Microblog: https://metalhead.club/@krille
|
||||
|
||||
grade: devel # must be 'stable' to release into candidate/stable channels
|
||||
confinement: strict # use 'strict' once you have the right plugs and slots
|
||||
|
||||
parts:
|
||||
olm:
|
||||
plugin: cmake
|
||||
source: https://gitlab.matrix.org/matrix-org/olm.git
|
||||
source-type: git
|
||||
source-tag: 3.2.1
|
||||
fluffychat:
|
||||
plugin: flutter
|
||||
source: .
|
||||
flutter-target: lib/main.dart
|
||||
stage-packages:
|
||||
- libsqlite3-0
|
||||
override-prime: |
|
||||
snapcraftctl prime
|
||||
ln -sf libsqlite3.so.0 ${SNAPCRAFT_PRIME}/usr/lib/x86_64-linux-gnu/libsqlite3.so
|
||||
|
||||
slots:
|
||||
dbus-svc:
|
||||
interface: dbus
|
||||
bus: session
|
||||
name: chat.fluffy.fluffychat
|
||||
|
||||
apps:
|
||||
fluffychat:
|
||||
command: fluffychat
|
||||
extensions:
|
||||
- flutter-dev
|
||||
plugs:
|
||||
- network
|
||||
- home
|
||||
slots:
|
||||
- dbus-svc
|
Loading…
Reference in a new issue