mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-03-11 17:24:09 +00:00
Make DiskSize a constant constructor and fix slider on Volume resize screen
This commit is contained in:
parent
8d2fbb5100
commit
6f5ffa0f80
5 changed files with 76 additions and 30 deletions
lib
logic
ui/pages/server_storage
|
@ -89,8 +89,7 @@ class ApiProviderVolumeCubit
|
||||||
final ServerVolume? volume =
|
final ServerVolume? volume =
|
||||||
await providerApi!.getVolumeProvider().createVolume();
|
await providerApi!.getVolumeProvider().createVolume();
|
||||||
|
|
||||||
final diskVolume = DiskVolume();
|
final diskVolume = DiskVolume(providerVolume: volume);
|
||||||
diskVolume.providerVolume = volume;
|
|
||||||
await attachVolume(diskVolume);
|
await attachVolume(diskVolume);
|
||||||
|
|
||||||
await Future.delayed(const Duration(seconds: 10));
|
await Future.delayed(const Duration(seconds: 10));
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
|
||||||
class DiskSize {
|
class DiskSize {
|
||||||
DiskSize({final this.byte = 0});
|
const DiskSize({final this.byte = 0});
|
||||||
|
|
||||||
int byte;
|
final int byte;
|
||||||
|
|
||||||
double get kibibyte => byte / 1024.0;
|
double get kibibyte => byte / 1024.0;
|
||||||
double get mebibyte => byte / 1024.0 / 1024.0;
|
double get mebibyte => byte / 1024.0 / 1024.0;
|
||||||
|
|
|
@ -51,7 +51,7 @@ class Service {
|
||||||
isMovable: false,
|
isMovable: false,
|
||||||
status: ServiceStatus.off,
|
status: ServiceStatus.off,
|
||||||
storageUsage: ServiceStorageUsage(
|
storageUsage: ServiceStorageUsage(
|
||||||
used: DiskSize(byte: 0),
|
used: const DiskSize(byte: 0),
|
||||||
volume: '',
|
volume: '',
|
||||||
),
|
),
|
||||||
svgIcon: '',
|
svgIcon: '',
|
||||||
|
|
|
@ -3,21 +3,65 @@ import 'package:selfprivacy/logic/models/hive/server_details.dart';
|
||||||
import 'package:selfprivacy/logic/models/json/server_disk_volume.dart';
|
import 'package:selfprivacy/logic/models/json/server_disk_volume.dart';
|
||||||
|
|
||||||
class DiskVolume {
|
class DiskVolume {
|
||||||
DiskSize sizeUsed = DiskSize();
|
DiskVolume({
|
||||||
DiskSize sizeTotal = DiskSize();
|
this.name = '',
|
||||||
String name = '';
|
this.sizeTotal = const DiskSize(byte: 0),
|
||||||
bool root = false;
|
this.sizeUsed = const DiskSize(byte: 0),
|
||||||
bool isResizable = true;
|
this.root = false,
|
||||||
|
this.isResizable = false,
|
||||||
|
this.serverDiskVolume,
|
||||||
|
this.providerVolume,
|
||||||
|
});
|
||||||
|
|
||||||
|
DiskVolume.fromServerDiscVolume(
|
||||||
|
final ServerDiskVolume volume,
|
||||||
|
final ServerVolume? providerVolume,
|
||||||
|
) : this(
|
||||||
|
name: volume.name,
|
||||||
|
sizeTotal: DiskSize(
|
||||||
|
byte:
|
||||||
|
volume.totalSpace == 'None' ? 0 : int.parse(volume.totalSpace),
|
||||||
|
),
|
||||||
|
sizeUsed: DiskSize(
|
||||||
|
byte: volume.usedSpace == 'None' ? 0 : int.parse(volume.usedSpace),
|
||||||
|
),
|
||||||
|
root: volume.root,
|
||||||
|
isResizable: providerVolume != null,
|
||||||
|
serverDiskVolume: volume,
|
||||||
|
providerVolume: providerVolume,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Get the display name of the volume
|
||||||
|
///
|
||||||
|
/// If it is sda1 and root the name is "System disk"
|
||||||
|
/// If there is a mapping to providerVolume, the name is "Expandable volume"
|
||||||
|
/// Otherwise the name is the name of the volume
|
||||||
|
String get displayName {
|
||||||
|
if (root) {
|
||||||
|
return 'System disk';
|
||||||
|
} else if (providerVolume != null) {
|
||||||
|
return 'Expandable volume';
|
||||||
|
} else {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DiskSize sizeUsed;
|
||||||
|
DiskSize sizeTotal;
|
||||||
|
String name;
|
||||||
|
bool root;
|
||||||
|
bool isResizable;
|
||||||
ServerDiskVolume? serverDiskVolume;
|
ServerDiskVolume? serverDiskVolume;
|
||||||
ServerVolume? providerVolume;
|
ServerVolume? providerVolume;
|
||||||
|
|
||||||
/// from 0.0 to 1.0
|
/// from 0.0 to 1.0
|
||||||
double get percentage => sizeTotal.byte == 0 ? 0 : sizeUsed.byte / sizeTotal.byte;
|
double get percentage =>
|
||||||
bool get isDiskOkay => percentage < 0.8 && sizeTotal.gibibyte - sizeUsed.gibibyte > 2.0;
|
sizeTotal.byte == 0 ? 0 : sizeUsed.byte / sizeTotal.byte;
|
||||||
|
bool get isDiskOkay =>
|
||||||
|
percentage < 0.8 && sizeTotal.gibibyte - sizeUsed.gibibyte > 2.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
class DiskStatus {
|
class DiskStatus {
|
||||||
|
|
||||||
DiskStatus.fromVolumes(
|
DiskStatus.fromVolumes(
|
||||||
final List<ServerDiskVolume> serverVolumes,
|
final List<ServerDiskVolume> serverVolumes,
|
||||||
final List<ServerVolume> providerVolumes,
|
final List<ServerVolume> providerVolumes,
|
||||||
|
@ -25,32 +69,25 @@ class DiskStatus {
|
||||||
diskVolumes = serverVolumes.map((
|
diskVolumes = serverVolumes.map((
|
||||||
final ServerDiskVolume volume,
|
final ServerDiskVolume volume,
|
||||||
) {
|
) {
|
||||||
final DiskVolume diskVolume = DiskVolume();
|
ServerVolume? providerVolume;
|
||||||
diskVolume.sizeUsed = DiskSize(
|
|
||||||
byte: volume.usedSpace == 'None' ? 0 : int.parse(volume.usedSpace),
|
|
||||||
);
|
|
||||||
diskVolume.sizeTotal = DiskSize(
|
|
||||||
byte: volume.totalSpace == 'None' ? 0 : int.parse(volume.totalSpace),
|
|
||||||
);
|
|
||||||
diskVolume.serverDiskVolume = volume;
|
|
||||||
|
|
||||||
for (final ServerVolume providerVolume in providerVolumes) {
|
for (final ServerVolume iterableProviderVolume in providerVolumes) {
|
||||||
if (providerVolume.linuxDevice == null ||
|
if (iterableProviderVolume.linuxDevice == null ||
|
||||||
volume.model == null ||
|
volume.model == null ||
|
||||||
volume.serial == null) {
|
volume.serial == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
final String deviceId = providerVolume.linuxDevice!.split('/').last;
|
final String deviceId = iterableProviderVolume.linuxDevice!.split('/').last;
|
||||||
if (deviceId.contains(volume.model!) &&
|
if (deviceId.contains(volume.model!) &&
|
||||||
deviceId.contains(volume.serial!)) {
|
deviceId.contains(volume.serial!)) {
|
||||||
diskVolume.providerVolume = providerVolume;
|
providerVolume = iterableProviderVolume;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
diskVolume.name = volume.name;
|
final DiskVolume diskVolume = DiskVolume.fromServerDiscVolume(volume, providerVolume);
|
||||||
diskVolume.root = volume.root;
|
|
||||||
|
|
||||||
return diskVolume;
|
return diskVolume;
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
|
@ -22,13 +22,20 @@ class ExtendingVolumePage extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
|
class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
minSize = widget.diskVolumeToResize.sizeTotal;
|
||||||
|
_currentSliderGbValue = minSize.gibibyte;
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
bool _isError = false;
|
bool _isError = false;
|
||||||
|
|
||||||
double _currentSliderGbValue = -1;
|
late double _currentSliderGbValue;
|
||||||
double _euroPerGb = 1.0;
|
double _euroPerGb = 1.0;
|
||||||
|
|
||||||
final DiskSize maxSize = DiskSize(byte: 500000000000);
|
final DiskSize maxSize = const DiskSize(byte: 500000000000);
|
||||||
DiskSize minSize = DiskSize();
|
late DiskSize minSize;
|
||||||
|
|
||||||
final TextEditingController _sizeController = TextEditingController();
|
final TextEditingController _sizeController = TextEditingController();
|
||||||
final TextEditingController _priceController = TextEditingController();
|
final TextEditingController _priceController = TextEditingController();
|
||||||
|
@ -52,6 +59,9 @@ class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
|
||||||
'providers.storage.extending_volume_description'.tr(),
|
'providers.storage.extending_volume_description'.tr(),
|
||||||
children: const [
|
children: const [
|
||||||
SizedBox(height: 16),
|
SizedBox(height: 16),
|
||||||
|
Center(
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue