1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use rusqlite::{Connection, Result, params};

#[cfg_attr(feature = "napi", napi(object))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Debug, Clone)]
pub struct GameData {
    pub id: i64,
    pub game_id: String,
    pub title: String,
    pub date_added: String,
    pub sha256: String,
    pub crc32: i32,
    pub present_on_disk: bool,
    pub path: Option<String>,
    pub size: i64,
    pub parameters: Option<String>,
    pub application_path: String,
    pub launch_command: String,
}

#[cfg_attr(feature = "napi", napi(object))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Debug, Clone)]
pub struct PartialGameData {
    pub id: Option<i64>,
    pub game_id: String,
    pub title: Option<String>,
    pub date_added: Option<String>,
    pub sha256: Option<String>,
    pub crc32: Option<i32>,
    pub present_on_disk: Option<bool>,
    pub path: Option<String>,
    pub size: Option<i64>,
    pub parameters: Option<String>,
    pub application_path: Option<String>,
    pub launch_command: Option<String>,
}

impl From<GameData> for PartialGameData {
    fn from(value: GameData) -> Self {
        PartialGameData {
            id: Some(value.id),
            game_id: value.game_id,
            title: Some(value.title),
            date_added: Some(value.date_added),
            sha256: Some(value.sha256),
            crc32: Some(value.crc32),
            present_on_disk: Some(value.present_on_disk),
            path: value.path,
            size: Some(value.size),
            parameters: value.parameters,
            application_path: Some(value.application_path),
            launch_command: Some(value.launch_command),
        }
    }
}

pub fn delete(conn: &Connection, id: i64) -> Result<()> {
    let mut stmt = conn.prepare("DELETE FROM game_data WHERE id = ?")?;
    stmt.execute(params![id])?;

    stmt = conn.prepare("UPDATE game SET activeDataId = NULL, activeDataOnDisk = false WHERE activeDataId = ?")?;
    stmt.execute(params![id])?;
    Ok(())
}