2 * Copyright 2015 Red Hat, Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the licence, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
17 * Author: Matthias Clasen <mclasen@redhat.com>
28 static gboolean force
= FALSE
;
29 static gboolean empty
= FALSE
;
30 static const GOptionEntry entries
[] = {
31 { "force", 'f', 0, G_OPTION_ARG_NONE
, &force
, N_("Ignore nonexistent files, never prompt"), NULL
},
32 { "empty", 0, 0, G_OPTION_ARG_NONE
, &empty
, N_("Empty the trash"), NULL
},
37 delete_trash_file (GFile
*file
, gboolean del_file
, gboolean del_children
)
41 GFileEnumerator
*enumerator
;
45 enumerator
= g_file_enumerate_children (file
,
46 G_FILE_ATTRIBUTE_STANDARD_NAME
","
47 G_FILE_ATTRIBUTE_STANDARD_TYPE
,
48 G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS
,
53 while ((info
= g_file_enumerator_next_file (enumerator
, NULL
, NULL
)) != NULL
)
55 child
= g_file_get_child (file
, g_file_info_get_name (info
));
56 delete_trash_file (child
, TRUE
, g_file_info_get_file_type (info
) == G_FILE_TYPE_DIRECTORY
);
57 g_object_unref (child
);
58 g_object_unref (info
);
60 g_file_enumerator_close (enumerator
, NULL
, NULL
);
61 g_object_unref (enumerator
);
66 g_file_delete (file
, NULL
, NULL
);
70 handle_trash (int argc
, char *argv
[], gboolean do_help
)
72 GOptionContext
*context
;
78 g_set_prgname ("gio trash");
80 /* Translators: commandline placeholder */
81 param
= g_strdup_printf ("[%s...]", _("LOCATION"));
82 context
= g_option_context_new (param
);
84 g_option_context_set_help_enabled (context
, FALSE
);
85 g_option_context_set_summary (context
,
86 _("Move files or directories to the trash."));
87 g_option_context_add_main_entries (context
, entries
, GETTEXT_PACKAGE
);
91 show_help (context
, NULL
);
95 if (!g_option_context_parse (context
, &argc
, &argv
, &error
))
97 show_help (context
, error
->message
);
102 g_option_context_free (context
);
108 for (i
= 1; i
< argc
; i
++)
110 file
= g_file_new_for_commandline_arg (argv
[i
]);
112 if (!g_file_trash (file
, NULL
, &error
))
115 !g_error_matches (error
, G_IO_ERROR
, G_IO_ERROR_NOT_FOUND
))
117 print_file_error (file
, error
->message
);
120 g_error_free (error
);
122 g_object_unref (file
);
129 file
= g_file_new_for_uri ("trash:");
130 delete_trash_file (file
, FALSE
, TRUE
);
131 g_object_unref (file
);