Compare commits

..

3 Commits

Author SHA1 Message Date
8e08f3b7e7 chore: Revert Clients to using static LazyLock
Signed-off-by: quexeky <git@quexeky.dev>
2025-10-13 09:26:22 +11:00
f0e46c4a46 refactor: Convert some things from static to const and refactor into drop-consts
Signed-off-by: quexeky <git@quexeky.dev>
2025-10-13 09:07:24 +11:00
ef9f8caa54 Squashed commit of the following:
commit 3b09dcfb73
Author: quexeky <git@quexeky.dev>
Date:   Mon Oct 13 08:10:52 2025 +1100

    fix: #159

    Signed-off-by: quexeky <git@quexeky.dev>

commit 2859a59622
Author: quexeky <git@quexeky.dev>
Date:   Mon Oct 13 08:03:49 2025 +1100

    Squashed commit of the following:

    commit 0f48f3fb44
    Author: quexeky <git@quexeky.dev>
    Date:   Sun Oct 12 19:35:04 2025 +1100

        chore: Run cargo clippy && cargo fmt

        Signed-off-by: quexeky <git@quexeky.dev>

    commit 974666efe2
    Author: quexeky <git@quexeky.dev>
    Date:   Sun Oct 12 19:17:40 2025 +1100

        refactor: Finish refactor

        Signed-off-by: quexeky <git@quexeky.dev>

    commit 9e1bf9852f
    Author: quexeky <git@quexeky.dev>
    Date:   Sun Oct 12 18:33:43 2025 +1100

        refactor: Builds, but some logic still left to move back

        Signed-off-by: quexeky <git@quexeky.dev>

    commit 5d22b883d5
    Author: quexeky <git@quexeky.dev>
    Date:   Sun Oct 12 17:04:27 2025 +1100

        refactor: Improvements to src-tauri

        Signed-off-by: quexeky <git@quexeky.dev>

    commit 62a2561539
    Author: quexeky <git@quexeky.dev>
    Date:   Sat Oct 11 09:51:04 2025 +1100

        fix: Remote tauri dependency from process

        Signed-off-by: quexeky <git@quexeky.dev>

    commit 59f040bc8b
    Author: quexeky <git@quexeky.dev>
    Date:   Thu Oct 9 07:46:17 2025 +1100

        chore: Major refactoring

        Still needs a massive go-over because there shouldn't be anything referencing tauri in any of the workspaces except the original one. Process manager has been refactored as an example

        Signed-off-by: quexeky <git@quexeky.dev>

    Signed-off-by: quexeky <git@quexeky.dev>

Signed-off-by: quexeky <git@quexeky.dev>
2025-10-13 08:21:27 +11:00
89 changed files with 9297 additions and 1541 deletions

View File

@ -63,21 +63,17 @@ jobs:
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: | run: |
echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12 echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
# security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
# security default-keychain -s build.keychain security default-keychain -s build.keychain
# security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
# security set-keychain-settings -t 3600 -u build.keychain security set-keychain-settings -t 3600 -u build.keychain
curl https://droposs.org/drop.der --output drop.der curl https://droposs.org/drop.crt --output drop.pem
swiftc libs/appletrust/add-certificate.swift sudo security authorizationdb write com.apple.trust-settings.user allow
./add-certificate drop.der security add-trusted-cert -r trustRoot -k build.keychain -p codeSign -u -1 drop.pem
rm add-certificate sudo security authorizationdb remove com.apple.trust-settings.user
# sudo security authorizationdb write com.apple.trust-settings.user allow security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
# security add-trusted-cert -r trustRoot -k build.keychain -p codeSign -u -1 drop.pem
# sudo security authorizationdb remove com.apple.trust-settings.user
security import certificate.p12 -k /Library/Keychains/System.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
security find-identity -v -p codesigning build.keychain security find-identity -v -p codesigning build.keychain

2
.gitlab-ci-local/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

8303
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

14
Cargo.toml Normal file
View File

@ -0,0 +1,14 @@
[workspace]
members = [
"client",
"database",
"src-tauri",
"process",
"remote",
"utils",
"cloud_saves",
"download_manager",
"games", "drop-consts",
]
resolver = "3"

View File

@ -1,15 +1,12 @@
use std::{ use std::{
ffi::OsStr, cell::LazyCell, ffi::OsStr, path::PathBuf, process::{Command, Stdio}
path::PathBuf,
process::{Command, Stdio},
sync::LazyLock,
}; };
use log::info; use log::info;
pub static COMPAT_INFO: LazyLock<Option<CompatInfo>> = LazyLock::new(create_new_compat_info); pub const COMPAT_INFO: LazyCell<Option<CompatInfo>> = LazyCell::new(create_new_compat_info);
pub static UMU_LAUNCHER_EXECUTABLE: LazyLock<Option<PathBuf>> = LazyLock::new(|| { pub const UMU_LAUNCHER_EXECUTABLE: LazyCell<Option<PathBuf>> = LazyCell::new(|| {
let x = get_umu_executable(); let x = get_umu_executable();
info!("{:?}", &x); info!("{:?}", &x);
x x

View File

@ -6,6 +6,7 @@ edition = "2024"
[dependencies] [dependencies]
database = { version = "0.1.0", path = "../database" } database = { version = "0.1.0", path = "../database" }
dirs = "6.0.0" dirs = "6.0.0"
drop-consts = { version = "0.1.0", path = "../drop-consts" }
log = "0.4.28" log = "0.4.28"
regex = "1.11.3" regex = "1.11.3"
rustix = "1.1.2" rustix = "1.1.2"

View File

@ -2,7 +2,8 @@ use std::{collections::HashMap, path::PathBuf, str::FromStr};
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
use database::platform::Platform; use database::platform::Platform;
use database::{GameVersion, db::DATA_ROOT_DIR}; use database::GameVersion;
use drop_consts::DATA_ROOT_DIR;
use log::warn; use log::warn;
use crate::error::BackupError; use crate::error::BackupError;
@ -27,7 +28,7 @@ impl BackupManager<'_> {
current_platform: Platform::Windows, current_platform: Platform::Windows,
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
current_platform: Platform::macOS, current_platform: Platform::MacOs,
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
current_platform: Platform::Linux, current_platform: Platform::Linux,
@ -43,7 +44,7 @@ impl BackupManager<'_> {
&LinuxBackupManager {} as &(dyn BackupHandler + Sync + Send), &LinuxBackupManager {} as &(dyn BackupHandler + Sync + Send),
), ),
( (
(Platform::macOS, Platform::macOS), (Platform::MacOs, Platform::MacOs),
&MacBackupManager {} as &(dyn BackupHandler + Sync + Send), &MacBackupManager {} as &(dyn BackupHandler + Sync + Send),
), ),
]), ]),

View File

@ -6,6 +6,7 @@ edition = "2024"
[dependencies] [dependencies]
chrono = "0.4.42" chrono = "0.4.42"
dirs = "6.0.0" dirs = "6.0.0"
drop-consts = { version = "0.1.0", path = "../drop-consts" }
log = "0.4.28" log = "0.4.28"
native_model = { version = "0.6.4", features = ["rmp_serde_1_3"], git = "https://github.com/Drop-OSS/native_model.git"} native_model = { version = "0.6.4", features = ["rmp_serde_1_3"], git = "https://github.com/Drop-OSS/native_model.git"}
rustbreak = "2.0.0" rustbreak = "2.0.0"

View File

@ -1,6 +1,5 @@
use std::{ use std::{
path::PathBuf, sync::LazyLock,
sync::{Arc, LazyLock},
}; };
use rustbreak::{DeSerError, DeSerializer}; use rustbreak::{DeSerError, DeSerializer};
@ -10,19 +9,6 @@ use crate::interface::{DatabaseImpls, DatabaseInterface};
pub static DB: LazyLock<DatabaseInterface> = LazyLock::new(DatabaseInterface::set_up_database); pub static DB: LazyLock<DatabaseInterface> = LazyLock::new(DatabaseInterface::set_up_database);
#[cfg(not(debug_assertions))]
static DATA_ROOT_PREFIX: &str = "drop";
#[cfg(debug_assertions)]
static DATA_ROOT_PREFIX: &str = "drop-debug";
pub static DATA_ROOT_DIR: LazyLock<Arc<PathBuf>> = LazyLock::new(|| {
Arc::new(
dirs::data_dir()
.expect("Failed to get data dir")
.join(DATA_ROOT_PREFIX),
)
});
// Custom JSON serializer to support everything we need // Custom JSON serializer to support everything we need
#[derive(Debug, Default, Clone)] #[derive(Debug, Default, Clone)]
pub struct DropDatabaseSerializer; pub struct DropDatabaseSerializer;
@ -39,7 +25,7 @@ impl<T: native_model::Model + Serialize + DeserializeOwned> DeSerializer<T>
s.read_to_end(&mut buf) s.read_to_end(&mut buf)
.map_err(|e| rustbreak::error::DeSerError::Other(e.into()))?; .map_err(|e| rustbreak::error::DeSerError::Other(e.into()))?;
let (val, _version) = let (val, _version) =
native_model::decode(buf).map_err(|e| DeSerError::Internal(e.to_string()))?; native_model::decode(buf).map_err(|e| rustbreak::error::DeSerError::Internal(e.to_string()))?;
Ok(val) Ok(val)
} }
} }

View File

@ -7,12 +7,13 @@ use std::{
}; };
use chrono::Utc; use chrono::Utc;
use drop_consts::DATA_ROOT_DIR;
use log::{debug, error, info, warn}; use log::{debug, error, info, warn};
use rustbreak::{PathDatabase, RustbreakError}; use rustbreak::{PathDatabase, RustbreakError};
use url::Url; use url::Url;
use crate::{ use crate::{
db::{DATA_ROOT_DIR, DB, DropDatabaseSerializer}, db::{DB, DropDatabaseSerializer},
models::data::Database, models::data::Database,
}; };

View File

@ -4,20 +4,20 @@ use serde::{Deserialize, Serialize};
pub enum Platform { pub enum Platform {
Windows, Windows,
Linux, Linux,
macOS, MacOs,
} }
impl Platform { impl Platform {
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
pub const HOST: Platform = Self::Windows; pub const HOST: Platform = Self::Windows;
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub const HOST: Platform = Self::macOS; pub const HOST: Platform = Self::MacOs;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub const HOST: Platform = Self::Linux; pub const HOST: Platform = Self::Linux;
pub fn is_case_sensitive(&self) -> bool { pub fn is_case_sensitive(&self) -> bool {
match self { match self {
Self::Windows | Self::macOS => false, Self::Windows | Self::MacOs => false,
Self::Linux => true, Self::Linux => true,
} }
} }
@ -28,7 +28,7 @@ impl From<&str> for Platform {
match value.to_lowercase().trim() { match value.to_lowercase().trim() {
"windows" => Self::Windows, "windows" => Self::Windows,
"linux" => Self::Linux, "linux" => Self::Linux,
"mac" | "macos" => Self::macOS, "mac" | "macos" => Self::MacOs,
_ => unimplemented!(), _ => unimplemented!(),
} }
} }
@ -39,7 +39,7 @@ impl From<whoami::Platform> for Platform {
match value { match value {
whoami::Platform::Windows => Platform::Windows, whoami::Platform::Windows => Platform::Windows,
whoami::Platform::Linux => Platform::Linux, whoami::Platform::Linux => Platform::Linux,
whoami::Platform::MacOS => Platform::macOS, whoami::Platform::MacOS => Platform::MacOs,
platform => unimplemented!("Playform {} is not supported", platform), platform => unimplemented!("Playform {} is not supported", platform),
} }
} }

7
drop-consts/Cargo.toml Normal file
View File

@ -0,0 +1,7 @@
[package]
name = "drop-consts"
version = "0.1.0"
edition = "2024"
[dependencies]
dirs = "6.0.0"

23
drop-consts/src/lib.rs Normal file
View File

@ -0,0 +1,23 @@
use std::{cell::LazyCell, path::PathBuf};
#[cfg(not(debug_assertions))]
pub const DATA_ROOT_PREFIX: &str = "drop";
#[cfg(debug_assertions)]
pub const DATA_ROOT_PREFIX: &str = "drop-debug";
pub const DATA_ROOT_DIR: LazyCell<PathBuf> = LazyCell::new(|| {
dirs::data_dir()
.expect("Failed to get data dir")
.join(DATA_ROOT_PREFIX)
});
pub const DROP_DATA_PATH: &str = ".dropdata";
// Downloads
pub const MAX_PACKET_LENGTH: usize = 4096 * 4;
pub const BUMP_SIZE: usize = 4096 * 16;
pub const RETRY_COUNT: usize = 3;
pub const TARGET_BUCKET_SIZE: usize = 63 * 1000 * 1000;
pub const MAX_FILES_PER_BUCKET: usize = (1024 / 4) - 1;

View File

@ -24,3 +24,4 @@ throttle_my_fn = "0.2.6"
utils = { version = "0.1.0", path = "../utils" } utils = { version = "0.1.0", path = "../utils" }
native_model = { version = "0.6.4", features = ["rmp_serde_1_3"], git = "https://github.com/Drop-OSS/native_model.git"} native_model = { version = "0.6.4", features = ["rmp_serde_1_3"], git = "https://github.com/Drop-OSS/native_model.git"}
serde_json = "1.0.145" serde_json = "1.0.145"
drop-consts = { version = "0.1.0", path = "../drop-consts" }

View File

@ -9,6 +9,7 @@ use download_manager::util::download_thread_control_flag::{
DownloadThreadControl, DownloadThreadControlFlag, DownloadThreadControl, DownloadThreadControlFlag,
}; };
use download_manager::util::progress_object::{ProgressHandle, ProgressObject}; use download_manager::util::progress_object::{ProgressHandle, ProgressObject};
use drop_consts::{MAX_FILES_PER_BUCKET, RETRY_COUNT, TARGET_BUCKET_SIZE};
use log::{debug, error, info, warn}; use log::{debug, error, info, warn};
use rayon::ThreadPoolBuilder; use rayon::ThreadPoolBuilder;
use remote::auth::generate_authorization_header; use remote::auth::generate_authorization_header;
@ -39,11 +40,6 @@ use crate::state::GameStatusManager;
use super::download_logic::download_game_bucket; use super::download_logic::download_game_bucket;
use super::drop_data::DropData; use super::drop_data::DropData;
static RETRY_COUNT: usize = 3;
const TARGET_BUCKET_SIZE: usize = 63 * 1000 * 1000;
const MAX_FILES_PER_BUCKET: usize = (1024 / 4) - 1;
pub struct GameDownloadAgent { pub struct GameDownloadAgent {
pub id: String, pub id: String,
pub version: String, pub version: String,

View File

@ -15,6 +15,7 @@ use download_manager::util::download_thread_control_flag::{
DownloadThreadControl, DownloadThreadControlFlag, DownloadThreadControl, DownloadThreadControlFlag,
}; };
use download_manager::util::progress_object::ProgressHandle; use download_manager::util::progress_object::ProgressHandle;
use drop_consts::{BUMP_SIZE, MAX_PACKET_LENGTH};
use log::{debug, info, warn}; use log::{debug, info, warn};
use md5::{Context, Digest}; use md5::{Context, Digest};
use remote::auth::generate_authorization_header; use remote::auth::generate_authorization_header;
@ -25,9 +26,6 @@ use reqwest::blocking::Response;
use crate::downloads::manifest::{ChunkBody, DownloadBucket, DownloadContext, DownloadDrop}; use crate::downloads::manifest::{ChunkBody, DownloadBucket, DownloadContext, DownloadDrop};
static MAX_PACKET_LENGTH: usize = 4096 * 4;
static BUMP_SIZE: usize = 4096 * 16;
pub struct DropWriter<W: Write> { pub struct DropWriter<W: Write> {
hasher: Context, hasher: Context,
destination: BufWriter<W>, destination: BufWriter<W>,
@ -39,8 +37,7 @@ impl DropWriter<File> {
.write(true) .write(true)
.create(true) .create(true)
.truncate(false) .truncate(false)
.open(&path) .open(&path)?;
.inspect_err(|_v| warn!("failed to open {}", path.display()))?;
Ok(Self { Ok(Self {
destination: BufWriter::with_capacity(1024 * 1024, destination), destination: BufWriter::with_capacity(1024 * 1024, destination),
hasher: Context::new(), hasher: Context::new(),
@ -123,7 +120,7 @@ impl<'a> DropDownloadPipeline<'a, Response, File> {
.source .source
.read(&mut copy_buffer[0..size]) .read(&mut copy_buffer[0..size])
.inspect_err(|_| { .inspect_err(|_| {
warn!("got error from {}", drop.filename); info!("got error from {}", drop.filename);
})?; })?;
remaining -= size; remaining -= size;
last_bump += size; last_bump += size;
@ -273,12 +270,7 @@ pub fn download_game_bucket(
#[cfg(unix)] #[cfg(unix)]
{ {
for drop in bucket.drops.iter() { for drop in bucket.drops.iter() {
let permission = if drop.permissions == 0 { let permissions = Permissions::from_mode(drop.permissions);
0o744
} else {
drop.permissions
};
let permissions = Permissions::from_mode(permission);
set_permissions(drop.path.clone(), permissions) set_permissions(drop.path.clone(), permissions)
.map_err(|e| ApplicationDownloadError::IoError(Arc::new(e)))?; .map_err(|e| ApplicationDownloadError::IoError(Arc::new(e)))?;
} }

View File

@ -5,14 +5,13 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
}; };
use drop_consts::DROP_DATA_PATH;
use log::error; use log::error;
use native_model::{Decode, Encode}; use native_model::{Decode, Encode};
use utils::lock; use utils::lock;
pub type DropData = v1::DropData; pub type DropData = v1::DropData;
pub static DROP_DATA_PATH: &str = ".dropdata";
pub mod v1 { pub mod v1 {
use std::{collections::HashMap, path::PathBuf, sync::Mutex}; use std::{collections::HashMap, path::PathBuf, sync::Mutex};

View File

@ -1,10 +1,11 @@
use std::fs; use std::fs;
use database::{DownloadType, DownloadableMetadata, borrow_db_mut_checked}; use database::{DownloadType, DownloadableMetadata, borrow_db_mut_checked};
use drop_consts::DROP_DATA_PATH;
use log::warn; use log::warn;
use crate::{ use crate::{
downloads::drop_data::{DROP_DATA_PATH, DropData}, downloads::drop_data::DropData,
library::set_partially_installed_db, library::set_partially_installed_db,
}; };

View File

@ -1,72 +0,0 @@
import Foundation
import Security
enum SecurityError: Error {
case generalError
}
func deleteCertificateFromKeyChain(_ certificateLabel: String) -> Bool {
let delQuery: [NSString: Any] = [
kSecClass: kSecClassCertificate,
kSecAttrLabel: certificateLabel,
]
let delStatus: OSStatus = SecItemDelete(delQuery as CFDictionary)
return delStatus == errSecSuccess
}
func saveCertificateToKeyChain(_ certificate: SecCertificate, certificateLabel: String) throws {
SecKeychainSetPreferenceDomain(SecPreferencesDomain.system)
deleteCertificateFromKeyChain(certificateLabel)
let setQuery: [NSString: AnyObject] = [
kSecClass: kSecClassCertificate,
kSecValueRef: certificate,
kSecAttrLabel: certificateLabel as AnyObject,
kSecAttrAccessible: kSecAttrAccessibleWhenUnlocked,
]
let addStatus: OSStatus = SecItemAdd(setQuery as CFDictionary, nil)
guard addStatus == errSecSuccess else {
throw SecurityError.generalError
}
var status = SecTrustSettingsSetTrustSettings(certificate, SecTrustSettingsDomain.admin, nil)
}
func getCertificateFromString(stringData: String) throws -> SecCertificate {
if let data = NSData(base64Encoded: stringData, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) {
if let certificate = SecCertificateCreateWithData(kCFAllocatorDefault, data) {
return certificate
}
}
throw SecurityError.generalError
}
if CommandLine.arguments.count != 2 {
print("Usage: \(CommandLine.arguments[0]) [cert.file]")
print("Usage: \(CommandLine.arguments[0]) --version")
exit(1)
}
if (CommandLine.arguments[1] == "--version") {
let version = "dev"
print(version)
exit(0)
} else {
let fileURL = URL(fileURLWithPath: CommandLine.arguments[1])
do {
let certData = try Data(contentsOf: fileURL)
let certificate = SecCertificateCreateWithData(nil, certData as CFData)
if certificate != nil {
print("Saving certificate")
try? saveCertificateToKeyChain(certificate!, certificateLabel: "DropOSS")
exit(0)
} else {
print("ERROR: Unknown error while reading the \(CommandLine.arguments[1]) file.")
}
} catch {
print("ERROR: Unexpected error while reading the \(CommandLine.arguments[1]) file. \(error)")
}
}
exit(1)

View File

@ -1,7 +1,7 @@
{ {
"name": "view", "name": "view",
"private": true, "private": true,
"version": "0.3.4", "version": "0.3.3",
"type": "module", "type": "module",
"scripts": { "scripts": {
"build": "nuxt generate", "build": "nuxt generate",

View File

@ -9,8 +9,8 @@
"dependencies": { "dependencies": {
"@tauri-apps/api": "^2.7.0", "@tauri-apps/api": "^2.7.0",
"@tauri-apps/plugin-deep-link": "^2.4.1", "@tauri-apps/plugin-deep-link": "^2.4.1",
"@tauri-apps/plugin-dialog": "^2.4.0", "@tauri-apps/plugin-dialog": "^2.3.2",
"@tauri-apps/plugin-opener": "^2.5.0", "@tauri-apps/plugin-opener": "^2.4.0",
"@tauri-apps/plugin-os": "^2.3.0", "@tauri-apps/plugin-os": "^2.3.0",
"@tauri-apps/plugin-shell": "^2.3.0", "@tauri-apps/plugin-shell": "^2.3.0",
"pino": "^9.7.0", "pino": "^9.7.0",

View File

@ -7,6 +7,7 @@ edition = "2024"
chrono = "0.4.42" chrono = "0.4.42"
client = { version = "0.1.0", path = "../client" } client = { version = "0.1.0", path = "../client" }
database = { version = "0.1.0", path = "../database" } database = { version = "0.1.0", path = "../database" }
drop-consts = { version = "0.1.0", path = "../drop-consts" }
dynfmt = "0.1.5" dynfmt = "0.1.5"
games = { version = "0.1.0", path = "../games" } games = { version = "0.1.0", path = "../games" }
log = "0.4.28" log = "0.4.28"

View File

@ -12,8 +12,9 @@ use std::{
use database::{ use database::{
ApplicationTransientStatus, Database, DownloadType, DownloadableMetadata, GameDownloadStatus, ApplicationTransientStatus, Database, DownloadType, DownloadableMetadata, GameDownloadStatus,
GameVersion, borrow_db_checked, borrow_db_mut_checked, db::DATA_ROOT_DIR, platform::Platform, GameVersion, borrow_db_checked, borrow_db_mut_checked, platform::Platform,
}; };
use drop_consts::DATA_ROOT_DIR;
use dynfmt::Format; use dynfmt::Format;
use dynfmt::SimpleCurlyFormat; use dynfmt::SimpleCurlyFormat;
use games::{library::push_game_update, state::GameStatusManager}; use games::{library::push_game_update, state::GameStatusManager};
@ -54,7 +55,7 @@ impl ProcessManager<'_> {
current_platform: Platform::Windows, current_platform: Platform::Windows,
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
current_platform: Platform::macOS, current_platform: Platform::MacOs,
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
current_platform: Platform::Linux, current_platform: Platform::Linux,
@ -72,7 +73,7 @@ impl ProcessManager<'_> {
&NativeGameLauncher {} as &(dyn ProcessHandler + Sync + Send + 'static), &NativeGameLauncher {} as &(dyn ProcessHandler + Sync + Send + 'static),
), ),
( (
(Platform::macOS, Platform::macOS), (Platform::MacOs, Platform::MacOs),
&NativeGameLauncher {} as &(dyn ProcessHandler + Sync + Send + 'static), &NativeGameLauncher {} as &(dyn ProcessHandler + Sync + Send + 'static),
), ),
( (

View File

@ -8,6 +8,7 @@ bitcode = "0.6.7"
chrono = "0.4.42" chrono = "0.4.42"
client = { version = "0.1.0", path = "../client" } client = { version = "0.1.0", path = "../client" }
database = { version = "0.1.0", path = "../database" } database = { version = "0.1.0", path = "../database" }
drop-consts = { version = "0.1.0", path = "../drop-consts" }
droplet-rs = "0.7.3" droplet-rs = "0.7.3"
gethostname = "1.0.2" gethostname = "1.0.2"
hex = "0.4.3" hex = "0.4.3"

View File

@ -1,10 +1,8 @@
use std::{ use std::{
fs::{self, File}, fs::{self, File}, io::Read, sync::LazyLock
io::Read,
sync::LazyLock,
}; };
use database::db::DATA_ROOT_DIR; use drop_consts::DATA_ROOT_DIR;
use log::{debug, info, warn}; use log::{debug, info, warn};
use reqwest::Certificate; use reqwest::Certificate;
use serde::Deserialize; use serde::Deserialize;

2256
src-tauri/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
[package] [package]
name = "drop-app" name = "drop-app"
version = "0.3.4" version = "0.3.3"
description = "The client application for the open-source, self-hosted game distribution platform Drop" description = "The client application for the open-source, self-hosted game distribution platform Drop"
authors = ["Drop OSS"] authors = ["Drop OSS"]
edition = "2024" edition = "2024"
@ -80,13 +80,14 @@ bytes = "1.10.1"
# Workspaces # Workspaces
client = { version = "0.1.0", path = "./client" } client = { version = "0.1.0", path = "../client" }
database = { path = "./database" } database = { path = "../database" }
process = { path = "./process" } process = { path = "../process" }
remote = { version = "0.1.0", path = "./remote" } remote = { version = "0.1.0", path = "../remote" }
utils = { path = "./utils" } utils = { path = "../utils" }
games = { version = "0.1.0", path = "./games" } games = { version = "0.1.0", path = "../games" }
download_manager = { version = "0.1.0", path = "./download_manager" } download_manager = { version = "0.1.0", path = "../download_manager" }
drop-consts = { version = "0.1.0", path = "../drop-consts" }
[dependencies.dynfmt] [dependencies.dynfmt]
version = "0.1.5" version = "0.1.5"
@ -137,18 +138,3 @@ features = ["derive", "rc"]
lto = true lto = true
codegen-units = 1 codegen-units = 1
panic = 'abort' panic = 'abort'
[workspace]
members = [
"client",
"database",
"process",
"remote",
"utils",
"cloud_saves",
"download_manager",
"games",
]
resolver = "3"

View File

@ -14,6 +14,7 @@ use std::{
use ::client::{app_status::AppStatus, autostart::sync_autostart_on_startup, user::User}; use ::client::{app_status::AppStatus, autostart::sync_autostart_on_startup, user::User};
use ::download_manager::DownloadManagerWrapper; use ::download_manager::DownloadManagerWrapper;
use drop_consts::DATA_ROOT_DIR;
use ::games::{library::Game, scan::scan_install_dirs}; use ::games::{library::Game, scan::scan_install_dirs};
use ::process::ProcessManagerWrapper; use ::process::ProcessManagerWrapper;
use ::remote::{ use ::remote::{
@ -26,7 +27,7 @@ use ::remote::{
utils::DROP_CLIENT_ASYNC, utils::DROP_CLIENT_ASYNC,
}; };
use database::{ use database::{
DB, GameDownloadStatus, borrow_db_checked, borrow_db_mut_checked, db::DATA_ROOT_DIR, DB, GameDownloadStatus, borrow_db_checked, borrow_db_mut_checked,
interface::DatabaseImpls, interface::DatabaseImpls,
}; };
use log::{LevelFilter, debug, info, warn}; use log::{LevelFilter, debug, info, warn};

View File

@ -5,9 +5,10 @@ use std::{
}; };
use database::{ use database::{
Settings, borrow_db_checked, borrow_db_mut_checked, db::DATA_ROOT_DIR, debug::SystemData, Settings, borrow_db_checked, borrow_db_mut_checked, debug::SystemData,
}; };
use download_manager::error::DownloadManagerError; use download_manager::error::DownloadManagerError;
use drop_consts::DATA_ROOT_DIR;
use games::scan::scan_install_dirs; use games::scan::scan_install_dirs;
use log::error; use log::error;
use serde_json::Value; use serde_json::Value;

View File

@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2.0.0", "$schema": "https://schema.tauri.app/config/2.0.0",
"productName": "Drop Desktop Client", "productName": "Drop Desktop Client",
"version": "0.3.4", "version": "0.3.3",
"identifier": "dev.drop.client", "identifier": "dev.drop.client",
"build": { "build": {
"beforeDevCommand": "yarn --cwd main dev --port 1432", "beforeDevCommand": "yarn --cwd main dev --port 1432",