diff --git a/package-lock.json b/package-lock.json index 4df8d71..63aa5d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,15 @@ { "name": "libredirect_frontends_manager", - "version": "0.0.6", + "version": "0.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "libredirect_frontends_manager", - "version": "0.0.6", + "version": "0.0.8", "dependencies": { - "@tauri-apps/api": "^1.3.0" + "@tauri-apps/api": "^1.3.0", + "@tauri-apps/plugin-fs-watch": "github:tauri-apps/tauri-plugin-fs-watch#v1" }, "devDependencies": { "@tauri-apps/cli": "^1.3.1" @@ -198,6 +199,14 @@ "engines": { "node": ">= 10" } + }, + "node_modules/@tauri-apps/plugin-fs-watch": { + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/tauri-apps/tauri-plugin-fs-watch.git#ffe7dfd038c6b27756253b8250b1d393c99533a0", + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "^1.2.0" + } } } } diff --git a/package.json b/package.json index cdb2457..759df62 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "libredirect_frontends_manager", "private": true, - "version": "0.0.8", + "version": "0.0.9", "type": "module", "scripts": { "tauri": "tauri" @@ -10,6 +10,7 @@ "@tauri-apps/cli": "^1.3.1" }, "dependencies": { - "@tauri-apps/api": "^1.3.0" + "@tauri-apps/api": "^1.3.0", + "@tauri-apps/plugin-fs-watch": "github:tauri-apps/tauri-plugin-fs-watch#v1" } } diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 526b288..5c982eb 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -758,6 +758,15 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + [[package]] name = "futf" version = "0.1.5" @@ -1305,6 +1314,26 @@ dependencies = [ "cfb", ] +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + [[package]] name = "instant" version = "0.1.12" @@ -1401,6 +1430,26 @@ dependencies = [ "treediff", ] +[[package]] +name = "kqueue" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587" +dependencies = [ + "bitflags", + "libc", +] + [[package]] name = "kuchiki" version = "0.8.1" @@ -1461,13 +1510,14 @@ dependencies = [ [[package]] name = "libredirect_frontends_manager" -version = "0.0.8" +version = "0.0.9" dependencies = [ "serde", "serde_json", "signal-hook", "tauri", "tauri-build", + "tauri-plugin-fs-watch", ] [[package]] @@ -1597,6 +1647,18 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.45.0", +] + [[package]] name = "native-tls" version = "0.2.11" @@ -1655,6 +1717,36 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +[[package]] +name = "notify" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d9ba6c734de18ca27c8cef5cd7058aa4ac9f63596131e4c7e41e579319032a2" +dependencies = [ + "bitflags", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "mio", + "serde", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "notify-debouncer-mini" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e55ee272914f4563a2f8b8553eb6811f3c0caea81c756346bad15b7e3ef969f0" +dependencies = [ + "crossbeam-channel", + "notify", + "serde", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2956,6 +3048,20 @@ dependencies = [ "tauri-utils", ] +[[package]] +name = "tauri-plugin-fs-watch" +version = "0.0.0" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#794f2d5cb8d53284f0abbeb8f584185b4dce3fc1" +dependencies = [ + "log", + "notify", + "notify-debouncer-mini", + "serde", + "serde_json", + "tauri", + "thiserror", +] + [[package]] name = "tauri-runtime" version = "0.13.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 7798f74..e959ece 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libredirect_frontends_manager" -version = "0.0.8" +version = "0.0.9" description = "Host privacy frontends locally on your computer rather than relying on 3rd party instances" authors = ["you"] license = "" @@ -17,6 +17,7 @@ tauri = { version = "1.3", features = ["dialog-all", "fs-all", "http-all", "os-a serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" signal-hook = "0.3.15" +tauri-plugin-fs-watch = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } [features] # this feature is used for production builds or when `devPath` points to the filesystem diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index e556ef2..3b53dec 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -6,6 +6,7 @@ use tauri::{ fn main() { tauri::Builder::default() + .plugin(tauri_plugin_fs_watch::init()) .system_tray( SystemTray::new().with_menu( SystemTrayMenu::new() diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 7cf94ad..b1e5e58 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "Libredirect Frontends Manager", - "version": "0.0.8" + "version": "0.0.9" }, "tauri": { "allowlist": { diff --git a/src/index.js b/src/index.js index 50df83b..596decd 100644 --- a/src/index.js +++ b/src/index.js @@ -16,10 +16,8 @@ let frontends_running = {}; const platform = await window.__TAURI__.os.platform() const config = JSON.parse(await fs.readTextFile(await path.resolveResource('frontends.json'))) let isDockerInstalled = await docker_frontends.health() - const caddy_donloading = new Twindow.WebviewWindow('refreshWindow', { url: 'message.html#Downloading Caddy', height: 200, width: 400, center: true }); await binary_frontends.run_caddy() await binary_frontends.download_stdin_parser() - caddy_donloading.close() if (isDockerInstalled == 'running') { await docker_frontends.download_frontend('redis') await docker_frontends.run_frontend('redis') @@ -243,7 +241,10 @@ async function quitApp() { } async function refreshApp() { - const webview = new Twindow.WebviewWindow('refreshWindow', { url: 'message.html#Refreshing', height: 200, width: 400, center: true, title: 'Refreshing' }); + const webview = new Twindow.WebviewWindow( + 'refreshWindow', + { url: 'message.html#Refreshing', height: 200, width: 400, center: true, title: 'Refreshing' } + ); await binary_frontends.stop_all() await docker_frontends.stop_all() await webview.close() diff --git a/src/services/binary_frontends.js b/src/services/binary_frontends.js index 23f5138..57b4d75 100644 --- a/src/services/binary_frontends.js +++ b/src/services/binary_frontends.js @@ -1,7 +1,9 @@ +const Twindow = window.__TAURI__.window const shell = window.__TAURI__.shell; const path = window.__TAURI__.path; const fs = window.__TAURI__.fs; -const http = window.__TAURI__.http +const http = window.__TAURI__.http; +import { watch } from "tauri-plugin-fs-watch-api"; Object.values = function (obj) { return Object.keys(obj).map(key => obj[key]) @@ -29,6 +31,7 @@ async function run_caddy() { platform = await window.__TAURI__.os.platform() const result = await check_downloaded('caddy') if (result == 'not_downloaded') { + const caddy_donloading = new Twindow.WebviewWindow('refreshWindow', { url: 'message.html#Downloading Caddy', height: 200, width: 400, center: true }); let filename let url if (platform == 'linux') { @@ -45,6 +48,7 @@ async function run_caddy() { if (platform == 'linux') { await new shell.Command('chmod', ['u+x', filename], { cwd: await path.appLocalDataDir() }).execute(); } + caddy_donloading.close() } let command if (platform == 'win32') { @@ -81,13 +85,6 @@ async function download_stdin_parser() { await fs.copyFile(_path, await path.join(await path.homeDir(), '.mozilla', 'native-messaging-hosts', 'org.libredirect.stdin_parser.json'), { dir: fs.BaseDirectory.AppLocalData }) } } - (async () => { - while (true) { - const data = await fs.readTextFile(await path.join('stdin_parser', 'settings.json'), { dir: fs.BaseDirectory.AppLocalData }) - console.log(JSON.parse(data)) - await new Promise(resolve => setTimeout(async () => resolve(), 1000)) - } - })() } async function run_frontend(name) { diff --git a/src/services/docker_frontends.js b/src/services/docker_frontends.js index e9f2c72..a66873c 100644 --- a/src/services/docker_frontends.js +++ b/src/services/docker_frontends.js @@ -76,17 +76,21 @@ async function remove_frontend(name) { function health() { return new Promise(async resolve => { - const cmd = new shell.Command('docker', ['compose', 'version']) - cmd.on('error', () => resolve('not_installed')); - cmd.stderr.on('data', () => resolve('not_installed')) - cmd.stdout.on('data', async () => { - const cmd = new shell.Command('docker', ['ps']) - cmd.on('error', () => resolve('not_running')); - cmd.stdout.on('data', () => resolve('running')) - cmd.stderr.on('data', () => resolve('not_running')) + try { + const cmd = new shell.Command('docker', ['compose', 'version']) + cmd.on('error', () => resolve('not_installed')); + cmd.stderr.on('data', () => resolve('not_installed')) + cmd.stdout.on('data', async () => { + const cmd = new shell.Command('docker', ['ps']) + cmd.on('error', () => resolve('not_running')); + cmd.stdout.on('data', () => resolve('running')) + cmd.stderr.on('data', () => resolve('not_running')) + await cmd.spawn(); + }) await cmd.spawn(); - }) - await cmd.spawn(); + } catch (error) { + resolve('not_installed') + } }) }