jellytau_lib/commands/download/
pinning.rs1use std::sync::Arc;
6use tauri::State;
7
8use crate::commands::DatabaseWrapper;
9use crate::storage::db_service::{DatabaseService, Query, QueryParam};
10
11#[tauri::command]
13#[specta::specta]
14pub async fn pin_item(db: State<'_, DatabaseWrapper>, item_id: String) -> Result<(), String> {
15 let db_service = {
16 let database = db.0.lock().map_err(|e| e.to_string())?;
17 Arc::new(database.service())
18 };
19
20 let query = Query::with_params(
21 "UPDATE items SET is_pinned = 1 WHERE id = ?",
22 vec![QueryParam::String(item_id)],
23 );
24
25 db_service.execute(query).await.map_err(|e| e.to_string())?;
26 Ok(())
27}
28
29#[tauri::command]
31#[specta::specta]
32pub async fn unpin_item(db: State<'_, DatabaseWrapper>, item_id: String) -> Result<(), String> {
33 let db_service = {
34 let database = db.0.lock().map_err(|e| e.to_string())?;
35 Arc::new(database.service())
36 };
37
38 let query = Query::with_params(
39 "UPDATE items SET is_pinned = 0 WHERE id = ?",
40 vec![QueryParam::String(item_id)],
41 );
42
43 db_service.execute(query).await.map_err(|e| e.to_string())?;
44 Ok(())
45}
46
47#[tauri::command]
49#[specta::specta]
50pub async fn is_item_pinned(
51 db: State<'_, DatabaseWrapper>,
52 item_id: String,
53) -> Result<bool, String> {
54 let db_service = {
55 let database = db.0.lock().map_err(|e| e.to_string())?;
56 Arc::new(database.service())
57 };
58
59 let query = Query::with_params(
60 "SELECT COALESCE(is_pinned, 0) FROM items WHERE id = ?",
61 vec![QueryParam::String(item_id)],
62 );
63
64 let is_pinned: i32 = db_service
65 .query_optional(query, |row| row.get(0))
66 .await
67 .map_err(|e| e.to_string())?
68 .unwrap_or(0);
69
70 Ok(is_pinned == 1)
71}