mirror of
https://github.com/djibux/BoilR.git
synced 2026-09-01 05:53:41 +02:00
Amazon Games for Windows (#91)
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
use steam_shortcuts_util::{shortcut::ShortcutOwned, Shortcut};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct AmazonGame{
|
||||
pub title : String,
|
||||
pub id : String
|
||||
}
|
||||
|
||||
|
||||
|
||||
impl From<AmazonGame> for ShortcutOwned {
|
||||
fn from(game: AmazonGame) -> Self {
|
||||
let launch = format!("amazon-games://play/{}", game.id);
|
||||
Shortcut::new(
|
||||
"0",
|
||||
game.title.as_str(),
|
||||
launch.as_str(),
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
)
|
||||
.to_owned()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
use std::{error::Error, path::{PathBuf, Path}};
|
||||
|
||||
use sqlite::State;
|
||||
|
||||
use crate::platform::Platform;
|
||||
|
||||
use super::{AmazonSettings, AmazonGame};
|
||||
|
||||
|
||||
pub struct AmazonPlatform{
|
||||
pub settings:AmazonSettings
|
||||
}
|
||||
|
||||
impl Platform<AmazonGame, Box<dyn Error>> for AmazonPlatform{
|
||||
#[cfg(windows)]
|
||||
fn enabled(&self) -> bool {
|
||||
self.settings.enabled
|
||||
}
|
||||
|
||||
#[cfg(target_family="unix")]
|
||||
fn enabled(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn name(&self) -> &str {
|
||||
"Amazon"
|
||||
}
|
||||
|
||||
fn get_shortcuts(&self) -> Result<Vec<AmazonGame>, Box<dyn Error>> {
|
||||
let sqllite_path = get_sqlite_path().expect("This should enver get called if settings are invalid");
|
||||
let mut result = vec![];
|
||||
let connection = sqlite::open(sqllite_path)?;
|
||||
let mut statement = connection.prepare("SELECT Id, ProductTitle FROM DbSet WHERE Installed = 1")?;
|
||||
while let State::Row = statement.next().unwrap() {
|
||||
let id = statement.read::<String>(0);
|
||||
let title = statement.read::<String>(1);
|
||||
if let (Ok(id),Ok(title)) = (id,title){
|
||||
result.push(AmazonGame { title, id });
|
||||
}
|
||||
}
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn settings_valid(&self) -> crate::platform::SettingsValidity {
|
||||
let path = get_sqlite_path();
|
||||
if path.is_some(){
|
||||
crate::platform::SettingsValidity::Valid
|
||||
}else{
|
||||
crate::platform::SettingsValidity::Invalid { reason: format!("Could not find Amazon Games installation")}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[cfg(target_family ="unix")]
|
||||
fn create_symlinks(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn needs_proton(&self, _input: &AmazonGame) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn get_sqlite_path() -> Option<PathBuf> {
|
||||
match std::env::var("LOCALAPPDATA") {
|
||||
Ok(localdata) => {
|
||||
let path = Path::new(&localdata).join("Amazon Games").join("Data").join("Games").join("Sql").join("GameInstallInfo.sqlite");
|
||||
if path.exists() {
|
||||
Some(path)
|
||||
}else{
|
||||
None
|
||||
}
|
||||
}
|
||||
Err(_e) => None,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone)]
|
||||
pub struct AmazonSettings{
|
||||
pub enabled:bool
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
pub mod amazon_platform;
|
||||
pub use amazon_platform::*;
|
||||
|
||||
pub mod amazon_game;
|
||||
pub use amazon_game::*;
|
||||
|
||||
pub mod amazon_settings;
|
||||
pub use amazon_settings::*;
|
||||
Reference in New Issue
Block a user