mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-07-06 13:07:49 +02:00
feat: windows support
This commit is contained in:
@@ -24,6 +24,18 @@ impl SyncEngine {
|
||||
}
|
||||
|
||||
pub async fn create_from_settings(app_handle: &tauri::AppHandle) -> Result<Self, String> {
|
||||
// Cloud auth takes priority
|
||||
if crate::cloud_auth::CLOUD_AUTH.is_logged_in().await {
|
||||
let url = crate::cloud_auth::CLOUD_SYNC_URL.to_string();
|
||||
let token = crate::cloud_auth::CLOUD_AUTH
|
||||
.get_or_refresh_sync_token()
|
||||
.await
|
||||
.map_err(|e| format!("Failed to get cloud sync token: {e}"))?
|
||||
.ok_or_else(|| "Cloud sync token not available".to_string())?;
|
||||
return Ok(Self::new(url, token));
|
||||
}
|
||||
|
||||
// Fall back to self-hosted settings
|
||||
let manager = SettingsManager::instance();
|
||||
let settings = manager
|
||||
.load_settings()
|
||||
|
||||
@@ -2,7 +2,6 @@ use super::engine::SyncEngine;
|
||||
use super::subscription::SyncWorkItem;
|
||||
use crate::events;
|
||||
use crate::profile::ProfileManager;
|
||||
use once_cell::sync::OnceCell;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::Arc;
|
||||
@@ -11,14 +10,16 @@ use tokio::sync::mpsc;
|
||||
use tokio::sync::Mutex;
|
||||
use tokio::time::sleep;
|
||||
|
||||
static GLOBAL_SCHEDULER: OnceCell<Arc<SyncScheduler>> = OnceCell::new();
|
||||
static GLOBAL_SCHEDULER: std::sync::Mutex<Option<Arc<SyncScheduler>>> = std::sync::Mutex::new(None);
|
||||
|
||||
pub fn get_global_scheduler() -> Option<Arc<SyncScheduler>> {
|
||||
GLOBAL_SCHEDULER.get().cloned()
|
||||
GLOBAL_SCHEDULER.lock().ok().and_then(|g| g.clone())
|
||||
}
|
||||
|
||||
pub fn set_global_scheduler(scheduler: Arc<SyncScheduler>) {
|
||||
let _ = GLOBAL_SCHEDULER.set(scheduler);
|
||||
if let Ok(mut g) = GLOBAL_SCHEDULER.lock() {
|
||||
*g = Some(scheduler);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
||||
@@ -53,6 +53,20 @@ impl SyncSubscription {
|
||||
app_handle: &tauri::AppHandle,
|
||||
work_tx: mpsc::UnboundedSender<SyncWorkItem>,
|
||||
) -> Result<Option<Self>, String> {
|
||||
// Cloud auth takes priority
|
||||
if crate::cloud_auth::CLOUD_AUTH.is_logged_in().await {
|
||||
let url = crate::cloud_auth::CLOUD_SYNC_URL.to_string();
|
||||
let token = crate::cloud_auth::CLOUD_AUTH
|
||||
.get_or_refresh_sync_token()
|
||||
.await
|
||||
.map_err(|e| format!("Failed to get cloud sync token: {e}"))?;
|
||||
let Some(token) = token else {
|
||||
return Ok(None);
|
||||
};
|
||||
return Ok(Some(Self::new(url, token, work_tx)));
|
||||
}
|
||||
|
||||
// Fall back to self-hosted settings
|
||||
let manager = SettingsManager::instance();
|
||||
let settings = manager
|
||||
.load_settings()
|
||||
|
||||
Reference in New Issue
Block a user