diff --git a/src/lutris/game_list_parser.rs b/src/lutris/game_list_parser.rs index f4b2d9f..b3d8c16 100644 --- a/src/lutris/game_list_parser.rs +++ b/src/lutris/game_list_parser.rs @@ -1,32 +1,15 @@ use super::lutris_game::LutrisGame; pub fn parse_lutris_games(input: &str) -> Vec { - input - .split('\n') - .into_iter() - .filter(|s| !s.is_empty()) - .filter_map(parse_line) - .collect() -} - -fn parse_line(input: &str) -> Option { - let mut sections = input.split('|'); - if sections.clone().count() < 4 { - return None; + let games = serde_json::from_str::>(&input); + match games { + Ok(games) => { + return games + } + Err(_err) => { + return Vec::new() + } } - let index = sections.next().unwrap().trim(); - let name = sections.next().unwrap().trim(); - let id = sections.next().unwrap().trim(); - let platform = sections.next().unwrap().trim(); - - Some(LutrisGame { - id: id.to_string(), - index: index.to_string(), - name: name.to_string(), - platform: platform.to_string(), - //theese will be added by the platform class - settings: None, - }) } #[cfg(test)] @@ -39,7 +22,7 @@ mod tests { let games = parse_lutris_games(content); - assert_eq!(19, games.len()); + assert_eq!(6, games.len()); } #[test] @@ -48,7 +31,7 @@ mod tests { let games = parse_lutris_games(content); - assert_eq!(games[0].index, "7"); + assert_eq!(games[0].id, 1); } #[test] @@ -57,7 +40,7 @@ mod tests { let games = parse_lutris_games(content); - assert_eq!(games[1].name, "Cave Story+"); + assert_eq!(games[5].name, "The Witcher 3: Wild Hunt - Game of the Year Edition"); } #[test] @@ -66,7 +49,7 @@ mod tests { let games = parse_lutris_games(content); - assert_eq!(games[3].id, "dicey-dungeons"); + assert_eq!(games[5].slug, "the-witcher-3-wild-hunt-game-of-the-year-edition"); } #[test] @@ -75,6 +58,6 @@ mod tests { let games = parse_lutris_games(content); - assert_eq!(games[18].platform, "steam"); + assert_eq!(games[1].runner, "steam"); } } diff --git a/src/lutris/lutris_game.rs b/src/lutris/lutris_game.rs index ebb0a6d..5f90455 100644 --- a/src/lutris/lutris_game.rs +++ b/src/lutris/lutris_game.rs @@ -1,11 +1,14 @@ use crate::lutris::settings::LutrisSettings; use steam_shortcuts_util::{shortcut::ShortcutOwned, Shortcut}; -#[derive(Clone)] +use serde::Deserialize; + +#[derive(Deserialize, Clone)] pub struct LutrisGame { - pub index: String, + pub id: i64, + pub slug: String, pub name: String, - pub id: String, + pub runner: String, pub platform: String, pub settings: Option, } @@ -36,15 +39,15 @@ impl LutrisGame { .unwrap_or_default(); if is_flatpak { format!( - "run {} lutris:rungameid/{}", + "run {} lutris:rungame/{}", self.settings .as_ref() .map(|s| s.flatpak_image.clone()) .unwrap_or_default(), - self.index + self.slug ) } else { - format!("lutris:rungame/{}", self.id) + format!("lutris:rungame/{}", self.slug) } } diff --git a/src/lutris/lutris_platform.rs b/src/lutris/lutris_platform.rs index 0d2ef05..18e82a7 100644 --- a/src/lutris/lutris_platform.rs +++ b/src/lutris/lutris_platform.rs @@ -23,7 +23,7 @@ impl Platform> for LutrisPlatform { let games = parse_lutris_games(output.as_str()); let mut res = vec![]; for mut game in games { - if game.platform != "steam" { + if game.runner != "steam" { game.settings = Some(self.settings.clone()); res.push(game); } @@ -55,10 +55,10 @@ fn get_lutris_command_output(settings: &LutrisSettings) -> Result