From 40b40f9239bcb9b3b30e04da60cf710e4fa7a153 Mon Sep 17 00:00:00 2001 From: Timon Date: Fri, 13 Feb 2026 19:50:13 +0000 Subject: [PATCH] WIP --- Cargo.lock | 12 +++-- desktop/update/Cargo.toml | 2 + desktop/update/src/lib.rs | 111 ++++++++++++++++++++++++++++++-------- 3 files changed, 98 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 50da846268..7e8e2dc440 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2414,6 +2414,10 @@ dependencies = [ [[package]] name = "graphite-desktop-update" version = "0.0.0" +dependencies = [ + "reqwest", + "serde", +] [[package]] name = "graphite-desktop-wrapper" @@ -5423,9 +5427,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -6330,9 +6334,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags 2.9.3", "bytes", diff --git a/desktop/update/Cargo.toml b/desktop/update/Cargo.toml index 80f88ad36f..9cf008efba 100644 --- a/desktop/update/Cargo.toml +++ b/desktop/update/Cargo.toml @@ -9,3 +9,5 @@ edition = "2024" rust-version = "1.87" [dependencies] +serde = { workspace = true } +reqwest = { workspace = true } diff --git a/desktop/update/src/lib.rs b/desktop/update/src/lib.rs index 80e2191314..b05bcc63d9 100644 --- a/desktop/update/src/lib.rs +++ b/desktop/update/src/lib.rs @@ -1,37 +1,102 @@ -pub struct Info { - pub commit: Commit, - pub system: System, - pub package: Package, - pub version: Version, +const UPDATE_CHECK_URL: &str = "https://localhost:8080/v1/update"; + +async fn check_for_update(info: Info) -> Status { + let client = reqwest::Client::new(); + let response = client.post(UPDATE_CHECK_URL).json(&info).send().await; + + match response { + Ok(response) => { + if response.status().is_success() { + match response.json::().await { + Ok(result) => result, + Err(_) => Status::Unknown, + } + } else { + Status::Unknown + } + } + Err(_) => Status::Unknown, + } } +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub struct Info { + pub commit: Commit, + pub version: Version, + pub system: System, + pub source: Option, +} + +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub struct Commit { pub hash: String, pub time: u64, } -pub struct System { - pub os: Os, - pub arch: Arch, -} - -pub enum Os { - Linux, - Mac, - Windows, -} - -pub enum Arch { - X86_64, - Aarch64, -} - +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub struct Version { pub major: u64, pub minor: u64, pub patch: u64, } -pub struct Package { - pub url: String, +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub struct System { + pub os: Os, + pub arch: Arch, +} + +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum Os { + Linux, + Mac, + Windows, +} + +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum Arch { + X86_64, + Aarch64, +} + +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum Source { + Flathub, + Nixpkgs, + Steam, + AppleAppStore, + WindowsStore, + Other(String), +} + +struct UpdateCheckRsponse { + status: Status, + messages: Vec, +} + +struct Message { + title: String, + body: String, + action: Action, +} + +pub enum Action { + OpenUrl(String), + PerformAutoUpdate, + None, +} + +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum Status { + Available(Method), + Outdated, + Unknown, + Latest, +} + +#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum Method { + Manual, + Auto { url: String }, + PackageManager, }