feat(studio): real install progress in the store dialog and the wizard
Both surfaces showed an indeterminate spinner for the whole install, because the hub only offered a unary call. They now follow HubAdmin/InstallModuleStream: - The store's install dialog shows the phase in plain language, the overall percentage, megabytes while the size is known, and a seconds counter. The counter is the second, independent signal: it keeps running even if the hub goes quiet, which is what tells 'slow' apart from 'stuck'. - The setup wizard shows the same bar per module instead of a spinner inside the button. - New strings in both locales for the phases, the byte line and the elapsed counter. progress_bar_visual_test writes the four waiting states to build/progress/ in either theme, so the result can be judged without launching the desktop app. Writing it turned up a real trap worth recording: awaiting toImage() directly in a widget test leaves the binding waiting forever - the file passed in six seconds, then sat there until the ten-minute timeout failed the whole suite. tester.runAsync() is the fix. Full suite: 186 passed. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
2bc556e0f5
commit
1549334767
9 changed files with 490 additions and 74 deletions
|
|
@ -489,6 +489,12 @@
|
|||
}
|
||||
},
|
||||
"storeInstallProgressBody": "Holen, verifizieren, entpacken…",
|
||||
"installPhaseResolve": "Modul wird gesucht",
|
||||
"installPhaseDownload": "Wird heruntergeladen",
|
||||
"installPhaseInstall": "Wird geprüft und entpackt",
|
||||
"installPhaseDone": "Fertig",
|
||||
"installBytes": "{done} von {total} MB",
|
||||
"installElapsed": "{seconds} s vergangen",
|
||||
"storeLoadDocs": "Dokumentation laden",
|
||||
"storeDocsHint": "README inline gerendert; nutzt das Registry-Token des Hubs, falls nötig.",
|
||||
"storeDocsFetching": "README wird geladen…",
|
||||
|
|
|
|||
|
|
@ -507,6 +507,29 @@
|
|||
}
|
||||
},
|
||||
"storeInstallProgressBody": "Fetching, verifying, unpacking…",
|
||||
"installPhaseResolve": "Looking up the module",
|
||||
"installPhaseDownload": "Downloading",
|
||||
"installPhaseInstall": "Verifying and unpacking",
|
||||
"installPhaseDone": "Done",
|
||||
"installBytes": "{done} of {total} MB",
|
||||
"@installBytes": {
|
||||
"placeholders": {
|
||||
"done": {
|
||||
"type": "String"
|
||||
},
|
||||
"total": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"installElapsed": "{seconds} s elapsed",
|
||||
"@installElapsed": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"storeLoadDocs": "Load documentation",
|
||||
"storeDocsHint": "README rendered inline; uses the hub's registry token when needed.",
|
||||
"storeDocsFetching": "Fetching README…",
|
||||
|
|
|
|||
|
|
@ -1982,6 +1982,42 @@ abstract class AppLocalizations {
|
|||
/// **'Fetching, verifying, unpacking…'**
|
||||
String get storeInstallProgressBody;
|
||||
|
||||
/// No description provided for @installPhaseResolve.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Looking up the module'**
|
||||
String get installPhaseResolve;
|
||||
|
||||
/// No description provided for @installPhaseDownload.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Downloading'**
|
||||
String get installPhaseDownload;
|
||||
|
||||
/// No description provided for @installPhaseInstall.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Verifying and unpacking'**
|
||||
String get installPhaseInstall;
|
||||
|
||||
/// No description provided for @installPhaseDone.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Done'**
|
||||
String get installPhaseDone;
|
||||
|
||||
/// No description provided for @installBytes.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{done} of {total} MB'**
|
||||
String installBytes(String done, String total);
|
||||
|
||||
/// No description provided for @installElapsed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{seconds} s elapsed'**
|
||||
String installElapsed(int seconds);
|
||||
|
||||
/// No description provided for @storeLoadDocs.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
|
|
@ -1089,6 +1089,28 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get storeInstallProgressBody => 'Holen, verifizieren, entpacken…';
|
||||
|
||||
@override
|
||||
String get installPhaseResolve => 'Modul wird gesucht';
|
||||
|
||||
@override
|
||||
String get installPhaseDownload => 'Wird heruntergeladen';
|
||||
|
||||
@override
|
||||
String get installPhaseInstall => 'Wird geprüft und entpackt';
|
||||
|
||||
@override
|
||||
String get installPhaseDone => 'Fertig';
|
||||
|
||||
@override
|
||||
String installBytes(String done, String total) {
|
||||
return '$done von $total MB';
|
||||
}
|
||||
|
||||
@override
|
||||
String installElapsed(int seconds) {
|
||||
return '$seconds s vergangen';
|
||||
}
|
||||
|
||||
@override
|
||||
String get storeLoadDocs => 'Dokumentation laden';
|
||||
|
||||
|
|
|
|||
|
|
@ -1105,6 +1105,28 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get storeInstallProgressBody => 'Fetching, verifying, unpacking…';
|
||||
|
||||
@override
|
||||
String get installPhaseResolve => 'Looking up the module';
|
||||
|
||||
@override
|
||||
String get installPhaseDownload => 'Downloading';
|
||||
|
||||
@override
|
||||
String get installPhaseInstall => 'Verifying and unpacking';
|
||||
|
||||
@override
|
||||
String get installPhaseDone => 'Done';
|
||||
|
||||
@override
|
||||
String installBytes(String done, String total) {
|
||||
return '$done of $total MB';
|
||||
}
|
||||
|
||||
@override
|
||||
String installElapsed(int seconds) {
|
||||
return '$seconds s elapsed';
|
||||
}
|
||||
|
||||
@override
|
||||
String get storeLoadDocs => 'Load documentation';
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue