@@ -11,7 +11,7 @@ use iced::widget::operation::AbsoluteOffset;
1111use iced:: window;
1212use iced:: window:: Id ;
1313use log:: info;
14- use rayon :: iter :: IntoParallelRefIterator ;
14+ use crate :: clipboard :: ClipBoardContentType ;
1515use rayon:: iter:: ParallelIterator ;
1616use rayon:: slice:: ParallelSliceMut ;
1717
@@ -238,10 +238,9 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task<Message> {
238238
239239 Message :: SaveRanking => {
240240 tile. ranking = tile. options . get_rankings ( ) ;
241- let string_rep = toml:: to_string ( & tile. ranking ) . unwrap_or ( "" . to_string ( ) ) ;
242- let ranking_file_path =
243- std:: env:: var ( "HOME" ) . unwrap_or ( "/" . to_string ( ) ) + "/.config/rustcast/ranking.toml" ;
244- fs:: write ( ranking_file_path, string_rep) . ok ( ) ;
241+ for ( name, rank) in & tile. ranking {
242+ let _ = tile. db . save_ranking ( name, * rank) ;
243+ }
245244 Task :: none ( )
246245 }
247246
@@ -451,16 +450,31 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task<Message> {
451450 Message :: EditClipboardHistory ( action) => {
452451 match action {
453452 Editable :: Create ( content) => {
454- if !tile. clipboard_content . contains ( & content) {
455- tile. clipboard_content . insert ( 0 , content) ;
453+ let old_item = tile. clipboard_content . iter ( ) . find ( |x| {
454+ if let ( ClipBoardContentType :: Files ( f1, _) , ClipBoardContentType :: Files ( f2, _) ) = ( x, & content) {
455+ f1 == f2
456+ } else {
457+ * x == & content
458+ }
459+ } ) . cloned ( ) ;
460+
461+ if old_item. is_none ( ) {
462+ tile. clipboard_content . insert ( 0 , content. clone ( ) ) ;
463+ let _ = tile. db . save_clipboard_item ( & content) ;
456464 return Task :: none ( ) ;
457465 }
458466
459467 let new_content_vec = tile
460468 . clipboard_content
461- . par_iter ( )
469+ . iter ( )
462470 . filter_map ( |x| {
463- if * x == content {
471+ let is_match = if let ( ClipBoardContentType :: Files ( f1, _) , ClipBoardContentType :: Files ( f2, _) ) = ( x, & content) {
472+ f1 == f2
473+ } else {
474+ x == & content
475+ } ;
476+
477+ if is_match {
464478 None
465479 } else {
466480 Some ( x. to_owned ( ) )
@@ -469,7 +483,11 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task<Message> {
469483 . collect ( ) ;
470484
471485 tile. clipboard_content = new_content_vec;
472- tile. clipboard_content . insert ( 0 , content) ;
486+ tile. clipboard_content . insert ( 0 , content. clone ( ) ) ;
487+ if let Some ( old) = old_item {
488+ let _ = tile. db . delete_clipboard_item ( & old) ;
489+ }
490+ let _ = tile. db . save_clipboard_item ( & content) ;
473491 }
474492 Editable :: Delete ( content) => {
475493 tile. clipboard_content = tile
@@ -483,13 +501,16 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task<Message> {
483501 }
484502 } )
485503 . collect ( ) ;
504+ let _ = tile. db . delete_clipboard_item ( & content) ;
486505 }
487506 Editable :: Update { old, new } => {
488507 tile. clipboard_content = tile
489508 . clipboard_content
490509 . iter ( )
491510 . map ( |x| if x == & old { new. clone ( ) } else { x. to_owned ( ) } )
492511 . collect ( ) ;
512+ let _ = tile. db . delete_clipboard_item ( & old) ;
513+ let _ = tile. db . save_clipboard_item ( & new) ;
493514 }
494515 }
495516 Task :: none ( )
@@ -693,6 +714,7 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task<Message> {
693714
694715 Message :: ClearClipboardHistory => {
695716 tile. clipboard_content . clear ( ) ;
717+ let _ = tile. db . clear_clipboard ( ) ;
696718 Task :: none ( )
697719 }
698720
0 commit comments