1 
2 /* nautilus-file-undo-operations.h - Manages undo/redo of file operations
3  *
4  * Copyright (C) 2007-2011 Amos Brocco
5  * Copyright (C) 2010 Red Hat, Inc.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public
18  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19  *
20  * Authors: Amos Brocco <amos.brocco@gmail.com>
21  *          Cosimo Cecchi <cosimoc@redhat.com>
22  *
23  */
24 
25 #pragma once
26 
27 #include <gio/gio.h>
28 #include <gtk/gtk.h>
29 #include <gnome-autoar/gnome-autoar.h>
30 
31 #include "nautilus-file-operations-dbus-data.h"
32 
33 typedef enum
34 {
35     NAUTILUS_FILE_UNDO_OP_INVALID,
36     NAUTILUS_FILE_UNDO_OP_COPY,
37     NAUTILUS_FILE_UNDO_OP_DUPLICATE,
38     NAUTILUS_FILE_UNDO_OP_MOVE,
39     NAUTILUS_FILE_UNDO_OP_RENAME,
40     NAUTILUS_FILE_UNDO_OP_BATCH_RENAME,
41     NAUTILUS_FILE_UNDO_OP_STARRED,
42     NAUTILUS_FILE_UNDO_OP_CREATE_EMPTY_FILE,
43     NAUTILUS_FILE_UNDO_OP_CREATE_FILE_FROM_TEMPLATE,
44     NAUTILUS_FILE_UNDO_OP_CREATE_FOLDER,
45     NAUTILUS_FILE_UNDO_OP_EXTRACT,
46     NAUTILUS_FILE_UNDO_OP_COMPRESS,
47     NAUTILUS_FILE_UNDO_OP_MOVE_TO_TRASH,
48     NAUTILUS_FILE_UNDO_OP_RESTORE_FROM_TRASH,
49     NAUTILUS_FILE_UNDO_OP_CREATE_LINK,
50     NAUTILUS_FILE_UNDO_OP_RECURSIVE_SET_PERMISSIONS,
51     NAUTILUS_FILE_UNDO_OP_SET_PERMISSIONS,
52     NAUTILUS_FILE_UNDO_OP_CHANGE_GROUP,
53     NAUTILUS_FILE_UNDO_OP_CHANGE_OWNER,
54     NAUTILUS_FILE_UNDO_OP_NUM_TYPES,
55 } NautilusFileUndoOp;
56 
57 #define NAUTILUS_TYPE_FILE_UNDO_INFO nautilus_file_undo_info_get_type ()
58 G_DECLARE_DERIVABLE_TYPE (NautilusFileUndoInfo, nautilus_file_undo_info,
59                           NAUTILUS, FILE_UNDO_INFO,
60                           GObject)
61 
62 struct _NautilusFileUndoInfoClass
63 {
64     GObjectClass parent_class;
65 
66     void (* undo_func) (NautilusFileUndoInfo           *self,
67                         GtkWindow                      *parent_window,
68                         NautilusFileOperationsDBusData *dbus_data);
69     void (* redo_func) (NautilusFileUndoInfo           *self,
70                         GtkWindow                      *parent_window,
71                         NautilusFileOperationsDBusData *dbus_data);
72 
73     void (* strings_func) (NautilusFileUndoInfo *self,
74                            gchar **undo_label,
75                            gchar **undo_description,
76                            gchar **redo_label,
77                            gchar **redo_description);
78 };
79 
80 void nautilus_file_undo_info_apply_async (NautilusFileUndoInfo           *self,
81                                           gboolean                        undo,
82                                           GtkWindow                      *parent_window,
83                                           NautilusFileOperationsDBusData *dbus_data,
84                                           GAsyncReadyCallback             callback,
85                                           gpointer                        user_data);
86 gboolean nautilus_file_undo_info_apply_finish (NautilusFileUndoInfo *self,
87                                                GAsyncResult *res,
88                                                gboolean *user_cancel,
89                                                GError **error);
90 
91 void nautilus_file_undo_info_get_strings (NautilusFileUndoInfo *self,
92                                           gchar **undo_label,
93                                           gchar **undo_description,
94                                           gchar **redo_label,
95                                           gchar **redo_description);
96 
97 NautilusFileUndoOp nautilus_file_undo_info_get_op_type (NautilusFileUndoInfo *self);
98 
99 /* copy/move/duplicate/link/restore from trash */
100 #define NAUTILUS_TYPE_FILE_UNDO_INFO_EXT nautilus_file_undo_info_ext_get_type ()
101 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoExt, nautilus_file_undo_info_ext,
102                       NAUTILUS, FILE_UNDO_INFO_EXT,
103                       NautilusFileUndoInfo)
104 
105 NautilusFileUndoInfo *nautilus_file_undo_info_ext_new (NautilusFileUndoOp op_type,
106                                                        gint item_count,
107                                                        GFile *src_dir,
108                                                        GFile *target_dir);
109 void nautilus_file_undo_info_ext_add_origin_target_pair (NautilusFileUndoInfoExt *self,
110                                                          GFile                   *origin,
111                                                          GFile                   *target);
112 
113 /* create new file/folder */
114 #define NAUTILUS_TYPE_FILE_UNDO_INFO_CREATE nautilus_file_undo_info_create_get_type ()
115 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoCreate, nautilus_file_undo_info_create,
116                       NAUTILUS, FILE_UNDO_INFO_CREATE,
117                       NautilusFileUndoInfo)
118 
119 NautilusFileUndoInfo *nautilus_file_undo_info_create_new (NautilusFileUndoOp op_type);
120 void nautilus_file_undo_info_create_set_data (NautilusFileUndoInfoCreate *self,
121                                               GFile                      *file,
122                                               const char                 *template,
123                                               gint                        length);
124 
125 /* rename */
126 #define NAUTILUS_TYPE_FILE_UNDO_INFO_RENAME nautilus_file_undo_info_rename_get_type ()
127 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoRename, nautilus_file_undo_info_rename,
128                       NAUTILUS, FILE_UNDO_INFO_RENAME,
129                       NautilusFileUndoInfo)
130 
131 NautilusFileUndoInfo *nautilus_file_undo_info_rename_new (void);
132 void nautilus_file_undo_info_rename_set_data_pre (NautilusFileUndoInfoRename *self,
133                                                   GFile                      *old_file,
134                                                   gchar                      *old_display_name,
135                                                   gchar                      *new_display_name);
136 void nautilus_file_undo_info_rename_set_data_post (NautilusFileUndoInfoRename *self,
137                                                    GFile                      *new_file);
138 
139 /* batch rename */
140 #define NAUTILUS_TYPE_FILE_UNDO_INFO_BATCH_RENAME nautilus_file_undo_info_batch_rename_get_type ()
141 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoBatchRename, nautilus_file_undo_info_batch_rename,
142                       NAUTILUS, FILE_UNDO_INFO_BATCH_RENAME,
143                       NautilusFileUndoInfo)
144 
145 NautilusFileUndoInfo *nautilus_file_undo_info_batch_rename_new (gint item_count);
146 void nautilus_file_undo_info_batch_rename_set_data_pre (NautilusFileUndoInfoBatchRename *self,
147                                                         GList                           *old_files);
148 void nautilus_file_undo_info_batch_rename_set_data_post (NautilusFileUndoInfoBatchRename *self,
149                                                          GList                           *new_files);
150 
151 /* starred files */
152 #define NAUTILUS_TYPE_FILE_UNDO_INFO_STARRED         (nautilus_file_undo_info_starred_get_type ())
153 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoStarred, nautilus_file_undo_info_starred,
154                       NAUTILUS, FILE_UNDO_INFO_STARRED,
155                       NautilusFileUndoInfo)
156 
157 NautilusFileUndoInfo *nautilus_file_undo_info_starred_new (GList   *files,
158                                                            gboolean starred);
159 GList *nautilus_file_undo_info_starred_get_files (NautilusFileUndoInfoStarred *self);
160 gboolean nautilus_file_undo_info_starred_is_starred (NautilusFileUndoInfoStarred *self);
161 
162 /* trash */
163 #define NAUTILUS_TYPE_FILE_UNDO_INFO_TRASH         (nautilus_file_undo_info_trash_get_type ())
164 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoTrash, nautilus_file_undo_info_trash,
165                       NAUTILUS, FILE_UNDO_INFO_TRASH,
166                       NautilusFileUndoInfo)
167 
168 NautilusFileUndoInfo *nautilus_file_undo_info_trash_new (gint item_count);
169 void nautilus_file_undo_info_trash_add_file (NautilusFileUndoInfoTrash *self,
170                                              GFile                     *file);
171 GList *nautilus_file_undo_info_trash_get_files (NautilusFileUndoInfoTrash *self);
172 
173 /* recursive permissions */
174 #define NAUTILUS_TYPE_FILE_UNDO_INFO_REC_PERMISSIONS nautilus_file_undo_info_rec_permissions_get_type ()
175 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoRecPermissions, nautilus_file_undo_info_rec_permissions,
176                       NAUTILUS, FILE_UNDO_INFO_REC_PERMISSIONS,
177                       NautilusFileUndoInfo)
178 
179 NautilusFileUndoInfo *nautilus_file_undo_info_rec_permissions_new (GFile   *dest,
180                                                                    guint32 file_permissions,
181                                                                    guint32 file_mask,
182                                                                    guint32 dir_permissions,
183                                                                    guint32 dir_mask);
184 void nautilus_file_undo_info_rec_permissions_add_file (NautilusFileUndoInfoRecPermissions *self,
185                                                        GFile                              *file,
186                                                        guint32                             permission);
187 
188 /* single file change permissions */
189 #define NAUTILUS_TYPE_FILE_UNDO_INFO_PERMISSIONS nautilus_file_undo_info_permissions_get_type ()
190 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoPermissions, nautilus_file_undo_info_permissions,
191                       NAUTILUS, FILE_UNDO_INFO_PERMISSIONS,
192                       NautilusFileUndoInfo)
193 
194 NautilusFileUndoInfo *nautilus_file_undo_info_permissions_new (GFile   *file,
195                                                                guint32  current_permissions,
196                                                                guint32  new_permissions);
197 
198 /* group and owner change */
199 #define NAUTILUS_TYPE_FILE_UNDO_INFO_OWNERSHIP nautilus_file_undo_info_ownership_get_type ()
200 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoOwnership, nautilus_file_undo_info_ownership,
201                       NAUTILUS, FILE_UNDO_INFO_OWNERSHIP,
202                       NautilusFileUndoInfo)
203 
204 NautilusFileUndoInfo *nautilus_file_undo_info_ownership_new (NautilusFileUndoOp  op_type,
205                                                              GFile              *file,
206                                                              const char         *current_data,
207                                                              const char         *new_data);
208 
209 /* extract */
210 #define NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT nautilus_file_undo_info_extract_get_type ()
211 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoExtract, nautilus_file_undo_info_extract,
212                       NAUTILUS, FILE_UNDO_INFO_EXTRACT,
213                       NautilusFileUndoInfo)
214 
215 NautilusFileUndoInfo * nautilus_file_undo_info_extract_new (GList *sources,
216                                                             GFile *destination_directory);
217 void nautilus_file_undo_info_extract_set_outputs (NautilusFileUndoInfoExtract *self,
218                                                   GList                       *outputs);
219 
220 /* compress */
221 #define NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS nautilus_file_undo_info_compress_get_type ()
222 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoCompress, nautilus_file_undo_info_compress,
223                       NAUTILUS, FILE_UNDO_INFO_COMPRESS,
224                       NautilusFileUndoInfo)
225 
226 NautilusFileUndoInfo * nautilus_file_undo_info_compress_new (GList        *sources,
227                                                              GFile        *output,
228                                                              AutoarFormat  format,
229                                                              AutoarFilter  filter,
230                                                              const gchar  *passphrase);
231