/* nautilus-file.h: Nautilus file model. Copyright (C) 1999, 2000, 2001 Eazel, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . Author: Darin Adler */ #pragma once #include #include #include "nautilus-types.h" /* NautilusFile is an object used to represent a single element of a * NautilusDirectory. It's lightweight and relies on NautilusDirectory * to do most of the work. */ /* NautilusFile is defined both here and in nautilus-directory.h. */ #ifndef NAUTILUS_FILE_DEFINED #define NAUTILUS_FILE_DEFINED typedef struct NautilusFile NautilusFile; #endif #define NAUTILUS_TYPE_FILE nautilus_file_get_type() #define NAUTILUS_FILE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_FILE, NautilusFile)) #define NAUTILUS_FILE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_FILE, NautilusFileClass)) #define NAUTILUS_IS_FILE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_FILE)) #define NAUTILUS_IS_FILE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_FILE)) #define NAUTILUS_FILE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), NAUTILUS_TYPE_FILE, NautilusFileClass)) typedef enum { /* These may be set as default-sort-order. When touching this, make sure to * keep the values in sync with the "org.gnome.nautilus.SortOrder" enum in the * `data/org.gnome.nautilus.gschema.xml` schemas file, and the attributes[] * array in `src/nautilus-list-view.c`. */ NAUTILUS_FILE_SORT_BY_DISPLAY_NAME = 0, NAUTILUS_FILE_SORT_BY_SIZE = 1, NAUTILUS_FILE_SORT_BY_TYPE = 2, NAUTILUS_FILE_SORT_BY_MTIME = 3, NAUTILUS_FILE_SORT_BY_ATIME = 4, NAUTILUS_FILE_SORT_BY_BTIME = 5, NAUTILUS_FILE_SORT_BY_STARRED = 6, /* The following are specific to special locations and as such are not to be * included in the "org.gnome.nautilus.SortOrder" enum. */ NAUTILUS_FILE_SORT_BY_TRASHED_TIME, NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE, NAUTILUS_FILE_SORT_BY_RECENCY } NautilusFileSortType; typedef enum { NAUTILUS_REQUEST_NOT_STARTED, NAUTILUS_REQUEST_IN_PROGRESS, NAUTILUS_REQUEST_DONE } NautilusRequestStatus; typedef enum { NAUTILUS_FILE_ICON_FLAGS_NONE = 0, NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS = (1<<0), NAUTILUS_FILE_ICON_FLAGS_IGNORE_VISITING = (1<<1), NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT = (1<<2), NAUTILUS_FILE_ICON_FLAGS_FOR_OPEN_FOLDER = (1<<3), /* whether the thumbnail size must match the display icon size */ NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE = (1<<4), /* uses the icon of the mount if present */ NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON = (1<<5), /* render emblems */ NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS = (1<<6), NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM = (1<<7) } NautilusFileIconFlags; #define NAUTILUS_THUMBNAIL_MINIMUM_ICON_SIZE 32 /* Standard Drag & Drop types. */ typedef enum { NAUTILUS_ICON_DND_GNOME_ICON_LIST, NAUTILUS_ICON_DND_URI_LIST, NAUTILUS_ICON_DND_NETSCAPE_URL, NAUTILUS_ICON_DND_TEXT, NAUTILUS_ICON_DND_XDNDDIRECTSAVE, NAUTILUS_ICON_DND_RAW, NAUTILUS_ICON_DND_ROOTWINDOW_DROP } NautilusIconDndTargetType; /* Item of the drag selection list */ typedef struct { NautilusFile *file; char *uri; gboolean got_icon_position; int icon_x, icon_y; int icon_width, icon_height; } NautilusDragSelectionItem; /* Emblems sometimes displayed for NautilusFiles. Do not localize. */ #define NAUTILUS_FILE_EMBLEM_NAME_SYMBOLIC_LINK "symbolic-link" #define NAUTILUS_FILE_EMBLEM_NAME_CANT_READ "unreadable" #define NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE "readonly" #define NAUTILUS_FILE_EMBLEM_NAME_TRASH "trash" #define NAUTILUS_FILE_EMBLEM_NAME_NOTE "note" typedef void (*NautilusFileCallback) (NautilusFile *file, gpointer callback_data); typedef gboolean (*NautilusFileFilterFunc) (NautilusFile *file, gpointer callback_data); typedef void (*NautilusFileListCallback) (GList *file_list, gpointer callback_data); typedef void (*NautilusFileOperationCallback) (NautilusFile *file, GFile *result_location, GError *error, gpointer callback_data); #define NAUTILUS_FILE_ATTRIBUTES_FOR_ICON (NAUTILUS_FILE_ATTRIBUTE_INFO | NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL) typedef void NautilusFileListHandle; /* GObject requirements. */ GType nautilus_file_get_type (void); /* Getting at a single file. */ NautilusFile * nautilus_file_get (GFile *location); NautilusFile * nautilus_file_get_by_uri (const char *uri); /* Get a file only if the nautilus version already exists */ NautilusFile * nautilus_file_get_existing (GFile *location); NautilusFile * nautilus_file_get_existing_by_uri (const char *uri); /* Covers for g_object_ref and g_object_unref that provide two conveniences: * 1) Using these is type safe. * 2) You are allowed to call these with NULL, */ NautilusFile * nautilus_file_ref (NautilusFile *file); void nautilus_file_unref (NautilusFile *file); G_DEFINE_AUTOPTR_CLEANUP_FUNC (NautilusFile, nautilus_file_unref) /* Monitor the file. */ void nautilus_file_monitor_add (NautilusFile *file, gconstpointer client, NautilusFileAttributes attributes); void nautilus_file_monitor_remove (NautilusFile *file, gconstpointer client); /* Waiting for data that's read asynchronously. * This interface currently works only for metadata, but could be expanded * to other attributes as well. */ void nautilus_file_call_when_ready (NautilusFile *file, NautilusFileAttributes attributes, NautilusFileCallback callback, gpointer callback_data); void nautilus_file_cancel_call_when_ready (NautilusFile *file, NautilusFileCallback callback, gpointer callback_data); gboolean nautilus_file_check_if_ready (NautilusFile *file, NautilusFileAttributes attributes); void nautilus_file_invalidate_attributes (NautilusFile *file, NautilusFileAttributes attributes); void nautilus_file_invalidate_all_attributes (NautilusFile *file); /* Basic attributes for file objects. */ gboolean nautilus_file_contains_text (NautilusFile *file); char * nautilus_file_get_display_name (NautilusFile *file); char * nautilus_file_get_edit_name (NautilusFile *file); char * nautilus_file_get_name (NautilusFile *file); GFile * nautilus_file_get_location (NautilusFile *file); char * nautilus_file_get_description (NautilusFile *file); char * nautilus_file_get_uri (NautilusFile *file); char * nautilus_file_get_uri_scheme (NautilusFile *file); NautilusFile * nautilus_file_get_parent (NautilusFile *file); GFile * nautilus_file_get_parent_location (NautilusFile *file); char * nautilus_file_get_parent_uri (NautilusFile *file); char * nautilus_file_get_parent_uri_for_display (NautilusFile *file); char * nautilus_file_get_thumbnail_path (NautilusFile *file); gboolean nautilus_file_can_get_size (NautilusFile *file); goffset nautilus_file_get_size (NautilusFile *file); time_t nautilus_file_get_mtime (NautilusFile *file); time_t nautilus_file_get_atime (NautilusFile *file); time_t nautilus_file_get_btime (NautilusFile *file); time_t nautilus_file_get_recency (NautilusFile *file); time_t nautilus_file_get_trash_time (NautilusFile *file); GFileType nautilus_file_get_file_type (NautilusFile *file); char * nautilus_file_get_mime_type (NautilusFile *file); char * nautilus_file_get_extension (NautilusFile *file); gboolean nautilus_file_is_mime_type (NautilusFile *file, const char *mime_type); gboolean nautilus_file_is_launchable (NautilusFile *file); gboolean nautilus_file_is_symbolic_link (NautilusFile *file); GMount * nautilus_file_get_mount (NautilusFile *file); char * nautilus_file_get_volume_free_space (NautilusFile *file); char * nautilus_file_get_volume_name (NautilusFile *file); char * nautilus_file_get_symbolic_link_target_path (NautilusFile *file); char * nautilus_file_get_symbolic_link_target_uri (NautilusFile *file); gboolean nautilus_file_is_broken_symbolic_link (NautilusFile *file); gboolean nautilus_file_is_executable (NautilusFile *file); gboolean nautilus_file_is_directory (NautilusFile *file); gboolean nautilus_file_is_regular_file (NautilusFile *file); gboolean nautilus_file_is_user_special_directory (NautilusFile *file, GUserDirectory special_directory); gboolean nautilus_file_is_archive (NautilusFile *file); gboolean nautilus_file_is_in_search (NautilusFile *file); gboolean nautilus_file_is_in_trash (NautilusFile *file); gboolean nautilus_file_is_in_recent (NautilusFile *file); gboolean nautilus_file_is_in_starred (NautilusFile *file); gboolean nautilus_file_is_in_admin (NautilusFile *file); gboolean nautilus_file_is_remote (NautilusFile *file); gboolean nautilus_file_is_other_locations (NautilusFile *file); gboolean nautilus_file_is_starred_location (NautilusFile *file); gboolean nautilus_file_is_home (NautilusFile *file); GError * nautilus_file_get_file_info_error (NautilusFile *file); gboolean nautilus_file_get_directory_item_count (NautilusFile *file, guint *count, gboolean *count_unreadable); void nautilus_file_recompute_deep_counts (NautilusFile *file); NautilusRequestStatus nautilus_file_get_deep_counts (NautilusFile *file, guint *directory_count, guint *file_count, guint *unreadable_directory_count, goffset *total_size, gboolean force); gboolean nautilus_file_should_show_thumbnail (NautilusFile *file); gboolean nautilus_file_should_show_directory_item_count (NautilusFile *file); void nautilus_file_set_search_relevance (NautilusFile *file, gdouble relevance); void nautilus_file_set_search_fts_snippet (NautilusFile *file, const gchar *fts_snippet); const gchar* nautilus_file_get_search_fts_snippet (NautilusFile *file); void nautilus_file_set_attributes (NautilusFile *file, GFileInfo *attributes, NautilusFileOperationCallback callback, gpointer callback_data); GFilesystemPreviewType nautilus_file_get_filesystem_use_preview (NautilusFile *file); char * nautilus_file_get_filesystem_id (NautilusFile *file); char * nautilus_file_get_filesystem_type (NautilusFile *file); gboolean nautilus_file_get_filesystem_remote (NautilusFile *file); NautilusFile * nautilus_file_get_trash_original_file (NautilusFile *file); /* Permissions. */ gboolean nautilus_file_can_get_permissions (NautilusFile *file); gboolean nautilus_file_can_set_permissions (NautilusFile *file); guint nautilus_file_get_permissions (NautilusFile *file); gboolean nautilus_file_can_get_owner (NautilusFile *file); gboolean nautilus_file_can_set_owner (NautilusFile *file); gboolean nautilus_file_can_get_group (NautilusFile *file); gboolean nautilus_file_can_set_group (NautilusFile *file); char * nautilus_file_get_owner_name (NautilusFile *file); char * nautilus_file_get_group_name (NautilusFile *file); GList * nautilus_get_user_names (void); GList * nautilus_get_all_group_names (void); GList * nautilus_file_get_settable_group_names (NautilusFile *file); gboolean nautilus_file_can_get_selinux_context (NautilusFile *file); char * nautilus_file_get_selinux_context (NautilusFile *file); /* "Capabilities". */ gboolean nautilus_file_can_read (NautilusFile *file); gboolean nautilus_file_can_write (NautilusFile *file); gboolean nautilus_file_can_execute (NautilusFile *file); gboolean nautilus_file_can_rename (NautilusFile *file); gboolean nautilus_file_can_delete (NautilusFile *file); gboolean nautilus_file_can_trash (NautilusFile *file); gboolean nautilus_file_can_mount (NautilusFile *file); gboolean nautilus_file_can_unmount (NautilusFile *file); gboolean nautilus_file_can_eject (NautilusFile *file); gboolean nautilus_file_can_start (NautilusFile *file); gboolean nautilus_file_can_start_degraded (NautilusFile *file); gboolean nautilus_file_can_stop (NautilusFile *file); GDriveStartStopType nautilus_file_get_start_stop_type (NautilusFile *file); gboolean nautilus_file_can_poll_for_media (NautilusFile *file); gboolean nautilus_file_is_media_check_automatic (NautilusFile *file); void nautilus_file_mount (NautilusFile *file, GMountOperation *mount_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_unmount (NautilusFile *file, GMountOperation *mount_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_eject (NautilusFile *file, GMountOperation *mount_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_start (NautilusFile *file, GMountOperation *start_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_stop (NautilusFile *file, GMountOperation *mount_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_poll_for_media (NautilusFile *file); /* Basic operations for file objects. */ void nautilus_file_set_owner (NautilusFile *file, const char *user_name_or_id, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_set_group (NautilusFile *file, const char *group_name_or_id, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_set_permissions (NautilusFile *file, guint32 permissions, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_rename (NautilusFile *file, const char *new_name, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_batch_rename (GList *files, GList *new_names, NautilusFileOperationCallback callback, gpointer callback_data); void nautilus_file_cancel (NautilusFile *file, NautilusFileOperationCallback callback, gpointer callback_data); /* Return true if this file has already been deleted. * This object will be unref'd after sending the files_removed signal, * but it could hang around longer if someone ref'd it. */ gboolean nautilus_file_is_gone (NautilusFile *file); /* Used in subclasses that handles the rename of a file. This handles the case * when the file is gone. If this returns TRUE, simply do nothing */ gboolean nautilus_file_rename_handle_file_gone (NautilusFile *file, NautilusFileOperationCallback callback, gpointer callback_data); /* Return true if this file is not confirmed to have ever really * existed. This is true when the NautilusFile object has been created, but no I/O * has yet confirmed the existence of a file by that name. */ gboolean nautilus_file_is_not_yet_confirmed (NautilusFile *file); /* Simple getting and setting top-level metadata. */ char * nautilus_file_get_metadata (NautilusFile *file, const char *key, const char *default_metadata); gchar ** nautilus_file_get_metadata_list (NautilusFile *file, const char *key); void nautilus_file_set_metadata (NautilusFile *file, const char *key, const char *default_metadata, const char *metadata); void nautilus_file_set_metadata_list (NautilusFile *file, const char *key, gchar **list); /* Covers for common data types. */ gboolean nautilus_file_get_boolean_metadata (NautilusFile *file, const char *key, gboolean default_metadata); void nautilus_file_set_boolean_metadata (NautilusFile *file, const char *key, gboolean default_metadata, gboolean metadata); int nautilus_file_get_integer_metadata (NautilusFile *file, const char *key, int default_metadata); void nautilus_file_set_integer_metadata (NautilusFile *file, const char *key, int default_metadata, int metadata); #define UNDEFINED_TIME ((time_t) (-1)) time_t nautilus_file_get_time_metadata (NautilusFile *file, const char *key); void nautilus_file_set_time_metadata (NautilusFile *file, const char *key, time_t time); /* Attributes for file objects as user-displayable strings. */ char * nautilus_file_get_string_attribute (NautilusFile *file, const char *attribute_name); char * nautilus_file_get_string_attribute_q (NautilusFile *file, GQuark attribute_q); char * nautilus_file_get_string_attribute_with_default (NautilusFile *file, const char *attribute_name); char * nautilus_file_get_string_attribute_with_default_q (NautilusFile *file, GQuark attribute_q); /* Matching with another URI. */ gboolean nautilus_file_matches_uri (NautilusFile *file, const char *uri); gboolean nautilus_file_has_local_path (NautilusFile *file); /* Comparing two file objects for sorting */ NautilusFileSortType nautilus_file_get_default_sort_type (NautilusFile *file, gboolean *reversed); int nautilus_file_compare_for_sort (NautilusFile *file_1, NautilusFile *file_2, NautilusFileSortType sort_type, gboolean directories_first, gboolean reversed); int nautilus_file_compare_for_sort_by_attribute (NautilusFile *file_1, NautilusFile *file_2, const char *attribute, gboolean directories_first, gboolean reversed); int nautilus_file_compare_for_sort_by_attribute_q (NautilusFile *file_1, NautilusFile *file_2, GQuark attribute, gboolean directories_first, gboolean reversed); gboolean nautilus_file_is_date_sort_attribute_q (GQuark attribute); int nautilus_file_compare_location (NautilusFile *file_1, NautilusFile *file_2); /* Compare display name of file with string for equality */ int nautilus_file_compare_display_name (NautilusFile *file, const char *string); /* filtering functions for use by various directory views */ gboolean nautilus_file_is_hidden_file (NautilusFile *file); gboolean nautilus_file_should_show (NautilusFile *file, gboolean show_hidden); GList *nautilus_file_list_filter_hidden (GList *files, gboolean show_hidden); /* Get the URI that's used when activating the file. * Getting this can require reading the contents of the file. */ gboolean nautilus_file_has_activation_uri (NautilusFile *file); char * nautilus_file_get_activation_uri (NautilusFile *file); GFile * nautilus_file_get_activation_location (NautilusFile *file); GIcon * nautilus_file_get_gicon (NautilusFile *file, NautilusFileIconFlags flags); NautilusIconInfo * nautilus_file_get_icon (NautilusFile *file, int size, int scale, NautilusFileIconFlags flags); GdkTexture * nautilus_file_get_icon_texture (NautilusFile *file, int size, int scale, NautilusFileIconFlags flags); GdkPaintable * nautilus_file_get_icon_paintable (NautilusFile *file, int size, int scale, NautilusFileIconFlags flags); /* Whether the file should open inside a view */ gboolean nautilus_file_opens_in_view (NautilusFile *file); /* Thumbnailing handling */ gboolean nautilus_file_is_thumbnailing (NautilusFile *file); /* Convenience functions for dealing with a list of NautilusFile objects that each have a ref. * These are just convenient names for functions that work on lists of GtkObject *. */ GList * nautilus_file_list_ref (GList *file_list); void nautilus_file_list_unref (GList *file_list); void nautilus_file_list_free (GList *file_list); GList * nautilus_file_list_copy (GList *file_list); GList * nautilus_file_list_sort_by_display_name (GList *file_list); void nautilus_file_list_call_when_ready (GList *file_list, NautilusFileAttributes attributes, NautilusFileListHandle **handle, NautilusFileListCallback callback, gpointer callback_data); void nautilus_file_list_cancel_call_when_ready (NautilusFileListHandle *handle); GList * nautilus_file_list_filter (GList *files, GList **failed, NautilusFileFilterFunc filter_function, gpointer user_data); gboolean nautilus_file_list_are_all_folders (const GList *files); /* DND */ gboolean nautilus_drag_can_accept_item (NautilusFile *drop_target_item, const char *item_uri); gboolean nautilus_drag_can_accept_items (NautilusFile *drop_target_item, const GList *items); gboolean nautilus_drag_can_accept_info (NautilusFile *drop_target_item, NautilusIconDndTargetType drag_type, const GList *items); /* Debugging */ void nautilus_file_dump (NautilusFile *file); typedef struct NautilusFileDetails NautilusFileDetails; struct NautilusFile { GObject parent_slot; NautilusFileDetails *details; }; /* This is actually a "protected" type, but it must be here so we can * compile the get_date function pointer declaration below. */ typedef enum { NAUTILUS_DATE_TYPE_MODIFIED, NAUTILUS_DATE_TYPE_ACCESSED, NAUTILUS_DATE_TYPE_CREATED, NAUTILUS_DATE_TYPE_TRASHED, NAUTILUS_DATE_TYPE_RECENCY } NautilusDateType; gboolean nautilus_file_get_date (NautilusFile *file, NautilusDateType date_type, time_t *date); typedef struct { GObjectClass parent_slot; /* Subclasses can set this to something other than G_FILE_TYPE_UNKNOWN and it will be used as the default file type. This is useful when creating a "virtual" NautilusFile subclass that you can't actually get real information about. For exaple NautilusDesktopDirectoryFile. */ GFileType default_file_type; /* Called when the file notices any change. */ void (* changed) (NautilusFile *file); /* Called periodically while directory deep count is being computed. */ void (* updated_deep_count_in_progress) (NautilusFile *file); /* Virtual functions (mainly used for trash directory). */ void (* monitor_add) (NautilusFile *file, gconstpointer client, NautilusFileAttributes attributes); void (* monitor_remove) (NautilusFile *file, gconstpointer client); void (* call_when_ready) (NautilusFile *file, NautilusFileAttributes attributes, NautilusFileCallback callback, gpointer callback_data); void (* cancel_call_when_ready) (NautilusFile *file, NautilusFileCallback callback, gpointer callback_data); gboolean (* check_if_ready) (NautilusFile *file, NautilusFileAttributes attributes); gboolean (* get_item_count) (NautilusFile *file, guint *count, gboolean *count_unreadable); NautilusRequestStatus (* get_deep_counts) (NautilusFile *file, guint *directory_count, guint *file_count, guint *unreadable_directory_count, goffset *total_size); gboolean (* get_date) (NautilusFile *file, NautilusDateType type, time_t *date); char * (* get_where_string) (NautilusFile *file); void (* set_metadata) (NautilusFile *file, const char *key, const char *value); void (* set_metadata_as_list) (NautilusFile *file, const char *key, char **value); void (* mount) (NautilusFile *file, GMountOperation *mount_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void (* unmount) (NautilusFile *file, GMountOperation *mount_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void (* eject) (NautilusFile *file, GMountOperation *mount_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void (* start) (NautilusFile *file, GMountOperation *start_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void (* stop) (NautilusFile *file, GMountOperation *mount_op, GCancellable *cancellable, NautilusFileOperationCallback callback, gpointer callback_data); void (* poll_for_media) (NautilusFile *file); } NautilusFileClass;