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 notificationsClient = NotificationsClient();
|
||||||
final wgetPattern = RegExp("( [0-9.]+%)");
|
final wgetPattern = RegExp("( [0-9.]+%)");
|
||||||
final macRecoveryPattern = RegExp("([0-9]+\\.[0-9])");
|
final macRecoveryPattern = RegExp("([0-9]+\\.[0-9])");
|
||||||
|
final ariaPattern = RegExp("([0-9.]+%)");
|
||||||
late final Stream<double> _progressStream;
|
late final Stream<double> _progressStream;
|
||||||
bool _downloadFinished = false;
|
bool _downloadFinished = false;
|
||||||
var controller = StreamController<double>();
|
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) {
|
void parseMacRecoveryProgress(String line) {
|
||||||
var matches = macRecoveryPattern.allMatches(line).toList();
|
var matches = macRecoveryPattern.allMatches(line).toList();
|
||||||
if (matches.isNotEmpty) {
|
if (matches.isNotEmpty) {
|
||||||
|
@ -80,6 +92,8 @@ class _DownloaderState extends State<Downloader> {
|
||||||
process.stdout
|
process.stdout
|
||||||
.transform(utf8.decoder)
|
.transform(utf8.decoder)
|
||||||
.forEach(parseMacRecoveryProgress);
|
.forEach(parseMacRecoveryProgress);
|
||||||
|
} else if (widget.option!.downloader == 'aria2c') {
|
||||||
|
process.stderr.transform(utf8.decoder).forEach(parseAriaProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
process.exitCode.then((value) {
|
process.exitCode.then((value) {
|
||||||
|
@ -130,10 +144,11 @@ class _DownloaderState extends State<Downloader> {
|
||||||
child: StreamBuilder(
|
child: StreamBuilder(
|
||||||
stream: _progressStream,
|
stream: _progressStream,
|
||||||
builder: (context, AsyncSnapshot<double> snapshot) {
|
builder: (context, AsyncSnapshot<double> snapshot) {
|
||||||
var data =
|
var data = !snapshot.hasData ||
|
||||||
!snapshot.hasData || widget.option!.downloader != 'wget'
|
widget.option!.downloader != 'wget' ||
|
||||||
? null
|
widget.option!.downloader != 'aria2c'
|
||||||
: snapshot.data;
|
? null
|
||||||
|
: snapshot.data;
|
||||||
return Column(
|
return Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
|
|
|
@ -21,7 +21,7 @@ class DownloadLabel extends StatelessWidget {
|
||||||
? Text(context.t('Download finished.'))
|
? Text(context.t('Download finished.'))
|
||||||
: data != null
|
: data != null
|
||||||
? downloader != 'zsync'
|
? downloader != 'zsync'
|
||||||
? downloader == 'wget'
|
? downloader == 'wget' || downloader == 'aria2c'
|
||||||
? Text(context.t('Downloading...{0}%',
|
? Text(context.t('Downloading...{0}%',
|
||||||
args: [(data! * 100).toInt()]))
|
args: [(data! * 100).toInt()]))
|
||||||
: Text(context.t('{0} Mbs downloaded', args: [data!]))
|
: Text(context.t('{0} Mbs downloaded', args: [data!]))
|
||||||
|
|
Loading…
Reference in New Issue