Compatibility with aria2c
This commit is contained in:
parent
b5525b5dee
commit
42b38412a9
|
@ -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: [
|
||||
|
|
|
@ -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!]))
|
||||
|
|
Loading…
Reference in New Issue