diff --git a/lib/setup/cloning.dart b/lib/setup/cloning.dart index ad1bb6c1..ed8947e9 100644 --- a/lib/setup/cloning.dart +++ b/lib/setup/cloning.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:easy_localization/easy_localization.dart'; +import 'package:sprintf/sprintf.dart'; import 'error.dart'; import 'git_transfer_progress.dart'; @@ -18,10 +19,63 @@ class GitHostCloningPage extends StatelessWidget { @override Widget build(BuildContext context) { - if (errorMessage == null || errorMessage!.isEmpty) { + if (errorMessage != null && errorMessage!.isNotEmpty) { + return GitHostSetupErrorPage(errorMessage!); + } + + var stats = cloneProgress; + if (stats.totalObjects == 0) { return GitHostSetupLoadingPage(loadingMessage); } - return GitHostSetupErrorPage(errorMessage!); + var fetchPercent = (100 * stats.receivedObjects) / stats.totalObjects; + var indexPercent = (100 * stats.indexedObjects) / stats.totalObjects; + var kbytes = stats.receivedBytes ~/ 1024; + + var networkText = sprintf("network %0.3f%% (%4d kb, %5d/%5d)", [ + fetchPercent, + kbytes, + stats.receivedObjects, + stats.totalObjects, + ]); + var indexText = sprintf('index %0.3f%% (%5d/%5d)', [ + indexPercent, + stats.indexedObjects, + stats.totalObjects, + ]); + var text = '$networkText\n$indexText'; + + var children = [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + loadingMessage, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.headline4, + ), + ), + const SizedBox(height: 8.0), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + text, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyText1, + ), + ), + const SizedBox(height: 8.0), + const Padding( + padding: EdgeInsets.all(8.0), + child: CircularProgressIndicator( + value: null, + ), + ), + ]; + + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: children, + ); } } diff --git a/pubspec.lock b/pubspec.lock index 19691554..e1532f92 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1251,6 +1251,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.1" + sprintf: + dependency: "direct main" + description: + name: sprintf + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.0" sqflite: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b772ad8b..9ef10341 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -81,6 +81,7 @@ dependencies: grpc: ^3.0.0 protobuf: ^2.0.0 universal_io: ^2.0.4 + sprintf: ^6.0.0 dev_dependencies: #flutter_driver: