Radish alpha
r
rad:z4D5UCArafTzTQpDZNQRuqswh3ury
Radicle desktop app
Radicle
Git
Remove unused event listeners
Sebastian Martinez committed 10 months ago
commit c8b086166266836b5779278fabf81b7501588353
parent a1de446
5 files changed +26 -90
modified crates/radicle-tauri/src/commands/startup.rs
@@ -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());

modified src/App.svelte
@@ -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();
    }
modified src/lib/events.ts
@@ -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(),
-
);
modified src/lib/startup.svelte.ts
@@ -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";

-
// 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
-
  });
+
export let unlistenNodeEvents: UnlistenFn | undefined = undefined;

-
  const unlistenSyncStatus = await listen<Record<string, SyncStatus>>(
-
    "sync_status",
-
    event => {
-
      syncStatus.set(new SvelteMap(Object.entries(event.payload)));
-
    },
-
  );
+
export function setUnlistenNodeEvents(unlisten: UnlistenFn) {
+
  unlistenNodeEvents = unlisten;
+
}

-
  const unlistenNodeEvents = await listen<boolean>("node_running", event => {
+
// Will be called once in the startup of the app
+
export const createEventEmittersOnce = once(async () => {
+
  return await listen<boolean>("node_running", event => {
    nodeRunning.set(event.payload);
  });
-

-
  return [unlistenEvents, unlistenSyncStatus, unlistenNodeEvents];
});
modified src/views/booting/Auth.svelte
@@ -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" });