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:
Philip Kristoffersen
2022-10-11 18:14:09 +02:00
committed by GitHub
parent 40c55e542d
commit 5470d234e0
5 changed files with 131 additions and 1 deletions
+1
View File
@@ -72,6 +72,7 @@ BoilR can import games from many platforms, but there are limits based
| [Amazon Games](https://gaming.amazon.com) | Yes | No | No | | [Amazon Games](https://gaming.amazon.com) | Yes | No | No |
| [Flatpaks](https://flathub.org/) | No | Yes | [No](https://github.com/PhilipK/BoilR/issues/184#issuecomment-1192680467) | | [Flatpaks](https://flathub.org/) | No | Yes | [No](https://github.com/PhilipK/BoilR/issues/184#issuecomment-1192680467) |
| [Bottles](https://usebottles.com/) | No | Yes | Yes | | [Bottles](https://usebottles.com/) | No | Yes | Yes |
| [MiniGalaxy](https://sharkwouter.github.io/minigalaxy/) | No | Yes | Yes |
## Getting cover art for your shortcuts ## Getting cover art for your shortcuts
+3
View File
@@ -0,0 +1,3 @@
mod platform;
pub use platform::MiniGalaxyPlatform;
+122
View File
@@ -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"))
}
+1
View File
@@ -11,6 +11,7 @@ mod origin;
mod platform; mod platform;
mod platforms_load; mod platforms_load;
mod uplay; mod uplay;
mod minigalaxy;
pub(crate) use platform::*; pub(crate) use platform::*;
+4 -1
View File
@@ -13,11 +13,12 @@ use super::heroic::HeroicPlatform;
use super::itch::ItchPlatform; use super::itch::ItchPlatform;
use super::legendary::LegendaryPlatform; use super::legendary::LegendaryPlatform;
use super::lutris::LutrisPlatform; use super::lutris::LutrisPlatform;
use super::minigalaxy::MiniGalaxyPlatform;
use super::origin::OriginPlatform; use super::origin::OriginPlatform;
use super::uplay::UplayPlatform; use super::uplay::UplayPlatform;
use super::GamesPlatform; use super::GamesPlatform;
const PLATFORM_NAMES: [&str; 11] = [ const PLATFORM_NAMES: [&str; 12] = [
"amazon", "amazon",
"bottles", "bottles",
"epic_games", "epic_games",
@@ -29,6 +30,7 @@ const PLATFORM_NAMES: [&str; 11] = [
"lutris", "lutris",
"origin", "origin",
"uplay", "uplay",
"minigalaxy"
]; ];
pub type Platforms = Vec<Box<dyn GamesPlatform>>; 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), "legendary" => load::<LegendaryPlatform>(s),
"lutris" => load::<LutrisPlatform>(s), "lutris" => load::<LutrisPlatform>(s),
"origin" => load::<OriginPlatform>(s), "origin" => load::<OriginPlatform>(s),
"minigalaxy" => load::<MiniGalaxyPlatform>(s),
_ => Err(eyre::format_err!("Unknown platform named {name}")), _ => Err(eyre::format_err!("Unknown platform named {name}")),
} }
} }