From 60694964f5c6c79e015856dce896f9d7d252bf81 Mon Sep 17 00:00:00 2001 From: aaday321 Date: Sun, 25 Jan 2026 02:56:49 -0800 Subject: [PATCH] feat: Added new data model to save directories, added controller to handle savings directories, added event on FE --- src-tauri/entity/src/lib.rs | 2 ++ src-tauri/entity/src/saved_directories.rs | 14 ++++++++++++++ src-tauri/src/lib.rs | 1 + src-tauri/src/music/commands.rs | 13 +++++++++++++ src/app/app.component.ts | 12 ++++++++---- 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 src-tauri/entity/src/saved_directories.rs diff --git a/src-tauri/entity/src/lib.rs b/src-tauri/entity/src/lib.rs index c9a5203..d09569c 100644 --- a/src-tauri/entity/src/lib.rs +++ b/src-tauri/entity/src/lib.rs @@ -1,2 +1,4 @@ pub mod metadata; pub mod song; +pub mod saved_directories; + diff --git a/src-tauri/entity/src/saved_directories.rs b/src-tauri/entity/src/saved_directories.rs new file mode 100644 index 0000000..1bf6263 --- /dev/null +++ b/src-tauri/entity/src/saved_directories.rs @@ -0,0 +1,14 @@ +use crate::metadata::Relation; // <- Added this to get rid of error line 5. +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)] +#[sea_orm(table_name = "saved_directories")] +pub struct Model { + #[sea_orm(primary_key)] + #[serde(skip_deserializing)] + pub id: i32, + pub path: String, +} + +impl ActiveModelBehavior for ActiveModel {} \ No newline at end of file diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index d39cbcf..d144517 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -72,6 +72,7 @@ pub async fn run() { music::pause, music::resume, music::get_position, + music::add_folder, windows::make_window_effect ]) .run(tauri::generate_context!()) diff --git a/src-tauri/src/music/commands.rs b/src-tauri/src/music/commands.rs index 19923ae..a72e336 100644 --- a/src-tauri/src/music/commands.rs +++ b/src-tauri/src/music/commands.rs @@ -6,6 +6,9 @@ use std::fs::File; use std::io::BufReader; use super::core; +use entity::saved_directories; + +use sea_orm::Set; #[tauri::command] pub fn read_metadata(path: &str) -> Result { @@ -110,3 +113,13 @@ pub fn get_redux_store_state(state: State<'_, AppData>) -> core::PlayerState { pub fn get_position(state: State<'_, AppData>) -> std::time::Duration { core::get_position(&state) } + +#[tauri::command] +pub fn add_folder(app: AppHandle, path: &str) -> Result<(), String> { + let pear = saved_directories::ActiveModel { + path: Set(path.to_owned()), + ..Default::default() // all other attributes are `NotSet` + }; + app.emit("FOLDER_ADDED_EVENT", "").unwrap(); + Ok(()) +} \ No newline at end of file diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 90b8be2..7a09f2c 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -2,7 +2,7 @@ import { Component, effect } from "@angular/core"; import { RouterOutlet } from "@angular/router"; import { injectDispatch, injectSelector } from "@reduxjs/angular-redux"; -import { Event, listen } from "@tauri-apps/api/event"; +import { Event, listen, UnlistenFn } from "@tauri-apps/api/event"; import { setPosition, musicSync, Duration } from "./store/tauri"; import { AppDispatch, RootState } from "./store"; import { Metadata } from "./injectables/metadata"; @@ -62,16 +62,20 @@ export class App { if (this.tauri().paused) return; if (this.tauri().currentlyPlayingPath === null) return; - let unlisten = () => {}; + const unlisteners: UnlistenFn[] = []; listen("PLAYBACK_POSITION_UPDATE", (event: Event) => { this.dispatch(setPosition(event.payload)); }).then((listener) => { - unlisten = listener; + unlisteners.push(listener); }); + listen("FOLDER_ADDED_EVENT", (event: Event) => { + console.log("FOLDER_ADDED_EVENT", event); + }).then(listener => unlisteners.push(listener)) + onCleanup(() => { - unlisten(); + unlisteners.forEach((unlistener) => unlistener()); }); }); } -- 2.51.2