mirror of
https://github.com/djibux/BoilR.git
synced 2026-09-01 05:53:41 +02:00
Minigalaxy (#249)
* Setup minigalaxy platform * Impelment mini galaxy platform * Customize the games_folder in minigalaxy * Include Mini Galaxy in readme
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
mod platform;
|
||||
|
||||
pub use platform::MiniGalaxyPlatform;
|
||||
@@ -0,0 +1,122 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::platforms::{GamesPlatform, FromSettingsString, load_settings, GogShortcut, NeedsPorton};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct MiniGalaxyPlatform {
|
||||
settings: Settings,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Serialize, Clone)]
|
||||
struct Settings {
|
||||
enabled: bool,
|
||||
create_symlinks: bool,
|
||||
games_folder: Option<String>,
|
||||
}
|
||||
|
||||
impl Default for Settings{
|
||||
fn default() -> Self {
|
||||
#[cfg(target_family = "unix")]
|
||||
let enabled = true;
|
||||
#[cfg(target_family = "windows")]
|
||||
let enabled = false;
|
||||
Self { enabled, create_symlinks:false, games_folder:None }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
impl NeedsPorton<MiniGalaxyPlatform> for GogShortcut{
|
||||
#[cfg(target_family = "unix")]
|
||||
fn needs_proton(&self, _platform: &MiniGalaxyPlatform) -> bool {
|
||||
//TODO check if we can do better than just always true
|
||||
//this might be a linux game
|
||||
true
|
||||
}
|
||||
|
||||
#[cfg(not(target_family = "unix"))]
|
||||
fn needs_proton(&self, _platform: &MiniGalaxyPlatform) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
#[cfg(not(target_family = "unix"))]
|
||||
fn create_symlinks(&self, _platform: &MiniGalaxyPlatform) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
fn create_symlinks(&self, platform: &MiniGalaxyPlatform) -> bool {
|
||||
platform.settings.create_symlinks
|
||||
}
|
||||
}
|
||||
|
||||
impl FromSettingsString for MiniGalaxyPlatform {
|
||||
fn from_settings_string<S: AsRef<str>>(s: S) -> Self {
|
||||
MiniGalaxyPlatform {
|
||||
settings: load_settings(s),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl GamesPlatform for MiniGalaxyPlatform{
|
||||
fn name(&self) -> &str {
|
||||
"Mini Galaxy"
|
||||
}
|
||||
|
||||
fn code_name(&self) -> &str {
|
||||
"minigalaxy"
|
||||
}
|
||||
|
||||
fn enabled(&self) -> bool {
|
||||
self.settings.enabled
|
||||
}
|
||||
|
||||
fn get_shortcut_info(&self) -> eyre::Result<Vec<crate::platforms::ShortcutToImport>> {
|
||||
|
||||
let games_folder = match &self.settings.games_folder{
|
||||
Some(custom_folder) => std::path::Path::new(&custom_folder).to_path_buf(),
|
||||
None => {
|
||||
get_default_folder_path()?
|
||||
},
|
||||
};
|
||||
let dirs = games_folder.read_dir()?;
|
||||
let mut game_folders = vec![];
|
||||
for game_folder in dirs{
|
||||
if let Ok(game_folder) = game_folder{
|
||||
game_folders.push(game_folder.path().to_owned());
|
||||
}
|
||||
}
|
||||
let gog_games = crate::platforms::get_gog_shortcuts_from_game_folders(game_folders);
|
||||
crate::platforms::to_shortcuts(self, Ok(gog_games))
|
||||
}
|
||||
|
||||
fn get_settings_serilizable(&self) -> String {
|
||||
toml::to_string(&self.settings).unwrap_or_default()
|
||||
}
|
||||
|
||||
fn render_ui(&mut self, ui: &mut egui::Ui) {
|
||||
ui.heading("Mini Galaxy");
|
||||
ui.checkbox(&mut self.settings.enabled, "Import from Mini Galaxy");
|
||||
let mut path_text = self.settings.games_folder.clone().unwrap_or_else(get_default_folder_string);
|
||||
if ui.text_edit_singleline(&mut path_text).changed(){
|
||||
if path_text.trim().is_empty(){
|
||||
self.settings.games_folder = None;
|
||||
}else{
|
||||
self.settings.games_folder = Some(path_text);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
if self.settings.enabled {
|
||||
ui.checkbox(&mut self.settings.create_symlinks, "Create symlinks");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_default_folder_string() -> String {
|
||||
get_default_folder_path().unwrap_or_default().to_string_lossy().to_string()
|
||||
}
|
||||
|
||||
fn get_default_folder_path() -> eyre::Result<std::path::PathBuf> {
|
||||
let home = std::env::var("HOME")?;
|
||||
Ok(std::path::Path::new(&home).join("GOG Games"))
|
||||
}
|
||||
@@ -11,6 +11,7 @@ mod origin;
|
||||
mod platform;
|
||||
mod platforms_load;
|
||||
mod uplay;
|
||||
mod minigalaxy;
|
||||
|
||||
pub(crate) use platform::*;
|
||||
|
||||
|
||||
@@ -13,11 +13,12 @@ use super::heroic::HeroicPlatform;
|
||||
use super::itch::ItchPlatform;
|
||||
use super::legendary::LegendaryPlatform;
|
||||
use super::lutris::LutrisPlatform;
|
||||
use super::minigalaxy::MiniGalaxyPlatform;
|
||||
use super::origin::OriginPlatform;
|
||||
use super::uplay::UplayPlatform;
|
||||
use super::GamesPlatform;
|
||||
|
||||
const PLATFORM_NAMES: [&str; 11] = [
|
||||
const PLATFORM_NAMES: [&str; 12] = [
|
||||
"amazon",
|
||||
"bottles",
|
||||
"epic_games",
|
||||
@@ -29,6 +30,7 @@ const PLATFORM_NAMES: [&str; 11] = [
|
||||
"lutris",
|
||||
"origin",
|
||||
"uplay",
|
||||
"minigalaxy"
|
||||
];
|
||||
|
||||
pub type Platforms = Vec<Box<dyn GamesPlatform>>;
|
||||
@@ -51,6 +53,7 @@ pub fn load_platform<A: AsRef<str>, B: AsRef<str>>(
|
||||
"legendary" => load::<LegendaryPlatform>(s),
|
||||
"lutris" => load::<LutrisPlatform>(s),
|
||||
"origin" => load::<OriginPlatform>(s),
|
||||
"minigalaxy" => load::<MiniGalaxyPlatform>(s),
|
||||
_ => Err(eyre::format_err!("Unknown platform named {name}")),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user