82 lines
2.7 KiB
Dart
82 lines
2.7 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
import 'package:minecraft_server_installer/main/adapter/presentation/progress_view_model.dart';
|
|
import 'package:minecraft_server_installer/main/adapter/presentation/range_view_model.dart';
|
|
import 'package:minecraft_server_installer/vanilla/adapter/presentation/game_version_view_model.dart';
|
|
|
|
class InstallationState with EquatableMixin {
|
|
static const _defaultRamSize = RangeViewModel(min: 2048, max: 2048);
|
|
|
|
final GameVersionViewModel? gameVersion;
|
|
final String? savePath;
|
|
final bool isEulaAgreed;
|
|
final bool isGuiEnabled;
|
|
final bool isCustomRamSizeEnabled;
|
|
final RangeViewModel? _customRamSize;
|
|
final ProgressViewModel downloadProgress;
|
|
final bool isLocked;
|
|
|
|
const InstallationState({
|
|
required this.gameVersion,
|
|
required this.savePath,
|
|
required this.isEulaAgreed,
|
|
required this.isGuiEnabled,
|
|
required this.isCustomRamSizeEnabled,
|
|
required RangeViewModel? customRamSize,
|
|
required this.downloadProgress,
|
|
required this.isLocked,
|
|
}) : _customRamSize = customRamSize;
|
|
|
|
const InstallationState.empty()
|
|
: this(
|
|
gameVersion: null,
|
|
savePath: null,
|
|
isEulaAgreed: false,
|
|
isGuiEnabled: false,
|
|
isCustomRamSizeEnabled: false,
|
|
customRamSize: _defaultRamSize,
|
|
downloadProgress: const ProgressViewModel.zero(),
|
|
isLocked: false,
|
|
);
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
gameVersion,
|
|
savePath,
|
|
isEulaAgreed,
|
|
isGuiEnabled,
|
|
isCustomRamSizeEnabled,
|
|
_customRamSize,
|
|
downloadProgress,
|
|
isLocked,
|
|
];
|
|
|
|
InstallationState copyWith({
|
|
GameVersionViewModel? gameVersion,
|
|
String? savePath,
|
|
bool? isEulaAgreed,
|
|
bool? isGuiEnabled,
|
|
bool? isCustomRamSizeEnabled,
|
|
RangeViewModel? customRamSize,
|
|
ProgressViewModel? downloadProgress,
|
|
bool? isLocked,
|
|
}) =>
|
|
InstallationState(
|
|
gameVersion: gameVersion ?? this.gameVersion,
|
|
savePath: savePath ?? this.savePath,
|
|
isEulaAgreed: isEulaAgreed ?? this.isEulaAgreed,
|
|
isGuiEnabled: isGuiEnabled ?? this.isGuiEnabled,
|
|
isCustomRamSizeEnabled: isCustomRamSizeEnabled ?? this.isCustomRamSizeEnabled,
|
|
customRamSize: customRamSize ?? _customRamSize,
|
|
downloadProgress: downloadProgress ?? this.downloadProgress,
|
|
isLocked: isLocked ?? this.isLocked,
|
|
);
|
|
|
|
RangeViewModel get ramSize => isCustomRamSizeEnabled ? _customRamSize ?? _defaultRamSize : _defaultRamSize;
|
|
|
|
bool get isGameVersionSelected => gameVersion != null;
|
|
|
|
bool get isSavePathSelected => savePath != null && savePath!.isNotEmpty;
|
|
|
|
bool get canStartToInstall => isGameVersionSelected && isSavePathSelected && isEulaAgreed && !isLocked;
|
|
}
|