feat(single-instance): Add semver compatibility check for Windows and Linux (#502)

* added semver compatibility check for Windows and Linux

* fixed formatting

* put semver feature behind a feature flag

* remove semver from root manifest

* linux compile error

* docs: Add mention for semver feature in readme

---------

Co-authored-by: FabianLars <fabianlars@fabianlars.de>
This commit is contained in:
matthme
2024-04-15 13:54:09 +00:00
committed by GitHub
parent 57e979adaf
commit 4210cf316a
7 changed files with 63 additions and 3 deletions
@@ -2,6 +2,9 @@
use std::sync::Arc;
#[cfg(feature = "semver")]
use crate::semver_compat::semver_compat_string;
use crate::SingleInstanceCallback;
use tauri::{
plugin::{self, TauriPlugin},
@@ -26,6 +29,15 @@ impl<R: Runtime> SingleInstanceDBus<R> {
}
}
#[cfg(feature = "semver")]
fn dbus_id(config: Arc<Config>, version: semver::Version) -> String {
let mut id = config.tauri.bundle.identifier.replace(['.', '-'], "_");
id.push('_');
id.push_str(semver_compat_string(version).as_str());
id
}
#[cfg(not(feature = "semver"))]
fn dbus_id(config: Arc<Config>) -> String {
config.tauri.bundle.identifier.replace(['.', '-'], "_")
}
@@ -33,7 +45,11 @@ fn dbus_id(config: Arc<Config>) -> String {
pub fn init<R: Runtime>(f: Box<SingleInstanceCallback<R>>) -> TauriPlugin<R> {
plugin::Builder::new("single-instance")
.setup(|app| {
#[cfg(feature = "semver")]
let id = dbus_id(app.config(), app.package_info().version.clone());
#[cfg(not(feature = "semver"))]
let id = dbus_id(app.config());
let single_instance_dbus = SingleInstanceDBus {
callback: f,
app_handle: app.clone(),
@@ -85,7 +101,15 @@ pub fn init<R: Runtime>(f: Box<SingleInstanceCallback<R>>) -> TauriPlugin<R> {
pub fn destroy<R: Runtime, M: Manager<R>>(manager: &M) {
if let Some(connection) = manager.try_state::<ConnectionHandle>() {
let dbus_name = format!("org.{}.SingleInstance", dbus_id(manager.config()));
#[cfg(feature = "semver")]
let id = dbus_id(
manager.config(),
manager.app_handle().package_info().version.clone(),
);
#[cfg(not(feature = "semver"))]
let id = dbus_id(manager.config());
let dbus_name = format!("org.{id}.SingleInstance",);
let _ = connection.0.release_name(dbus_name);
}
}