This commit is contained in:
Timon
2026-02-13 19:50:13 +00:00
parent 5bb5b16552
commit 40b40f9239
3 changed files with 98 additions and 27 deletions

12
Cargo.lock generated
View File

@@ -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",

View File

@@ -9,3 +9,5 @@ edition = "2024"
rust-version = "1.87"
[dependencies]
serde = { workspace = true }
reqwest = { workspace = true }

View File

@@ -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::<Status>().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<Source>,
}
#[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<Message>,
}
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,
}