Compatibility with aria2c

This commit is contained in:
Yannick Mauray 2022-02-24 23:26:15 +01:00
parent b5525b5dee
commit 42b38412a9
No known key found for this signature in database
GPG Key ID: 67C4AAC5E99CB909
2 changed files with 20 additions and 5 deletions

View File

@ -33,6 +33,7 @@ class _DownloaderState extends State<Downloader> {
final notificationsClient = NotificationsClient();
final wgetPattern = RegExp("( [0-9.]+%)");
final macRecoveryPattern = RegExp("([0-9]+\\.[0-9])");
final ariaPattern = RegExp("([0-9.]+%)");
late final Stream<double> _progressStream;
bool _downloadFinished = false;
var controller = StreamController<double>();
@ -55,6 +56,17 @@ class _DownloaderState extends State<Downloader> {
}
}
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<Downloader> {
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<Downloader> {
child: StreamBuilder(
stream: _progressStream,
builder: (context, AsyncSnapshot<double> 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: [

View File

@ -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!]))