diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index e33907e..b471d50 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon Mar 17 08:36:03 CET 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/settings.gradle b/android/settings.gradle index dc540c5..664e462 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -18,7 +18,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.7.3" apply false + id "com.android.application" version "8.11.1" apply false id "org.jetbrains.kotlin.android" version "2.1.10" apply false // id "com.google.gms.google-services" version "4.3.8" apply false } diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index ec8ad7e..dd1d0e9 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -7,6 +7,16 @@ "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, + "cleanExif": "Clean EXIF metadata", + "@cleanExif": { + "type": "String", + "placeholders": {} + }, + "cleanExifDescription": "Remove EXIF metadata (camera model, geolocation, time) when sending a photo.", + "@cleanExifDescription": { + "type": "String", + "placeholders": {} + }, "repeatPassword": "Repeat password", "@repeatPassword": {}, "notAnImage": "Not an image file.", diff --git a/assets/l10n/intl_ru.arb b/assets/l10n/intl_ru.arb index 5f3f75d..cf6c6b5 100644 --- a/assets/l10n/intl_ru.arb +++ b/assets/l10n/intl_ru.arb @@ -7,6 +7,16 @@ "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." }, + "cleanExif": "Очищать EXIF", + "@cleanExif": { + "type": "String", + "placeholders": {} + }, + "cleanExifDescription": "Удалять метаданные EXIF (модель камеры, геолокация, время) из изображений еред отправкой.", + "@cleanExifDescription": { + "type": "String", + "placeholders": {} + }, "repeatPassword": "Повторите пароль", "@repeatPassword": {}, "notAnImage": "Это не картинка.", @@ -2993,7 +3003,7 @@ } } }, - "sendReadReceipts": "Отправка отчётов о прочтении", + "sendReadReceipts": "Отправлять отчёты о прочтении", "@sendReadReceipts": {}, "sendTypingNotificationsDescription": "Другие участники чата будут видеть, когда Вы набираете новое сообщение.", "@sendTypingNotificationsDescription": {}, diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index 87e24a6..8704c22 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -13,6 +13,7 @@ abstract class AppConfig { static bool displayNavigationRail = true; static bool enableGradient = true; + static bool cleanExif = true; static String get defaultHomeserver => _defaultHomeserver; static double fontSizeFactor = 1; diff --git a/lib/config/setting_keys.dart b/lib/config/setting_keys.dart index a45036b..1ee36b5 100644 --- a/lib/config/setting_keys.dart +++ b/lib/config/setting_keys.dart @@ -1,6 +1,7 @@ import 'package:shared_preferences/shared_preferences.dart'; abstract class SettingKeys { + static const String cleanExif = 'xyz.extera.next.cleanExif'; static const String displayNavigationRail = 'chat.fluffy.displayNavigationRail'; static const String hideAvatarsInInvites = 'xyz.extera.next.hideAvatarsInInvites'; static const String pureBlack = 'xyz.extera.next.pureBlack'; diff --git a/lib/generated/l10n/l10n.dart b/lib/generated/l10n/l10n.dart index 3319e51..177afcf 100644 --- a/lib/generated/l10n/l10n.dart +++ b/lib/generated/l10n/l10n.dart @@ -205,6 +205,18 @@ abstract class L10n { /// **'false'** String get alwaysUse24HourFormat; + /// No description provided for @cleanExif. + /// + /// In en, this message translates to: + /// **'Clean EXIF metadata'** + String get cleanExif; + + /// No description provided for @cleanExifDescription. + /// + /// In en, this message translates to: + /// **'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'** + String get cleanExifDescription; + /// No description provided for @repeatPassword. /// /// In en, this message translates to: diff --git a/lib/generated/l10n/l10n_ar.dart b/lib/generated/l10n/l10n_ar.dart index 11d38ac..7d24b3f 100644 --- a/lib/generated/l10n/l10n_ar.dart +++ b/lib/generated/l10n/l10n_ar.dart @@ -14,6 +14,13 @@ class L10nAr extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'كرّر كلمة السر'; diff --git a/lib/generated/l10n/l10n_be.dart b/lib/generated/l10n/l10n_be.dart index dde88ff..e21f337 100644 --- a/lib/generated/l10n/l10n_be.dart +++ b/lib/generated/l10n/l10n_be.dart @@ -14,6 +14,13 @@ class L10nBe extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repeat password'; diff --git a/lib/generated/l10n/l10n_bn.dart b/lib/generated/l10n/l10n_bn.dart index 50e94d0..5e23af8 100644 --- a/lib/generated/l10n/l10n_bn.dart +++ b/lib/generated/l10n/l10n_bn.dart @@ -14,6 +14,13 @@ class L10nBn extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repeat password'; diff --git a/lib/generated/l10n/l10n_bo.dart b/lib/generated/l10n/l10n_bo.dart index 1c82c0d..02f7c7f 100644 --- a/lib/generated/l10n/l10n_bo.dart +++ b/lib/generated/l10n/l10n_bo.dart @@ -14,6 +14,13 @@ class L10nBo extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repeat password'; diff --git a/lib/generated/l10n/l10n_ca.dart b/lib/generated/l10n/l10n_ca.dart index f4935d7..05a1467 100644 --- a/lib/generated/l10n/l10n_ca.dart +++ b/lib/generated/l10n/l10n_ca.dart @@ -14,6 +14,13 @@ class L10nCa extends L10n { @override String get alwaysUse24HourFormat => 'true'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repetiu la contrasenya'; diff --git a/lib/generated/l10n/l10n_cs.dart b/lib/generated/l10n/l10n_cs.dart index 86aa967..1ea1f9f 100644 --- a/lib/generated/l10n/l10n_cs.dart +++ b/lib/generated/l10n/l10n_cs.dart @@ -14,6 +14,13 @@ class L10nCs extends L10n { @override String get alwaysUse24HourFormat => 'Vypnuto'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Zopakujte heslo'; diff --git a/lib/generated/l10n/l10n_de.dart b/lib/generated/l10n/l10n_de.dart index 6540fa8..b6223f0 100644 --- a/lib/generated/l10n/l10n_de.dart +++ b/lib/generated/l10n/l10n_de.dart @@ -14,6 +14,13 @@ class L10nDe extends L10n { @override String get alwaysUse24HourFormat => 'true'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Passwort wiederholen'; diff --git a/lib/generated/l10n/l10n_el.dart b/lib/generated/l10n/l10n_el.dart index a3da084..95eb3bb 100644 --- a/lib/generated/l10n/l10n_el.dart +++ b/lib/generated/l10n/l10n_el.dart @@ -14,6 +14,13 @@ class L10nEl extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Επανάληψη κωδικού πρόσβασης'; diff --git a/lib/generated/l10n/l10n_en.dart b/lib/generated/l10n/l10n_en.dart index 538137b..cf2149e 100644 --- a/lib/generated/l10n/l10n_en.dart +++ b/lib/generated/l10n/l10n_en.dart @@ -14,6 +14,13 @@ class L10nEn extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repeat password'; diff --git a/lib/generated/l10n/l10n_eo.dart b/lib/generated/l10n/l10n_eo.dart index 00ea3b8..bb863ae 100644 --- a/lib/generated/l10n/l10n_eo.dart +++ b/lib/generated/l10n/l10n_eo.dart @@ -14,6 +14,13 @@ class L10nEo extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repeat password'; diff --git a/lib/generated/l10n/l10n_es.dart b/lib/generated/l10n/l10n_es.dart index 2a1e41d..7b57496 100644 --- a/lib/generated/l10n/l10n_es.dart +++ b/lib/generated/l10n/l10n_es.dart @@ -14,6 +14,13 @@ class L10nEs extends L10n { @override String get alwaysUse24HourFormat => 'falso'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repite la contraseña'; diff --git a/lib/generated/l10n/l10n_et.dart b/lib/generated/l10n/l10n_et.dart index d9fe722..6933dc2 100644 --- a/lib/generated/l10n/l10n_et.dart +++ b/lib/generated/l10n/l10n_et.dart @@ -14,6 +14,13 @@ class L10nEt extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Korda salasõna'; diff --git a/lib/generated/l10n/l10n_eu.dart b/lib/generated/l10n/l10n_eu.dart index d90f5e3..406530e 100644 --- a/lib/generated/l10n/l10n_eu.dart +++ b/lib/generated/l10n/l10n_eu.dart @@ -14,6 +14,13 @@ class L10nEu extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Idatzi berriro pasahitza'; diff --git a/lib/generated/l10n/l10n_fa.dart b/lib/generated/l10n/l10n_fa.dart index 3b714b8..8b104a6 100644 --- a/lib/generated/l10n/l10n_fa.dart +++ b/lib/generated/l10n/l10n_fa.dart @@ -14,6 +14,13 @@ class L10nFa extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'تکرار رمزعبور'; diff --git a/lib/generated/l10n/l10n_fi.dart b/lib/generated/l10n/l10n_fi.dart index c9653f0..7c6e930 100644 --- a/lib/generated/l10n/l10n_fi.dart +++ b/lib/generated/l10n/l10n_fi.dart @@ -14,6 +14,13 @@ class L10nFi extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Salasana uudelleen'; diff --git a/lib/generated/l10n/l10n_fil.dart b/lib/generated/l10n/l10n_fil.dart index e1368a5..4964f98 100644 --- a/lib/generated/l10n/l10n_fil.dart +++ b/lib/generated/l10n/l10n_fil.dart @@ -14,6 +14,13 @@ class L10nFil extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Ulitin ang password'; diff --git a/lib/generated/l10n/l10n_fr.dart b/lib/generated/l10n/l10n_fr.dart index 47f596c..c79483f 100644 --- a/lib/generated/l10n/l10n_fr.dart +++ b/lib/generated/l10n/l10n_fr.dart @@ -14,6 +14,13 @@ class L10nFr extends L10n { @override String get alwaysUse24HourFormat => 'true'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Répétez le mot de passe'; diff --git a/lib/generated/l10n/l10n_ga.dart b/lib/generated/l10n/l10n_ga.dart index 5320ce8..5bb6f92 100644 --- a/lib/generated/l10n/l10n_ga.dart +++ b/lib/generated/l10n/l10n_ga.dart @@ -14,6 +14,13 @@ class L10nGa extends L10n { @override String get alwaysUse24HourFormat => 'bréagach'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Scríobh an pasfhocal arís'; diff --git a/lib/generated/l10n/l10n_gl.dart b/lib/generated/l10n/l10n_gl.dart index 471ee75..3b68412 100644 --- a/lib/generated/l10n/l10n_gl.dart +++ b/lib/generated/l10n/l10n_gl.dart @@ -14,6 +14,13 @@ class L10nGl extends L10n { @override String get alwaysUse24HourFormat => 'falso'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repite o contrasinal'; diff --git a/lib/generated/l10n/l10n_he.dart b/lib/generated/l10n/l10n_he.dart index a6b4b62..82de3e2 100644 --- a/lib/generated/l10n/l10n_he.dart +++ b/lib/generated/l10n/l10n_he.dart @@ -14,6 +14,13 @@ class L10nHe extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'כתוב שוב את הסיסמה'; diff --git a/lib/generated/l10n/l10n_hi.dart b/lib/generated/l10n/l10n_hi.dart index be12ea0..e03e332 100644 --- a/lib/generated/l10n/l10n_hi.dart +++ b/lib/generated/l10n/l10n_hi.dart @@ -14,6 +14,13 @@ class L10nHi extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'पासवर्ड दोहराएं'; diff --git a/lib/generated/l10n/l10n_hr.dart b/lib/generated/l10n/l10n_hr.dart index 054e32f..e8fdae4 100644 --- a/lib/generated/l10n/l10n_hr.dart +++ b/lib/generated/l10n/l10n_hr.dart @@ -14,6 +14,13 @@ class L10nHr extends L10n { @override String get alwaysUse24HourFormat => 'true'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Ponovi lozinku'; diff --git a/lib/generated/l10n/l10n_hu.dart b/lib/generated/l10n/l10n_hu.dart index bc2505c..567d2e3 100644 --- a/lib/generated/l10n/l10n_hu.dart +++ b/lib/generated/l10n/l10n_hu.dart @@ -14,6 +14,13 @@ class L10nHu extends L10n { @override String get alwaysUse24HourFormat => 'true'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Jelszó megismétlése'; diff --git a/lib/generated/l10n/l10n_ia.dart b/lib/generated/l10n/l10n_ia.dart index f0d54c8..821f1c8 100644 --- a/lib/generated/l10n/l10n_ia.dart +++ b/lib/generated/l10n/l10n_ia.dart @@ -14,6 +14,13 @@ class L10nIa extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repeter le contrasigno'; diff --git a/lib/generated/l10n/l10n_id.dart b/lib/generated/l10n/l10n_id.dart index d3ea89c..8114e83 100644 --- a/lib/generated/l10n/l10n_id.dart +++ b/lib/generated/l10n/l10n_id.dart @@ -14,6 +14,13 @@ class L10nId extends L10n { @override String get alwaysUse24HourFormat => 'tidak'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Ulangi kata sandi'; diff --git a/lib/generated/l10n/l10n_ie.dart b/lib/generated/l10n/l10n_ie.dart index 6221d42..ac81d87 100644 --- a/lib/generated/l10n/l10n_ie.dart +++ b/lib/generated/l10n/l10n_ie.dart @@ -14,6 +14,13 @@ class L10nIe extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repetir li contrasigne'; diff --git a/lib/generated/l10n/l10n_it.dart b/lib/generated/l10n/l10n_it.dart index 187eb60..f0f87b2 100644 --- a/lib/generated/l10n/l10n_it.dart +++ b/lib/generated/l10n/l10n_it.dart @@ -14,6 +14,13 @@ class L10nIt extends L10n { @override String get alwaysUse24HourFormat => 'disattivato'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Ripeti password'; diff --git a/lib/generated/l10n/l10n_ja.dart b/lib/generated/l10n/l10n_ja.dart index d1e10da..b88e20e 100644 --- a/lib/generated/l10n/l10n_ja.dart +++ b/lib/generated/l10n/l10n_ja.dart @@ -14,6 +14,13 @@ class L10nJa extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'パスワードを繰り返そ'; diff --git a/lib/generated/l10n/l10n_ka.dart b/lib/generated/l10n/l10n_ka.dart index 9a7faf7..5468e69 100644 --- a/lib/generated/l10n/l10n_ka.dart +++ b/lib/generated/l10n/l10n_ka.dart @@ -14,6 +14,13 @@ class L10nKa extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'გაიმეორეთ პაროლი'; diff --git a/lib/generated/l10n/l10n_ko.dart b/lib/generated/l10n/l10n_ko.dart index e0690fb..395e99a 100644 --- a/lib/generated/l10n/l10n_ko.dart +++ b/lib/generated/l10n/l10n_ko.dart @@ -14,6 +14,13 @@ class L10nKo extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => '비밀번호 다시 입력'; diff --git a/lib/generated/l10n/l10n_lt.dart b/lib/generated/l10n/l10n_lt.dart index 068122a..92a774c 100644 --- a/lib/generated/l10n/l10n_lt.dart +++ b/lib/generated/l10n/l10n_lt.dart @@ -14,6 +14,13 @@ class L10nLt extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Pakartokite slaptažodį'; diff --git a/lib/generated/l10n/l10n_lv.dart b/lib/generated/l10n/l10n_lv.dart index 4441882..ba09a05 100644 --- a/lib/generated/l10n/l10n_lv.dart +++ b/lib/generated/l10n/l10n_lv.dart @@ -14,6 +14,13 @@ class L10nLv extends L10n { @override String get alwaysUse24HourFormat => 'nē'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Atkārtot paroli'; diff --git a/lib/generated/l10n/l10n_nb.dart b/lib/generated/l10n/l10n_nb.dart index df35e31..9ec5fc8 100644 --- a/lib/generated/l10n/l10n_nb.dart +++ b/lib/generated/l10n/l10n_nb.dart @@ -14,6 +14,13 @@ class L10nNb extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Gjenta passord'; diff --git a/lib/generated/l10n/l10n_nl.dart b/lib/generated/l10n/l10n_nl.dart index ccccb49..0a5dd1e 100644 --- a/lib/generated/l10n/l10n_nl.dart +++ b/lib/generated/l10n/l10n_nl.dart @@ -14,6 +14,13 @@ class L10nNl extends L10n { @override String get alwaysUse24HourFormat => 'true'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Wachtwoord herhalen'; diff --git a/lib/generated/l10n/l10n_pl.dart b/lib/generated/l10n/l10n_pl.dart index 0db8bdb..24fb716 100644 --- a/lib/generated/l10n/l10n_pl.dart +++ b/lib/generated/l10n/l10n_pl.dart @@ -14,6 +14,13 @@ class L10nPl extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Powtórz hasło'; diff --git a/lib/generated/l10n/l10n_pt.dart b/lib/generated/l10n/l10n_pt.dart index b4d3e77..9b0eb9d 100644 --- a/lib/generated/l10n/l10n_pt.dart +++ b/lib/generated/l10n/l10n_pt.dart @@ -14,6 +14,13 @@ class L10nPt extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repeat password'; diff --git a/lib/generated/l10n/l10n_ro.dart b/lib/generated/l10n/l10n_ro.dart index 5d4045e..5e0c83b 100644 --- a/lib/generated/l10n/l10n_ro.dart +++ b/lib/generated/l10n/l10n_ro.dart @@ -14,6 +14,13 @@ class L10nRo extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repetați parola'; diff --git a/lib/generated/l10n/l10n_ru.dart b/lib/generated/l10n/l10n_ru.dart index e5154c3..4828b09 100644 --- a/lib/generated/l10n/l10n_ru.dart +++ b/lib/generated/l10n/l10n_ru.dart @@ -14,6 +14,13 @@ class L10nRu extends L10n { @override String get alwaysUse24HourFormat => 'нет'; + @override + String get cleanExif => 'Очищать EXIF'; + + @override + String get cleanExifDescription => + 'Удалять метаданные EXIF (модель камеры, геолокация, время) из изображений еред отправкой.'; + @override String get repeatPassword => 'Повторите пароль'; @@ -2251,7 +2258,7 @@ class L10nRu extends L10n { } @override - String get sendReadReceipts => 'Отправка отчётов о прочтении'; + String get sendReadReceipts => 'Отправлять отчёты о прочтении'; @override String get sendTypingNotificationsDescription => diff --git a/lib/generated/l10n/l10n_sk.dart b/lib/generated/l10n/l10n_sk.dart index 2a4a4f4..0143e57 100644 --- a/lib/generated/l10n/l10n_sk.dart +++ b/lib/generated/l10n/l10n_sk.dart @@ -14,6 +14,13 @@ class L10nSk extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Zopakujte heslo'; diff --git a/lib/generated/l10n/l10n_sl.dart b/lib/generated/l10n/l10n_sl.dart index d37a53a..e6a92e4 100644 --- a/lib/generated/l10n/l10n_sl.dart +++ b/lib/generated/l10n/l10n_sl.dart @@ -14,6 +14,13 @@ class L10nSl extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Ponovite geslo'; diff --git a/lib/generated/l10n/l10n_sr.dart b/lib/generated/l10n/l10n_sr.dart index b1bc7c2..89c7258 100644 --- a/lib/generated/l10n/l10n_sr.dart +++ b/lib/generated/l10n/l10n_sr.dart @@ -14,6 +14,13 @@ class L10nSr extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Repeat password'; diff --git a/lib/generated/l10n/l10n_sv.dart b/lib/generated/l10n/l10n_sv.dart index 6791f5e..2b57a2c 100644 --- a/lib/generated/l10n/l10n_sv.dart +++ b/lib/generated/l10n/l10n_sv.dart @@ -14,6 +14,13 @@ class L10nSv extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Upprepa lösenord'; diff --git a/lib/generated/l10n/l10n_ta.dart b/lib/generated/l10n/l10n_ta.dart index 593d7ce..1ea0a40 100644 --- a/lib/generated/l10n/l10n_ta.dart +++ b/lib/generated/l10n/l10n_ta.dart @@ -14,6 +14,13 @@ class L10nTa extends L10n { @override String get alwaysUse24HourFormat => 'தவறு'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'கடவுச்சொல்லை மீண்டும் செய்யவும்'; diff --git a/lib/generated/l10n/l10n_te.dart b/lib/generated/l10n/l10n_te.dart index fc230b8..b43e78d 100644 --- a/lib/generated/l10n/l10n_te.dart +++ b/lib/generated/l10n/l10n_te.dart @@ -14,6 +14,13 @@ class L10nTe extends L10n { @override String get alwaysUse24HourFormat => 'తప్పుడు'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'పాస్‌వర్డ్‌ను పునరావృతం చేయండి'; diff --git a/lib/generated/l10n/l10n_th.dart b/lib/generated/l10n/l10n_th.dart index 4cd734d..f0b05d9 100644 --- a/lib/generated/l10n/l10n_th.dart +++ b/lib/generated/l10n/l10n_th.dart @@ -14,6 +14,13 @@ class L10nTh extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'ใส่รหัสผ่านอีกรอบ'; diff --git a/lib/generated/l10n/l10n_tr.dart b/lib/generated/l10n/l10n_tr.dart index a406099..00edb2b 100644 --- a/lib/generated/l10n/l10n_tr.dart +++ b/lib/generated/l10n/l10n_tr.dart @@ -14,6 +14,13 @@ class L10nTr extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Parolayı tekrarlayın'; diff --git a/lib/generated/l10n/l10n_uk.dart b/lib/generated/l10n/l10n_uk.dart index aa676b0..121ba06 100644 --- a/lib/generated/l10n/l10n_uk.dart +++ b/lib/generated/l10n/l10n_uk.dart @@ -14,6 +14,13 @@ class L10nUk extends L10n { @override String get alwaysUse24HourFormat => 'ні'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Повторіть пароль'; diff --git a/lib/generated/l10n/l10n_vi.dart b/lib/generated/l10n/l10n_vi.dart index f32bd98..c42c805 100644 --- a/lib/generated/l10n/l10n_vi.dart +++ b/lib/generated/l10n/l10n_vi.dart @@ -14,6 +14,13 @@ class L10nVi extends L10n { @override String get alwaysUse24HourFormat => 'Không'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => 'Nhập lại mật khẩu'; diff --git a/lib/generated/l10n/l10n_zh.dart b/lib/generated/l10n/l10n_zh.dart index 62c8c90..f7bf045 100644 --- a/lib/generated/l10n/l10n_zh.dart +++ b/lib/generated/l10n/l10n_zh.dart @@ -14,6 +14,13 @@ class L10nZh extends L10n { @override String get alwaysUse24HourFormat => 'false'; + @override + String get cleanExif => 'Clean EXIF metadata'; + + @override + String get cleanExifDescription => + 'Remove EXIF metadata (camera model, geolocation, time) when sending a photo.'; + @override String get repeatPassword => '重复输入密码'; diff --git a/lib/pages/chat/send_file_dialog.dart b/lib/pages/chat/send_file_dialog.dart index 49a81f5..193f3a1 100644 --- a/lib/pages/chat/send_file_dialog.dart +++ b/lib/pages/chat/send_file_dialog.dart @@ -1,3 +1,6 @@ +import 'dart:typed_data'; + +import 'package:extera_next/utils/clean_exif.dart'; import 'package:extera_next/widgets/matrix.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -50,9 +53,6 @@ class SendFileDialogState extends State { final l10n = L10n.of(context); try { - if (!widget.room.otherPartyCanReceiveMessages) { - throw OtherPartyCanNotReceiveMessages(); - } scaffoldMessenger.showLoadingSnackBar(l10n.prepareSendingAttachment); Navigator.of(context, rootNavigator: false).pop(); final clientConfig = await widget.room.client.getConfig(); @@ -74,10 +74,24 @@ class SendFileDialogState extends State { file = await xfile.resizeVideo(); scaffoldMessenger.showLoadingSnackBar(l10n.generatingVideoThumbnail); thumbnail = await xfile.getVideoThumbnail(); + } else if (mimeType != null && + mimeType.startsWith('image') && + AppConfig.cleanExif) { + if (length > maxUploadSize) { + throw FileTooBigMatrixException(length, maxUploadSize); + } + + // Else we just create a MatrixFile + file = MatrixFile( + bytes: Uint8List.fromList(ExifCleaner.removeExifData(await xfile.readAsBytes())), + name: xfile.name, + mimeType: mimeType, + ).detectFileType; } else { if (length > maxUploadSize) { throw FileTooBigMatrixException(length, maxUploadSize); } + // Else we just create a MatrixFile file = MatrixFile( bytes: await xfile.readAsBytes(), @@ -108,11 +122,13 @@ class SendFileDialogState extends State { extraContent['body'] = label; final html = markdown( label, - getEmotePacks: () => widget.room.getImagePacksFlat(ImagePackUsage.emoticon), + getEmotePacks: () => + widget.room.getImagePacksFlat(ImagePackUsage.emoticon), getMention: widget.room.getMention, - convertLinebreaks: Matrix.of(context).client.convertLinebreaksInFormatting, + convertLinebreaks: + Matrix.of(context).client.convertLinebreaksInFormatting, ); - + // if the decoded html is the same as the body, there is no need in sending a formatted message if (HtmlUnescape() .convert(html.replaceAll(RegExp(r'
\n?'), '\n')) != @@ -319,43 +335,43 @@ class SendFileDialogState extends State { // ), // ), // if (uniqueFileType != 'image') - Padding( - padding: const EdgeInsets.only(bottom: 16.0), - child: Row( - children: [ - Icon( - uniqueFileType == null - ? Icons.description_outlined - : uniqueFileType == 'video' - ? Icons.video_file_outlined - : uniqueFileType == 'audio' - ? Icons.audio_file_outlined - : Icons.description_outlined, - size: 32, + Padding( + padding: const EdgeInsets.only(bottom: 16.0), + child: Row( + children: [ + Icon( + uniqueFileType == null + ? Icons.description_outlined + : uniqueFileType == 'video' + ? Icons.video_file_outlined + : uniqueFileType == 'audio' + ? Icons.audio_file_outlined + : Icons.description_outlined, + size: 32, + ), + const SizedBox(width: 8), + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + fileName, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + Text( + '$sizeString - $fileTypes', + style: theme.textTheme.labelSmall, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ], ), - const SizedBox(width: 8), - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - fileName, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - Text( - '$sizeString - $fileTypes', - style: theme.textTheme.labelSmall, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ], - ), - ), - ], - ), + ), + ], ), + ), if (widget.files.length == 1) Padding( padding: const EdgeInsets.only(bottom: 8.0), diff --git a/lib/pages/download_manager/download_manager_view.dart b/lib/pages/download_manager/download_manager_view.dart index 019433f..e25cbf8 100644 --- a/lib/pages/download_manager/download_manager_view.dart +++ b/lib/pages/download_manager/download_manager_view.dart @@ -43,7 +43,7 @@ class DownloadManagerView extends StatelessWidget { ), title: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 256), - child: const Center(child: Text("Downloads", textAlign: TextAlign.center)), + child: Center(child: Text(L10n.of(context).downloads, textAlign: TextAlign.center)), ), ); } diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index ff072da..b69e306 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -48,7 +48,11 @@ class SettingsController extends State { final matrix = Matrix.of(context); final success = await showFutureLoadingDialog( context: context, - future: () => matrix.client.setDisplayName(matrix.client.userID!, input), + future: () => matrix.client.setProfileField( + matrix.client.userID!, + 'displayname', + { 'displayname': input } + ), ); if (success.error == null) { updateProfile(); diff --git a/lib/pages/settings_security/settings_security_view.dart b/lib/pages/settings_security/settings_security_view.dart index 43afb7f..0150d36 100644 --- a/lib/pages/settings_security/settings_security_view.dart +++ b/lib/pages/settings_security/settings_security_view.dart @@ -76,6 +76,14 @@ class SettingsSecurityView extends StatelessWidget { ), ), ), + SettingsSwitchListTile.adaptive( + title: L10n.of(context).cleanExif, + subtitle: + L10n.of(context).cleanExifDescription, + onChanged: (b) => AppConfig.cleanExif = b, + storeKey: SettingKeys.cleanExif, + defaultValue: AppConfig.cleanExif, + ), SettingsSwitchListTile.adaptive( title: L10n.of(context).sendTypingNotifications, subtitle: diff --git a/lib/utils/clean_exif.dart b/lib/utils/clean_exif.dart new file mode 100644 index 0000000..e7818b4 --- /dev/null +++ b/lib/utils/clean_exif.dart @@ -0,0 +1,135 @@ +import 'dart:typed_data'; +import 'package:image/image.dart'; + +class ExifCleaner { + static List removeExifData(List imageBytes) { + // Decode the image (this strips EXIF data) + final Image? image = decodeImage(Uint8List.fromList(imageBytes)); + + if (image == null) { + throw Exception('Failed to decode image'); + } + + // Encode back to bytes without EXIF based on detected format + List cleanedBytes; + + image.exif.clear(); + + if (_isJpeg(imageBytes)) { + cleanedBytes = encodeJpg(image); + } else if (_isPng(imageBytes)) { + cleanedBytes = encodePng(image); + } else if (_isGif(imageBytes)) { + cleanedBytes = encodeGif(image); + } else if (_isBmp(imageBytes)) { + cleanedBytes = encodeBmp(image); + } else if (_isTiff(imageBytes)) { + // TIFF doesn't have a direct encoder in image package, convert to PNG + cleanedBytes = encodeTiff(image); + } else if (_isHeic(imageBytes)) { + // HEIC format - convert to JPEG since image package doesn't have HEIC encoder + cleanedBytes = encodeJpg(image); + } else { + // Default fallback - try to encode as PNG, then JPEG + try { + cleanedBytes = encodePng(image); + } catch (e) { + cleanedBytes = encodeJpg(image); + } + } + + return cleanedBytes; + } + + static bool _isJpeg(List bytes) { + return bytes.length >= 2 && bytes[0] == 0xFF && bytes[1] == 0xD8; + } + + static bool _isPng(List bytes) { + return bytes.length >= 8 && + bytes[0] == 0x89 && + bytes[1] == 0x50 && + bytes[2] == 0x4E && + bytes[3] == 0x47; + } + + static bool _isGif(List bytes) { + return bytes.length >= 6 && + bytes[0] == 0x47 && // G + bytes[1] == 0x49 && // I + bytes[2] == 0x46 && // F + bytes[3] == 0x38 && // 8 + (bytes[4] == 0x37 || bytes[4] == 0x39) && // 7 or 9 + bytes[5] == 0x61; // a + } + + static bool _isBmp(List bytes) { + return bytes.length >= 2 && + bytes[0] == 0x42 && // B + bytes[1] == 0x4D; // M + } + + static bool _isTiff(List bytes) { + return bytes.length >= 4 && + ((bytes[0] == 0x49 && bytes[1] == 0x49 && bytes[2] == 0x2A && bytes[3] == 0x00) || // Little Endian + (bytes[0] == 0x4D && bytes[1] == 0x4D && bytes[2] == 0x00 && bytes[3] == 0x2A)); // Big Endian + } + + static bool _isWebP(List bytes) { + return bytes.length >= 12 && + bytes[0] == 0x52 && // R + bytes[1] == 0x49 && // I + bytes[2] == 0x46 && // F + bytes[3] == 0x46 && // F + bytes[8] == 0x57 && // W + bytes[9] == 0x45 && // E + bytes[10] == 0x42 && // B + bytes[11] == 0x50; // P + } + + static bool _isHeic(List bytes) { + // HEIC files start with 'ftyp' at position 4 + if (bytes.length < 12) return false; + + // Check for 'ftyp' at position 4 + bool hasFtyp = bytes[4] == 0x66 && // f + bytes[5] == 0x74 && // t + bytes[6] == 0x79 && // y + bytes[7] == 0x70; // p + + if (!hasFtyp) return false; + + // Check for HEIC brand variants + List> heicBrands = [ + [0x68, 0x65, 0x69, 0x63], // heic + [0x68, 0x65, 0x69, 0x78], // heix + [0x68, 0x65, 0x76, 0x63], // hevc + [0x68, 0x65, 0x76, 0x78], // hevx + [0x6D, 0x69, 0x66, 0x31], // mif1 + [0x6D, 0x73, 0x66, 0x31], // msf1 + ]; + + for (var brand in heicBrands) { + if (bytes[8] == brand[0] && + bytes[9] == brand[1] && + bytes[10] == brand[2] && + bytes[11] == brand[3]) { + return true; + } + } + + return false; + } + + // Utility method to get image format name + static String getImageFormat(List bytes) { + if (_isJpeg(bytes)) return 'JPEG'; + if (_isPng(bytes)) return 'PNG'; + if (_isGif(bytes)) return 'GIF'; + if (_isBmp(bytes)) return 'BMP'; + if (_isTiff(bytes)) return 'TIFF'; + if (_isWebP(bytes)) return 'WebP'; + if (_isHeic(bytes)) return 'HEIC'; + return 'Unknown'; + } +} \ No newline at end of file diff --git a/lib/utils/matrix_sdk_extensions/matrix_locals.dart b/lib/utils/matrix_sdk_extensions/matrix_locals.dart index df92022..d57274d 100644 --- a/lib/utils/matrix_sdk_extensions/matrix_locals.dart +++ b/lib/utils/matrix_sdk_extensions/matrix_locals.dart @@ -146,6 +146,9 @@ class MatrixLocals extends MatrixLocalizations { return l10n.groupWith(displayname); } + @override + String get refreshingLastEvent => l10n.loadingPleaseWait; + @override String get guestsAreForbidden => l10n.guestsAreForbidden; diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 8b16878..016f51c 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -23,7 +23,7 @@ import just_audio import package_info_plus import pasteboard import path_provider_foundation -import record_darwin +import record_macos import share_plus import shared_preferences_foundation import sqflite_darwin @@ -53,7 +53,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PasteboardPlugin.register(with: registry.registrar(forPlugin: "PasteboardPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) - RecordPlugin.register(with: registry.registrar(forPlugin: "RecordPlugin")) + RecordMacOsPlugin.register(with: registry.registrar(forPlugin: "RecordMacOsPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) diff --git a/pubspec.lock b/pubspec.lock index 96b9f95..873cac5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: "direct main" description: name: app_links - sha256: "85ed8fc1d25a76475914fff28cc994653bd900bc2c26e4b57a49e097febb54ba" + sha256: "5f88447519add627fe1cbcab4fd1da3d4fed15b9baf29f28b22535c95ecee3e8" url: "https://pub.dev" source: hosted - version: "6.4.0" + version: "6.4.1" app_links_linux: dependency: transitive description: @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: build_cli_annotations - sha256: b59d2769769efd6c9ff6d4c4cede0be115a566afc591705c2040b707534b1172 + sha256: e563c2e01de8974566a1998410d3f6f03521788160a02503b0b1f1a46c7b3d95 url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" canonical_json: dependency: transitive description: @@ -181,10 +181,10 @@ packages: dependency: "direct main" description: name: chewie - sha256: "4d9554a8f87cc2dc6575dfd5ad20a4375015a29edd567fd6733febe6365e2566" + sha256: "44bcfc5f0dfd1de290c87c9d86a61308b3282a70b63435d5557cfd60f54a69ca" url: "https://pub.dev" source: hosted - version: "1.11.3" + version: "1.13.0" cli_config: dependency: transitive description: @@ -245,10 +245,10 @@ packages: dependency: transitive description: name: coverage - sha256: aa07dbe5f2294c827b7edb9a87bba44a9c15a3cc81bc8da2ca19b37322d30080 + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" url: "https://pub.dev" source: hosted - version: "1.14.1" + version: "1.15.0" cross_file: dependency: "direct main" description: @@ -285,10 +285,10 @@ packages: dependency: transitive description: name: dart_webrtc - sha256: "5b76fd85ac95d6f5dee3e7d7de8d4b51bfbec1dc73804647c6aebb52d6297116" + sha256: "51bcda4ba5d7dd9e65a309244ce3ac0b58025e6e1f6d7442cee4cd02134ef65f" url: "https://pub.dev" source: hosted - version: "1.5.3+hotfix.2" + version: "1.6.0" dbus: dependency: transitive description: @@ -325,10 +325,10 @@ packages: dependency: transitive description: name: device_info_plus_platform_interface - sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2" + sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "7.0.3" dio: dependency: "direct main" description: @@ -369,14 +369,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.9" - enhanced_enum: - dependency: transitive - description: - name: enhanced_enum - sha256: "074c5a8b9664799ca91e1e8b68003b8694cb19998671cbafd9c7779c13fcdecf" - url: "https://pub.dev" - source: hosted - version: "0.2.4" fake_async: dependency: transitive description: @@ -405,34 +397,34 @@ packages: dependency: "direct main" description: name: file_picker - sha256: "13ba4e627ef24503a465d1d61b32596ce10eb6b8903678d362a528f9939b4aa8" + sha256: f2d9f173c2c14635cc0e9b14c143c49ef30b4934e8d1d274d6206fcb0086a06f url: "https://pub.dev" source: hosted - version: "10.2.1" + version: "10.3.3" file_selector: dependency: "direct main" description: name: file_selector - sha256: "5019692b593455127794d5718304ff1ae15447dea286cdda9f0db2a796a1b828" + sha256: "5f1d15a7f17115038f433d1b0ea57513cc9e29a9d5338d166cb0bef3fa90a7a0" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" file_selector_android: dependency: transitive description: name: file_selector_android - sha256: "6bba3d590ee9462758879741abc132a19133600dd31832f55627442f1ebd7b54" + sha256: "1ce58b609289551f8ec07265476720e77d19764339cc1d8e4df3c4d34dac6499" url: "https://pub.dev" source: hosted - version: "0.5.1+14" + version: "0.5.1+17" file_selector_ios: dependency: transitive description: name: file_selector_ios - sha256: "94b98ad950b8d40d96fee8fa88640c2e4bd8afcdd4817993bd04e20310f45420" + sha256: fe9f52123af16bba4ad65bd7e03defbbb4b172a38a8e6aaa2a869a0c56a5f5fb url: "https://pub.dev" source: hosted - version: "0.5.3+1" + version: "0.5.3+2" file_selector_linux: dependency: transitive description: @@ -445,10 +437,10 @@ packages: dependency: transitive description: name: file_selector_macos - sha256: "8c9250b2bd2d8d4268e39c82543bacbaca0fda7d29e0728c3c4bbb7c820fd711" + sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c" url: "https://pub.dev" source: hosted - version: "0.9.4+3" + version: "0.9.4+4" file_selector_platform_interface: dependency: transitive description: @@ -620,10 +612,10 @@ packages: dependency: "direct dev" description: name: flutter_native_splash - sha256: "7062602e0dbd29141fb8eb19220b5871ca650be5197ab9c1f193a28b17537bc7" + sha256: "8321a6d11a8d13977fa780c89de8d257cce3d841eecfb7a4cadffcc4f12d82dc" url: "https://pub.dev" source: hosted - version: "2.4.4" + version: "2.4.6" flutter_new_badger: dependency: "direct main" description: @@ -644,18 +636,18 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e + sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31 url: "https://pub.dev" source: hosted - version: "2.0.28" + version: "2.0.30" flutter_rust_bridge: dependency: "direct main" description: name: flutter_rust_bridge - sha256: b416ff56002789e636244fb4cc449f587656eff995e5a7169457eb0593fcaddb + sha256: "37ef40bc6f863652e865f0b2563ea07f0d3c58d8efad803cc01933a4b2ee067e" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.1" flutter_secure_storage: dependency: "direct main" description: @@ -730,10 +722,10 @@ packages: dependency: "direct main" description: name: flutter_vodozemac - sha256: "2405ca121b84d1cd83200a14021022e1691b123a23bcefc36adc7740cefbc1f9" + sha256: "54cd3790b6dfdc1afce928f8c46f7eeea9e4f8326f077400894935926f202057" url: "https://pub.dev" source: hosted - version: "0.2.2" + version: "0.3.0" flutter_web_auth_2: dependency: "direct main" description: @@ -829,10 +821,10 @@ packages: dependency: transitive description: name: get_it - sha256: d85128a5dae4ea777324730dc65edd9c9f43155c109d5cc0a69cab74139fbac1 + sha256: a4292e7cf67193f8e7c1258203104eb2a51ec8b3a04baa14695f4064c144297b url: "https://pub.dev" source: hosted - version: "7.7.0" + version: "8.2.0" glob: dependency: transitive description: @@ -925,10 +917,10 @@ packages: dependency: "direct main" description: name: http - sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" + sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.0" http_multi_server: dependency: transitive description: @@ -957,66 +949,66 @@ packages: dependency: "direct main" description: name: image_picker - sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.2.0" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: "317a5d961cec5b34e777b9252393f2afbd23084aa6e60fcf601dcf6341b9ebeb" + sha256: "28f3987ca0ec702d346eae1d90eda59603a2101b52f1e234ded62cff1d5cfa6e" url: "https://pub.dev" source: hosted - version: "0.8.12+23" + version: "0.8.13+1" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6" url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.1.0" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: "05da758e67bc7839e886b3959848aa6b44ff123ab4b28f67891008afe8ef9100" + sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e url: "https://pub.dev" source: hosted - version: "0.8.12+2" + version: "0.8.13" image_picker_linux: dependency: transitive description: name: image_picker_linux - sha256: "34a65f6740df08bbbeb0a1abd8e6d32107941fd4868f67a507b25601651022c9" + sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" url: "https://pub.dev" source: hosted - version: "0.2.1+2" + version: "0.2.2" image_picker_macos: dependency: transitive description: name: image_picker_macos - sha256: "1b90ebbd9dcf98fb6c1d01427e49a55bd96b5d67b8c67cf955d60a5de74207c1" + sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04 url: "https://pub.dev" source: hosted - version: "0.2.1+2" + version: "0.2.2" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - sha256: "886d57f0be73c4b140004e78b9f28a8914a09e50c2d816bdd0520051a71236a0" + sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665" url: "https://pub.dev" source: hosted - version: "2.10.1" + version: "2.11.0" image_picker_windows: dependency: transitive description: name: image_picker_windows - sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae url: "https://pub.dev" source: hosted - version: "0.2.1+1" + version: "0.2.2" import_sorter: dependency: "direct dev" description: @@ -1074,10 +1066,10 @@ packages: dependency: transitive description: name: just_audio_platform_interface - sha256: "4cd94536af0219fa306205a58e78d67e02b0555283c1c094ee41e402a14a5c4a" + sha256: "2532c8d6702528824445921c5ff10548b518b13f808c2e34c2fd54793b999a6a" url: "https://pub.dev" source: hosted - version: "4.5.0" + version: "4.6.0" just_audio_web: dependency: transitive description: @@ -1154,10 +1146,10 @@ packages: dependency: transitive description: name: logger - sha256: be4b23575aac7ebf01f225a241eb7f6b5641eeaf43c6a8613510fc2f8cf187d1 + sha256: a7967e31b703831a893bbc3c3dd11db08126fe5f369b5c648a36f821979f5be3 url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.6.2" logging: dependency: transitive description: @@ -1203,7 +1195,7 @@ packages: description: path: "." ref: main - resolved-ref: "0817bb43f0e34e1f4961b1cfb76111ffcbe188df" + resolved-ref: "58c4cf19d010d9ae193e9df10bd1f8fdf02277b0" url: "https://git.extera.xyz/OfficialDakari/matrix-dart-sdk.git" source: git version: "2.0.1" @@ -1235,10 +1227,10 @@ packages: dependency: "direct dev" description: name: msix - sha256: edde648a8133bf301883c869d19d127049683037c65ff64173ba526ac7a8af2f + sha256: f88033fcb9e0dd8de5b18897cbebbd28ea30596810f4a7c86b12b0c03ace87e5 url: "https://pub.dev" source: hosted - version: "3.16.9" + version: "3.16.12" native_imaging: dependency: "direct main" description: @@ -1283,18 +1275,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" + sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968" url: "https://pub.dev" source: hosted - version: "8.3.0" + version: "8.3.1" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" + sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.2.1" pana: dependency: transitive description: @@ -1331,18 +1323,18 @@ packages: dependency: transitive description: name: path_provider_android - sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 + sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db" url: "https://pub.dev" source: hosted - version: "2.2.17" + version: "2.2.18" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" + sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" path_provider_linux: dependency: transitive description: @@ -1419,10 +1411,10 @@ packages: dependency: transitive description: name: petitparser - sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "7.0.1" platform: dependency: transitive description: @@ -1483,26 +1475,26 @@ packages: dependency: transitive description: name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" url: "https://pub.dev" source: hosted - version: "1.5.1" + version: "1.5.2" posix: dependency: transitive description: name: posix - sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 + sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "6.0.3" pretty_qr_code: dependency: "direct main" description: name: pretty_qr_code - sha256: b078bd5d51956dea4342378af1b092ad962b81bdbb55b10fffce03461da8db74 + sha256: "2291db3f68d70a3dcd46c6bd599f30991ae4c02f27f36215fbb3f4865a609259" url: "https://pub.dev" source: hosted - version: "3.4.0" + version: "3.5.0" process: dependency: transitive description: @@ -1523,10 +1515,10 @@ packages: dependency: "direct main" description: name: provider - sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" + sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" url: "https://pub.dev" source: hosted - version: "6.1.5" + version: "6.1.5+1" pub_semver: dependency: transitive description: @@ -1563,10 +1555,10 @@ packages: dependency: "direct main" description: name: qr_code_scanner_plus - sha256: "39696b50d277097ee4d90d4292de36f38c66213a4f5216a06b2bdd2b63117859" + sha256: a0f1ac8e13299b3db2646635f252fe2ec67222b848b24ed34d11052faf080bfa url: "https://pub.dev" source: hosted - version: "2.0.10+1" + version: "2.0.12" qr_image: dependency: "direct main" description: @@ -1595,58 +1587,66 @@ packages: dependency: "direct main" description: name: record - sha256: "2e3d56d196abcd69f1046339b75e5f3855b2406fc087e5991f6703f188aa03a6" + sha256: "6bad72fb3ea6708d724cf8b6c97c4e236cf9f43a52259b654efeb6fd9b737f1f" url: "https://pub.dev" source: hosted - version: "5.2.1" + version: "6.1.2" record_android: dependency: transitive description: name: record_android - sha256: "97d7122455f30de89a01c6c244c839085be6b12abca251fc0e78f67fed73628b" + sha256: f05677eeed074898327f890f232f9eb49cd99d1c20d0daaf22b5612f4b2301bb url: "https://pub.dev" source: hosted - version: "1.3.3" - record_darwin: + version: "1.4.3" + record_ios: dependency: transitive description: - name: record_darwin - sha256: e487eccb19d82a9a39cd0126945cfc47b9986e0df211734e2788c95e3f63c82c + name: record_ios + sha256: "765b42ac1be019b1674ddd809b811fc721fe5a93f7bb1da7803f0d16772fd6d7" url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.1.4" record_linux: dependency: transitive description: name: record_linux - sha256: "74d41a9ebb1eb498a38e9a813dd524e8f0b4fdd627270bda9756f437b110a3e3" + sha256: "235b1f1fb84e810f8149cc0c2c731d7d697f8d1c333b32cb820c449bf7bb72d8" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "1.2.1" + record_macos: + dependency: transitive + description: + name: record_macos + sha256: "842ea4b7e95f4dd237aacffc686d1b0ff4277e3e5357865f8d28cd28bc18ed95" + url: "https://pub.dev" + source: hosted + version: "1.1.2" record_platform_interface: dependency: transitive description: name: record_platform_interface - sha256: "8a575828733d4c3cb5983c914696f40db8667eab3538d4c41c50cbb79e722ef4" + sha256: b0065fdf1ec28f5a634d676724d388a77e43ce7646fb049949f58c69f3fcb4ed url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.0" record_web: dependency: transitive description: name: record_web - sha256: "024c81eb7f51468b1833a3eca8b461c7ca25c04899dba37abe580bb57afd32e4" + sha256: "4f0adf20c9ccafcc02d71111fd91fba1ca7b17a7453902593e5a9b25b74a5c56" url: "https://pub.dev" source: hosted - version: "1.1.8" + version: "1.2.0" record_windows: dependency: transitive description: name: record_windows - sha256: "85a22fc97f6d73ecd67c8ba5f2f472b74ef1d906f795b7970f771a0914167e99" + sha256: "223258060a1d25c62bae18282c16783f28581ec19401d17e56b5205b9f039d78" url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.7" retry: dependency: transitive description: @@ -1715,10 +1715,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" + sha256: bd14436108211b0d4ee5038689a56d4ae3620fd72fd6036e113bf1345bc74d9e url: "https://pub.dev" source: hosted - version: "2.4.10" + version: "2.4.13" shared_preferences_foundation: dependency: transitive description: @@ -1856,18 +1856,18 @@ packages: dependency: transitive description: name: sqflite_common - sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b" + sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6" url: "https://pub.dev" source: hosted - version: "2.5.5" + version: "2.5.6" sqflite_common_ffi: dependency: "direct main" description: name: sqflite_common_ffi - sha256: "1f3ef3888d3bfbb47785cc1dda0dc7dd7ebd8c1955d32a9e8e9dae1e38d1c4c1" + sha256: "9faa2fedc5385ef238ce772589f7718c24cdddd27419b609bb9c6f703ea27988" url: "https://pub.dev" source: hosted - version: "2.3.5" + version: "2.3.6" sqflite_darwin: dependency: transitive description: @@ -1888,18 +1888,18 @@ packages: dependency: "direct main" description: name: sqlcipher_flutter_libs - sha256: "777c3469ada8fe6b808bd50f1c752cdd2ca1b1f3cf751d434502ead15334f3a5" + sha256: dd1fcc74d5baf3c36ad53e2652b2d06c9f8747494a3ccde0076e88b159dfe622 url: "https://pub.dev" source: hosted - version: "0.6.6" + version: "0.6.8" sqlite3: dependency: transitive description: name: sqlite3 - sha256: c0503c69b44d5714e6abbf4c1f51a3c3cc42b75ce785f44404765e4635481d38 + sha256: "5c225083e72ea56c96d94ba1dd14fb89c8bb7731c8496ee840ab77be9bb67ae2" url: "https://pub.dev" source: hosted - version: "2.7.6" + version: "2.9.1" stack_trace: dependency: transitive description: @@ -1952,10 +1952,10 @@ packages: dependency: transitive description: name: synchronized - sha256: "0669c70faae6270521ee4f05bffd2919892d42d1276e6c495be80174b6bc0ef6" + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.0" tar: dependency: transitive description: @@ -2104,26 +2104,26 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 url: "https://pub.dev" source: hosted - version: "6.3.1" + version: "6.3.2" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" + sha256: "81777b08c498a292d93ff2feead633174c386291e35612f8da438d6e92c4447e" url: "https://pub.dev" source: hosted - version: "6.3.16" + version: "6.3.20" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" + sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7 url: "https://pub.dev" source: hosted - version: "6.3.3" + version: "6.3.4" url_launcher_linux: dependency: transitive description: @@ -2136,10 +2136,10 @@ packages: dependency: transitive description: name: url_launcher_macos - sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f url: "https://pub.dev" source: hosted - version: "3.2.2" + version: "3.2.3" url_launcher_platform_interface: dependency: transitive description: @@ -2200,34 +2200,34 @@ packages: dependency: transitive description: name: video_player_android - sha256: "4a5135754a62dbc827a64a42ef1f8ed72c962e191c97e2d48744225c2b9ebb73" + sha256: "6cfe0b1e102522eda1e139b82bf00602181c5844fd2885340f595fb213d74842" url: "https://pub.dev" source: hosted - version: "2.8.7" + version: "2.8.14" video_player_avfoundation: dependency: transitive description: name: video_player_avfoundation - sha256: "9ee764e5cd2fc1e10911ae8ad588e1a19db3b6aa9a6eb53c127c42d3a3c3f22f" + sha256: f9a780aac57802b2892f93787e5ea53b5f43cc57dc107bee9436458365be71cd url: "https://pub.dev" source: hosted - version: "2.7.1" + version: "2.8.4" video_player_platform_interface: dependency: transitive description: name: video_player_platform_interface - sha256: df534476c341ab2c6a835078066fc681b8265048addd853a1e3c78740316a844 + sha256: cf2a1d29a284db648fd66cbd18aacc157f9862d77d2cc790f6f9678a46c1db5a url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.4.0" video_player_web: dependency: transitive description: name: video_player_web - sha256: e8bba2e5d1e159d5048c9a491bb2a7b29c535c612bb7d10c1e21107f5bd365ba + sha256: "9f3c00be2ef9b76a95d94ac5119fb843dca6f2c69e6c9968f6f2b6c9e7afbdeb" url: "https://pub.dev" source: hosted - version: "2.3.5" + version: "2.4.0" vm_service: dependency: transitive description: @@ -2240,34 +2240,34 @@ packages: dependency: "direct main" description: name: vodozemac - sha256: dba14017e042748fb22d270e8ab1d3e46965b89788dd3857dba938ec07571968 + sha256: "95cac62ffab94db99e134c8f9aac198f8131a4eed0bed76a6cfc9c72add229b9" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.3.0" wakelock_plus: dependency: "direct main" description: name: wakelock_plus - sha256: a474e314c3e8fb5adef1f9ae2d247e57467ad557fa7483a2b895bc1b421c5678 + sha256: "61713aa82b7f85c21c9f4cd0a148abd75f38a74ec645fcb1e446f882c82fd09b" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: e10444072e50dbc4999d7316fd303f7ea53d31c824aa5eb05d7ccbdd98985207 + sha256: "036deb14cd62f558ca3b73006d52ce049fabcdcb2eddfe0bf0fe4e8a943b5cf2" url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" watcher: dependency: transitive description: name: watcher - sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" + sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.4" web: dependency: transitive description: @@ -2312,10 +2312,10 @@ packages: dependency: "direct main" description: name: webrtc_interface - sha256: "86fe3afc81a08481dfb25cf14a5a94e27062ecef25544783f352c914e0bbc1ca" + sha256: "2e604a31703ad26781782fb14fa8a4ee621154ee2c513d2b9938e486fa695233" url: "https://pub.dev" source: hosted - version: "1.2.2+hotfix.2" + version: "1.3.0" win32: dependency: "direct overridden" description: @@ -2360,10 +2360,10 @@ packages: dependency: transitive description: name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.6.1" yaml: dependency: transitive description: @@ -2374,4 +2374,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.8.0 <4.0.0" - flutter: ">=3.29.0" + flutter: ">=3.32.0" diff --git a/pubspec.yaml b/pubspec.yaml index ecb1e8b..f9086d8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -47,7 +47,7 @@ dependencies: git: url: https://github.com/famedly/flutter_typeahead.git ref: main - flutter_vodozemac: ^0.2.2 + flutter_vodozemac: ^0.3.0 flutter_web_auth_2: ^3.1.1 # Version 4 blocked by https://github.com/MixinNetwork/flutter-plugins/issues/379 flutter_webrtc: ^0.12.9 geolocator: ^13.0.1 @@ -57,7 +57,7 @@ dependencies: hive_flutter: ^1.1.0 html: ^0.15.4 http: ^1.2.0 - image: ^4.1.7 + image: ^4.5.4 image_picker: ^1.1.0 intl: ^0.20.2 just_audio: ^0.9.39 @@ -82,7 +82,7 @@ dependencies: qr_code_scanner_plus: ^2.0.10+1 qr_image: ^1.0.0 receive_sharing_intent: ^1.8.1 - record: ^5.1.2 + record: ^6.1.1 scroll_to_index: ^3.0.1 share_plus: ^10.0.2 shared_preferences: ^2.2.0 # Pinned because https://github.com/flutter/flutter/issues/118401 @@ -97,7 +97,7 @@ dependencies: url_launcher: ^6.2.5 video_compress: ^3.1.4 video_player: ^2.9.2 - vodozemac: ^0.2.0 + vodozemac: ^0.3.0 wakelock_plus: ^1.2.2 webrtc_interface: ^1.0.13 dio: ^5.9.0