From 37a18fb3beb116da1c93a029618f705eeee2656d Mon Sep 17 00:00:00 2001 From: Philip Kristoffersen Date: Wed, 3 Nov 2021 08:47:34 +0100 Subject: [PATCH] Validate settings before run --- src/egs/epic_platform.rs | 11 ++++++++++- src/gog/gog_platform.rs | 9 +++++++++ src/itch/itch_platform.rs | 11 ++++++++++- src/legendary/legendary_platform.rs | 10 +++++++++- src/origin/origin_platform.rs | 12 +++++++++++- src/platform.rs | 8 ++++++++ src/sync/synchronization.rs | 5 +++++ 7 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/egs/epic_platform.rs b/src/egs/epic_platform.rs index 6bb4974..79a339e 100644 --- a/src/egs/epic_platform.rs +++ b/src/egs/epic_platform.rs @@ -1,4 +1,4 @@ -use crate::platform::Platform; +use crate::platform::{Platform, SettingsValidity}; use super::{ get_egs_manifests, get_manifests::EpicGamesManifestsError, EpicGamesLauncherSettings, @@ -32,4 +32,13 @@ impl Platform for EpicPlatform { fn create_symlinks(&self) -> bool { self.settings.create_symlinks } + + fn settings_valid(&self) -> SettingsValidity { + let shortcuts_res = self.get_shortcuts(); + match shortcuts_res { + Ok(_) => SettingsValidity::Valid, + Err(err) => SettingsValidity::Invalid{reason:format!("{}",err)} + } + } + } diff --git a/src/gog/gog_platform.rs b/src/gog/gog_platform.rs index a7b3d39..5b08a8e 100644 --- a/src/gog/gog_platform.rs +++ b/src/gog/gog_platform.rs @@ -138,6 +138,15 @@ impl Platform for GogPlatform { Ok(shortcuts) } + + fn settings_valid(&self) -> crate::platform::SettingsValidity { + use crate::platform::*; + let shortcuts_res = self.get_shortcuts(); + match shortcuts_res { + Ok(_) => SettingsValidity::Valid, + Err(err) => SettingsValidity::Invalid{reason:format!("{}",err)}, + } + } } #[cfg(target_os = "linux")] diff --git a/src/itch/itch_platform.rs b/src/itch/itch_platform.rs index bf0207d..ec17962 100644 --- a/src/itch/itch_platform.rs +++ b/src/itch/itch_platform.rs @@ -1,7 +1,7 @@ use super::butler_db_parser::*; use super::receipt::Receipt; use super::{ItchGame, ItchSettings}; -use crate::platform::Platform; +use crate::platform::{Platform, SettingsValidity}; use failure::*; use flate2::read::GzDecoder; use std::collections::HashSet; @@ -59,6 +59,15 @@ impl Platform for ItchPlatform { fn create_symlinks(&self) -> bool { self.settings.create_symlinks } + + fn settings_valid(&self) -> crate::platform::SettingsValidity { + let shortcuts_res = self.get_shortcuts(); + match shortcuts_res { + Ok(_) => SettingsValidity::Valid, + Err(err) => SettingsValidity::Invalid{reason:format!("{}",err)} + } + + } } fn dbpath_to_game(paths: &DbPaths<'_>) -> Option { diff --git a/src/legendary/legendary_platform.rs b/src/legendary/legendary_platform.rs index 65f7750..b449150 100644 --- a/src/legendary/legendary_platform.rs +++ b/src/legendary/legendary_platform.rs @@ -1,5 +1,5 @@ use super::{LegendaryGame, LegendarySettings}; -use crate::platform::Platform; +use crate::platform::{Platform, SettingsValidity}; use serde_json::from_str; use std::error::Error; use std::process::Command; @@ -37,4 +37,12 @@ impl Platform> for LegendaryPlatform { fn create_symlinks(&self) -> bool { false } + + fn settings_valid(&self) -> crate::platform::SettingsValidity { + let shortcuts_res = self.get_shortcuts(); + match shortcuts_res { + Ok(_) => SettingsValidity::Valid, + Err(err) => SettingsValidity::Invalid{reason:format!("{}",err)} + } + } } diff --git a/src/origin/origin_platform.rs b/src/origin/origin_platform.rs index 2922da9..a967189 100644 --- a/src/origin/origin_platform.rs +++ b/src/origin/origin_platform.rs @@ -1,4 +1,4 @@ -use crate::platform::Platform; +use crate::platform::{Platform, SettingsValidity}; use failure::*; use nom::bytes::complete::take_until; use std::{ @@ -65,6 +65,16 @@ impl Platform for OriginPlatform { }); Ok(games.collect()) } + + fn settings_valid(&self) -> crate::platform::SettingsValidity { + let shortcuts_res = self.get_shortcuts(); + match shortcuts_res { + Ok(_) => SettingsValidity::Valid, + Err(err) => SettingsValidity::Invalid{reason:format!("{}",err)} + } + + + } } fn get_folder_mfst_file_content(game_folder_path: &Path) -> Option { diff --git a/src/platform.rs b/src/platform.rs index 449422c..2ffd949 100644 --- a/src/platform.rs +++ b/src/platform.rs @@ -10,6 +10,14 @@ where fn get_shortcuts(&self) -> Result, E>; + fn settings_valid(&self) -> SettingsValidity; + #[cfg(target_os = "linux")] fn create_symlinks(&self) -> bool; } + + +pub enum SettingsValidity{ + Valid, + Invalid{reason:String}, +} diff --git a/src/sync/synchronization.rs b/src/sync/synchronization.rs index a1895eb..e24c8f0 100644 --- a/src/sync/synchronization.rs +++ b/src/sync/synchronization.rs @@ -126,6 +126,11 @@ where T: Into, { if platform.enabled() { + if let crate::platform::SettingsValidity::Invalid { reason } = platform.settings_valid() { + eprintln!("Setting for platform {} are invalid, reason: {}",platform.name(),reason); + return; + } + #[cfg(target_os = "linux")] if platform.create_symlinks() { let name = platform.name();