From 42b38412a9b59838e0cb42ff78e8ee079a1caf44 Mon Sep 17 00:00:00 2001 From: Yannick Mauray Date: Thu, 24 Feb 2022 23:26:15 +0100 Subject: [PATCH] Compatibility with aria2c --- lib/src/pages/downloader.dart | 23 +++++++++++++++---- .../widgets/downloader/download_label.dart | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/src/pages/downloader.dart b/lib/src/pages/downloader.dart index a723588..9696100 100644 --- a/lib/src/pages/downloader.dart +++ b/lib/src/pages/downloader.dart @@ -33,6 +33,7 @@ class _DownloaderState extends State { final notificationsClient = NotificationsClient(); final wgetPattern = RegExp("( [0-9.]+%)"); final macRecoveryPattern = RegExp("([0-9]+\\.[0-9])"); + final ariaPattern = RegExp("([0-9.]+%)"); late final Stream _progressStream; bool _downloadFinished = false; var controller = StreamController(); @@ -55,6 +56,17 @@ class _DownloaderState extends State { } } + void parseAriaProgress(String line) { + var matches = ariaPattern.allMatches(line).toList(); + if (matches.isNotEmpty) { + var percent = matches[0].group(1); + if (percent != null) { + var value = double.parse(percent.replaceAll('%', '')) / 100.0; + controller.add(value); + } + } + } + void parseMacRecoveryProgress(String line) { var matches = macRecoveryPattern.allMatches(line).toList(); if (matches.isNotEmpty) { @@ -80,6 +92,8 @@ class _DownloaderState extends State { process.stdout .transform(utf8.decoder) .forEach(parseMacRecoveryProgress); + } else if (widget.option!.downloader == 'aria2c') { + process.stderr.transform(utf8.decoder).forEach(parseAriaProgress); } process.exitCode.then((value) { @@ -130,10 +144,11 @@ class _DownloaderState extends State { child: StreamBuilder( stream: _progressStream, builder: (context, AsyncSnapshot snapshot) { - var data = - !snapshot.hasData || widget.option!.downloader != 'wget' - ? null - : snapshot.data; + var data = !snapshot.hasData || + widget.option!.downloader != 'wget' || + widget.option!.downloader != 'aria2c' + ? null + : snapshot.data; return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ diff --git a/lib/src/widgets/downloader/download_label.dart b/lib/src/widgets/downloader/download_label.dart index 3a86ed1..8671731 100644 --- a/lib/src/widgets/downloader/download_label.dart +++ b/lib/src/widgets/downloader/download_label.dart @@ -21,7 +21,7 @@ class DownloadLabel extends StatelessWidget { ? Text(context.t('Download finished.')) : data != null ? downloader != 'zsync' - ? downloader == 'wget' + ? downloader == 'wget' || downloader == 'aria2c' ? Text(context.t('Downloading...{0}%', args: [(data! * 100).toInt()])) : Text(context.t('{0} Mbs downloaded', args: [data!]))