1 /*
2    nautilus-file.h: Nautilus file model.
3 
4    Copyright (C) 1999, 2000, 2001 Eazel, Inc.
5 
6    This program is free software; you can redistribute it and/or
7    modify it under the terms of the GNU General Public License as
8    published by the Free Software Foundation; either version 2 of the
9    License, or (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    General Public License for more details.
15 
16    You should have received a copy of the GNU General Public
17    License along with this program; if not, see <http://www.gnu.org/licenses/>.
18 
19    Author: Darin Adler <darin@bentspoon.com>
20 */
21 
22 #pragma once
23 
24 #include <gtk/gtk.h>
25 #include <gio/gio.h>
26 
27 #include "nautilus-types.h"
28 
29 /* NautilusFile is an object used to represent a single element of a
30  * NautilusDirectory. It's lightweight and relies on NautilusDirectory
31  * to do most of the work.
32  */
33 
34 /* NautilusFile is defined both here and in nautilus-directory.h. */
35 #ifndef NAUTILUS_FILE_DEFINED
36 #define NAUTILUS_FILE_DEFINED
37 typedef struct NautilusFile NautilusFile;
38 #endif
39 
40 #define NAUTILUS_TYPE_FILE nautilus_file_get_type()
41 #define NAUTILUS_FILE(obj) \
42   (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_FILE, NautilusFile))
43 #define NAUTILUS_FILE_CLASS(klass) \
44   (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_FILE, NautilusFileClass))
45 #define NAUTILUS_IS_FILE(obj) \
46   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_FILE))
47 #define NAUTILUS_IS_FILE_CLASS(klass) \
48   (G_TYPE_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_FILE))
49 #define NAUTILUS_FILE_GET_CLASS(obj) \
50   (G_TYPE_INSTANCE_GET_CLASS ((obj), NAUTILUS_TYPE_FILE, NautilusFileClass))
51 
52 typedef enum {
53 	/* These may be set as default-sort-order. When touching this, make sure to
54 	 * keep the values in sync with the "org.gnome.nautilus.SortOrder" enum in the
55 	 * `data/org.gnome.nautilus.gschema.xml` schemas file, and the attributes[]
56 	 * array in `src/nautilus-list-view.c`.
57 	 */
58 	NAUTILUS_FILE_SORT_BY_DISPLAY_NAME = 0,
59 	NAUTILUS_FILE_SORT_BY_SIZE = 1,
60 	NAUTILUS_FILE_SORT_BY_TYPE = 2,
61 	NAUTILUS_FILE_SORT_BY_MTIME = 3,
62 	NAUTILUS_FILE_SORT_BY_ATIME = 4,
63 	NAUTILUS_FILE_SORT_BY_BTIME = 5,
64 	NAUTILUS_FILE_SORT_BY_STARRED = 6,
65 
66 	/* The following are specific to special locations and as such are not to be
67 	 * included in the "org.gnome.nautilus.SortOrder" enum.
68 	 */
69 	NAUTILUS_FILE_SORT_BY_TRASHED_TIME,
70 	NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE,
71 	NAUTILUS_FILE_SORT_BY_RECENCY
72 } NautilusFileSortType;
73 
74 typedef enum {
75 	NAUTILUS_REQUEST_NOT_STARTED,
76 	NAUTILUS_REQUEST_IN_PROGRESS,
77 	NAUTILUS_REQUEST_DONE
78 } NautilusRequestStatus;
79 
80 typedef enum {
81 	NAUTILUS_FILE_ICON_FLAGS_NONE = 0,
82 	NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS = (1<<0),
83 	NAUTILUS_FILE_ICON_FLAGS_IGNORE_VISITING = (1<<1),
84 	NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT = (1<<2),
85 	NAUTILUS_FILE_ICON_FLAGS_FOR_OPEN_FOLDER = (1<<3),
86 	/* whether the thumbnail size must match the display icon size */
87 	NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE = (1<<4),
88 	/* uses the icon of the mount if present */
89 	NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON = (1<<5),
90 	/* render emblems */
91 	NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS = (1<<6),
92 	NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM = (1<<7)
93 } NautilusFileIconFlags;
94 
95 /* Standard Drag & Drop types. */
96 typedef enum {
97 	NAUTILUS_ICON_DND_GNOME_ICON_LIST,
98 	NAUTILUS_ICON_DND_URI_LIST,
99 	NAUTILUS_ICON_DND_NETSCAPE_URL,
100 	NAUTILUS_ICON_DND_TEXT,
101 	NAUTILUS_ICON_DND_XDNDDIRECTSAVE,
102 	NAUTILUS_ICON_DND_RAW,
103 	NAUTILUS_ICON_DND_ROOTWINDOW_DROP
104 } NautilusIconDndTargetType;
105 
106 /* Item of the drag selection list */
107 typedef struct {
108 	NautilusFile *file;
109 	char *uri;
110 	gboolean got_icon_position;
111 	int icon_x, icon_y;
112 	int icon_width, icon_height;
113 } NautilusDragSelectionItem;
114 
115 /* Emblems sometimes displayed for NautilusFiles. Do not localize. */
116 #define NAUTILUS_FILE_EMBLEM_NAME_SYMBOLIC_LINK "symbolic-link"
117 #define NAUTILUS_FILE_EMBLEM_NAME_CANT_READ "unreadable"
118 #define NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE "readonly"
119 #define NAUTILUS_FILE_EMBLEM_NAME_TRASH "trash"
120 #define NAUTILUS_FILE_EMBLEM_NAME_NOTE "note"
121 
122 typedef void (*NautilusFileCallback)          (NautilusFile  *file,
123 				               gpointer       callback_data);
124 typedef gboolean (*NautilusFileFilterFunc)    (NautilusFile  *file,
125                                                gpointer       callback_data);
126 typedef void (*NautilusFileListCallback)      (GList         *file_list,
127 				               gpointer       callback_data);
128 typedef void (*NautilusFileOperationCallback) (NautilusFile  *file,
129 					       GFile         *result_location,
130 					       GError        *error,
131 					       gpointer       callback_data);
132 
133 
134 #define NAUTILUS_FILE_ATTRIBUTES_FOR_ICON (NAUTILUS_FILE_ATTRIBUTE_INFO | NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL)
135 
136 typedef void NautilusFileListHandle;
137 
138 /* GObject requirements. */
139 GType                   nautilus_file_get_type                          (void);
140 
141 /* Getting at a single file. */
142 NautilusFile *          nautilus_file_get                               (GFile                          *location);
143 NautilusFile *          nautilus_file_get_by_uri                        (const char                     *uri);
144 
145 /* Get a file only if the nautilus version already exists */
146 NautilusFile *          nautilus_file_get_existing                      (GFile                          *location);
147 NautilusFile *          nautilus_file_get_existing_by_uri               (const char                     *uri);
148 
149 /* Covers for g_object_ref and g_object_unref that provide two conveniences:
150  * 1) Using these is type safe.
151  * 2) You are allowed to call these with NULL,
152  */
153 NautilusFile *          nautilus_file_ref                               (NautilusFile                   *file);
154 void                    nautilus_file_unref                             (NautilusFile                   *file);
155 
156 G_DEFINE_AUTOPTR_CLEANUP_FUNC (NautilusFile, nautilus_file_unref)
157 
158 /* Monitor the file. */
159 void                    nautilus_file_monitor_add                       (NautilusFile                   *file,
160 									 gconstpointer                   client,
161 									 NautilusFileAttributes          attributes);
162 void                    nautilus_file_monitor_remove                    (NautilusFile                   *file,
163 									 gconstpointer                   client);
164 
165 /* Waiting for data that's read asynchronously.
166  * This interface currently works only for metadata, but could be expanded
167  * to other attributes as well.
168  */
169 void                    nautilus_file_call_when_ready                   (NautilusFile                   *file,
170 									 NautilusFileAttributes          attributes,
171 									 NautilusFileCallback            callback,
172 									 gpointer                        callback_data);
173 void                    nautilus_file_cancel_call_when_ready            (NautilusFile                   *file,
174 									 NautilusFileCallback            callback,
175 									 gpointer                        callback_data);
176 gboolean                nautilus_file_check_if_ready                    (NautilusFile                   *file,
177 									 NautilusFileAttributes          attributes);
178 void                    nautilus_file_invalidate_attributes             (NautilusFile                   *file,
179 									 NautilusFileAttributes          attributes);
180 void                    nautilus_file_invalidate_all_attributes         (NautilusFile                   *file);
181 
182 /* Basic attributes for file objects. */
183 gboolean                nautilus_file_contains_text                     (NautilusFile                   *file);
184 char *                  nautilus_file_get_display_name                  (NautilusFile                   *file);
185 char *                  nautilus_file_get_edit_name                     (NautilusFile                   *file);
186 char *                  nautilus_file_get_name                          (NautilusFile                   *file);
187 GFile *                 nautilus_file_get_location                      (NautilusFile                   *file);
188 char *			 nautilus_file_get_description			 (NautilusFile			 *file);
189 char *                  nautilus_file_get_uri                           (NautilusFile                   *file);
190 char *                  nautilus_file_get_uri_scheme                    (NautilusFile                   *file);
191 NautilusFile *          nautilus_file_get_parent                        (NautilusFile                   *file);
192 GFile *                 nautilus_file_get_parent_location               (NautilusFile                   *file);
193 char *                  nautilus_file_get_parent_uri                    (NautilusFile                   *file);
194 char *                  nautilus_file_get_parent_uri_for_display        (NautilusFile                   *file);
195 char *                  nautilus_file_get_thumbnail_path                (NautilusFile                   *file);
196 gboolean                nautilus_file_can_get_size                      (NautilusFile                   *file);
197 goffset                 nautilus_file_get_size                          (NautilusFile                   *file);
198 time_t                  nautilus_file_get_mtime                         (NautilusFile                   *file);
199 time_t                  nautilus_file_get_atime                         (NautilusFile                   *file);
200 time_t                  nautilus_file_get_btime                         (NautilusFile                   *file);
201 time_t                  nautilus_file_get_recency                       (NautilusFile                   *file);
202 time_t                  nautilus_file_get_trash_time                    (NautilusFile                   *file);
203 GFileType               nautilus_file_get_file_type                     (NautilusFile                   *file);
204 char *                  nautilus_file_get_mime_type                     (NautilusFile                   *file);
205 char *                  nautilus_file_get_extension                     (NautilusFile                   *file);
206 gboolean                nautilus_file_is_mime_type                      (NautilusFile                   *file,
207 									 const char                     *mime_type);
208 gboolean                nautilus_file_is_launchable                     (NautilusFile                   *file);
209 gboolean                nautilus_file_is_symbolic_link                  (NautilusFile                   *file);
210 GMount *                nautilus_file_get_mount                         (NautilusFile                   *file);
211 char *                  nautilus_file_get_volume_free_space             (NautilusFile                   *file);
212 char *                  nautilus_file_get_volume_name                   (NautilusFile                   *file);
213 char *                  nautilus_file_get_symbolic_link_target_path     (NautilusFile                   *file);
214 char *                  nautilus_file_get_symbolic_link_target_uri      (NautilusFile                   *file);
215 gboolean                nautilus_file_is_broken_symbolic_link           (NautilusFile                   *file);
216 gboolean                nautilus_file_is_executable                     (NautilusFile                   *file);
217 gboolean                nautilus_file_is_directory                      (NautilusFile                   *file);
218 gboolean                nautilus_file_is_regular_file                   (NautilusFile                   *file);
219 gboolean                nautilus_file_is_user_special_directory         (NautilusFile                   *file,
220 									 GUserDirectory                 special_directory);
221 gboolean		nautilus_file_is_archive			(NautilusFile			*file);
222 gboolean                nautilus_file_is_in_search                      (NautilusFile                   *file);
223 gboolean                nautilus_file_is_in_trash                       (NautilusFile                   *file);
224 gboolean                nautilus_file_is_in_recent                      (NautilusFile                   *file);
225 gboolean                nautilus_file_is_in_starred                     (NautilusFile                   *file);
226 gboolean                nautilus_file_is_in_admin                       (NautilusFile                   *file);
227 gboolean                nautilus_file_is_remote                         (NautilusFile                   *file);
228 gboolean                nautilus_file_is_other_locations                (NautilusFile                   *file);
229 gboolean                nautilus_file_is_starred_location              (NautilusFile                   *file);
230 gboolean		nautilus_file_is_home				(NautilusFile                   *file);
231 GError *                nautilus_file_get_file_info_error               (NautilusFile                   *file);
232 gboolean                nautilus_file_get_directory_item_count          (NautilusFile                   *file,
233 									 guint                          *count,
234 									 gboolean                       *count_unreadable);
235 void                    nautilus_file_recompute_deep_counts             (NautilusFile                   *file);
236 NautilusRequestStatus   nautilus_file_get_deep_counts                   (NautilusFile                   *file,
237 									 guint                          *directory_count,
238 									 guint                          *file_count,
239 									 guint                          *unreadable_directory_count,
240 									 goffset               *total_size,
241 									 gboolean                        force);
242 gboolean                nautilus_file_should_show_thumbnail             (NautilusFile                   *file);
243 gboolean                nautilus_file_should_show_directory_item_count  (NautilusFile                   *file);
244 
245 void                    nautilus_file_set_search_relevance              (NautilusFile                   *file,
246 									 gdouble                         relevance);
247 void                    nautilus_file_set_search_fts_snippet            (NautilusFile                   *file,
248                                                                          const gchar                    *fts_snippet);
249 const gchar*            nautilus_file_get_search_fts_snippet            (NautilusFile                   *file);
250 
251 void                    nautilus_file_set_attributes                    (NautilusFile                   *file,
252 									 GFileInfo                      *attributes,
253 									 NautilusFileOperationCallback   callback,
254 									 gpointer                        callback_data);
255 GFilesystemPreviewType  nautilus_file_get_filesystem_use_preview        (NautilusFile *file);
256 
257 char *                  nautilus_file_get_filesystem_id                 (NautilusFile                   *file);
258 
259 char *                  nautilus_file_get_filesystem_type               (NautilusFile                   *file);
260 
261 gboolean                nautilus_file_get_filesystem_remote             (NautilusFile                   *file);
262 
263 NautilusFile *          nautilus_file_get_trash_original_file           (NautilusFile                   *file);
264 
265 /* Permissions. */
266 gboolean                nautilus_file_can_get_permissions               (NautilusFile                   *file);
267 gboolean                nautilus_file_can_set_permissions               (NautilusFile                   *file);
268 guint                   nautilus_file_get_permissions                   (NautilusFile                   *file);
269 gboolean                nautilus_file_can_get_owner                     (NautilusFile                   *file);
270 gboolean                nautilus_file_can_set_owner                     (NautilusFile                   *file);
271 gboolean                nautilus_file_can_get_group                     (NautilusFile                   *file);
272 gboolean                nautilus_file_can_set_group                     (NautilusFile                   *file);
273 char *                  nautilus_file_get_owner_name                    (NautilusFile                   *file);
274 char *                  nautilus_file_get_group_name                    (NautilusFile                   *file);
275 GList *                 nautilus_get_user_names                         (void);
276 GList *                 nautilus_get_all_group_names                    (void);
277 GList *                 nautilus_file_get_settable_group_names          (NautilusFile                   *file);
278 gboolean                nautilus_file_can_get_selinux_context           (NautilusFile                   *file);
279 char *                  nautilus_file_get_selinux_context               (NautilusFile                   *file);
280 
281 /* "Capabilities". */
282 gboolean                nautilus_file_can_read                          (NautilusFile                   *file);
283 gboolean                nautilus_file_can_write                         (NautilusFile                   *file);
284 gboolean                nautilus_file_can_execute                       (NautilusFile                   *file);
285 gboolean                nautilus_file_can_rename                        (NautilusFile                   *file);
286 gboolean                nautilus_file_can_delete                        (NautilusFile                   *file);
287 gboolean                nautilus_file_can_trash                         (NautilusFile                   *file);
288 
289 gboolean                nautilus_file_can_mount                         (NautilusFile                   *file);
290 gboolean                nautilus_file_can_unmount                       (NautilusFile                   *file);
291 gboolean                nautilus_file_can_eject                         (NautilusFile                   *file);
292 gboolean                nautilus_file_can_start                         (NautilusFile                   *file);
293 gboolean                nautilus_file_can_start_degraded                (NautilusFile                   *file);
294 gboolean                nautilus_file_can_stop                          (NautilusFile                   *file);
295 GDriveStartStopType     nautilus_file_get_start_stop_type               (NautilusFile                   *file);
296 gboolean                nautilus_file_can_poll_for_media                (NautilusFile                   *file);
297 gboolean                nautilus_file_is_media_check_automatic          (NautilusFile                   *file);
298 
299 void                    nautilus_file_mount                             (NautilusFile                   *file,
300 									 GMountOperation                *mount_op,
301 									 GCancellable                   *cancellable,
302 									 NautilusFileOperationCallback   callback,
303 									 gpointer                        callback_data);
304 void                    nautilus_file_unmount                           (NautilusFile                   *file,
305 									 GMountOperation                *mount_op,
306 									 GCancellable                   *cancellable,
307 									 NautilusFileOperationCallback   callback,
308 									 gpointer                        callback_data);
309 void                    nautilus_file_eject                             (NautilusFile                   *file,
310 									 GMountOperation                *mount_op,
311 									 GCancellable                   *cancellable,
312 									 NautilusFileOperationCallback   callback,
313 									 gpointer                        callback_data);
314 
315 void                    nautilus_file_start                             (NautilusFile                   *file,
316 									 GMountOperation                *start_op,
317 									 GCancellable                   *cancellable,
318 									 NautilusFileOperationCallback   callback,
319 									 gpointer                        callback_data);
320 void                    nautilus_file_stop                              (NautilusFile                   *file,
321 									 GMountOperation                *mount_op,
322 									 GCancellable                   *cancellable,
323 									 NautilusFileOperationCallback   callback,
324 									 gpointer                        callback_data);
325 void                    nautilus_file_poll_for_media                    (NautilusFile                   *file);
326 
327 /* Basic operations for file objects. */
328 void                    nautilus_file_set_owner                         (NautilusFile                   *file,
329 									 const char                     *user_name_or_id,
330 									 NautilusFileOperationCallback   callback,
331 									 gpointer                        callback_data);
332 void                    nautilus_file_set_group                         (NautilusFile                   *file,
333 									 const char                     *group_name_or_id,
334 									 NautilusFileOperationCallback   callback,
335 									 gpointer                        callback_data);
336 void                    nautilus_file_set_permissions                   (NautilusFile                   *file,
337 									 guint32                         permissions,
338 									 NautilusFileOperationCallback   callback,
339 									 gpointer                        callback_data);
340 void                    nautilus_file_rename                            (NautilusFile                   *file,
341 									 const char                     *new_name,
342 									 NautilusFileOperationCallback   callback,
343 									 gpointer                        callback_data);
344 void                    nautilus_file_batch_rename                      (GList                          *files,
345                                                                          GList                          *new_names,
346                                                                          NautilusFileOperationCallback   callback,
347                                                                          gpointer                        callback_data);
348 void                    nautilus_file_cancel                            (NautilusFile                   *file,
349 									 NautilusFileOperationCallback   callback,
350 									 gpointer                        callback_data);
351 
352 /* Return true if this file has already been deleted.
353  * This object will be unref'd after sending the files_removed signal,
354  * but it could hang around longer if someone ref'd it.
355  */
356 gboolean                nautilus_file_is_gone                           (NautilusFile                   *file);
357 
358 /* Used in subclasses that handles the rename of a file. This handles the case
359  * when the file is gone. If this returns TRUE, simply do nothing
360  */
361 gboolean                nautilus_file_rename_handle_file_gone           (NautilusFile                   *file,
362                                                                          NautilusFileOperationCallback   callback,
363                                                                          gpointer                        callback_data);
364 
365 /* Return true if this file is not confirmed to have ever really
366  * existed. This is true when the NautilusFile object has been created, but no I/O
367  * has yet confirmed the existence of a file by that name.
368  */
369 gboolean                nautilus_file_is_not_yet_confirmed              (NautilusFile                   *file);
370 
371 /* Simple getting and setting top-level metadata. */
372 char *                  nautilus_file_get_metadata                      (NautilusFile                   *file,
373 									 const char                     *key,
374 									 const char                     *default_metadata);
375 GList *                 nautilus_file_get_metadata_list                 (NautilusFile                   *file,
376 									 const char                     *key);
377 void                    nautilus_file_set_metadata                      (NautilusFile                   *file,
378 									 const char                     *key,
379 									 const char                     *default_metadata,
380 									 const char                     *metadata);
381 void                    nautilus_file_set_metadata_list                 (NautilusFile                   *file,
382 									 const char                     *key,
383 									 GList                          *list);
384 
385 /* Covers for common data types. */
386 gboolean                nautilus_file_get_boolean_metadata              (NautilusFile                   *file,
387 									 const char                     *key,
388 									 gboolean                        default_metadata);
389 void                    nautilus_file_set_boolean_metadata              (NautilusFile                   *file,
390 									 const char                     *key,
391 									 gboolean                        default_metadata,
392 									 gboolean                        metadata);
393 int                     nautilus_file_get_integer_metadata              (NautilusFile                   *file,
394 									 const char                     *key,
395 									 int                             default_metadata);
396 void                    nautilus_file_set_integer_metadata              (NautilusFile                   *file,
397 									 const char                     *key,
398 									 int                             default_metadata,
399 									 int                             metadata);
400 
401 #define UNDEFINED_TIME ((time_t) (-1))
402 
403 time_t                  nautilus_file_get_time_metadata                 (NautilusFile                  *file,
404 									 const char                    *key);
405 void                    nautilus_file_set_time_metadata                 (NautilusFile                  *file,
406 									 const char                    *key,
407 									 time_t                         time);
408 
409 
410 /* Attributes for file objects as user-displayable strings. */
411 char *                  nautilus_file_get_string_attribute              (NautilusFile                   *file,
412 									 const char                     *attribute_name);
413 char *                  nautilus_file_get_string_attribute_q            (NautilusFile                   *file,
414 									 GQuark                          attribute_q);
415 char *                  nautilus_file_get_string_attribute_with_default (NautilusFile                   *file,
416 									 const char                     *attribute_name);
417 char *                  nautilus_file_get_string_attribute_with_default_q (NautilusFile                  *file,
418 									 GQuark                          attribute_q);
419 
420 /* Matching with another URI. */
421 gboolean                nautilus_file_matches_uri                       (NautilusFile                   *file,
422 									 const char                     *uri);
423 
424 gboolean                nautilus_file_has_local_path                    (NautilusFile                   *file);
425 
426 /* Comparing two file objects for sorting */
427 NautilusFileSortType    nautilus_file_get_default_sort_type             (NautilusFile                   *file,
428 									 gboolean                       *reversed);
429 
430 int                     nautilus_file_compare_for_sort                  (NautilusFile                   *file_1,
431 									 NautilusFile                   *file_2,
432 									 NautilusFileSortType            sort_type,
433 									 gboolean			 directories_first,
434 									 gboolean		  	 reversed);
435 int                     nautilus_file_compare_for_sort_by_attribute     (NautilusFile                   *file_1,
436 									 NautilusFile                   *file_2,
437 									 const char                     *attribute,
438 									 gboolean                        directories_first,
439 									 gboolean                        reversed);
440 int                     nautilus_file_compare_for_sort_by_attribute_q   (NautilusFile                   *file_1,
441 									 NautilusFile                   *file_2,
442 									 GQuark                          attribute,
443 									 gboolean                        directories_first,
444 									 gboolean                        reversed);
445 gboolean                nautilus_file_is_date_sort_attribute_q          (GQuark                          attribute);
446 
447 int                     nautilus_file_compare_location                  (NautilusFile                    *file_1,
448                                                                          NautilusFile                    *file_2);
449 
450 /* Compare display name of file with string for equality */
451 int                     nautilus_file_compare_display_name              (NautilusFile                   *file,
452 									 const char                     *string);
453 
454 /* filtering functions for use by various directory views */
455 gboolean                nautilus_file_is_hidden_file                    (NautilusFile                   *file);
456 gboolean                nautilus_file_should_show                       (NautilusFile                   *file,
457 									 gboolean                        show_hidden);
458 GList                  *nautilus_file_list_filter_hidden                (GList                          *files,
459 									 gboolean                        show_hidden);
460 
461 
462 /* Get the URI that's used when activating the file.
463  * Getting this can require reading the contents of the file.
464  */
465 gboolean                nautilus_file_has_activation_uri                (NautilusFile                   *file);
466 char *                  nautilus_file_get_activation_uri                (NautilusFile                   *file);
467 GFile *                 nautilus_file_get_activation_location           (NautilusFile                   *file);
468 GIcon *                 nautilus_file_get_gicon                         (NautilusFile                   *file,
469 									 NautilusFileIconFlags           flags);
470 NautilusIconInfo *      nautilus_file_get_icon                          (NautilusFile                   *file,
471 									 int                             size,
472 									 int                             scale,
473 									 NautilusFileIconFlags           flags);
474 GdkPixbuf *             nautilus_file_get_icon_pixbuf                   (NautilusFile                   *file,
475 									 int                             size,
476 									 gboolean                        force_size,
477 									 int                             scale,
478 									 NautilusFileIconFlags           flags);
479 
480 /* Whether the file should open inside a view */
481 gboolean                nautilus_file_opens_in_view                     (NautilusFile                   *file);
482 /* Thumbnailing handling */
483 gboolean                nautilus_file_is_thumbnailing                   (NautilusFile                   *file);
484 
485 /* Convenience functions for dealing with a list of NautilusFile objects that each have a ref.
486  * These are just convenient names for functions that work on lists of GtkObject *.
487  */
488 GList *                 nautilus_file_list_ref                          (GList                          *file_list);
489 void                    nautilus_file_list_unref                        (GList                          *file_list);
490 void                    nautilus_file_list_free                         (GList                          *file_list);
491 GList *                 nautilus_file_list_copy                         (GList                          *file_list);
492 GList *			nautilus_file_list_sort_by_display_name		(GList				*file_list);
493 void                    nautilus_file_list_call_when_ready              (GList                          *file_list,
494 									 NautilusFileAttributes          attributes,
495 									 NautilusFileListHandle        **handle,
496 									 NautilusFileListCallback        callback,
497 									 gpointer                        callback_data);
498 void                    nautilus_file_list_cancel_call_when_ready       (NautilusFileListHandle         *handle);
499 
500 GList *                 nautilus_file_list_filter                       (GList                          *files,
501                                                                          GList                         **failed,
502                                                                          NautilusFileFilterFunc          filter_function,
503                                                                          gpointer                        user_data);
504 gboolean                nautilus_file_list_are_all_folders              (const GList                    *files);
505 /* DND */
506 gboolean                nautilus_drag_can_accept_item                   (NautilusFile                   *drop_target_item,
507                                                                          const char                     *item_uri);
508 
509 gboolean                nautilus_drag_can_accept_items                  (NautilusFile                   *drop_target_item,
510                                                                          const GList                    *items);
511 
512 gboolean                nautilus_drag_can_accept_info                   (NautilusFile                   *drop_target_item,
513                                                                          NautilusIconDndTargetType       drag_type,
514                                                                          const GList                    *items);
515 
516 /* Debugging */
517 void                    nautilus_file_dump                              (NautilusFile                   *file);
518 
519 typedef struct NautilusFileDetails NautilusFileDetails;
520 
521 struct NautilusFile {
522 	GObject parent_slot;
523 	NautilusFileDetails *details;
524 };
525 
526 /* This is actually a "protected" type, but it must be here so we can
527  * compile the get_date function pointer declaration below.
528  */
529 typedef enum {
530 	NAUTILUS_DATE_TYPE_MODIFIED,
531 	NAUTILUS_DATE_TYPE_ACCESSED,
532 	NAUTILUS_DATE_TYPE_CREATED,
533 	NAUTILUS_DATE_TYPE_TRASHED,
534 	NAUTILUS_DATE_TYPE_RECENCY
535 } NautilusDateType;
536 
537 gboolean                nautilus_file_get_date                          (NautilusFile                   *file,
538                                                                          NautilusDateType                date_type,
539                                                                          time_t                         *date);
540 
541 typedef struct {
542 	GObjectClass parent_slot;
543 
544 	/* Subclasses can set this to something other than G_FILE_TYPE_UNKNOWN and
545 	   it will be used as the default file type. This is useful when creating
546 	   a "virtual" NautilusFile subclass that you can't actually get real
547 	   information about. For exaple NautilusDesktopDirectoryFile. */
548 	GFileType default_file_type;
549 
550 	/* Called when the file notices any change. */
551 	void                  (* changed)                (NautilusFile *file);
552 
553 	/* Called periodically while directory deep count is being computed. */
554 	void                  (* updated_deep_count_in_progress) (NautilusFile *file);
555 
556 	/* Virtual functions (mainly used for trash directory). */
557 	void                  (* monitor_add)            (NautilusFile           *file,
558 							  gconstpointer           client,
559 							  NautilusFileAttributes  attributes);
560 	void                  (* monitor_remove)         (NautilusFile           *file,
561 							  gconstpointer           client);
562 	void                  (* call_when_ready)        (NautilusFile           *file,
563 							  NautilusFileAttributes  attributes,
564 							  NautilusFileCallback    callback,
565 							  gpointer                callback_data);
566 	void                  (* cancel_call_when_ready) (NautilusFile           *file,
567 							  NautilusFileCallback    callback,
568 							  gpointer                callback_data);
569 	gboolean              (* check_if_ready)         (NautilusFile           *file,
570 							  NautilusFileAttributes  attributes);
571 	gboolean              (* get_item_count)         (NautilusFile           *file,
572 							  guint                  *count,
573 							  gboolean               *count_unreadable);
574 	NautilusRequestStatus (* get_deep_counts)        (NautilusFile           *file,
575 							  guint                  *directory_count,
576 							  guint                  *file_count,
577 							  guint                  *unreadable_directory_count,
578 							  goffset       *total_size);
579 	gboolean              (* get_date)               (NautilusFile           *file,
580 							  NautilusDateType        type,
581 							  time_t                 *date);
582 	char *                (* get_where_string)       (NautilusFile           *file);
583 
584 	void                  (* set_metadata)           (NautilusFile           *file,
585 							  const char             *key,
586 							  const char             *value);
587 	void                  (* set_metadata_as_list)   (NautilusFile           *file,
588 							  const char             *key,
589 							  char                  **value);
590 
591 	void                  (* mount)                  (NautilusFile                   *file,
592 							  GMountOperation                *mount_op,
593 							  GCancellable                   *cancellable,
594 							  NautilusFileOperationCallback   callback,
595 							  gpointer                        callback_data);
596 	void                 (* unmount)                 (NautilusFile                   *file,
597 							  GMountOperation                *mount_op,
598 							  GCancellable                   *cancellable,
599 							  NautilusFileOperationCallback   callback,
600 							  gpointer                        callback_data);
601 	void                 (* eject)                   (NautilusFile                   *file,
602 							  GMountOperation                *mount_op,
603 							  GCancellable                   *cancellable,
604 							  NautilusFileOperationCallback   callback,
605 							  gpointer                        callback_data);
606 
607 	void                  (* start)                  (NautilusFile                   *file,
608 							  GMountOperation                *start_op,
609 							  GCancellable                   *cancellable,
610 							  NautilusFileOperationCallback   callback,
611 							  gpointer                        callback_data);
612 	void                 (* stop)                    (NautilusFile                   *file,
613 							  GMountOperation                *mount_op,
614 							  GCancellable                   *cancellable,
615 							  NautilusFileOperationCallback   callback,
616 							  gpointer                        callback_data);
617 
618 	void                 (* poll_for_media)          (NautilusFile                   *file);
619 } NautilusFileClass;
620