import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/models/backup/backup_state.model.dart'; import 'package:immich_mobile/providers/backup/backup.provider.dart'; import 'package:immich_mobile/providers/backup/manual_upload.provider.dart'; class BackupUploadStats extends ConsumerWidget { const BackupUploadStats({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final isManualUpload = ref.watch( backupProvider.select( (value) => value.backupProgress == BackUpProgressEnum.manualInProgress, ), ); final uploadFileProgress = isManualUpload ? ref.watch( manualUploadProvider.select((value) => value.progressInFileSize), ) : ref.watch(backupProvider.select((value) => value.progressInFileSize)); final uploadFileSpeed = isManualUpload ? ref.watch( manualUploadProvider.select((value) => value.progressInFileSpeed), ) : ref.watch( backupProvider.select((value) => value.progressInFileSpeed), ); return Padding( padding: const EdgeInsets.only(top: 2.0, bottom: 2.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( uploadFileProgress, style: const TextStyle(fontSize: 10, fontFamily: "OverpassMono"), ), Text( _formatUploadFileSpeed(uploadFileSpeed), style: const TextStyle(fontSize: 10, fontFamily: "OverpassMono"), ), ], ), ); } @pragma('vm:prefer-inline') String _formatUploadFileSpeed(double uploadFileSpeed) { if (uploadFileSpeed < 1024) { return '${uploadFileSpeed.toStringAsFixed(2)} B/s'; } else if (uploadFileSpeed < 1024 * 1024) { return '${(uploadFileSpeed / 1024).toStringAsFixed(2)} KB/s'; } else if (uploadFileSpeed < 1024 * 1024 * 1024) { return '${(uploadFileSpeed / (1024 * 1024)).toStringAsFixed(2)} MB/s'; } else { return '${(uploadFileSpeed / (1024 * 1024 * 1024)).toStringAsFixed(2)} GB/s'; } } }