From 86258577587e35a1dc202f8a737397c4dabf4d48 Mon Sep 17 00:00:00 2001 From: Yannick Mauray Date: Thu, 21 Oct 2021 02:39:51 +0200 Subject: [PATCH] New downloader, with progress indicator. --- .gitignore | 2 + README.md | 8 +- assets/github/screenshot10.png | Bin 0 -> 22183 bytes assets/github/screenshot11.png | Bin 0 -> 21204 bytes assets/github/screenshot12.png | Bin 0 -> 21190 bytes lib/src/pages/downloader.dart | 130 +++++++++++++++++++++++++ lib/src/widgets/home_page_buttons.dart | 23 ++++- pubspec.yaml | 2 +- 8 files changed, 159 insertions(+), 6 deletions(-) create mode 100644 assets/github/screenshot10.png create mode 100644 assets/github/screenshot11.png create mode 100644 assets/github/screenshot12.png create mode 100644 lib/src/pages/downloader.dart diff --git a/.gitignore b/.gitignore index 8c89582..ba55d79 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ android/ windows/ list.csv *.xz +*.iso +*.conf diff --git a/README.md b/README.md index e58e4b2..b567c53 100644 --- a/README.md +++ b/README.md @@ -62,9 +62,11 @@ If there are some options (Windows language, Pop!_OS nvidia or Intel, etc..), th ![Option is diplayed](./assets/github/screenshot9.png) -Then click "Download". The ISO will be downloaded in the current working directory, in 99% of cases that will be the directory where `quickgui` was invoked from. The spinner will tell you where the file is being downloaded. +Then click "Download". The ISO will be downloaded in the current working directory, in 99% of cases that will be the directory where `quickgui` was invoked from. -![All set !](./assets/github/screenshot6.png) +![Waiting for download](./assets/github/screenshot10.png) -![Downloading](./assets/github/screenshot7.png) +![Downloading](./assets/github/screenshot11.png) + +![Download finished](./assets/github/screenshot12.png) diff --git a/assets/github/screenshot10.png b/assets/github/screenshot10.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b8840656aefa33125b843835fe8b765614debf GIT binary patch literal 22183 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 z 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 RxsrvpyE%L8D|Nyr{R4r9tAzjn literal 0 HcmV?d00001 diff --git a/assets/github/screenshot11.png b/assets/github/screenshot11.png new file mode 100644 index 0000000000000000000000000000000000000000..d7301a543239e5d8507d6de2587d56d77fdd5fb7 GIT binary patch literal 21204 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

@2;HR4O;v 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 literal 0 HcmV?d00001 diff --git a/assets/github/screenshot12.png b/assets/github/screenshot12.png new file mode 100644 index 0000000000000000000000000000000000000000..1798135eea25cdcc515a2da1218d7925466689ff GIT binary patch literal 21190 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

RPDy)ZkUmk7BbLU8AED|0o#O9jQQd zay)l7Hq;61Pfr$KH-kLjvtj!O)X1j4tlQ&?dmI;_g2TH{Gdt?H6?qRX=!h`!Me& zZnhNJsaL++C^*mQGr_l>2qtR_GMhS-oY1L$zL^g!ui?lmE7Q|8h-oh|TS|Yhqs% z{0S-6PYT|?*0J1(H8w8nu5cU+aZqBd*;pyur~mED)ad7t1$aEHlkxWEuFtyO`1O*a zXmw8p^}(&Psr>F>!M-EC6ZL$@lwCYHPkt=$)#2mjl+x}{vpIKextIO**D%1b+_@$_ zHy?icxMm6?9BJOf3ly>Ik&^A50po^FeSkO_7#_2PH!W-83Eq8ZU})GG;1vMJJfB@& z($D`pQu*64(*EkuzsAWL2-c}^(q7w6{e0gzmF_o?MqhM6njHZI4$780+09u78Gyjq z&hheTxjpUdF=tcUR*z7Q*L0Y*=#4g0P21}>PAm=}J`ty9?=tXbIav%Ig;jFo#dEW> zOXvO-b0=8{IcDfN4l}oeR=BknPfGCeEt*1aS(;eC91b8*v zGQ`f7q_eZOjNaO6vvFl6n&TTq%!ax7nYDRw7@9qSh}Sm*$t(_b_Eqh@OvP)#GE(K1 zBFuL{kQdcvrR&(p&-QSm|84%(EZD=XP5UUs>D@aZWPO_1^ll74_&16XPAy~Lk6R{O zKZje!+Q8egXNa^znN?0YVr5PL# zjE)K;o+1V~j&*FzeR!j~Z-g(R(^JWWsT%RAoVdmmqnuL@*eWfddm?99&d#Y2>6B=s zHam_t|vw@P^d~-hX5-tNBVr&ZcF)`sqy|j^yBCBU>X$gR5PG zS4!u9@!J`Q8X5wj5fK?&EFiB^>~}R$=(@+H0=-KUF;-so$u~_ZrsrZp3&XCEXVQ{e z;I2E%6=k@hf9wDQn4~;w*|c}HiH!T(K~MMY_aVXg;{$hq)uI=Wo0NJeUPJ3a{~Sad zy7*#E97xL&i$X4(-h2Dn8WV^;_ZOmF(|-^LL|D~}UU&BMU$)BeyLFi&3Cn+S5MloA zq1rVjq8b0mu#vvoz_#l0vFTwO`R~J0mVXsVDhjwZi2s|2z+}VFSFzSI?5@Nv|Chh% zfBWn0M;qR`UT`DAe_N>rOuFRHU$EEG7I6OC&+og^VlLK*MFpGEyQFQQzkX#G8yB{2Z9jPRTd{dZZz${F{6a%bZHP1Do$9rnj>#9vLZ zvi|;0(&k-sUSTe`APs7JY5-(DK>B-p8`j3Bf5|rS!Eml=;zU7oQYvg#4ivs>Hq@TF zmj8@N`GZ>SEbBKG5QmJF1qLZ0uk<^MI!Z$mW1=&({|*I5%`|rw#7attPZ+ACD`vgk z`9_MJyp&AX*lT%^2rSxslOUp^sVN0i0|501O2_ZsK4o&bG~$;ShrS7Zo{AFunENVM z5oLl?`-h6owcTQBN+KBpy0eA;^NhWMD zes?l=7GmFB&gftxMlzQFuZ{X)C7*0z{{N(d`@4Oom?s!HeTX0>uTB!;bIq~X&4iTieu^> zE!J%&Y3O%w%GKK}_4+-+3}(x9`erl?R^~rNrkCr09Y?t4PRGTtCR)ART#pt%$;ilj zz9=jxaOglH=oV}Z@9&TSb}i!QF31~7N<@^frO`|Qr$x&mHmhm6yX&K+{({KZk#ruQ zvSHu{n=$C`Vx9Hy1q~II_zo^MUt;kh3U3mR$Dyc+9|va*|NOP2m05tz0XnophE`!r|)mTYrg5Q6W~zpX0JmR z2G4KcDl>F`)<@yAV4A|_dZ>Ba2D5cNoW~~8P*v?N)2iWx9oFz&40EKi8NWb6LW(={ zx;ZvothJ0H;fc|)YfZu+;TG5HJ6xzq<+Q|E^SL2w^|~?Z2t;DkZ}}meKm(kVhW=e? z=0PK1-g+9^{q5PZ*GcQv_BO(A(;@t)CG_45xBID6Q2mq_Dd^qUWN=N z9<;%ZjSuIm@aor2ZaA!G8K0KcG)1qs`J_#!5ZXsz;0*{@_fNibg8ODP&mg0Qcz)IU z@o!QIlU2r&vy}!|!9knT#VXPY3cCyD+1pJA6`K*XS>d%Sq=N3OKp7F}N8!M3w%@3E zwoj<37U&*0#fwfZ$Xk8bNA4B186yy5p5+k=toM00u7WsIS5da_;FN;M2nGBUIm_#q zZ*p?-woe3(jq1Q*K5DYkD&$>(C-KEmshdN(+1q9}=PI_lutcKxS0Y*3`YZIB-S5x(8jtFi z+)r9>ZVzk5-fd=k>=4C>z}?M8Gqj9g*`E9Ft7~dJ4y*cp@Vn60n2*J@j2+CDZ-$cC zu5U!L>;S{;sAg=tKOg!9)IwXL16JH*KJfXTkbwAyXU$uTm2eAquFz(wp48`ZLf2(R zt>tzj5_EYm7uyp_fcV?@!PE2d?*~s$PpVfez@iQh5BFEoDr60Re=GKPJQop{=CdLE z9vXM5(^<`^?+!tt0sa>!NiN;&dei`P3lw}BEmWI|@`kShYgB7J7Xv56~ z&o+UwSGnmu?yvKrW@a=*L`0W|3kgfM&CxMr0usFjz!a3geq&iePmmf&pq;AF6Y#t~ z9Dwd-Q=o1kkn>Vc+&_av{&(mQyrX$0cI@D;Cy&pM*4{nZyk4+sys_n|0qAz$!O**%1wZFR9Zo z8#)nt@XkoOM)L#E;=5NU_HgK~WG?|e{$#lh4+v;P_3a-|!7P58gm5VzCfF@i}7b{Rc+`$^9ZR4j$>N2g= z(yw6d0|McQKK(Ah^`do|W>p}yZ1U+JL@av%(~i?hl4=5WVVGn;_?*mAji^srjR+f7 zjzj6H!=+jk6A-a2+3W4rMu%A1hpYO?(SpTh-PU|GcAn+eSXm_to;B9lJNOF0*t^0 zOib#?TuDjEWDyY6Z`+loAF%jx7C;^gHRdV+1^zbbYB+8>_yMpRh4<-)x{G=M!Av^! z0IylBG;smEPa`ChIXw*=RC3u@g*T94O(&*T2?#l$^-fd-AT7=xSG{z zJncl|+X$xw5we@0V1@+&K(6wExvH0GcHk-qc6jV&5@<=Z`#!iIH}3L6f^mT|Zr)7! z-YB9jfQkoev&$m@PGvLhMOO#h9AMAz*hw{)l9vZ63<5wVW@hZ>qojaV{Q3DQ(*1mZ zmNK^sMP@H(KLNQRexCt3hdlxf$!Y+oC@hhAv?HvC`$KRo;@{BSw- zVu>3&ZXfVurScZ)ZAd63qSni5MmHLFvo^u)4>qak^bISvg>vb=K(lH#vY>w)?2z}Y93#D!tn2Ng7P1xXf7Kz06I3HQ4sNdMn46>cR zWx{lMU!X{UR5G3W(y}B!S%ub$;gedrM05iR!#7q-)w5jsIb|cM0^PJi1ZA8p6ccTd z^t#s7tI^LQ?tM{x95pou3zj;3yn7;LVDboQ1zT~LDNlU}cs+aLlGE)^mQ|{YI8eafQq%R8w?2)|y z-^n-p!8FXRUD{InMS|wQ>5GP~lqSqFL*|1$AtHqNIh%q+qe2&YrPu75$wtu*{EA29 z6j0D|eZ1Q0r6>MbqB}0s!RpSN{@tL9q^W0_e6~hW>@Sj7;}Cq1|MYVv5U3bc8w66u z1%4bPpT+_KBqcZg4D>xM2MP3s>jN4{)GF}*)q{7QLI^o9OdH>vITim;)(gABiwEyP zdNdYBsA=w7jrs}*_)H(rWMi3-|5tw_$%vYPFYMg?DvLlMG>P#}9Fy2LpduU{Owj-C zVE(_K-v6}tzn1NP4<`R3$N%5SQQM%B7Q{+HpCqGNI-{>(tn~i%OC?6_K2S3G2Q!dUzKfn`1$^gdFFImJr|!@uHHt*GaW71z_~Fcq#n=`DdvlRc&;`*Wu6`b-w( zysj0x%xKz%1F!y1q8qVk2JL5DL!;T8r&!2*6pJNXz6!>8ANXyQD+szi-I>W28GJ?P<$x*w`23GrgvtzI_T%9E`pQd=MpCo!;Hr&dbjR=zGk8;i(2 zV2;JZS|#%mxh&3GgP&w~Z#jvC7oVJ@O$||aK(>F8r~TcDLXfu%#LtO1s}%G-^xoGI z`L?aY-F+_dC>8avaQ$N$`sMR+28^k*SGcv6MCG|5z{o#3Zm-S1+}>0~z;EL85%%+bah3NrMc~TbJX3*mO4d!~0%<&2>#o$=Bv&;+5~5 z0Oh+cCR3G?(5qIq>w&N@8+#``<901P62jN%7uR0TOiV)Xa}Z~OaFqxTfgZaAvLb{0 ze4N$l{H_|6n$|PsZ{o%%9#-ezLZf#(1V4dq9d0Kw`-Cb_?z3Zlsc)X<2^gQRwNa?B zwBir>J}%N_xoBUu-*nPNq4!L?`I2rfWk;MHjfsCw%JV!uy?^)#LPgc~#{`7(liwr% z3M-MJPreja@?Gy5e7brttLj%W1GX3|ACGWcG;x_KOPN68in!t7yMIAG>#btsd2_<9AsQ9!}T-Kj(coIS$VysfgNNMP#!d zVd;hIv=eS(3FC#t!El(V@%Y_q{nIrOs8MAe@F3c;WV|I6^{v3Zp!XikrKTf?<) zo|a-CPI8s<#o{O}yeokXIzrLA9=1xRR4f54n0xmvgwTC#tZ&a?^)>FA`&$`;45v%x zmz5_+a6u3bU}!|k^k~8t(%0bmzaMXnqE>EBTUuu3Y01Mk{*M3=2JZP;r^Vp)m&ecz zS4L(3p%{Po>0_Tj*7plP7egPuA_o5A=BOT?j3YZ=jIlqte_rMSkX50B?-izx;`CUW zJ}=cBeG$=LHxAT|11ndq{Q9n4yUv)8UjU#|sl?>uWbE7aNDSWpY_F%2!o)4V94kJ4 zLktWIM6u{{3SfS$TD5BL?%liBMa1OvaingXsvFC7M`e1fPM=q&kEk1ur9efV}fTd|c`tW3ew$llUSpa}jSEpS#=VmP z11yMYf2r3~NW=z-ZbWXCPpjXkuDSDrO{3^4yLJ-630$iv?XSUB_EigOLxW^dg1 zwOQ9Sz{x0GdTt!J_L5#tW6?Ws?IlqXw7|k?)r6h&WJkLF!3xzD2f(~36bex+7Nftv zKgRxeZM?B!FiwB!YJa2Q;o%q<7>H8Ig<-&g znCTP0PP!Fm8?@DE{&BgjmXd3~0KmK|6bjMT*LQ53nwpAg)&Eb|tNm^I`ud_&Dp{Qc z7D|20cKR>*v-%JCTvuq@Z7;Cp0O*O@KcSaOrReYP@AY&RrP|*}%mNE&Hodsu7lk#x zapN|FO5Gu9fdx^EwPLZGpX?3595rjgR@)C2^pnEc?U`*AwEzH|np(wd*Y?!53);pP zZuWSly|a~wa8(8Xz^SVo$470aTUDDqZmN?N+Ey#Fjc?Ytq+EXh0B~w*)rYMjHd=hG zrMcdRwh*1I&em3FtE*P6`oFr@D6}|l_80(w#icPaTLow}j$fhe7N^Jhqi=?>{wUUsg}SkJG|pA@0szd9nXZ?r-w#`^8|#m$8OHkK*aB$XIIGZ| z%?fS(ixj5cywvc^)kkQ#Zmd10{t8E7n zZ*Nnb^{rn|=03EowjI=mZQ})D&HfO@hNIbPaD<=*09Xi}1Z}gZZM9lkAGPha9W=go z$2tw#TEI4btyRp{M{Tp$s>acHt&Od=8Z^F!kOcr(7&G1Bs_{0hjVrP3Vzyn>wwgmr zGX-s{kd0`+LK{tw09aU!E2r&(w$*BFv+V}$R%mA(wzJ)G zP#?JU`yFblvhAMN7_-f`8PuOgld|$zhG}Kcm@R6xJBC z5pTzAZ3{tT*f!R8W5~AJX3%P7R?q?f%&*3vY`2$orq$YZ_n>WeAy`*03TxbU(Cl$- ztcC4NQCs`DRzVw0#%S>v0D$gl7qqppRnRtuZL7zv_Rh}q_ypb9a!^wrv$e7D0MQ`j;xgM+ z+IDff|D^PL6gV+bn833fyk3(6(Bw zohe?$EC4_boknfr<90_hIiIz;-sPb2>k%hLZTwge!ZzBRckCqWAUu&_Fb&1O*>ar`a0YGbRPZFfGSxkh5Ei?wD7+;(HT z`G{EnfZjNnsO=GL~{ zRr_QC0P^Z|e{CnaurzfNsa*-#nuQ8W0Sf?dYU*mdHq(pH6t@5XOWV9hEC2ui n000000000000000z{2}~%so+K_5RW;00000NkvXXu0mjfCkNyd literal 0 HcmV?d00001 diff --git a/lib/src/pages/downloader.dart b/lib/src/pages/downloader.dart new file mode 100644 index 0000000..bf7baf2 --- /dev/null +++ b/lib/src/pages/downloader.dart @@ -0,0 +1,130 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:quickgui/src/model/operating_system.dart'; +import 'package:quickgui/src/model/version.dart'; + +class Downloader extends StatefulWidget { + const Downloader({ + Key? key, + required this.operatingSystem, + required this.version, + this.option, + }) : super(key: key); + + final OperatingSystem operatingSystem; + final Version version; + final String? option; + + @override + _DownloaderState createState() => _DownloaderState(); +} + +class _DownloaderState extends State { + final pattern = RegExp("( [0-9]+%)"); + late final Stream _progressStream; + bool _downloadFinished = false; + + @override + void initState() { + _progressStream = progressStream(); + super.initState(); + } + + Stream progressStream() { + var options = [widget.operatingSystem.code, widget.version.version]; + if (widget.option != null) { + options.add(widget.option!); + } + var controller = StreamController(); + Process.start('quickget', options).then((process) { + process.stderr.transform(utf8.decoder).forEach((line) { + var matches = pattern.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); + } + } + }); + process.exitCode.then((value) { + controller.close(); + setState(() { + _downloadFinished = true; + }); + }); + }); + return controller.stream; + } + + @override + Widget build(BuildContext context) { + //process.then((process) { + // process.stderr.transform(utf8.decoder).forEach((e) { + // var matches = pattern.allMatches(e).toList(); + // var percent = matches[0].group(1); + // if (percent != null) {} + // }); + //}); + + return Scaffold( + appBar: AppBar( + title: Text('Downloading ${widget.operatingSystem.name} ${widget.version.version}' + (widget.option != null ? ' (${widget.option})' : '')), + automaticallyImplyLeading: false, + ), + body: Column(children: [ + Expanded( + child: StreamBuilder( + stream: _progressStream, + builder: (context, AsyncSnapshot snapshot) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: _downloadFinished + ? const Text('Download finished.') + : snapshot.hasData + ? Text('Downloading...${(snapshot.data! * 100).toInt()}%') + : const Text('Waiting for download to start'), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + width: 200, + child: LinearProgressIndicator( + value: _downloadFinished + ? 1 + : snapshot.hasData + ? snapshot.data! + : null, + ), + ), + ), + ], + ); + }, + ), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ElevatedButton( + onPressed: _downloadFinished + ? () { + Navigator.of(context).pop(); + } + : null, + child: _downloadFinished ? const Text('Dimiss') : const Text('Cancel')) + ], + ), + ), + ]), + ); + } +} diff --git a/lib/src/widgets/home_page_buttons.dart b/lib/src/widgets/home_page_buttons.dart index 54eebfc..b4aad4f 100644 --- a/lib/src/widgets/home_page_buttons.dart +++ b/lib/src/widgets/home_page_buttons.dart @@ -1,9 +1,11 @@ +import 'dart:convert'; import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:quickgui/src/model/operating_system.dart'; import 'package:quickgui/src/model/version.dart'; +import 'package:quickgui/src/pages/downloader.dart'; import 'package:quickgui/src/pages/operating_system_selection.dart'; import 'package:quickgui/src/pages/version_selection.dart'; import 'package:quickgui/src/widgets/home_page_button.dart'; @@ -72,11 +74,28 @@ class _HomePageButtonsState extends State { text: 'Download', onPressed: (_selectedVersion == null) ? null - : () async { + : () { + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => Downloader( + operatingSystem: _selectedOperatingSystem!, + version: _selectedVersion!, + option: _selectedOption, + ))); + /* showLoadingIndicator(text: 'Downloading'); - await Process.run('quickget', [_selectedOperatingSystem!.code, _selectedVersion!.version]); + //await Process.run('quickget', [_selectedOperatingSystem!.code, _selectedVersion!.version]); + var options = [_selectedOperatingSystem!.code, _selectedVersion!.version]; + if (_selectedOption != null) { + options.add(_selectedOption!); + } + var process = await Process.start('quickget', options); + process.stderr.transform(utf8.decoder).forEach( + + ); + var exitCode = await process.exitCode; hideLoadingIndicator(); showDoneDialog(operatingSystem: _selectedOperatingSystem!.code, version: _selectedVersion!.version); + */ }, ), ], diff --git a/pubspec.yaml b/pubspec.yaml index f6fb5c1..49d3e3a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+3 +version: 1.0.0+4 environment: sdk: ">=2.12.0 <3.0.0"