mirror of
https://github.com/ALEZ-DEV/Babylonia-terminal.git
synced 2025-12-16 09:28:53 +00:00
can now set launch options in the settings directly
This commit is contained in:
parent
2bbcc3e5af
commit
530a30eac7
@ -30,7 +30,7 @@ async fn main() {
|
|||||||
debug!("Launch option -> {:?}", args.options);
|
debug!("Launch option -> {:?}", args.options);
|
||||||
|
|
||||||
if let Some(command) = args.set_options {
|
if let Some(command) = args.set_options {
|
||||||
GameConfig::set_launch_options(command)
|
GameConfig::set_launch_options(Some(command))
|
||||||
.await
|
.await
|
||||||
.expect("Failed to save launch options into the config file");
|
.expect("Failed to save launch options into the config file");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,9 +71,9 @@ impl GameConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_launch_options(command: String) -> anyhow::Result<()> {
|
pub async fn set_launch_options(command: Option<String>) -> anyhow::Result<()> {
|
||||||
let mut config = Self::get_config().await;
|
let mut config = Self::get_config().await;
|
||||||
config.launch_options = Some(command);
|
config.launch_options = command;
|
||||||
Self::save_config(config).await?;
|
Self::save_config(config).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,4 +23,24 @@ class Config {
|
|||||||
_isLoadingConfig = false;
|
_isLoadingConfig = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool _isLoadingGetLaunchOptions = false;
|
||||||
|
|
||||||
|
static Future<String?> getLaunchOptions() async {
|
||||||
|
if (!_isLoadingGetLaunchOptions) {
|
||||||
|
_isLoadingGetLaunchOptions = true;
|
||||||
|
GetLaunchOptionsInput().sendSignalToRust();
|
||||||
|
final stream = GetLaunchOptionsOutput.rustSignalStream;
|
||||||
|
|
||||||
|
await for (final rustSignal in stream) {
|
||||||
|
_isLoadingGetLaunchOptions = false;
|
||||||
|
return rustSignal.message.launchOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setLaunchOptions(String? newLaunchOptions) {
|
||||||
|
SetLaunchOptionsInput(launchOptions: newLaunchOptions).sendSignalToRust();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,8 @@ import 'dart:async';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
|
import './config.dart';
|
||||||
|
|
||||||
enum BackgroundType {
|
enum BackgroundType {
|
||||||
contain,
|
contain,
|
||||||
fill,
|
fill,
|
||||||
@ -14,12 +16,18 @@ enum BackgroundType {
|
|||||||
|
|
||||||
class Settings {
|
class Settings {
|
||||||
final SharedPreferences prefs;
|
final SharedPreferences prefs;
|
||||||
|
String? _launchOptions;
|
||||||
|
|
||||||
Settings({required this.prefs});
|
Settings({required this.prefs, required String? launchOptions})
|
||||||
|
: _launchOptions = launchOptions;
|
||||||
|
|
||||||
static Future<Settings> create() async {
|
static Future<Settings> create() async {
|
||||||
final prefs = await SharedPreferences.getInstance();
|
final prefs = await SharedPreferences.getInstance();
|
||||||
return Settings(prefs: prefs);
|
final launchOptions = await Config.getLaunchOptions();
|
||||||
|
return Settings(
|
||||||
|
prefs: prefs,
|
||||||
|
launchOptions: launchOptions,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
String firstTimeKey = 'first_time';
|
String firstTimeKey = 'first_time';
|
||||||
@ -31,6 +39,15 @@ class Settings {
|
|||||||
prefs.setBool(firstTimeKey, value!);
|
prefs.setBool(firstTimeKey, value!);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String? get launchOptions {
|
||||||
|
return _launchOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
set launchOptions(String? value) {
|
||||||
|
Config.setLaunchOptions(value);
|
||||||
|
_launchOptions = value;
|
||||||
|
}
|
||||||
|
|
||||||
BackgroundType? _backgroundType;
|
BackgroundType? _backgroundType;
|
||||||
String backgroundTypeKey = 'background_type';
|
String backgroundTypeKey = 'background_type';
|
||||||
|
|
||||||
|
|||||||
@ -45,4 +45,12 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
set backgroundId(int? value) {
|
set backgroundId(int? value) {
|
||||||
_settings.backgroundId = value;
|
_settings.backgroundId = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String? get launchOptions {
|
||||||
|
return _settings.launchOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
set launchOptions(String? value) {
|
||||||
|
_settings.launchOptions = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,78 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:yaru/yaru.dart';
|
||||||
|
|
||||||
class GeneralSettingsPage extends StatelessWidget {
|
import './../../providers/settings_provider.dart';
|
||||||
|
|
||||||
|
class GeneralSettingsPage extends StatefulWidget {
|
||||||
const GeneralSettingsPage({super.key});
|
const GeneralSettingsPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<GeneralSettingsPage> createState() => _GeneralSettingsPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _GeneralSettingsPageState extends State<GeneralSettingsPage> {
|
||||||
|
final textFieldController = TextEditingController();
|
||||||
|
String? _launchOptionsError;
|
||||||
|
|
||||||
|
bool isLaunchOptionsValid(String launchOptions) {
|
||||||
|
return RegExp(r'^.*%command%.*$').hasMatch(launchOptions);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return const Center(
|
final provider = Provider.of<SettingsProvider>(context, listen: false);
|
||||||
child: Text("General settings"),
|
final launchOptions = provider.launchOptions;
|
||||||
|
|
||||||
|
return Center(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
const Center(
|
||||||
|
child: Text(
|
||||||
|
'General',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 36,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(15.0),
|
||||||
|
child: SizedBox(
|
||||||
|
child: YaruSection(
|
||||||
|
headline: const Text('Launch options'),
|
||||||
|
child: TextFormField(
|
||||||
|
initialValue: launchOptions,
|
||||||
|
//controller: textFieldController,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
labelText:
|
||||||
|
'Your custom launch options, E.G. : mangohud %command%',
|
||||||
|
errorText: _launchOptionsError,
|
||||||
|
),
|
||||||
|
validator: (value) => _launchOptionsError,
|
||||||
|
onChanged: (String text) {
|
||||||
|
if (text.isEmpty) {
|
||||||
|
setState(() {
|
||||||
|
_launchOptionsError = null;
|
||||||
|
});
|
||||||
|
provider.launchOptions = null;
|
||||||
|
} else if (!isLaunchOptionsValid(text)) {
|
||||||
|
setState(() {
|
||||||
|
_launchOptionsError =
|
||||||
|
'You need to put \'%command%\' in your command';
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setState(() {
|
||||||
|
_launchOptionsError = null;
|
||||||
|
});
|
||||||
|
provider.launchOptions = text;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,3 +8,16 @@ message ConfigInput {}
|
|||||||
message ConfigOutput {
|
message ConfigOutput {
|
||||||
string configPath = 1;
|
string configPath = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [RINF:DART-SIGNAL]
|
||||||
|
message GetLaunchOptionsInput {}
|
||||||
|
|
||||||
|
// [RINF:RUST-SIGNAL]
|
||||||
|
message GetLaunchOptionsOutput {
|
||||||
|
optional string launchOptions = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// [RINF:DART-SIGNAL]
|
||||||
|
message SetLaunchOptionsInput {
|
||||||
|
optional string launchOptions = 1;
|
||||||
|
}
|
||||||
|
|||||||
@ -1,6 +1,12 @@
|
|||||||
use babylonia_terminal_sdk::game_config::GameConfig;
|
use babylonia_terminal_sdk::game_config::GameConfig;
|
||||||
|
|
||||||
use crate::messages::config::{ConfigInput, ConfigOutput};
|
use crate::messages::{
|
||||||
|
config::{
|
||||||
|
ConfigInput, ConfigOutput, GetLaunchOptionsInput, GetLaunchOptionsOutput,
|
||||||
|
SetLaunchOptionsInput,
|
||||||
|
},
|
||||||
|
error::ReportError,
|
||||||
|
};
|
||||||
|
|
||||||
pub async fn listen_config() {
|
pub async fn listen_config() {
|
||||||
let mut receiver = ConfigInput::get_dart_signal_receiver().unwrap();
|
let mut receiver = ConfigInput::get_dart_signal_receiver().unwrap();
|
||||||
@ -12,3 +18,35 @@ pub async fn listen_config() {
|
|||||||
.send_signal_to_dart();
|
.send_signal_to_dart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn listen_get_launch_options() {
|
||||||
|
let mut receiver = GetLaunchOptionsInput::get_dart_signal_receiver().unwrap();
|
||||||
|
while let Some(_) = receiver.recv().await {
|
||||||
|
let launch_options_result = GameConfig::get_launch_options().await;
|
||||||
|
if let Err(err) = launch_options_result {
|
||||||
|
ReportError {
|
||||||
|
error_message: format!("Failed to get launch options :\n{:?}", err),
|
||||||
|
}
|
||||||
|
.send_signal_to_dart();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetLaunchOptionsOutput {
|
||||||
|
launch_options: launch_options_result.unwrap(),
|
||||||
|
}
|
||||||
|
.send_signal_to_dart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn listen_set_launch_options() {
|
||||||
|
let mut receiver = SetLaunchOptionsInput::get_dart_signal_receiver().unwrap();
|
||||||
|
while let Some(dart_signal) = receiver.recv().await {
|
||||||
|
let result = GameConfig::set_launch_options(dart_signal.message.launch_options).await;
|
||||||
|
if let Err(err) = result {
|
||||||
|
ReportError {
|
||||||
|
error_message: format!("Failed to set launch options :\n{:?}", err),
|
||||||
|
}
|
||||||
|
.send_signal_to_dart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -16,6 +16,8 @@ async fn main() {
|
|||||||
//config
|
//config
|
||||||
tokio::spawn(game_state::listen_game_state());
|
tokio::spawn(game_state::listen_game_state());
|
||||||
tokio::spawn(config::listen_config());
|
tokio::spawn(config::listen_config());
|
||||||
|
tokio::spawn(config::listen_get_launch_options());
|
||||||
|
tokio::spawn(config::listen_set_launch_options());
|
||||||
|
|
||||||
//github
|
//github
|
||||||
tokio::spawn(github::listen_proton_version());
|
tokio::spawn(github::listen_proton_version());
|
||||||
@ -28,6 +30,6 @@ async fn main() {
|
|||||||
tokio::spawn(dependencies::listen_dependecies_installation());
|
tokio::spawn(dependencies::listen_dependecies_installation());
|
||||||
tokio::spawn(game::listen_game_installation());
|
tokio::spawn(game::listen_game_installation());
|
||||||
|
|
||||||
// game
|
//game
|
||||||
tokio::spawn(game::listen_game_running());
|
tokio::spawn(game::listen_game_running());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user