Remove unused event listeners

This commit is contained in:
Sebastian Martinez
2025-06-18 16:24:07 +02:00
parent a1de446c79
commit c8b0861662
5 changed files with 26 additions and 90 deletions
@@ -1,12 +1,8 @@
use std::collections::BTreeMap;
use serde::Serialize;
use tauri::{AppHandle, Emitter, Manager};
use radicle::cob::cache::COBS_DB_FILE;
use radicle::identity::RepoId;
use radicle::node::{Handle, Node, NOTIFICATIONS_DB_FILE};
use radicle::storage::ReadStorage;
use radicle_types::config::Config;
use radicle_types::error::Error;
@@ -49,8 +45,6 @@ pub(crate) fn check_radicle_cli(ctx: tauri::State<AppState>) -> Result<(), Error
pub(crate) fn startup(app: AppHandle) -> Result<Config, Error> {
let profile = radicle::Profile::load()?;
let home = profile.home();
let repositories = profile.storage.repositories()?;
let public_key = profile.public_key;
let cobs_cache = radicle::cob::cache::Store::open(home.cobs().join(COBS_DB_FILE))?;
cobs_cache.check_version()?;
@@ -65,14 +59,10 @@ pub(crate) fn startup(app: AppHandle) -> Result<Config, Error> {
let patch_service = domain::patch::service::Service::new(cob_db);
let node_handle = app.app_handle().clone();
let sync_handle = app.app_handle().clone();
let events_handle = app.app_handle().clone();
let node = Node::new(profile.socket());
let node_status = node.clone();
let mut node_seeds = node.clone();
app.manage(inbox_service);
app.manage(patch_service);
@@ -83,47 +73,6 @@ pub(crate) fn startup(app: AppHandle) -> Result<Config, Error> {
}
});
tauri::async_runtime::spawn(async move {
loop {
let mut sync_status =
BTreeMap::<RepoId, Option<radicle_types::cobs::repo::SyncStatus>>::new();
for repo in &repositories {
if let Ok(seeds) = node_seeds.seeds(repo.rid).map(Into::<Vec<_>>::into) {
if let Some(status) =
seeds
.iter()
.find_map(|radicle::node::Seed { nid, sync, .. }| {
(*nid == public_key).then_some(sync.clone())
})
{
sync_status.insert(repo.rid, status.map(Into::into));
} else {
// The local node wasn't found in the seed nodes table.
sync_status.insert(repo.rid, None);
}
}
}
let _ = sync_handle.emit("sync_status", sync_status);
tokio::time::sleep(std::time::Duration::from_secs(10)).await;
}
});
tauri::async_runtime::spawn(async move {
loop {
if node.is_running() {
log::info!("node: spawned node event subscription.");
while let Ok(events) = node.subscribe(std::time::Duration::MAX) {
for event in events.into_iter().flatten() {
let _ = events_handle.emit("event", event);
}
}
log::info!("node: event subscription loop has exited.");
}
tokio::time::sleep(std::time::Duration::from_secs(2)).await;
}
});
let state = AppState { profile };
app.manage(state.clone());
+12 -14
View File
@@ -1,24 +1,28 @@
<script lang="ts">
import type { ErrorWrapper } from "@bindings/error/ErrorWrapper";
import type { Config } from "@bindings/config/Config";
import type { UnlistenFn } from "@tauri-apps/api/event";
import delay from "lodash/delay";
import { listen } from "@tauri-apps/api/event";
import { onDestroy, onMount } from "svelte";
import * as router from "@app/lib/router";
import { checkAuth, startup } from "@app/lib/auth.svelte";
import { createEventEmittersOnce } from "@app/lib/startup.svelte";
import { dynamicInterval } from "@app/lib/interval";
import { invoke } from "@app/lib/invoke";
import { nodeRunning } from "@app/lib/events";
import {
resetFontSize,
increaseFontSize,
decreaseFontSize,
fontSettings,
} from "@app/lib/appearance.svelte";
import {
setUnlistenNodeEvents,
unlistenNodeEvents,
} from "@app/lib/startup.svelte";
import { theme } from "@app/components/ThemeSwitch.svelte";
import { unreachable, isMac } from "@app/lib/utils";
import delay from "lodash/delay";
import Auth from "@app/views/booting/Auth.svelte";
import CreateIdentity from "@app/views/booting/CreateIdentity.svelte";
@@ -37,9 +41,6 @@
const activeRouteStore = router.activeRouteStore;
let profile = $state<Config>();
let unlistenEvents: UnlistenFn | undefined = undefined;
let unlistenNodeEvents: UnlistenFn | undefined = undefined;
let unlistenSyncStatus: UnlistenFn | undefined = undefined;
let showSpinner = $state(false);
delay(() => (showSpinner = true), 1000);
@@ -53,8 +54,11 @@
}
if (window.__TAURI_INTERNALS__) {
[unlistenEvents, unlistenNodeEvents, unlistenSyncStatus] =
await createEventEmittersOnce();
setUnlistenNodeEvents(
await listen<boolean>("node_running", event => {
nodeRunning.set(event.payload);
}),
);
}
try {
@@ -73,12 +77,6 @@
});
onDestroy(() => {
if (unlistenEvents) {
unlistenEvents();
}
if (unlistenSyncStatus) {
unlistenSyncStatus();
}
if (unlistenNodeEvents) {
unlistenNodeEvents();
}
-6
View File
@@ -1,9 +1,3 @@
import type { SyncStatus } from "@bindings/repo/SyncStatus";
import { SvelteMap } from "svelte/reactivity";
import { writable } from "svelte/store";
export const nodeRunning = writable<boolean>(false);
export const syncStatus = writable<SvelteMap<string, SyncStatus>>(
new SvelteMap(),
);
+9 -17
View File
@@ -1,27 +1,19 @@
import type { SyncStatus } from "@bindings/repo/SyncStatus";
import type { UnlistenFn } from "@tauri-apps/api/event";
import once from "lodash/once";
import { SvelteMap } from "svelte/reactivity";
import { listen } from "@tauri-apps/api/event";
import { nodeRunning, syncStatus } from "./events";
import { nodeRunning } from "./events";
export let unlistenNodeEvents: UnlistenFn | undefined = undefined;
export function setUnlistenNodeEvents(unlisten: UnlistenFn) {
unlistenNodeEvents = unlisten;
}
// Will be called once in the startup of the app
export const createEventEmittersOnce = once(async () => {
const unlistenEvents = await listen("event", () => {
// Add handler for incoming events
});
const unlistenSyncStatus = await listen<Record<string, SyncStatus>>(
"sync_status",
event => {
syncStatus.set(new SvelteMap(Object.entries(event.payload)));
},
);
const unlistenNodeEvents = await listen<boolean>("node_running", event => {
return await listen<boolean>("node_running", event => {
nodeRunning.set(event.payload);
});
return [unlistenEvents, unlistenSyncStatus, unlistenNodeEvents];
});
+5 -2
View File
@@ -3,7 +3,6 @@
import type { ErrorWrapper } from "@bindings/error/ErrorWrapper";
import * as router from "@app/lib/router";
import { createEventEmittersOnce } from "@app/lib/startup.svelte";
import { invoke } from "@app/lib/invoke";
import { truncateDid } from "@app/lib/utils";
@@ -13,6 +12,10 @@
import Spinner from "@app/components/Spinner.svelte";
import TextInput from "@app/components/TextInput.svelte";
import logo from "/radicle.svg?url";
import {
setUnlistenNodeEvents,
createEventEmittersOnce,
} from "@app/lib/startup.svelte";
interface Props {
profile: Author;
@@ -30,7 +33,7 @@
try {
await invoke("authenticate", { passphrase });
if (window.__TAURI_INTERNALS__) {
await createEventEmittersOnce();
setUnlistenNodeEvents(await createEventEmittersOnce());
}
passphrase = " ".repeat(passphrase.length);
await router.push({ resource: "home", activeTab: "all" });