1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
2 
3    nemo-file.h: Nemo file model.
4 
5    Copyright (C) 1999, 2000, 2001 Eazel, Inc.
6 
7    This program is free software; you can redistribute it and/or
8    modify it under the terms of the GNU General Public License as
9    published by the Free Software Foundation; either version 2 of the
10    License, or (at your option) any later version.
11 
12    This program 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 program; if not, write to the
19    Free Software Foundation, Inc., 51 Franklin Street - Suite 500,
20    Boston, MA 02110-1335, USA.
21 
22    Author: Darin Adler <darin@bentspoon.com>
23 */
24 
25 #ifndef NEMO_FILE_H
26 #define NEMO_FILE_H
27 
28 #include <gtk/gtk.h>
29 #include <gio/gio.h>
30 #include <pango/pango.h>
31 #include <libnemo-private/nemo-file-attributes.h>
32 #include <libnemo-private/nemo-icon-info.h>
33 
34 /* NemoFile is an object used to represent a single element of a
35  * NemoDirectory. It's lightweight and relies on NemoDirectory
36  * to do most of the work.
37  */
38 
39 /* NemoFile is defined both here and in nemo-directory.h. */
40 #ifndef NEMO_FILE_DEFINED
41 #define NEMO_FILE_DEFINED
42 typedef struct NemoFile NemoFile;
43 #endif
44 
45 #define NEMO_TYPE_FILE nemo_file_get_type()
46 #define NEMO_FILE(obj) \
47   (G_TYPE_CHECK_INSTANCE_CAST ((obj), NEMO_TYPE_FILE, NemoFile))
48 #define NEMO_FILE_CLASS(klass) \
49   (G_TYPE_CHECK_CLASS_CAST ((klass), NEMO_TYPE_FILE, NemoFileClass))
50 #define NEMO_IS_FILE(obj) \
51   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NEMO_TYPE_FILE))
52 #define NEMO_IS_FILE_CLASS(klass) \
53   (G_TYPE_CHECK_CLASS_TYPE ((klass), NEMO_TYPE_FILE))
54 #define NEMO_FILE_GET_CLASS(obj) \
55   (G_TYPE_INSTANCE_GET_CLASS ((obj), NEMO_TYPE_FILE, NemoFileClass))
56 
57 typedef enum {
58 	NEMO_FILE_SORT_NONE,
59 	NEMO_FILE_SORT_BY_DISPLAY_NAME,
60 	NEMO_FILE_SORT_BY_SIZE,
61 	NEMO_FILE_SORT_BY_TYPE,
62     NEMO_FILE_SORT_BY_DETAILED_TYPE,
63 	NEMO_FILE_SORT_BY_MTIME,
64     NEMO_FILE_SORT_BY_ATIME,
65 	NEMO_FILE_SORT_BY_TRASHED_TIME,
66     NEMO_FILE_SORT_BY_BTIME
67 } NemoFileSortType;
68 
69 typedef enum {
70 	NEMO_REQUEST_NOT_STARTED,
71 	NEMO_REQUEST_IN_PROGRESS,
72 	NEMO_REQUEST_DONE
73 } NemoRequestStatus;
74 
75 typedef enum {
76 	NEMO_FILE_ICON_FLAGS_NONE = 0,
77 	NEMO_FILE_ICON_FLAGS_USE_THUMBNAILS = (1<<0),
78 	NEMO_FILE_ICON_FLAGS_IGNORE_VISITING = (1<<1),
79 	NEMO_FILE_ICON_FLAGS_EMBEDDING_TEXT = (1<<2),
80 	NEMO_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT = (1<<3),
81 	NEMO_FILE_ICON_FLAGS_FOR_OPEN_FOLDER = (1<<4),
82 	/* whether the thumbnail size must match the display icon size */
83 	NEMO_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE = (1<<5),
84 	/* uses the icon of the mount if present */
85 	NEMO_FILE_ICON_FLAGS_USE_MOUNT_ICON = (1<<6),
86 	/* render the mount icon as an emblem over the regular one */
87 	NEMO_FILE_ICON_FLAGS_USE_MOUNT_ICON_AS_EMBLEM = (1<<7),
88     NEMO_FILE_ICON_FLAGS_PIN_HEIGHT_FOR_DESKTOP = (1<<8)
89 } NemoFileIconFlags;
90 
91 typedef enum {
92     NEMO_DATE_TYPE_MODIFIED,
93     NEMO_DATE_TYPE_CHANGED,
94     NEMO_DATE_TYPE_ACCESSED,
95     NEMO_DATE_TYPE_PERMISSIONS_CHANGED,
96     NEMO_DATE_TYPE_TRASHED,
97     NEMO_DATE_TYPE_CREATED
98 } NemoDateType;
99 
100 typedef enum {
101     NEMO_FILE_TOOLTIP_FLAGS_NONE = 0,
102     NEMO_FILE_TOOLTIP_FLAGS_FILE_TYPE =  (1<<0),
103     NEMO_FILE_TOOLTIP_FLAGS_MOD_DATE = (1<<1),
104     NEMO_FILE_TOOLTIP_FLAGS_ACCESS_DATE = (1<<2),
105     NEMO_FILE_TOOLTIP_FLAGS_PATH = (1<<3),
106     NEMO_FILE_TOOLTIP_FLAGS_CREATED_DATE = (1<<4)
107 } NemoFileTooltipFlags;
108 
109 typedef enum {
110     NEMO_FILE_LOAD_DEFERRED_ATTRS_NO,
111     NEMO_FILE_LOAD_DEFERRED_ATTRS_YES,
112     NEMO_FILE_LOAD_DEFERRED_ATTRS_PRELOAD
113 } NemoFileLoadDeferredAttrs;
114 
115 /* Emblems sometimes displayed for NemoFiles. Do not localize. */
116 #define NEMO_FILE_EMBLEM_NAME_SYMBOLIC_LINK "symbolic-link"
117 #define NEMO_FILE_EMBLEM_NAME_CANT_READ "noread"
118 #define NEMO_FILE_EMBLEM_NAME_CANT_WRITE "nowrite"
119 #define NEMO_FILE_EMBLEM_NAME_TRASH "trash"
120 #define NEMO_FILE_EMBLEM_NAME_NOTE "note"
121 #define NEMO_FILE_EMBLEM_NAME_FAVORITE "xapp-favorite"
122 
123 typedef void (*NemoFileCallback)          (NemoFile  *file,
124 				               gpointer       callback_data);
125 typedef void (*NemoFileListCallback)      (GList         *file_list,
126 				               gpointer       callback_data);
127 typedef void (*NemoFileOperationCallback) (NemoFile  *file,
128 					       GFile         *result_location,
129 					       GError        *error,
130 					       gpointer       callback_data);
131 typedef int (*NemoWidthMeasureCallback)   (const char    *string,
132 					       void	     *context);
133 typedef char * (*NemoTruncateCallback)    (const char    *string,
134 					       int	      width,
135 					       void	     *context);
136 
137 #define NEMO_FILE_ATTRIBUTES_FOR_ICON (NEMO_FILE_ATTRIBUTE_INFO | NEMO_FILE_ATTRIBUTE_LINK_INFO | NEMO_FILE_ATTRIBUTE_THUMBNAIL)
138 #define NEMO_FILE_DEFERRED_ATTRIBUTES (NEMO_FILE_ATTRIBUTE_THUMBNAIL | NEMO_FILE_ATTRIBUTE_EXTENSION_INFO)
139 
140 typedef void NemoFileListHandle;
141 
142 /* GObject requirements. */
143 GType                   nemo_file_get_type                          (void);
144 
145 /* Getting at a single file. */
146 NemoFile *          nemo_file_get                               (GFile                          *location);
147 NemoFile *          nemo_file_get_by_uri                        (const char                     *uri);
148 
149 /* Get a file only if the nemo version already exists */
150 NemoFile *          nemo_file_get_existing                      (GFile                          *location);
151 NemoFile *          nemo_file_get_existing_by_uri               (const char                     *uri);
152 
153 /* Covers for g_object_ref and g_object_unref that provide two conveniences:
154  * 1) Using these is type safe.
155  * 2) You are allowed to call these with NULL,
156  */
157 NemoFile *          nemo_file_ref                               (NemoFile                   *file);
158 void                    nemo_file_unref                             (NemoFile                   *file);
159 
160 /* Monitor the file. */
161 void                    nemo_file_monitor_add                       (NemoFile                   *file,
162 									 gconstpointer                   client,
163 									 NemoFileAttributes          attributes);
164 void                    nemo_file_monitor_remove                    (NemoFile                   *file,
165 									 gconstpointer                   client);
166 
167 /* Waiting for data that's read asynchronously.
168  * This interface currently works only for metadata, but could be expanded
169  * to other attributes as well.
170  */
171 void                    nemo_file_call_when_ready                   (NemoFile                   *file,
172 									 NemoFileAttributes          attributes,
173 									 NemoFileCallback            callback,
174 									 gpointer                        callback_data);
175 void                    nemo_file_cancel_call_when_ready            (NemoFile                   *file,
176 									 NemoFileCallback            callback,
177 									 gpointer                        callback_data);
178 gboolean                nemo_file_check_if_ready                    (NemoFile                   *file,
179 									 NemoFileAttributes          attributes);
180 void                    nemo_file_invalidate_attributes             (NemoFile                   *file,
181 									 NemoFileAttributes          attributes);
182 void                    nemo_file_invalidate_all_attributes         (NemoFile                   *file);
183 
184 void                    nemo_file_increment_thumbnail_try_count     (NemoFile                   *file);
185 
186 /* Basic attributes for file objects. */
187 gboolean                nemo_file_contains_text                     (NemoFile                   *file);
188 char *                  nemo_file_get_display_name                  (NemoFile                   *file);
189 char *                  nemo_file_get_edit_name                     (NemoFile                   *file);
190 char *                  nemo_file_get_name                          (NemoFile                   *file);
191 const char *            nemo_file_peek_name                         (NemoFile                   *file);
192 
193 GFile *                 nemo_file_get_location                      (NemoFile                   *file);
194 char *			 nemo_file_get_description			 (NemoFile			 *file);
195 char *                  nemo_file_get_uri                           (NemoFile                   *file);
196 char *                  nemo_file_get_path                          (NemoFile                   *file);
197 char *                  nemo_file_get_uri_scheme                    (NemoFile                   *file);
198 NemoFile *          nemo_file_get_parent                        (NemoFile                   *file);
199 GFile *                 nemo_file_get_parent_location               (NemoFile                   *file);
200 char *                  nemo_file_get_parent_uri                    (NemoFile                   *file);
201 char *                  nemo_file_get_parent_uri_for_display        (NemoFile                   *file);
202 gboolean                nemo_file_can_get_size                      (NemoFile                   *file);
203 goffset                 nemo_file_get_size                          (NemoFile                   *file);
204 time_t                  nemo_file_get_mtime                         (NemoFile                   *file);
205 time_t                  nemo_file_get_ctime                         (NemoFile                   *file);
206 GFileType               nemo_file_get_file_type                     (NemoFile                   *file);
207 char *                  nemo_file_get_mime_type                     (NemoFile                   *file);
208 gboolean                nemo_file_is_mime_type                      (NemoFile                   *file,
209 									 const char                     *mime_type);
210 gboolean                nemo_file_is_launchable                     (NemoFile                   *file);
211 gboolean                nemo_file_is_symbolic_link                  (NemoFile                   *file);
212 gboolean                nemo_file_is_mountpoint                     (NemoFile                   *file);
213 GMount *                nemo_file_get_mount                         (NemoFile                   *file);
214 void                    nemo_file_set_mount                         (NemoFile                   *file,
215                                                                      GMount                     *mount);
216 char *                  nemo_file_get_volume_free_space             (NemoFile                   *file);
217 char *                  nemo_file_get_volume_name                   (NemoFile                   *file);
218 char *                  nemo_file_get_symbolic_link_target_path     (NemoFile                   *file);
219 char *                  nemo_file_get_symbolic_link_target_uri      (NemoFile                   *file);
220 gboolean                nemo_file_is_broken_symbolic_link           (NemoFile                   *file);
221 gboolean                nemo_file_is_nemo_link                  (NemoFile                   *file);
222 gboolean                nemo_file_is_executable                     (NemoFile                   *file);
223 gboolean                nemo_file_is_directory                      (NemoFile                   *file);
224 gboolean                nemo_file_is_user_special_directory         (NemoFile                   *file,
225 									 GUserDirectory                 special_directory);
226 gboolean		nemo_file_is_archive			(NemoFile			*file);
227 gboolean                nemo_file_is_in_trash                       (NemoFile                   *file);
228 gboolean                nemo_file_is_in_recent                      (NemoFile                   *file);
229 gboolean                nemo_file_is_in_favorites                   (NemoFile                   *file);
230 gboolean                nemo_file_is_unavailable_favorite           (NemoFile                   *file);
231 gboolean                nemo_file_is_in_admin                       (NemoFile                   *file);
232 gboolean                nemo_file_is_in_desktop                     (NemoFile                   *file);
233 gboolean		nemo_file_is_home				(NemoFile                   *file);
234 gboolean                nemo_file_is_desktop_directory              (NemoFile                   *file);
235 GError *                nemo_file_get_file_info_error               (NemoFile                   *file);
236 gboolean                nemo_file_get_directory_item_count          (NemoFile                   *file,
237 									 guint                          *count,
238 									 gboolean                       *count_unreadable);
239 void                    nemo_file_recompute_deep_counts             (NemoFile                   *file);
240 NemoRequestStatus   nemo_file_get_deep_counts                   (NemoFile                   *file,
241 									 guint                          *directory_count,
242 									 guint                          *file_count,
243 									 guint                          *unreadable_directory_count,
244                                      guint                          *hidden_count,
245 									 goffset                         *total_size,
246 									 gboolean                        force);
247 gboolean                nemo_file_should_show_thumbnail             (NemoFile                   *file);
248 void                    nemo_file_delete_thumbnail                  (NemoFile                   *file);
249 gboolean                nemo_file_has_loaded_thumbnail              (NemoFile                   *file);
250 gboolean                nemo_file_should_show_directory_item_count  (NemoFile                   *file);
251 gboolean                nemo_file_should_show_type                  (NemoFile                   *file);
252 GList *                 nemo_file_get_keywords                      (NemoFile                   *file);
253 GList *                 nemo_file_get_emblem_icons                  (NemoFile                   *file,
254                                                                      NemoFile                   *view_file);
255 gboolean                nemo_file_get_directory_item_mime_types     (NemoFile                   *file,
256 									 GList                         **mime_list);
257 
258 void                    nemo_file_set_attributes                    (NemoFile                   *file,
259 									 GFileInfo                      *attributes,
260 									 NemoFileOperationCallback   callback,
261 									 gpointer                        callback_data);
262 GFilesystemPreviewType  nemo_file_get_filesystem_use_preview        (NemoFile *file);
263 
264 char *                  nemo_file_get_filesystem_id                 (NemoFile                   *file);
265 
266 NemoFile *          nemo_file_get_trash_original_file           (NemoFile                   *file);
267 
268 /* Permissions. */
269 gboolean                nemo_file_can_get_permissions               (NemoFile                   *file);
270 gboolean                nemo_file_can_set_permissions               (NemoFile                   *file);
271 guint                   nemo_file_get_permissions                   (NemoFile                   *file);
272 gboolean                nemo_file_can_get_owner                     (NemoFile                   *file);
273 gboolean                nemo_file_can_set_owner                     (NemoFile                   *file);
274 gboolean                nemo_file_can_get_group                     (NemoFile                   *file);
275 gboolean                nemo_file_can_set_group                     (NemoFile                   *file);
276 char *                  nemo_file_get_owner_name                    (NemoFile                   *file);
277 char *                  nemo_file_get_group_name                    (NemoFile                   *file);
278 GList *                 nemo_get_user_names                         (void);
279 GList *                 nemo_get_all_group_names                    (void);
280 GList *                 nemo_file_get_settable_group_names          (NemoFile                   *file);
281 gboolean                nemo_file_can_get_selinux_context           (NemoFile                   *file);
282 char *                  nemo_file_get_selinux_context               (NemoFile                   *file);
283 
284 /* "Capabilities". */
285 gboolean                nemo_file_can_read                          (NemoFile                   *file);
286 gboolean                nemo_file_can_write                         (NemoFile                   *file);
287 gboolean                nemo_file_can_execute                       (NemoFile                   *file);
288 gboolean                nemo_file_can_rename                        (NemoFile                   *file);
289 gboolean                nemo_file_can_delete                        (NemoFile                   *file);
290 gboolean                nemo_file_can_trash                         (NemoFile                   *file);
291 
292 gboolean                nemo_file_can_mount                         (NemoFile                   *file);
293 gboolean                nemo_file_can_unmount                       (NemoFile                   *file);
294 gboolean                nemo_file_can_eject                         (NemoFile                   *file);
295 gboolean                nemo_file_can_start                         (NemoFile                   *file);
296 gboolean                nemo_file_can_start_degraded                (NemoFile                   *file);
297 gboolean                nemo_file_can_stop                          (NemoFile                   *file);
298 GDriveStartStopType     nemo_file_get_start_stop_type               (NemoFile                   *file);
299 gboolean                nemo_file_can_poll_for_media                (NemoFile                   *file);
300 gboolean                nemo_file_is_media_check_automatic          (NemoFile                   *file);
301 
302 void                    nemo_file_mount                             (NemoFile                   *file,
303 									 GMountOperation                *mount_op,
304 									 GCancellable                   *cancellable,
305 									 NemoFileOperationCallback   callback,
306 									 gpointer                        callback_data);
307 void                    nemo_file_unmount                           (NemoFile                   *file,
308 									 GMountOperation                *mount_op,
309 									 GCancellable                   *cancellable,
310 									 NemoFileOperationCallback   callback,
311 									 gpointer                        callback_data);
312 void                    nemo_file_eject                             (NemoFile                   *file,
313 									 GMountOperation                *mount_op,
314 									 GCancellable                   *cancellable,
315 									 NemoFileOperationCallback   callback,
316 									 gpointer                        callback_data);
317 
318 void                    nemo_file_start                             (NemoFile                   *file,
319 									 GMountOperation                *start_op,
320 									 GCancellable                   *cancellable,
321 									 NemoFileOperationCallback   callback,
322 									 gpointer                        callback_data);
323 void                    nemo_file_stop                              (NemoFile                   *file,
324 									 GMountOperation                *mount_op,
325 									 GCancellable                   *cancellable,
326 									 NemoFileOperationCallback   callback,
327 									 gpointer                        callback_data);
328 void                    nemo_file_poll_for_media                    (NemoFile                   *file);
329 
330 /* Basic operations for file objects. */
331 void                    nemo_file_set_owner                         (NemoFile                   *file,
332 									 const char                     *user_name_or_id,
333 									 NemoFileOperationCallback   callback,
334 									 gpointer                        callback_data);
335 void                    nemo_file_set_group                         (NemoFile                   *file,
336 									 const char                     *group_name_or_id,
337 									 NemoFileOperationCallback   callback,
338 									 gpointer                        callback_data);
339 void                    nemo_file_set_permissions                   (NemoFile                   *file,
340 									 guint32                         permissions,
341 									 NemoFileOperationCallback   callback,
342 									 gpointer                        callback_data);
343 void                    nemo_file_rename                            (NemoFile                   *file,
344 									 const char                     *new_name,
345 									 NemoFileOperationCallback   callback,
346 									 gpointer                        callback_data);
347 void                    nemo_file_cancel                            (NemoFile                   *file,
348 									 NemoFileOperationCallback   callback,
349 									 gpointer                        callback_data);
350 
351 /* Return true if this file has already been deleted.
352  * This object will be unref'd after sending the files_removed signal,
353  * but it could hang around longer if someone ref'd it.
354  */
355 gboolean                nemo_file_is_gone                           (NemoFile                   *file);
356 
357 /* Return true if this file is not confirmed to have ever really
358  * existed. This is true when the NemoFile object has been created, but no I/O
359  * has yet confirmed the existence of a file by that name.
360  */
361 gboolean                nemo_file_is_not_yet_confirmed              (NemoFile                   *file);
362 
363 /* Simple getting and setting top-level metadata. */
364 char *                  nemo_file_get_metadata                      (NemoFile                   *file,
365 									 const char                     *key,
366 									 const char                     *default_metadata);
367 GList *                 nemo_file_get_metadata_list                 (NemoFile                   *file,
368 									 const char                     *key);
369 void                    nemo_file_set_metadata                      (NemoFile                   *file,
370 									 const char                     *key,
371 									 const char                     *default_metadata,
372 									 const char                     *metadata);
373 void                    nemo_file_set_metadata_list                 (NemoFile                   *file,
374 									 const char                     *key,
375 									 GList                          *list);
376 void                    nemo_file_set_desktop_grid_adjusts (NemoFile   *file,
377                                                             const char *key,
378                                                             int         int_a,
379                                                             int         int_b);
380 void                    nemo_file_get_desktop_grid_adjusts (NemoFile   *file,
381                                                             const char *key,
382                                                             int        *int_a,
383                                                             int        *int_b);
384 /* Covers for common data types. */
385 gboolean                nemo_file_get_boolean_metadata              (NemoFile                   *file,
386 									 const char                     *key,
387 									 gboolean                        default_metadata);
388 void                    nemo_file_set_boolean_metadata              (NemoFile                   *file,
389 									 const char                     *key,
390 									 gboolean                        default_metadata,
391 									 gboolean                        metadata);
392 int                     nemo_file_get_integer_metadata              (NemoFile                   *file,
393 									 const char                     *key,
394 									 int                             default_metadata);
395 void                    nemo_file_set_integer_metadata              (NemoFile                   *file,
396 									 const char                     *key,
397 									 int                             default_metadata,
398 									 int                             metadata);
399 
400 #define UNDEFINED_TIME ((time_t) (-1))
401 
402 time_t                  nemo_file_get_time_metadata                 (NemoFile                  *file,
403 									 const char                    *key);
404 void                    nemo_file_set_time_metadata                 (NemoFile                  *file,
405 									 const char                    *key,
406 									 time_t                         time);
407 
408 
409 /* Attributes for file objects as user-displayable strings. */
410 char *                  nemo_file_get_string_attribute              (NemoFile                   *file,
411 									 const char                     *attribute_name);
412 char *                  nemo_file_get_string_attribute_q            (NemoFile                   *file,
413 									 GQuark                          attribute_q);
414 char *                  nemo_file_get_string_attribute_with_default (NemoFile                   *file,
415 									 const char                     *attribute_name);
416 char *                  nemo_file_get_string_attribute_with_default_q (NemoFile                  *file,
417 									 GQuark                          attribute_q);
418 
419 /* Matching with another URI. */
420 gboolean                nemo_file_matches_uri                       (NemoFile                   *file,
421 									 const char                     *uri);
422 
423 /* Is the file local? */
424 gboolean                nemo_file_is_local                          (NemoFile                   *file);
425 
426 /* Comparing two file objects for sorting */
427 NemoFileSortType    nemo_file_get_default_sort_type             (NemoFile                   *file,
428 									 gboolean                       *reversed);
429 const gchar *           nemo_file_get_default_sort_attribute        (NemoFile                   *file,
430 									 gboolean                       *reversed);
431 
432 int                     nemo_file_compare_for_sort                  (NemoFile                   *file_1,
433 									 NemoFile                   *file_2,
434 									 NemoFileSortType            sort_type,
435 									 gboolean			 directories_first,
436 									 gboolean		  	 reversed);
437 int                     nemo_file_compare_for_sort_by_attribute     (NemoFile                   *file_1,
438 									 NemoFile                   *file_2,
439 									 const char                     *attribute,
440 									 gboolean                        directories_first,
441 									 gboolean                        reversed);
442 int                     nemo_file_compare_for_sort_by_attribute_q   (NemoFile                   *file_1,
443 									 NemoFile                   *file_2,
444 									 GQuark                          attribute,
445 									 gboolean                        directories_first,
446 									 gboolean                        reversed);
447 gboolean                nemo_file_is_date_sort_attribute_q          (GQuark                          attribute);
448 
449 int                     nemo_file_compare_display_name              (NemoFile                   *file_1,
450 									 const char                     *pattern);
451 int                     nemo_file_compare_location                  (NemoFile                    *file_1,
452                                                                          NemoFile                    *file_2);
453 
454 /* filtering functions for use by various directory views */
455 gboolean                nemo_file_is_hidden_file                    (NemoFile                   *file);
456 gboolean                nemo_file_should_show                       (NemoFile                   *file,
457 									 gboolean                        show_hidden,
458 									 gboolean                        show_foreign);
459 GList                  *nemo_file_list_filter_hidden                (GList                          *files,
460 									 gboolean                        show_hidden);
461 
462 
463 /* Get the URI that's used when activating the file.
464  * Getting this can require reading the contents of the file.
465  */
466 gboolean                nemo_file_is_launcher                       (NemoFile                   *file);
467 gboolean                nemo_file_is_foreign_link                   (NemoFile                   *file);
468 gboolean                nemo_file_is_trusted_link                   (NemoFile                   *file);
469 gboolean                nemo_file_has_activation_uri                (NemoFile                   *file);
470 char *                  nemo_file_get_activation_uri                (NemoFile                   *file);
471 GFile *                 nemo_file_get_activation_location           (NemoFile                   *file);
472 
473 char *                  nemo_file_get_drop_target_uri               (NemoFile                   *file);
474 
475 GIcon *                 nemo_file_get_gicon                         (NemoFile                   *file,
476                                                                      NemoFileIconFlags           flags);
477 gchar *                 nemo_file_get_control_icon_name             (NemoFile                   *file);
478 
479 NemoIconInfo *      nemo_file_get_icon                          (NemoFile                   *file,
480 									 int                             size,
481                                      int                             max_width,
482                                      int                             scale,
483 									 NemoFileIconFlags           flags);
484 GdkPixbuf *             nemo_file_get_icon_pixbuf                   (NemoFile                   *file,
485 									 int                             size,
486 									 gboolean                        force_size,
487                                      int                             scale,
488 									 NemoFileIconFlags           flags);
489 
490 gboolean                nemo_file_has_open_window                   (NemoFile                   *file);
491 void                    nemo_file_set_has_open_window               (NemoFile                   *file,
492 									 gboolean                        has_open_window);
493 
494 /* Thumbnailing handling */
495 gboolean                nemo_file_is_thumbnailing                   (NemoFile                   *file);
496 
497 /* Convenience functions for dealing with a list of NemoFile objects that each have a ref.
498  * These are just convenient names for functions that work on lists of GtkObject *.
499  */
500 GList *                 nemo_file_list_ref                          (GList                          *file_list);
501 void                    nemo_file_list_unref                        (GList                          *file_list);
502 void                    nemo_file_list_free                         (GList                          *file_list);
503 GList *                 nemo_file_list_copy                         (GList                          *file_list);
504 GList *                 nemo_file_list_from_uris                    (GList                          *uri_list);
505 GList *			nemo_file_list_sort_by_display_name		(GList				*file_list);
506 void                    nemo_file_list_call_when_ready              (GList                          *file_list,
507 									 NemoFileAttributes          attributes,
508 									 NemoFileListHandle        **handle,
509 									 NemoFileListCallback        callback,
510 									 gpointer                        callback_data);
511 void                    nemo_file_list_cancel_call_when_ready       (NemoFileListHandle         *handle);
512 
513 char *   nemo_file_get_owner_as_string            (NemoFile          *file,
514                                                           gboolean           include_real_name);
515 char *   nemo_file_get_type_as_string             (NemoFile          *file);
516 char *   nemo_file_get_detailed_type_as_string    (NemoFile          *file);
517 
518 gchar *  nemo_file_construct_tooltip              (NemoFile *file, NemoFileTooltipFlags flags);
519 
520 gboolean nemo_file_has_thumbnail_access_problem   (NemoFile *file);
521 
522 gint     nemo_file_get_monitor_number             (NemoFile *file);
523 void     nemo_file_set_monitor_number             (NemoFile *file, gint monitor);
524 void     nemo_file_get_position                   (NemoFile *file, GdkPoint *point);
525 void     nemo_file_set_position                   (NemoFile *file, gint x, gint y);
526 gboolean nemo_file_get_is_desktop_orphan          (NemoFile *file);
527 void     nemo_file_set_is_desktop_orphan          (NemoFile *file, gboolean is_desktop_orphan);
528 
529 gboolean nemo_file_get_pinning                    (NemoFile *file);
530 void     nemo_file_set_pinning                    (NemoFile *file, gboolean  pin);
531 gboolean nemo_file_get_is_favorite                (NemoFile *file);
532 void     nemo_file_set_is_favorite                (NemoFile *file, gboolean favorite);
533 void     nemo_file_set_load_deferred_attrs        (NemoFile *file,
534                                                    NemoFileLoadDeferredAttrs load_deferred_attrs);
535 NemoFileLoadDeferredAttrs nemo_file_get_load_deferred_attrs (NemoFile *file);
536 /* Debugging */
537 void                    nemo_file_dump                              (NemoFile                   *file);
538 
539 typedef struct NemoFileDetails NemoFileDetails;
540 
541 struct NemoFile {
542 	GObject parent_slot;
543 	NemoFileDetails *details;
544 };
545 
546 typedef struct {
547 	GObjectClass parent_slot;
548 
549 	/* Subclasses can set this to something other than G_FILE_TYPE_UNKNOWN and
550 	   it will be used as the default file type. This is useful when creating
551 	   a "virtual" NemoFile subclass that you can't actually get real
552 	   information about. For exaple NemoDesktopDirectoryFile. */
553 	GFileType default_file_type;
554 
555 	/* Called when the file notices any change. */
556 	void                  (* changed)                (NemoFile *file);
557 
558 	/* Called periodically while directory deep count is being computed. */
559 	void                  (* updated_deep_count_in_progress) (NemoFile *file);
560 
561 	/* Virtual functions (mainly used for trash directory). */
562 	void                  (* monitor_add)            (NemoFile           *file,
563 							  gconstpointer           client,
564 							  NemoFileAttributes  attributes);
565 	void                  (* monitor_remove)         (NemoFile           *file,
566 							  gconstpointer           client);
567 	void                  (* call_when_ready)        (NemoFile           *file,
568 							  NemoFileAttributes  attributes,
569 							  NemoFileCallback    callback,
570 							  gpointer                callback_data);
571 	void                  (* cancel_call_when_ready) (NemoFile           *file,
572 							  NemoFileCallback    callback,
573 							  gpointer                callback_data);
574 	gboolean              (* check_if_ready)         (NemoFile           *file,
575 							  NemoFileAttributes  attributes);
576 	gboolean              (* get_item_count)         (NemoFile           *file,
577 							  guint                  *count,
578 							  gboolean               *count_unreadable);
579 	NemoRequestStatus (* get_deep_counts)        (NemoFile           *file,
580 							  guint                  *directory_count,
581 							  guint                  *file_count,
582 							  guint                  *unreadable_directory_count,
583                               guint                  *hidden_count,
584 							  goffset       *total_size);
585 	gboolean              (* get_date)               (NemoFile           *file,
586 							  NemoDateType        type,
587 							  time_t                 *date);
588 	char *                (* get_where_string)       (NemoFile           *file);
589 
590 	void                  (* set_metadata)           (NemoFile           *file,
591                                                       const char         *key,
592                                                       const char         *value);
593 	void                  (* set_metadata_as_list)   (NemoFile           *file,
594                                                       const char         *key,
595                                                       char              **value);
596     gchar *               (* get_metadata)           (NemoFile           *file,
597                                                       const char         *key);
598     gchar **              (* get_metadata_as_list)   (NemoFile           *file,
599                                                       const char         *key);
600 	void                  (* mount)                  (NemoFile                   *file,
601 							  GMountOperation                *mount_op,
602 							  GCancellable                   *cancellable,
603 							  NemoFileOperationCallback   callback,
604 							  gpointer                        callback_data);
605 	void                 (* unmount)                 (NemoFile                   *file,
606 							  GMountOperation                *mount_op,
607 							  GCancellable                   *cancellable,
608 							  NemoFileOperationCallback   callback,
609 							  gpointer                        callback_data);
610 	void                 (* eject)                   (NemoFile                   *file,
611 							  GMountOperation                *mount_op,
612 							  GCancellable                   *cancellable,
613 							  NemoFileOperationCallback   callback,
614 							  gpointer                        callback_data);
615 
616 	void                  (* start)                  (NemoFile                   *file,
617 							  GMountOperation                *start_op,
618 							  GCancellable                   *cancellable,
619 							  NemoFileOperationCallback   callback,
620 							  gpointer                        callback_data);
621 	void                 (* stop)                    (NemoFile                   *file,
622 							  GMountOperation                *mount_op,
623 							  GCancellable                   *cancellable,
624 							  NemoFileOperationCallback   callback,
625 							  gpointer                        callback_data);
626 
627 	void                 (* poll_for_media)          (NemoFile                   *file);
628 } NemoFileClass;
629 
630 #endif /* NEMO_FILE_H */
631