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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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 platform;
|
||||||
mod platforms_load;
|
mod platforms_load;
|
||||||
mod uplay;
|
mod uplay;
|
||||||
|
mod minigalaxy;
|
||||||
|
|
||||||
pub(crate) use platform::*;
|
pub(crate) use platform::*;
|
||||||
|
|
||||||
|
|||||||
@@ -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}")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user