translate GUI for background downloads

make saving in /sdcard/Download
This commit is contained in:
OfficialDakari 2025-09-13 22:30:45 +05:00
parent 7aca312d29
commit 4b1064f2a3
57 changed files with 205 additions and 29 deletions

View File

@ -1564,6 +1564,11 @@
"type": "String",
"placeholders": {}
},
"downloads": "Downloads",
"@downloads": {
"type": "String",
"placeholders": {}
},
"passwordForgotten": "Forgot password",
"@passwordForgotten": {
"type": "String",

View File

@ -2822,6 +2822,11 @@
}
}
},
"downloads": "Загрузки",
"@downloads": {
"type": "String",
"placeholders": {}
},
"doYouWantToBan": "Забанить {user}",
"@doYouWantToBan": {
"type": "String",

View File

@ -2073,6 +2073,12 @@ abstract class L10n {
/// **'Password'**
String get password;
/// No description provided for @downloads.
///
/// In en, this message translates to:
/// **'Downloads'**
String get downloads;
/// No description provided for @passwordForgotten.
///
/// In en, this message translates to:

View File

@ -1084,6 +1084,9 @@ class L10nAr extends L10n {
@override
String get password => 'كلمة السر';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'نسيتَ كلمة السر';

View File

@ -1092,6 +1092,9 @@ class L10nBe extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1092,6 +1092,9 @@ class L10nBn extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1092,6 +1092,9 @@ class L10nBo extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1102,6 +1102,9 @@ class L10nCa extends L10n {
@override
String get password => 'Contrasenya';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Contrasenya oblidada';

View File

@ -1097,6 +1097,9 @@ class L10nCs extends L10n {
@override
String get password => 'Heslo';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Zapomenuté heslo';

View File

@ -1099,6 +1099,9 @@ class L10nDe extends L10n {
@override
String get password => 'Passwort';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Passwort vergessen';

View File

@ -1093,6 +1093,9 @@ class L10nEl extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1092,6 +1092,9 @@ class L10nEn extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1096,6 +1096,9 @@ class L10nEo extends L10n {
@override
String get password => 'Pasvorto';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgesita pasvorto';

View File

@ -1104,6 +1104,9 @@ class L10nEs extends L10n {
@override
String get password => 'Contraseña';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Contraseña olvidada';

View File

@ -1099,6 +1099,9 @@ class L10nEt extends L10n {
@override
String get password => 'Salasõna';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Salasõna on ununenud';

View File

@ -1098,6 +1098,9 @@ class L10nEu extends L10n {
@override
String get password => 'Pasahitza';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Pasahitza ahaztu dut';

View File

@ -1092,6 +1092,9 @@ class L10nFa extends L10n {
@override
String get password => 'رمز عبور';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'رمز عبور را فراموش کرده‌ام';

View File

@ -1097,6 +1097,9 @@ class L10nFi extends L10n {
@override
String get password => 'Salasana';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Salasana unohtunut';

View File

@ -1098,6 +1098,9 @@ class L10nFil extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1110,6 +1110,9 @@ class L10nFr extends L10n {
@override
String get password => 'Mot de passe';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Mot de passe oublié';

View File

@ -1106,6 +1106,9 @@ class L10nGa extends L10n {
@override
String get password => 'Pasfhocal';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Pasfhocal dearmadta';

View File

@ -1098,6 +1098,9 @@ class L10nGl extends L10n {
@override
String get password => 'Contrasinal';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Contrasinal esquecido';

View File

@ -1088,6 +1088,9 @@ class L10nHe extends L10n {
@override
String get password => 'סיסמה';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'שכחתי סיסמה';

View File

@ -1092,6 +1092,9 @@ class L10nHi extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1095,6 +1095,9 @@ class L10nHr extends L10n {
@override
String get password => 'Lozinka';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Zaboravljena lozinka';

View File

@ -1096,6 +1096,9 @@ class L10nHu extends L10n {
@override
String get password => 'Jelszó';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Elfelejtett jelszó';

View File

@ -1092,6 +1092,9 @@ class L10nIa extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1100,6 +1100,9 @@ class L10nId extends L10n {
@override
String get password => 'Kata sandi';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Lupa kata sandi';

View File

@ -1091,6 +1091,9 @@ class L10nIe extends L10n {
@override
String get password => 'Contrasigne';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Li contrasigne esset obliviat';

View File

@ -1100,6 +1100,9 @@ class L10nIt extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Password dimenticata';

View File

@ -1074,6 +1074,9 @@ class L10nJa extends L10n {
@override
String get password => 'パスワード';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'パスワードを忘れた';

View File

@ -1094,6 +1094,9 @@ class L10nKa extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1066,6 +1066,9 @@ class L10nKo extends L10n {
@override
String get password => '비밀번호';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => '비밀번호 까먹음';

View File

@ -1097,6 +1097,9 @@ class L10nLt extends L10n {
@override
String get password => 'Slaptažodis';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Slaptažodis užmirštas';

View File

@ -1100,6 +1100,9 @@ class L10nLv extends L10n {
@override
String get password => 'Parole';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Aizmirsta parole';

View File

@ -1095,6 +1095,9 @@ class L10nNb extends L10n {
@override
String get password => 'Passord';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Passord glemt';

View File

@ -1095,6 +1095,9 @@ class L10nNl extends L10n {
@override
String get password => 'Wachtwoord';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Wachtwoord vergeten';

View File

@ -1096,6 +1096,9 @@ class L10nPl extends L10n {
@override
String get password => 'Hasło';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Nie pamiętam hasła';

View File

@ -1092,6 +1092,9 @@ class L10nPt extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1099,6 +1099,9 @@ class L10nRo extends L10n {
@override
String get password => 'Parolă';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Parola uitată';

View File

@ -1096,6 +1096,9 @@ class L10nRu extends L10n {
@override
String get password => 'Пароль';
@override
String get downloads => 'Загрузки';
@override
String get passwordForgotten => 'Забыли пароль';

View File

@ -1094,6 +1094,9 @@ class L10nSk extends L10n {
@override
String get password => 'Heslo';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1096,6 +1096,9 @@ class L10nSl extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1092,6 +1092,9 @@ class L10nSr extends L10n {
@override
String get password => 'Лозинка';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Заборављена лозинка';

View File

@ -1093,6 +1093,9 @@ class L10nSv extends L10n {
@override
String get password => 'Lösenord';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Glömt lösenord';

View File

@ -1108,6 +1108,9 @@ class L10nTa extends L10n {
@override
String get password => 'கடவுச்சொல்';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'கடவுச்சொல் மறந்துவிட்டது';

View File

@ -1092,6 +1092,9 @@ class L10nTe extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1094,6 +1094,9 @@ class L10nTh extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1098,6 +1098,9 @@ class L10nTr extends L10n {
@override
String get password => 'Parola';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Parola unutuldu';

View File

@ -1101,6 +1101,9 @@ class L10nUk extends L10n {
@override
String get password => 'Пароль';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Забули пароль';

View File

@ -1092,6 +1092,9 @@ class L10nVi extends L10n {
@override
String get password => 'Password';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => 'Forgot password';

View File

@ -1054,6 +1054,9 @@ class L10nZh extends L10n {
@override
String get password => '密码';
@override
String get downloads => 'Downloads';
@override
String get passwordForgotten => '忘记密码';

View File

@ -63,7 +63,7 @@ class ClientChooserButton extends StatelessWidget {
children: [
Icon(Icons.download_outlined),
const SizedBox(width: 18),
Text("Downloads"),
Text(L10n.of(context).downloads),
],
),
),

View File

@ -6,6 +6,7 @@ import 'package:extera_next/widgets/matrix.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:matrix/matrix.dart';
import 'package:provider/provider.dart';
import 'package:path_provider/path_provider.dart';
@ -17,23 +18,29 @@ class Download {
late int receivedBytes = 0;
late int totalBytes = 1;
late double progress = 0;
late String httpUrl;
late String downloadPath;
late CancelToken ct;
Download(this.context, this.url, this.name);
void start() async {
try {
final mx = Matrix.of(context).client;
final directory = await getExternalStorageDirectory();
final downloadPath =
directory != null ? "${directory.path}/Download" : null;
// final directory = await getDownloadsDirectory();
downloadPath =
"/sdcard/Download/Extera";
httpUrl = (await Uri.parse(url).getDownloadUri(mx)).toString();
if (downloadPath != null) {
// Create Dio instance
final dio = Dio();
// Progress status variables
ct = CancelToken();
// Download the file
response = dio.download(
url,
httpUrl,
"$downloadPath/$name",
onReceiveProgress: (received, total) {
receivedBytes = received;
@ -43,7 +50,9 @@ class Download {
},
options: Options(
responseType: ResponseType.bytes,
headers: {'authorization': "Bearer ${mx.accessToken}"}),
headers: {'authorization': "Bearer ${mx.accessToken}"}
),
cancelToken: ct
);
print("Download completed and saved to $downloadPath/$name");
}
@ -51,6 +60,10 @@ class Download {
print("Error during download: $e");
}
}
void cancel() async {
ct.cancel();
}
}
class DownloadManager extends StatefulWidget {

View File

@ -1,3 +1,4 @@
import 'package:extera_next/generated/l10n/l10n.dart';
import 'package:extera_next/pages/download_manager/download_manager.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@ -18,7 +19,7 @@ class DownloadManagerView extends StatelessWidget {
Widget build(BuildContext context) {
return AlertDialog.adaptive(
content: ConstrainedBox(
constraints: const BoxConstraints(maxHeight: 256, maxWidth: 256),
constraints: const BoxConstraints(maxHeight: 256, maxWidth: 512),
child: ListView.builder(
itemCount: controller.downloads.length,
itemBuilder: (context, index) {
@ -26,15 +27,15 @@ class DownloadManagerView extends StatelessWidget {
return ListTile(
title: Text(download.name),
subtitle: LinearProgressIndicator(
value: download.progress,
value: download.progress / 100,
backgroundColor: Colors.grey[200],
valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
),
trailing: ElevatedButton(
onPressed: () {
// "Cancel" button action can be added here
download.cancel();
},
child: Text("Cancel"),
child: Text(L10n.of(context).cancel),
),
);
},

View File

@ -27,12 +27,12 @@ extension LocalizedBody on Event {
}
void downloadInBackground(BuildContext context) async {
if (!canDownloadInBackground) {
if (canDownloadInBackground) {
final dmc = Provider.of<DownloadManagerController>(context);
final filename = content.tryGet<String>('filename') ?? body;
dmc.download(context, "$filename.${roomId!.substring(0, 4)}.${eventId.substring(0, 4)}.${extensionFromMime(attachmentMimetype)}", attachmentMxcUrl.toString());
dmc.download(context, "$filename.${roomId!.substring(1, 5)}.${eventId.substring(1, 5)}.${extensionFromMime(attachmentMimetype)}", attachmentMxcUrl.toString());
} else {
throw Exception("Cannot download in background");
throw Exception("Cannot download in background $hasAttachment ${room.encrypted}");
}
}
@ -45,7 +45,6 @@ extension LocalizedBody on Event {
bool get canDownloadInBackground =>
hasAttachment &&
status.isSent &&
!room.encrypted;
bool get isAttachmentSmallEnough =>

View File

@ -1098,26 +1098,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0"
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
version: "11.0.1"
version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
version: "3.0.10"
version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "3.0.1"
license_checker:
dependency: "direct dev"
description:
@ -1975,26 +1975,26 @@ packages:
dependency: transitive
description:
name: test
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e"
url: "https://pub.dev"
source: hosted
version: "1.26.2"
version: "1.25.15"
test_api:
dependency: transitive
description:
name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
version: "0.7.6"
version: "0.7.4"
test_core:
dependency: transitive
description:
name: test_core
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa"
url: "https://pub.dev"
source: hosted
version: "0.6.11"
version: "0.6.8"
timezone:
dependency: transitive
description:
@ -2175,10 +2175,10 @@ packages:
dependency: transitive
description:
name: vector_math
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
version: "2.1.4"
video_compress:
dependency: "direct main"
description: