feat: add single-instance support, Android APK download, and splash screen styling

This commit is contained in:
Mohamed Boudra
2026-03-12 10:42:40 +07:00
parent 91dde29146
commit a79134ec9e
5 changed files with 37 additions and 26 deletions
@@ -11,8 +11,9 @@ const styles = StyleSheet.create((theme) => ({
backgroundColor: theme.colors.surface0,
},
status: {
marginTop: theme.spacing[8],
color: theme.colors.foregroundMuted,
fontSize: theme.fontSize.base,
fontSize: theme.fontSize.lg,
},
}));
+16
View File
@@ -2645,6 +2645,7 @@ dependencies = [
"tauri-plugin-log",
"tauri-plugin-notification",
"tauri-plugin-opener",
"tauri-plugin-single-instance",
"tauri-plugin-updater",
"tauri-plugin-websocket",
"tokio",
@@ -4299,6 +4300,21 @@ dependencies = [
"zbus",
]
[[package]]
name = "tauri-plugin-single-instance"
version = "2.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acba6b5ca527a96cdfcc96ae09b09ccb91ddff5e33978ca6873b96ea16bb404c"
dependencies = [
"serde",
"serde_json",
"tauri",
"thiserror 2.0.18",
"tracing",
"windows-sys 0.60.2",
"zbus",
]
[[package]]
name = "tauri-plugin-updater"
version = "2.9.0"
+1 -1
View File
@@ -35,6 +35,7 @@ tauri-plugin-dialog = "2"
tauri-plugin-log = "2"
tauri-plugin-notification = "2"
tauri-plugin-opener = "2"
tauri-plugin-single-instance = "2"
tauri-plugin-updater = "2"
tauri-plugin-websocket = "2"
tokio = { version = "1", features = ["net", "sync"] }
@@ -48,4 +49,3 @@ tokio-tungstenite = "0.24"
+7
View File
@@ -500,6 +500,13 @@ async fn garbage_collect_attachment_files(
pub fn run() {
tauri::Builder::default()
.manage(LocalTransportState::default())
.plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| {
if let Some(window) = app.get_webview_window("main") {
let _ = window.show();
let _ = window.unminimize();
let _ = window.set_focus();
}
}))
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_notification::init())
.plugin(tauri_plugin_opener::init())
+11 -24
View File
@@ -7,6 +7,7 @@ import '~/styles.css'
const desktopVersion = websitePackage.version
const releaseBase = `https://github.com/getpaseo/paseo/releases/download/v${desktopVersion}`
const androidApkHref = `${releaseBase}/paseo-v${desktopVersion}-android.apk`
type Platform = 'mac-silicon' | 'mac-intel' | 'windows' | 'linux'
@@ -364,12 +365,18 @@ function GetStarted() {
>
<AppleIcon className="h-5 w-5" />
</a>
<span className="relative group inline-flex items-center justify-center rounded-lg border border-white/10 px-3 py-2 text-white/40 cursor-default">
<GooglePlayIcon className="h-5 w-5 opacity-40" />
<a
href={androidApkHref}
target="_blank"
rel="noopener noreferrer"
className="relative group inline-flex items-center justify-center rounded-lg border border-white/20 px-3 py-2 text-white hover:bg-white/10 transition-colors"
aria-label="Download APK"
>
<AndroidIcon className="h-5 w-5" />
<span className="absolute -top-8 left-1/2 -translate-x-1/2 px-2 py-1 rounded bg-white text-black text-xs whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none">
Coming soon
Download APK (Play Store coming soon)
</span>
</span>
</a>
<ServerInstallButton />
</div>
<div className="flex items-center gap-2 pt-8">
@@ -593,26 +600,6 @@ function AppStoreIcon(props: React.SVGProps<SVGSVGElement>) {
)
}
function GooglePlayIcon(props: React.SVGProps<SVGSVGElement>) {
return (
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28.99 31.99" aria-hidden="true" {...props}>
<path d="M13.54 15.28.12 29.34a3.66 3.66 0 0 0 5.33 2.16l15.1-8.6Z" fill="#ea4335" />
<path
d="m27.11 12.89-6.53-3.74-7.35 6.45 7.38 7.28 6.48-3.7a3.54 3.54 0 0 0 1.5-4.79 3.62 3.62 0 0 0-1.5-1.5z"
fill="#fbbc04"
/>
<path
d="M.12 2.66a3.57 3.57 0 0 0-.12.92v24.84a3.57 3.57 0 0 0 .12.92L14 15.64Z"
fill="#4285f4"
/>
<path
d="m13.64 16 6.94-6.85L5.5.51A3.73 3.73 0 0 0 3.63 0 3.64 3.64 0 0 0 .12 2.65Z"
fill="#34a853"
/>
</svg>
)
}
function WindowsIcon(props: React.SVGProps<SVGSVGElement>) {
return (
<svg