@@ -11,28 +11,6 @@ use std::{fs, result};
1111use trash:: os_limited:: { self , purge_all, restore_all} ;
1212use trash:: { TrashItem , delete} ;
1313
14- pub fn recover_from_trash ( name : & str ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
15- let list = trash:: os_limited:: list ( ) ?;
16- let items_to_restore: Vec < _ > = list. into_iter ( ) . filter ( |item| item. name == name) . collect ( ) ;
17-
18- if !items_to_restore. is_empty ( ) {
19- restore_all ( items_to_restore) ?;
20- println ! ( "Recovered '{name}'" ) ;
21- } else {
22- println ! ( "No items found to recover with the name '{name}'" ) ;
23- }
24- Ok ( ( ) )
25- }
26-
27- pub fn purge ( name : & str ) -> Result < ( ) , trash:: Error > {
28- let content_to_remove: Vec < TrashItem > = trash:: os_limited:: list ( )
29- . unwrap ( )
30- . into_iter ( )
31- . filter ( |content| content. name == name)
32- . collect ( ) ;
33- purge_all ( content_to_remove)
34- }
35-
3614pub fn list_specific_trash ( seconds : i64 ) {
3715 let entries = trash:: os_limited:: list ( ) . unwrap ( ) ;
3816 let now = Local :: now ( ) . timestamp ( ) ;
@@ -77,17 +55,22 @@ pub fn list_trash() {
7755 }
7856}
7957
80- pub fn tidy_trash ( days : i64 ) -> Result < ( ) , Box < dyn Error > > {
58+ pub fn tidy_trash ( days : i64 ) {
8159 let seconds: i64 = days * 86400 ;
82- let entries = trash:: os_limited:: list ( ) ?;
8360 let now = Local :: now ( ) . timestamp ( ) ;
84- for entry in entries {
85- if now - entry. time_deleted > seconds {
86- purge ( & entry. name . to_string_lossy ( ) ) ?;
87- println ! ( "Purged: {}" , entry. name. to_string_lossy( ) ) ;
61+ let content_to_purge = trash:: os_limited:: list ( )
62+ . unwrap ( )
63+ . into_iter ( )
64+ . filter ( |item| item. time_deleted < seconds)
65+ . collect :: < Vec < TrashItem > > ( ) ;
66+
67+ if !content_to_purge. is_empty ( ) {
68+ if let Err ( e) = trash:: os_limited:: purge_all ( content_to_purge) {
69+ eprintln ! ( "Error purging items: {e}" ) ;
70+ } else {
71+ println ! ( "No items found to purge older than {days} days" ) ;
8872 }
8973 }
90- Ok ( ( ) )
9174}
9275
9376fn main ( ) {
@@ -101,10 +84,19 @@ fn main() {
10184 let ignore = args. ignore ;
10285
10386 if args. is_purge ( ) {
104- if let Some ( filename) = args. get_purge_name ( ) {
105- if let Err ( e) = purge ( filename) {
106- eprintln ! ( "Error removing the content from the bin: {e}" )
87+ let names = args. get_purge_name ( ) ;
88+ let content_to_purge = trash:: os_limited:: list ( )
89+ . unwrap ( )
90+ . into_iter ( )
91+ . filter ( |item| names. contains ( & item. name . to_string_lossy ( ) . to_string ( ) ) )
92+ . collect :: < Vec < TrashItem > > ( ) ;
93+
94+ if !content_to_purge. is_empty ( ) {
95+ if let Err ( e) = trash:: os_limited:: purge_all ( content_to_purge) {
96+ eprintln ! ( "Error purging items: {e}" ) ;
10797 }
98+ } else {
99+ println ! ( "No items found to purge with such names" ) ;
108100 }
109101 }
110102
@@ -133,15 +125,25 @@ fn main() {
133125 return ;
134126 } else {
135127 list_specific_trash ( seconds) ;
128+ return ;
136129 }
130+ return ;
137131 }
138132
139133 // recovering files from trash if the recover command is used
140134 if args. is_recover ( ) {
141- if let Some ( name) = args. get_recover_name ( ) {
142- if let Err ( e) = recover_from_trash ( name) {
143- eprintln ! ( "Error recovering from trash: {e}" ) ;
135+ let names = args. get_recover_name ( ) ;
136+ let content_to_recover = trash:: os_limited:: list ( )
137+ . unwrap ( )
138+ . into_iter ( )
139+ . filter ( |item| names. contains ( & item. name . to_string_lossy ( ) . to_string ( ) ) )
140+ . collect :: < Vec < TrashItem > > ( ) ;
141+ if !content_to_recover. is_empty ( ) {
142+ if let Err ( e) = trash:: os_limited:: restore_all ( content_to_recover) {
143+ eprintln ! ( "Error recovering items: {e}" ) ;
144144 }
145+ } else {
146+ println ! ( "No items found to recover with such names" ) ;
145147 }
146148 return ;
147149 }
@@ -163,9 +165,7 @@ fn main() {
163165 return ;
164166 }
165167
166- if let Err ( e) = tidy_trash ( days) {
167- eprintln ! ( "Error tidying the trash: {e}" ) ;
168- }
168+ tidy_trash ( days) ;
169169 return ;
170170 }
171171
0 commit comments