Merge commit 'bd1508c54547936a7f96082b7f21a7eddfd9d34f' into yiffed
This commit is contained in:
commit
73e3c85626
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,6 +3,7 @@
|
||||||
*.log
|
*.log
|
||||||
*.pyc
|
*.pyc
|
||||||
*.swp
|
*.swp
|
||||||
|
*.snap
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.atom/
|
.atom/
|
||||||
.buildlog/
|
.buildlog/
|
||||||
|
|
|
@ -181,3 +181,37 @@ pages:
|
||||||
- public
|
- public
|
||||||
only:
|
only:
|
||||||
- main
|
- main
|
||||||
|
|
||||||
|
build_linux:
|
||||||
|
stage: coverage
|
||||||
|
image: registry.gitlab.com/famedly/containers/flutter-dockerimages:dev
|
||||||
|
dependencies: []
|
||||||
|
script:
|
||||||
|
- sudo apt update
|
||||||
|
- sudo apt install clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev
|
||||||
|
- flutter config --enable-linux-desktop
|
||||||
|
- flutter pub get
|
||||||
|
- flutter build linux --release
|
||||||
|
artifacts:
|
||||||
|
when: on_success
|
||||||
|
paths:
|
||||||
|
- build/linux/release/bundle/
|
||||||
|
only:
|
||||||
|
- main
|
||||||
|
|
||||||
|
snap:publish:
|
||||||
|
stage: publish
|
||||||
|
image: "cibuilds/snapcraft:core18"
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
script:
|
||||||
|
- snapcraft
|
||||||
|
- echo $SNAPCRAFT_LOGIN_FILE | base64 --decode --ignore-garbage > snapcraft.login
|
||||||
|
- snapcraft login --with snapcraft.login
|
||||||
|
- snapcraft push --release=stable *.snap
|
||||||
|
- snapcraft logout
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- './*.snap'
|
||||||
|
when: on_success
|
||||||
|
expire_in: 1 week
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
### Features
|
### Features
|
||||||
- Add ability to enable / disable emotes globally
|
- Add ability to enable / disable emotes globally
|
||||||
- Add ability to manage emote packs with different state keys
|
- Add ability to manage emote packs with different state keys
|
||||||
|
### Fixes
|
||||||
|
- Fix amoled / theme settings not always saving properly
|
||||||
|
- Show device name in account information correctly
|
||||||
|
|
||||||
# Version 0.19.0 - 2020-09-21
|
# Version 0.19.0 - 2020-09-21
|
||||||
### Features
|
### Features
|
||||||
|
|
|
@ -17,7 +17,7 @@ class StatusListItem extends StatelessWidget {
|
||||||
future: client.getProfileFromUserId(status.userId),
|
future: client.getProfileFromUserId(status.userId),
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
final profile =
|
final profile =
|
||||||
snapshot.data ?? Profile(client.userID, Uri.parse(''));
|
snapshot.data ?? Profile(status.userId.localpart, null);
|
||||||
return InkWell(
|
return InkWell(
|
||||||
borderRadius: BorderRadius.circular(8),
|
borderRadius: BorderRadius.circular(8),
|
||||||
onTap: () => Navigator.of(context).push(
|
onTap: () => Navigator.of(context).push(
|
||||||
|
|
|
@ -21,6 +21,7 @@ import '../utils/beautify_string_extension.dart';
|
||||||
import '../utils/famedlysdk_store.dart';
|
import '../utils/famedlysdk_store.dart';
|
||||||
import '../utils/presence_extension.dart';
|
import '../utils/presence_extension.dart';
|
||||||
import '../views/key_verification.dart';
|
import '../views/key_verification.dart';
|
||||||
|
import '../utils/platform_infos.dart';
|
||||||
import 'avatar.dart';
|
import 'avatar.dart';
|
||||||
|
|
||||||
class Matrix extends StatefulWidget {
|
class Matrix extends StatefulWidget {
|
||||||
|
@ -211,7 +212,7 @@ class MatrixState extends State<Matrix> {
|
||||||
final Set verificationMethods = <KeyVerificationMethod>{
|
final Set verificationMethods = <KeyVerificationMethod>{
|
||||||
KeyVerificationMethod.numbers
|
KeyVerificationMethod.numbers
|
||||||
};
|
};
|
||||||
if (!kIsWeb) {
|
if (PlatformInfos.isMobile) {
|
||||||
// emojis don't show in web somehow
|
// emojis don't show in web somehow
|
||||||
verificationMethods.add(KeyVerificationMethod.emoji);
|
verificationMethods.add(KeyVerificationMethod.emoji);
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,8 +176,9 @@ class ThemeSwitcherWidgetState extends State<ThemeSwitcherWidget> {
|
||||||
|
|
||||||
Future loadSelection(MatrixState matrix) async {
|
Future loadSelection(MatrixState matrix) async {
|
||||||
String item = await matrix.store.getItem('theme') ?? 'light';
|
String item = await matrix.store.getItem('theme') ?? 'light';
|
||||||
selectedTheme =
|
selectedTheme = Themes.values.firstWhere(
|
||||||
Themes.values.firstWhere((e) => e.toString() == 'Themes.' + item);
|
(e) => e.toString() == 'Themes.' + item,
|
||||||
|
orElse: () => Themes.system);
|
||||||
|
|
||||||
amoledEnabled = (await matrix.store.getItem('amoled_enabled') ?? 'false')
|
amoledEnabled = (await matrix.store.getItem('amoled_enabled') ?? 'false')
|
||||||
.toLowerCase() ==
|
.toLowerCase() ==
|
||||||
|
@ -240,26 +241,6 @@ class ThemeSwitcherWidgetState extends State<ThemeSwitcherWidget> {
|
||||||
void setup() async {
|
void setup() async {
|
||||||
final matrix = Matrix.of(context);
|
final matrix = Matrix.of(context);
|
||||||
await loadSelection(matrix);
|
await loadSelection(matrix);
|
||||||
|
|
||||||
if (selectedTheme == null) {
|
|
||||||
switchTheme(matrix, Themes.light, false);
|
|
||||||
} else {
|
|
||||||
switch (selectedTheme) {
|
|
||||||
case Themes.light:
|
|
||||||
switchTheme(matrix, Themes.light, false);
|
|
||||||
break;
|
|
||||||
case Themes.dark:
|
|
||||||
if (amoledEnabled) {
|
|
||||||
switchTheme(matrix, Themes.dark, true);
|
|
||||||
} else {
|
|
||||||
switchTheme(matrix, Themes.dark, false);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Themes.system:
|
|
||||||
switchTheme(matrix, Themes.system, false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"accountInformation": "Account informations",
|
"accountInformation": "Account information",
|
||||||
"@accountInformation": {
|
"@accountInformation": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -159,6 +159,11 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
|
"changeDeviceName": "Change device name",
|
||||||
|
"@changeDeviceName": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
"changedTheChatAvatar": "{username} changed the chat avatar",
|
"changedTheChatAvatar": "{username} changed the chat avatar",
|
||||||
"@changedTheChatAvatar": {
|
"@changedTheChatAvatar": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
|
@ -1207,7 +1212,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"sentryInfo": "Informations about your privacy: https://sentry.io/security/",
|
"sentryInfo": "Information about your privacy: https://sentry.io/security/",
|
||||||
"@sentryInfo": {
|
"@sentryInfo": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1315,7 +1320,7 @@
|
||||||
"username": {}
|
"username": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sentCallInformations": "{senderName} sent call informations",
|
"sentCallInformations": "{senderName} sent call information",
|
||||||
"@sentCallInformations": {
|
"@sentCallInformations": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -1723,4 +1728,4 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -23,7 +23,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"accountInformation": "Informations du compte",
|
"accountInformation": "Informations sur le compte",
|
||||||
"@accountInformation": {
|
"@accountInformation": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1702,5 +1702,20 @@
|
||||||
"@yourOwnUsername": {
|
"@yourOwnUsername": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"privacy": "Vie privée",
|
||||||
|
"@privacy": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"enableEmotesGlobally": "Activer globalement le pack d'émoticônes",
|
||||||
|
"@enableEmotesGlobally": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"emotePacks": "Packs d'émoticônes pour le salon",
|
||||||
|
"@emotePacks": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1702,5 +1702,20 @@
|
||||||
"@yourOwnUsername": {
|
"@yourOwnUsername": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"enableEmotesGlobally": "Aktiviraj paket emotikona globalno",
|
||||||
|
"@enableEmotesGlobally": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"emotePacks": "Paketi emotikona za sobu",
|
||||||
|
"@emotePacks": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"privacy": "Privatnost",
|
||||||
|
"@privacy": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1
lib/l10n/intl_it.arb
Normal file
1
lib/l10n/intl_it.arb
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{}
|
|
@ -102,7 +102,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"askVerificationRequest": "{username}'den gelen doğrulama talebini kabul etmek istiyor musunuz?",
|
"askVerificationRequest": "{username} kişisinden gelen bu doğrulama isteği kabul edilsin mi?",
|
||||||
"@askVerificationRequest": {
|
"@askVerificationRequest": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"banFromChat": "Sohbetten engellendiniz",
|
"banFromChat": "Sohbetten engelle",
|
||||||
"@banFromChat": {
|
"@banFromChat": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -129,7 +129,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"bannedUser": "{username} engelledi: {targetName}",
|
"bannedUser": "{username}, {targetName} kişisini engelledi",
|
||||||
"@bannedUser": {
|
"@bannedUser": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -249,7 +249,7 @@
|
||||||
"username": {}
|
"username": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"changedTheRoomAliases": "",
|
"changedTheRoomAliases": "{username} oda takma adlarını değiştirdi",
|
||||||
"@changedTheRoomAliases": {
|
"@changedTheRoomAliases": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -268,7 +268,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"changeTheHomeserver": "",
|
"changeTheHomeserver": "Ana sunucuyu değiştir",
|
||||||
"@changeTheHomeserver": {
|
"@changeTheHomeserver": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -293,7 +293,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"channelCorruptedDecryptError": "",
|
"channelCorruptedDecryptError": "Şifreleme bozuldu",
|
||||||
"@channelCorruptedDecryptError": {
|
"@channelCorruptedDecryptError": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -323,12 +323,12 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"compareEmojiMatch": "",
|
"compareEmojiMatch": "Karşılaştırın ve aşağıdaki emojilerin diğer cihazdakilerle eşleştiğinden emin olun:",
|
||||||
"@compareEmojiMatch": {
|
"@compareEmojiMatch": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"compareNumbersMatch": "",
|
"compareNumbersMatch": "Karşılaştırın ve aşağıdaki numaraların diğer cihazdakilerle eşleştiğinden emin olun:",
|
||||||
"@compareNumbersMatch": {
|
"@compareNumbersMatch": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -353,7 +353,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"contentViewer": "",
|
"contentViewer": "İçerik görüntüleyici",
|
||||||
"@contentViewer": {
|
"@contentViewer": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -380,7 +380,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"couldNotSetDisplayname": "",
|
"couldNotSetDisplayname": "Görünen ad ayarlanamadı",
|
||||||
"@couldNotSetDisplayname": {
|
"@couldNotSetDisplayname": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -414,17 +414,17 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"crossSigningDisabled": "",
|
"crossSigningDisabled": "Çapraz imzalama devre dışı bırakıldı",
|
||||||
"@crossSigningDisabled": {
|
"@crossSigningDisabled": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"crossSigningEnabled": "",
|
"crossSigningEnabled": "Çapraz imzalama etkinleştirildi",
|
||||||
"@crossSigningEnabled": {
|
"@crossSigningEnabled": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"currentlyActive": "",
|
"currentlyActive": "Şu anda etkin",
|
||||||
"@currentlyActive": {
|
"@currentlyActive": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -469,7 +469,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"deny": "",
|
"deny": "Reddet",
|
||||||
"@deny": {
|
"@deny": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -484,12 +484,12 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"discardPicture": "",
|
"discardPicture": "Resmi at",
|
||||||
"@discardPicture": {
|
"@discardPicture": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"displaynameHasBeenChanged": "",
|
"displaynameHasBeenChanged": "Görünen ad değiştirildi",
|
||||||
"@displaynameHasBeenChanged": {
|
"@displaynameHasBeenChanged": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -499,52 +499,52 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"downloadFile": "",
|
"downloadFile": "Dosyayı indir",
|
||||||
"@downloadFile": {
|
"@downloadFile": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"editDisplayname": "",
|
"editDisplayname": "Görünen adı düzenle",
|
||||||
"@editDisplayname": {
|
"@editDisplayname": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"editJitsiInstance": "",
|
"editJitsiInstance": "Jitsi örneğini düzenle",
|
||||||
"@editJitsiInstance": {
|
"@editJitsiInstance": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"emoteExists": "",
|
"emoteExists": "İfade zaten var!",
|
||||||
"@emoteExists": {
|
"@emoteExists": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"emoteInvalid": "",
|
"emoteInvalid": "Geçersiz ifade kısa kodu!",
|
||||||
"@emoteInvalid": {
|
"@emoteInvalid": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"emoteSettings": "",
|
"emoteSettings": "İfade Ayarları",
|
||||||
"@emoteSettings": {
|
"@emoteSettings": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"emoteShortcode": "",
|
"emoteShortcode": "İfade kısa kodu",
|
||||||
"@emoteShortcode": {
|
"@emoteShortcode": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"emoteWarnNeedToPick": "",
|
"emoteWarnNeedToPick": "Bir ifade kısa kodu ve bir resim seçmeniz gerekiyor!",
|
||||||
"@emoteWarnNeedToPick": {
|
"@emoteWarnNeedToPick": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"emptyChat": "",
|
"emptyChat": "Boş sohbet",
|
||||||
"@emptyChat": {
|
"@emptyChat": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"enableEncryptionWarning": "",
|
"enableEncryptionWarning": "Artık şifrelemeyi devre dışı bırakamayacaksınız. Emin misiniz?",
|
||||||
"@enableEncryptionWarning": {
|
"@enableEncryptionWarning": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -559,7 +559,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"encryptionNotEnabled": "",
|
"encryptionNotEnabled": "Şifreleme etkinleştirilmedi",
|
||||||
"@encryptionNotEnabled": {
|
"@encryptionNotEnabled": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -579,7 +579,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"enterYourHomeserver": "",
|
"enterYourHomeserver": "Ana sunucunuzu girin",
|
||||||
"@enterYourHomeserver": {
|
"@enterYourHomeserver": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -599,7 +599,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"forward": "",
|
"forward": "İlet",
|
||||||
"@forward": {
|
"@forward": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -609,12 +609,12 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"fromJoining": "",
|
"fromJoining": "Katılmadan",
|
||||||
"@fromJoining": {
|
"@fromJoining": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"fromTheInvitation": "",
|
"fromTheInvitation": "Davetten",
|
||||||
"@fromTheInvitation": {
|
"@fromTheInvitation": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -634,19 +634,19 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"groupIsPublic": "",
|
"groupIsPublic": "Grup herkese açık",
|
||||||
"@groupIsPublic": {
|
"@groupIsPublic": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"groupWith": "",
|
"groupWith": "{displayname} ile grup",
|
||||||
"@groupWith": {
|
"@groupWith": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"displayname": {}
|
"displayname": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"guestsAreForbidden": "",
|
"guestsAreForbidden": "Misafirlere izin verilmiyor",
|
||||||
"@guestsAreForbidden": {
|
"@guestsAreForbidden": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -656,7 +656,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"hasWithdrawnTheInvitationFor": "",
|
"hasWithdrawnTheInvitationFor": "{username}, {targetName} için daveti geri çekti",
|
||||||
"@hasWithdrawnTheInvitationFor": {
|
"@hasWithdrawnTheInvitationFor": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -669,44 +669,44 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"homeserverIsNotCompatible": "",
|
"homeserverIsNotCompatible": "Ana sunucu uyumlu değil",
|
||||||
"@homeserverIsNotCompatible": {
|
"@homeserverIsNotCompatible": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"id": "",
|
"id": "Kimlik",
|
||||||
"@id": {
|
"@id": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"identity": "",
|
"identity": "Kimlik",
|
||||||
"@identity": {
|
"@identity": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"incorrectPassphraseOrKey": "",
|
"incorrectPassphraseOrKey": "Yanlış parola veya kurtarma anahtarı",
|
||||||
"@incorrectPassphraseOrKey": {
|
"@incorrectPassphraseOrKey": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"inviteContact": "",
|
"inviteContact": "Kişi davet et",
|
||||||
"@inviteContact": {
|
"@inviteContact": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"inviteContactToGroup": "",
|
"inviteContactToGroup": "Kişiyi {groupName} grubuna davet et",
|
||||||
"@inviteContactToGroup": {
|
"@inviteContactToGroup": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"groupName": {}
|
"groupName": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"invited": "",
|
"invited": "Davet edildi",
|
||||||
"@invited": {
|
"@invited": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"invitedUser": "",
|
"invitedUser": "{username}, {targetName} kişisini davet etti",
|
||||||
"@invitedUser": {
|
"@invitedUser": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -719,7 +719,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"inviteText": "",
|
"inviteText": "{username} sizi FluffyChat'e davet etti. \n1. FluffyChat kurun: https://fluffychat.im \n2. Kaydolun veya giriş yapın \n3. Davet bağlantısını açın: {link}",
|
||||||
"@inviteText": {
|
"@inviteText": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -727,7 +727,7 @@
|
||||||
"link": {}
|
"link": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"isDeviceKeyCorrect": "",
|
"isDeviceKeyCorrect": "Aşağıdaki cihaz anahtarı doğru mu?",
|
||||||
"@isDeviceKeyCorrect": {
|
"@isDeviceKeyCorrect": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -744,17 +744,17 @@
|
||||||
"username": {}
|
"username": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"keysCached": "",
|
"keysCached": "Anahtarlar önbelleğe alındı",
|
||||||
"@keysCached": {
|
"@keysCached": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"keysMissing": "",
|
"keysMissing": "Anahtarlar eksik",
|
||||||
"@keysMissing": {
|
"@keysMissing": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"kicked": "",
|
"kicked": "{username}, {targetName} kişisini attı",
|
||||||
"@kicked": {
|
"@kicked": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -762,7 +762,7 @@
|
||||||
"targetName": {}
|
"targetName": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kickedAndBanned": "",
|
"kickedAndBanned": "{username}, {targetName} kişisini attı ve engelledi",
|
||||||
"@kickedAndBanned": {
|
"@kickedAndBanned": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -770,19 +770,19 @@
|
||||||
"targetName": {}
|
"targetName": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kickFromChat": "",
|
"kickFromChat": "Sohbetten at",
|
||||||
"@kickFromChat": {
|
"@kickFromChat": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"lastActiveAgo": "",
|
"lastActiveAgo": "Son görülen: {localizedTimeShort}",
|
||||||
"@lastActiveAgo": {
|
"@lastActiveAgo": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"localizedTimeShort": {}
|
"localizedTimeShort": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lastSeenIp": "",
|
"lastSeenIp": "Son görülen IP",
|
||||||
"@lastSeenIp": {
|
"@lastSeenIp": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -797,7 +797,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"leftTheChat": "",
|
"leftTheChat": "Sohbetten ayrıldı",
|
||||||
"@leftTheChat": {
|
"@leftTheChat": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -812,7 +812,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"loadCountMoreParticipants": "",
|
"loadCountMoreParticipants": "{count} katılımcı daha yükle",
|
||||||
"@loadCountMoreParticipants": {
|
"@loadCountMoreParticipants": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -834,7 +834,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"logInTo": "",
|
"logInTo": "{homeserver} üzerinde oturum aç",
|
||||||
"@logInTo": {
|
"@logInTo": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -846,17 +846,17 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"makeAModerator": "",
|
"makeAModerator": "Moderatör yap",
|
||||||
"@makeAModerator": {
|
"@makeAModerator": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"makeAnAdmin": "",
|
"makeAnAdmin": "Yönetici yap",
|
||||||
"@makeAnAdmin": {
|
"@makeAnAdmin": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"makeSureTheIdentifierIsValid": "",
|
"makeSureTheIdentifierIsValid": "Tanımlayıcının geçerli olduğundan emin olun",
|
||||||
"@makeSureTheIdentifierIsValid": {
|
"@makeSureTheIdentifierIsValid": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -866,7 +866,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"moderator": "",
|
"moderator": "Moderatör",
|
||||||
"@moderator": {
|
"@moderator": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -876,94 +876,94 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"muteChat": "",
|
"muteChat": "Sohbeti sessize al",
|
||||||
"@muteChat": {
|
"@muteChat": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"needPantalaimonWarning": "",
|
"needPantalaimonWarning": "Uçtan uca şifreleme kullanmak için şimdilik Pantalaimon'a ihtiyacınız olduğunu lütfen unutmayın.",
|
||||||
"@needPantalaimonWarning": {
|
"@needPantalaimonWarning": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"newMessageInFluffyChat": "",
|
"newMessageInFluffyChat": "FluffyChat'te yeni mesaj",
|
||||||
"@newMessageInFluffyChat": {
|
"@newMessageInFluffyChat": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"newPrivateChat": "",
|
"newPrivateChat": "Yeni özel sohbet",
|
||||||
"@newPrivateChat": {
|
"@newPrivateChat": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"newVerificationRequest": "",
|
"newVerificationRequest": "Yeni doğrulama isteği!",
|
||||||
"@newVerificationRequest": {
|
"@newVerificationRequest": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"noCrossSignBootstrap": "",
|
"noCrossSignBootstrap": "FluffyChat şu anda çapraz imzalamanın etkinleştirilmesini desteklemiyor. Lütfen Riot içinden etkinleştirin.",
|
||||||
"@noCrossSignBootstrap": {
|
"@noCrossSignBootstrap": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"noEmotesFound": "",
|
"noEmotesFound": "İfade bulunamadı. 😕",
|
||||||
"@noEmotesFound": {
|
"@noEmotesFound": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"noGoogleServicesWarning": "",
|
"noGoogleServicesWarning": "Görünüşe göre telefonunuzda Google hizmetleri yok. Bu, mahremiyetiniz için iyi bir karar! FluffyChat'te anlık bildirimler almak için microG kullanmanızı tavsiye ediyoruz: https://microg.org/",
|
||||||
"@noGoogleServicesWarning": {
|
"@noGoogleServicesWarning": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"noMegolmBootstrap": "",
|
"noMegolmBootstrap": "FluffyChat şu anda çevrim içi anahtar yedeklemenin etkinleştirilmesini desteklemiyor. Lütfen Riot içinden etkinleştirin.",
|
||||||
"@noMegolmBootstrap": {
|
"@noMegolmBootstrap": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"none": "",
|
"none": "Yok",
|
||||||
"@none": {
|
"@none": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"noPermission": "",
|
"noPermission": "İzin yok",
|
||||||
"@noPermission": {
|
"@noPermission": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"noRoomsFound": "",
|
"noRoomsFound": "Oda bulunamadı...",
|
||||||
"@noRoomsFound": {
|
"@noRoomsFound": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"notSupportedInWeb": "",
|
"notSupportedInWeb": "Web'de desteklenmiyor",
|
||||||
"@notSupportedInWeb": {
|
"@notSupportedInWeb": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"numberSelected": "",
|
"numberSelected": "{number} seçildi",
|
||||||
"@numberSelected": {
|
"@numberSelected": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"number": {}
|
"number": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ok": "",
|
"ok": "tamam",
|
||||||
"@ok": {
|
"@ok": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"onlineKeyBackupDisabled": "",
|
"onlineKeyBackupDisabled": "Çevrim içi anahtar yedekleme devre dışı bırakıldı",
|
||||||
"@onlineKeyBackupDisabled": {
|
"@onlineKeyBackupDisabled": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"onlineKeyBackupEnabled": "",
|
"onlineKeyBackupEnabled": "Çevrim içi anahtar yedekleme etkinleştirildi",
|
||||||
"@onlineKeyBackupEnabled": {
|
"@onlineKeyBackupEnabled": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"oopsSomethingWentWrong": "",
|
"oopsSomethingWentWrong": "Tüh, bir şeyler yanlış gitti...",
|
||||||
"@oopsSomethingWentWrong": {
|
"@oopsSomethingWentWrong": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -983,12 +983,12 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"participatingUserDevices": "",
|
"participatingUserDevices": "Katılan kullanıcı cihazları",
|
||||||
"@participatingUserDevices": {
|
"@participatingUserDevices": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"passphraseOrKey": "",
|
"passphraseOrKey": "parola veya kurtarma anahtarı",
|
||||||
"@passphraseOrKey": {
|
"@passphraseOrKey": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -998,12 +998,12 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"pickImage": "",
|
"pickImage": "Resim seç",
|
||||||
"@pickImage": {
|
"@pickImage": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"play": "",
|
"play": "{fileName} dosyasını oynat",
|
||||||
"@play": {
|
"@play": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -1015,7 +1015,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"pleaseEnterAMatrixIdentifier": "",
|
"pleaseEnterAMatrixIdentifier": "Lütfen bir matrix tanımlayıcısı girin",
|
||||||
"@pleaseEnterAMatrixIdentifier": {
|
"@pleaseEnterAMatrixIdentifier": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1030,17 +1030,17 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"publicRooms": "",
|
"publicRooms": "Herkese Açık Odalar",
|
||||||
"@publicRooms": {
|
"@publicRooms": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"recording": "",
|
"recording": "Kaydediliyor",
|
||||||
"@recording": {
|
"@recording": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"redactedAnEvent": "",
|
"redactedAnEvent": "{username} bir etkinliği düzenledi",
|
||||||
"@redactedAnEvent": {
|
"@redactedAnEvent": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -1086,7 +1086,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"removeExile": "",
|
"removeExile": "Engeli kaldır",
|
||||||
"@removeExile": {
|
"@removeExile": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1096,12 +1096,12 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"renderRichContent": "",
|
"renderRichContent": "Zengin mesaj içeriğini görüntüle",
|
||||||
"@renderRichContent": {
|
"@renderRichContent": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"reply": "",
|
"reply": "Yanıtla",
|
||||||
"@reply": {
|
"@reply": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1121,7 +1121,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"roomHasBeenUpgraded": "",
|
"roomHasBeenUpgraded": "Oda yükseltildi",
|
||||||
"@roomHasBeenUpgraded": {
|
"@roomHasBeenUpgraded": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1174,7 +1174,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"sendImage": "",
|
"sendImage": "Resim gönder",
|
||||||
"@sendImage": {
|
"@sendImage": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1347,7 +1347,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"unbannedUser": "{username} engeli kaldırdı: {targetName}",
|
"unbannedUser": "{username}, {targetName} kişisinin engelini kaldırdı",
|
||||||
"@unbannedUser": {
|
"@unbannedUser": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -1355,7 +1355,7 @@
|
||||||
"targetName": {}
|
"targetName": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"unblockDevice": "",
|
"unblockDevice": "Cihazın Engellemesini Kaldır",
|
||||||
"@unblockDevice": {
|
"@unblockDevice": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1370,7 +1370,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"unknownEvent": "",
|
"unknownEvent": "Bilinmeyen etkinlik '{type}'",
|
||||||
"@unknownEvent": {
|
"@unknownEvent": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -1449,7 +1449,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"userSentUnknownEvent": "",
|
"userSentUnknownEvent": "{username} bir {type} etkinliği gönderdi",
|
||||||
"@userSentUnknownEvent": {
|
"@userSentUnknownEvent": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -1527,7 +1527,7 @@
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"waitingPartnerNumbers": "",
|
"waitingPartnerNumbers": "Ortağın numaraları kabul etmesi bekleniyor...",
|
||||||
"@waitingPartnerNumbers": {
|
"@waitingPartnerNumbers": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
@ -1596,5 +1596,126 @@
|
||||||
"@yourOwnUsername": {
|
"@yourOwnUsername": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"warning": "Uyarı!",
|
||||||
|
"@warning": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"unpin": "Sabitlemeyi kaldır",
|
||||||
|
"@unpin": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"startedACall": "{senderName} bir arama başlattı",
|
||||||
|
"@startedACall": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {
|
||||||
|
"senderName": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sentCallInformations": "{senderName} arama bilgilerini gönderdi",
|
||||||
|
"@sentCallInformations": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {
|
||||||
|
"senderName": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sendVideo": "Video gönder",
|
||||||
|
"@sendVideo": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"sendOriginal": "Orijinali gönder",
|
||||||
|
"@sendOriginal": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"sendAudio": "Ses gönder",
|
||||||
|
"@sendAudio": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"changesHaveBeenSaved": "Değişiklikler kaydedildi",
|
||||||
|
"@changesHaveBeenSaved": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"sentryInfo": "Gizliliğiniz hakkında bilgiler: https://sentry.io/security/",
|
||||||
|
"@sentryInfo": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"sendBugReports": "sentry.io ile hata raporları göndermeye izin ver",
|
||||||
|
"@sendBugReports": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"pin": "Sabitle",
|
||||||
|
"@pin": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"passwordHasBeenChanged": "Parola değiştirildi",
|
||||||
|
"@passwordHasBeenChanged": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"privacy": "Gizlilik",
|
||||||
|
"@privacy": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"no": "Hayır",
|
||||||
|
"@no": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"joinRoom": "Odaya katıl",
|
||||||
|
"@joinRoom": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"ignoreListDescription": "Sizi rahatsız eden kullanıcıları yok sayabilirsiniz. Kişisel yok sayma listenizdeki kullanıcılardan herhangi bir mesaj veya oda daveti alamayacaksınız.",
|
||||||
|
"@ignoreListDescription": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"ignoreUsername": "Kullanıcıyı yok say",
|
||||||
|
"@ignoreUsername": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"ignoredUsers": "Yok sayılan kullanıcılar",
|
||||||
|
"@ignoredUsers": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"endedTheCall": "{senderName} aramayı sonlandırdı",
|
||||||
|
"@endedTheCall": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {
|
||||||
|
"senderName": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"enableEmotesGlobally": "İfade paketini küresel olarak etkinleştir",
|
||||||
|
"@enableEmotesGlobally": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"emotePacks": "Oda için ifade paketleri",
|
||||||
|
"@emotePacks": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"deleteAccount": "Hesabı sil",
|
||||||
|
"@deleteAccount": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"deactivateAccountWarning": "Bu, kullanıcı hesabınızı devre dışı bırakacak. Bu geri alınamaz! Emin misiniz?",
|
||||||
|
"@deactivateAccountWarning": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'dart:ffi';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:isolate';
|
import 'dart:isolate';
|
||||||
import 'package:famedlysdk/famedlysdk.dart';
|
import 'package:famedlysdk/famedlysdk.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:sqflite/sqflite.dart' show getDatabasesPath;
|
import 'package:sqflite/sqflite.dart' show getDatabasesPath;
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
@ -64,22 +65,17 @@ Future<Database> constructDb(
|
||||||
final isolate = (await receivePort.first as MoorIsolate);
|
final isolate = (await receivePort.first as MoorIsolate);
|
||||||
return Database.connect(await isolate.connect());
|
return Database.connect(await isolate.connect());
|
||||||
} else if (Platform.isLinux) {
|
} else if (Platform.isLinux) {
|
||||||
debugPrint('[Moor] using desktop moor');
|
debugPrint('[Moor] using Linux desktop moor');
|
||||||
open.overrideFor(OperatingSystem.linux, _openOnLinux);
|
final appDocDir = await getApplicationSupportDirectory();
|
||||||
return Database(moor.VmDatabase.memory());
|
return Database(moor.VmDatabase(File('${appDocDir.path}/$filename')));
|
||||||
} else if (Platform.isWindows) {
|
} else if (Platform.isWindows) {
|
||||||
debugPrint('[Moor] using desktop moor');
|
debugPrint('[Moor] using Windows desktop moor');
|
||||||
open.overrideFor(OperatingSystem.linux, _openOnWindows);
|
open.overrideFor(OperatingSystem.windows, _openOnWindows);
|
||||||
return Database(moor.VmDatabase.memory());
|
return Database(moor.VmDatabase.memory());
|
||||||
}
|
}
|
||||||
throw Exception('Platform not supported');
|
throw Exception('Platform not supported');
|
||||||
}
|
}
|
||||||
|
|
||||||
DynamicLibrary _openOnLinux() {
|
|
||||||
final libraryNextToScript = File('/usr/lib/x86_64-linux-gnu/libsqlite3.so');
|
|
||||||
return DynamicLibrary.open(libraryNextToScript.path);
|
|
||||||
}
|
|
||||||
|
|
||||||
DynamicLibrary _openOnWindows() {
|
DynamicLibrary _openOnWindows() {
|
||||||
final script = File(Platform.script.toFilePath());
|
final script = File(Platform.script.toFilePath());
|
||||||
final libraryNextToScript = File('${script.path}/sqlite3.dll');
|
final libraryNextToScript = File('${script.path}/sqlite3.dll');
|
||||||
|
|
|
@ -37,7 +37,9 @@ class AppInfo extends StatelessWidget {
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text('Device name:'),
|
title: Text('Device name:'),
|
||||||
subtitle: Text(client.deviceName),
|
subtitle: Text(client.userDeviceKeys[client.userID]
|
||||||
|
?.deviceKeys[client.deviceID]?.deviceDisplayName ??
|
||||||
|
L10n.of(context).unknownDevice),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text('Device ID:'),
|
title: Text('Device ID:'),
|
||||||
|
|
|
@ -227,7 +227,7 @@ class _ChatState extends State<_Chat> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendImageAction(BuildContext context) async {
|
void sendImageAction(BuildContext context) async {
|
||||||
MatrixFile file;
|
MatrixImageFile file;
|
||||||
if (PlatformInfos.isMobile) {
|
if (PlatformInfos.isMobile) {
|
||||||
final result = await ImagePicker().getImage(
|
final result = await ImagePicker().getImage(
|
||||||
source: ImageSource.gallery,
|
source: ImageSource.gallery,
|
||||||
|
@ -235,7 +235,7 @@ class _ChatState extends State<_Chat> {
|
||||||
maxWidth: 1600,
|
maxWidth: 1600,
|
||||||
maxHeight: 1600);
|
maxHeight: 1600);
|
||||||
if (result == null) return;
|
if (result == null) return;
|
||||||
file = MatrixFile(
|
file = MatrixImageFile(
|
||||||
bytes: await result.readAsBytes(),
|
bytes: await result.readAsBytes(),
|
||||||
name: result.path,
|
name: result.path,
|
||||||
);
|
);
|
||||||
|
@ -243,7 +243,7 @@ class _ChatState extends State<_Chat> {
|
||||||
final result =
|
final result =
|
||||||
await FilePickerCross.importFromStorage(type: FileTypeCross.image);
|
await FilePickerCross.importFromStorage(type: FileTypeCross.image);
|
||||||
if (result == null) return;
|
if (result == null) return;
|
||||||
file = MatrixFile(
|
file = MatrixImageFile(
|
||||||
bytes: result.toUint8List(),
|
bytes: result.toUint8List(),
|
||||||
name: result.fileName,
|
name: result.fileName,
|
||||||
);
|
);
|
||||||
|
|
|
@ -456,12 +456,16 @@ class _ChatListState extends State<ChatList> {
|
||||||
ConnectionStatusHeader(),
|
ConnectionStatusHeader(),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: StreamBuilder(
|
child: StreamBuilder(
|
||||||
stream: Matrix.of(context)
|
stream:
|
||||||
.client
|
Matrix.of(context).client.onSync.stream.where(
|
||||||
.onSync
|
(s) =>
|
||||||
.stream
|
s.hasRoomUpdate ||
|
||||||
.where((s) =>
|
s.accountData
|
||||||
s.hasRoomUpdate || s.hasPresenceUpdate),
|
.where((a) =>
|
||||||
|
a.type ==
|
||||||
|
MatrixState.userStatusesType)
|
||||||
|
.isNotEmpty,
|
||||||
|
),
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
return FutureBuilder<void>(
|
return FutureBuilder<void>(
|
||||||
future: waitForFirstSync(context),
|
future: waitForFirstSync(context),
|
||||||
|
|
|
@ -56,6 +56,19 @@ class DevicesSettingsState extends State<DevicesSettings> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _renameDeviceAction(BuildContext context, Device device) async {
|
||||||
|
final displayName = await SimpleDialogs(context).enterText(
|
||||||
|
hintText: device.displayName,
|
||||||
|
labelText: L10n.of(context).changeDeviceName,
|
||||||
|
);
|
||||||
|
if (displayName == null) return;
|
||||||
|
await SimpleDialogs(context).tryRequestWithLoadingDialog(
|
||||||
|
Matrix.of(context)
|
||||||
|
.client
|
||||||
|
.setDeviceMetadata(device.deviceId, displayName: displayName),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -117,6 +130,7 @@ class DevicesSettingsState extends State<DevicesSettings> {
|
||||||
itemBuilder: (BuildContext context, int i) =>
|
itemBuilder: (BuildContext context, int i) =>
|
||||||
UserDeviceListItem(
|
UserDeviceListItem(
|
||||||
devices[i],
|
devices[i],
|
||||||
|
rename: (d) => _renameDeviceAction(context, d),
|
||||||
remove: (d) => _removeDevicesAction(context, [d]),
|
remove: (d) => _removeDevicesAction(context, [d]),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -132,23 +146,34 @@ class DevicesSettingsState extends State<DevicesSettings> {
|
||||||
class UserDeviceListItem extends StatelessWidget {
|
class UserDeviceListItem extends StatelessWidget {
|
||||||
final Device userDevice;
|
final Device userDevice;
|
||||||
final Function remove;
|
final Function remove;
|
||||||
|
final Function rename;
|
||||||
|
|
||||||
const UserDeviceListItem(this.userDevice, {this.remove, Key key})
|
const UserDeviceListItem(this.userDevice, {this.remove, this.rename, Key key})
|
||||||
: super(key: key);
|
: super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return PopupMenuButton(
|
return PopupMenuButton(
|
||||||
onSelected: (String action) {
|
onSelected: (String action) {
|
||||||
if (action == 'remove' && remove != null) {
|
switch (action) {
|
||||||
remove(userDevice);
|
case 'remove':
|
||||||
|
if (remove != null) remove(userDevice);
|
||||||
|
break;
|
||||||
|
case 'rename':
|
||||||
|
if (rename != null) rename(userDevice);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
itemBuilder: (BuildContext context) => [
|
itemBuilder: (BuildContext context) => [
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
value: 'rename',
|
||||||
|
child: Text(L10n.of(context).changeDeviceName),
|
||||||
|
),
|
||||||
PopupMenuItem<String>(
|
PopupMenuItem<String>(
|
||||||
value: 'remove',
|
value: 'remove',
|
||||||
child: Text(L10n.of(context).removeDevice,
|
child: Text(
|
||||||
style: TextStyle(color: Colors.red)),
|
L10n.of(context).removeDevice,
|
||||||
|
style: TextStyle(color: Colors.red),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
|
|
|
@ -45,6 +45,14 @@ apply_standard_settings(${BINARY_NAME})
|
||||||
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
|
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
|
||||||
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
|
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
|
||||||
add_dependencies(${BINARY_NAME} flutter_assemble)
|
add_dependencies(${BINARY_NAME} flutter_assemble)
|
||||||
|
# Only the install-generated bundle's copy of the executable will launch
|
||||||
|
# correctly, since the resources must in the right relative locations. To avoid
|
||||||
|
# people trying to run the unbundled copy, put it in a subdirectory instead of
|
||||||
|
# the default top-level location.
|
||||||
|
set_target_properties(${BINARY_NAME}
|
||||||
|
PROPERTIES
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
|
||||||
|
)
|
||||||
|
|
||||||
# Generated plugin build rules, which manage building the plugins and adding
|
# Generated plugin build rules, which manage building the plugins and adding
|
||||||
# them to the application.
|
# them to the application.
|
||||||
|
|
|
@ -325,7 +325,7 @@ packages:
|
||||||
name: flutter_matrix_html
|
name: flutter_matrix_html
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.5"
|
version: "0.1.7"
|
||||||
flutter_olm:
|
flutter_olm:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -967,7 +967,7 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.8"
|
version: "1.0.8"
|
||||||
url_launcher_web:
|
url_launcher_web:
|
||||||
dependency: "direct main"
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_web
|
name: url_launcher_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
|
|
|
@ -30,8 +30,7 @@ dependencies:
|
||||||
localstorage: ^3.0.1+4
|
localstorage: ^3.0.1+4
|
||||||
file_picker_cross: ^4.2.2
|
file_picker_cross: ^4.2.2
|
||||||
image_picker: ^0.6.7+11
|
image_picker: ^0.6.7+11
|
||||||
url_launcher: ^5.4.1
|
url_launcher: ^5.7.2
|
||||||
url_launcher_web: ^0.1.0
|
|
||||||
cached_network_image: ^2.3.2+1
|
cached_network_image: ^2.3.2+1
|
||||||
firebase_messaging: ^7.0.2
|
firebase_messaging: ^7.0.2
|
||||||
flutter_local_notifications: ^1.4.3
|
flutter_local_notifications: ^1.4.3
|
||||||
|
@ -49,7 +48,7 @@ dependencies:
|
||||||
open_file: ^3.0.1
|
open_file: ^3.0.1
|
||||||
mime_type: ^0.3.0
|
mime_type: ^0.3.0
|
||||||
bot_toast: ^3.0.0
|
bot_toast: ^3.0.0
|
||||||
flutter_matrix_html: ^0.1.5
|
flutter_matrix_html: ^0.1.7
|
||||||
moor: ^3.3.1
|
moor: ^3.3.1
|
||||||
sqlite3_flutter_libs: ^0.2.0
|
sqlite3_flutter_libs: ^0.2.0
|
||||||
sqlite3: ^0.1.4
|
sqlite3: ^0.1.4
|
||||||
|
@ -85,7 +84,7 @@ flutter_icons:
|
||||||
|
|
||||||
# The following section is specific to Flutter.
|
# The following section is specific to Flutter.
|
||||||
flutter:
|
flutter:
|
||||||
# Adds code generation (synthetic package) support
|
# Adds code generation (synthetic package) support
|
||||||
generate: true
|
generate: true
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue