MCSI-5 GUI enabled option #25
@ -1,5 +1,3 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:minecraft_server_installer/main/adapter/presentation/installation_state.dart';
|
||||
import 'package:minecraft_server_installer/main/adapter/presentation/progress_view_model.dart';
|
||||
@ -34,8 +32,9 @@ class InstallationBloc extends Bloc<InstallationEvent, InstallationState> {
|
||||
);
|
||||
|
||||
final startScriptFilePath = path.join(savePath, Constants.startScriptFileName);
|
||||
final serverFilePath = path.join('.', Constants.serverFileName);
|
||||
final startScriptContent =
|
||||
'java -Xmx${state.ramSize.max}M -Xms${state.ramSize.min}M -jar ${Platform.isWindows ? '.${Constants.serverFileName}\r\n' : './${Constants.serverFileName}\n'}';
|
||||
'java -Xmx${state.ramSize.max}M -Xms${state.ramSize.min}M -jar $serverFilePath ${state.isGuiEnabled ? '' : 'nogui'}';
|
||||
await writeFileUseCase(startScriptFilePath, startScriptContent);
|
||||
await grantFilePermissionUseCase(startScriptFilePath);
|
||||
|
||||
@ -67,6 +66,7 @@ class InstallationBloc extends Bloc<InstallationEvent, InstallationState> {
|
||||
gameVersion: event.gameVersion,
|
||||
savePath: event.savePath,
|
||||
isEulaAgreed: event.isEulaAgreed,
|
||||
isGuiEnabled: event.isGuiEnabled,
|
||||
isCustomRamSizeEnabled: event.isCustomRamSizeEnabled,
|
||||
customRamSize: event.customRamSize,
|
||||
);
|
||||
@ -89,6 +89,7 @@ class InstallationConfigurationUpdatedEvent extends InstallationEvent {
|
||||
final GameVersionViewModel? gameVersion;
|
||||
final String? savePath;
|
||||
final bool? isEulaAgreed;
|
||||
final bool? isGuiEnabled;
|
||||
final bool? isCustomRamSizeEnabled;
|
||||
final RangeViewModel? customRamSize;
|
||||
|
||||
@ -96,6 +97,7 @@ class InstallationConfigurationUpdatedEvent extends InstallationEvent {
|
||||
this.gameVersion,
|
||||
this.savePath,
|
||||
this.isEulaAgreed,
|
||||
this.isGuiEnabled,
|
||||
this.isCustomRamSizeEnabled,
|
||||
this.customRamSize,
|
||||
});
|
||||
|
@ -9,6 +9,7 @@ class InstallationState with EquatableMixin {
|
||||
final GameVersionViewModel? gameVersion;
|
||||
final String? savePath;
|
||||
final bool isEulaAgreed;
|
||||
final bool isGuiEnabled;
|
||||
final bool isCustomRamSizeEnabled;
|
||||
final RangeViewModel? _customRamSize;
|
||||
final ProgressViewModel downloadProgress;
|
||||
@ -18,6 +19,7 @@ class InstallationState with EquatableMixin {
|
||||
required this.gameVersion,
|
||||
required this.savePath,
|
||||
required this.isEulaAgreed,
|
||||
required this.isGuiEnabled,
|
||||
required this.isCustomRamSizeEnabled,
|
||||
required RangeViewModel? customRamSize,
|
||||
required this.downloadProgress,
|
||||
@ -29,6 +31,7 @@ class InstallationState with EquatableMixin {
|
||||
gameVersion: null,
|
||||
savePath: null,
|
||||
isEulaAgreed: false,
|
||||
isGuiEnabled: false,
|
||||
isCustomRamSizeEnabled: false,
|
||||
customRamSize: _defaultRamSize,
|
||||
downloadProgress: const ProgressViewModel.zero(),
|
||||
@ -40,6 +43,7 @@ class InstallationState with EquatableMixin {
|
||||
gameVersion,
|
||||
savePath,
|
||||
isEulaAgreed,
|
||||
isGuiEnabled,
|
||||
isCustomRamSizeEnabled,
|
||||
_customRamSize,
|
||||
downloadProgress,
|
||||
@ -50,6 +54,7 @@ class InstallationState with EquatableMixin {
|
||||
GameVersionViewModel? gameVersion,
|
||||
String? savePath,
|
||||
bool? isEulaAgreed,
|
||||
bool? isGuiEnabled,
|
||||
bool? isCustomRamSizeEnabled,
|
||||
RangeViewModel? customRamSize,
|
||||
ProgressViewModel? downloadProgress,
|
||||
@ -59,6 +64,7 @@ class InstallationState with EquatableMixin {
|
||||
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,
|
||||
|
@ -21,6 +21,7 @@ class BasicConfigurationTab extends StatelessWidget {
|
||||
_pathBrowsingField,
|
||||
const Gap(16),
|
||||
_eulaCheckbox,
|
||||
_guiCheckBox,
|
||||
_enableCustomRamSizeCheckbox,
|
||||
_customRamSizeControl,
|
||||
const Spacer(),
|
||||
@ -82,6 +83,19 @@ class BasicConfigurationTab extends StatelessWidget {
|
||||
],
|
||||
);
|
||||
|
||||
Widget get _guiCheckBox => BlocConsumer<InstallationBloc, InstallationState>(
|
||||
listener: (_, __) {},
|
||||
builder: (context, state) => CheckboxListTile(
|
||||
title: const Text(Strings.fieldGui),
|
||||
value: state.isGuiEnabled,
|
||||
onChanged: (value) =>
|
||||
context.read<InstallationBloc>().add(InstallationConfigurationUpdatedEvent(isGuiEnabled: value)),
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4)),
|
||||
),
|
||||
);
|
||||
|
||||
Widget get _enableCustomRamSizeCheckbox => BlocConsumer<InstallationBloc, InstallationState>(
|
||||
listener: (_, __) {},
|
||||
builder: (context, state) => CheckboxListTile(
|
||||
@ -128,7 +142,7 @@ class BasicConfigurationTab extends StatelessWidget {
|
||||
canRequestFocus: false,
|
||||
readOnly: true,
|
||||
decoration: InputDecoration(
|
||||
label: const Text('${Strings.labelMinRamSize} (MB)'),
|
||||
label: const Text('${Strings.fieldMinRamSize} (MB)'),
|
||||
border: OutlineInputBorder(borderRadius: BorderRadius.circular(4)),
|
||||
),
|
||||
),
|
||||
@ -140,7 +154,7 @@ class BasicConfigurationTab extends StatelessWidget {
|
||||
canRequestFocus: false,
|
||||
readOnly: true,
|
||||
decoration: InputDecoration(
|
||||
label: const Text('${Strings.labelMaxRamSize} (MB)'),
|
||||
label: const Text('${Strings.fieldMaxRamSize} (MB)'),
|
||||
border: OutlineInputBorder(borderRadius: BorderRadius.circular(4)),
|
||||
),
|
||||
),
|
||||
|
@ -2,11 +2,12 @@ abstract class Strings {
|
||||
static const fieldGameVersion = '遊戲版本';
|
||||
static const fieldPath = '安裝路徑';
|
||||
static const fieldEula = '我同意 EULA 條款';
|
||||
static const fieldGui = '啟用伺服器 GUI 介面';
|
||||
static const fieldCustomRamSize = '啟用自定義 RAM 大小';
|
||||
static const fieldMinRamSize = '最小 RAM 大小';
|
||||
static const fieldMaxRamSize = '最大 RAM 大小';
|
||||
static const buttonStartToInstall = '開始安裝';
|
||||
static const buttonBrowse = '瀏覽';
|
||||
static const labelMinRamSize = '最小 RAM 大小';
|
||||
static const labelMaxRamSize = '最大 RAM 大小';
|
||||
static const tooltipEulaInfo = '點擊查看 EULA 條款';
|
||||
static const dialogTitleSelectDirectory = '選擇安裝目錄';
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user