1 /* 2 * nautilus-file-info.h - Information about a file 3 * 4 * Copyright (C) 2003 Novell, Inc. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library 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 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public 17 * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 /* NautilusFileInfo is an interface to the NautilusFile object. It 22 * provides access to the asynchronous data in the NautilusFile. 23 * Extensions are passed objects of this type for operations. */ 24 25 #pragma once 26 27 #if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) 28 #warning "Only <nautilus-extension.h> should be included directly." 29 #endif 30 31 #include <glib-object.h> 32 #include <gio/gio.h> 33 34 G_BEGIN_DECLS 35 36 #define NAUTILUS_TYPE_FILE_INFO (nautilus_file_info_get_type ()) 37 38 G_DECLARE_INTERFACE (NautilusFileInfo, nautilus_file_info, NAUTILUS, FILE_INFO, GObject) 39 40 /* For compatibility reasons; remove this once you start introducing breaking changes. 41 * 42 * I’ve only noticed nautilus-python depending on this, but the context is that 43 * NautilusFileInfo used to be an alias for NautilusFile to make it easier to 44 * implement the interface, 45 */ 46 typedef struct NautilusFile NautilusFile; 47 48 /** 49 * SECTION:nautilus-file-info 50 * @title: NautilusFileInfo 51 * @short_description: File interface for nautilus extensions 52 * 53 * #NautilusFileInfo provides methods to get and modify information 54 * about file objects in the file manager. 55 */ 56 57 /** 58 * NautilusFileInfoInterface: 59 * @g_iface: The parent interface. 60 * @is_gone: Returns whether the file info is gone. 61 * See nautilus_file_info_is_gone() for details. 62 * @get_name: Returns the file name as a string. 63 * See nautilus_file_info_get_name() for details. 64 * @get_uri: Returns the file URI as a string. 65 * See nautilus_file_info_get_uri() for details. 66 * @get_parent_uri: Returns the file parent URI as a string. 67 * See nautilus_file_info_get_parent_uri() for details. 68 * @get_uri_scheme: Returns the file URI scheme as a string. 69 * See nautilus_file_info_get_uri_scheme() for details. 70 * @get_mime_type: Returns the file mime type as a string. 71 * See nautilus_file_info_get_mime_type() for details. 72 * @is_mime_type: Returns whether the file is the given mime type. 73 * See nautilus_file_info_is_mime_type() for details. 74 * @is_directory: Returns whether the file is a directory. 75 * See nautilus_file_info_is_directory() for details. 76 * @add_emblem: Adds an emblem to this file. 77 * See nautilus_file_info_add_emblem() for details. 78 * @get_string_attribute: Returns the specified file attribute as a string. 79 * See nautilus_file_info_get_string_attribute() for details. 80 * @add_string_attribute: Sets the specified string file attribute value. 81 * See nautilus_file_info_add_string_attribute() for details. 82 * @invalidate_extension_info: Invalidates information of the file provided by extensions. 83 * See nautilus_file_info_invalidate_extension_info() for details. 84 * @get_activation_uri: Returns the file activation URI as a string. 85 * See nautilus_file_info_get_activation_uri() for details. 86 * @get_file_type: Returns the file type. 87 * See nautilus_file_info_get_file_type() for details. 88 * @get_location: Returns the file location as a #GFile. 89 * See nautilus_file_info_get_location() for details. 90 * @get_parent_location: Returns the file parent location as a #GFile. 91 * See nautilus_file_info_get_parent_location() for details. 92 * @get_parent_info: Returns the file parent #NautilusFileInfo. 93 * See nautilus_file_info_get_parent_info() for details. 94 * @get_mount: Returns the file mount as a #GMount. 95 * See nautilus_file_info_get_mount() for details. 96 * @can_write: Returns whether the file is writable. 97 * See nautilus_file_info_can_write() for details. 98 * 99 * Interface for extensions to provide additional menu items. 100 */ 101 struct _NautilusFileInfoInterface 102 { 103 GTypeInterface g_iface; 104 105 gboolean (*is_gone) (NautilusFileInfo *file_info); 106 107 char *(*get_name) (NautilusFileInfo *file_info); 108 char *(*get_uri) (NautilusFileInfo *file_info); 109 char *(*get_parent_uri) (NautilusFileInfo *file_info); 110 char *(*get_uri_scheme) (NautilusFileInfo *file_info); 111 112 char *(*get_mime_type) (NautilusFileInfo *file_info); 113 gboolean (*is_mime_type) (NautilusFileInfo *file_info, 114 const char *mime_type); 115 gboolean (*is_directory) (NautilusFileInfo *file_info); 116 117 void (*add_emblem) (NautilusFileInfo *file_info, 118 const char *emblem_name); 119 char *(*get_string_attribute) (NautilusFileInfo *file_info, 120 const char *attribute_name); 121 void (*add_string_attribute) (NautilusFileInfo *file_info, 122 const char *attribute_name, 123 const char *value); 124 void (*invalidate_extension_info) (NautilusFileInfo *file_info); 125 126 char *(*get_activation_uri) (NautilusFileInfo *file_info); 127 128 GFileType (*get_file_type) (NautilusFileInfo *file_info); 129 GFile *(*get_location) (NautilusFileInfo *file_info); 130 GFile *(*get_parent_location) (NautilusFileInfo *file_info); 131 NautilusFileInfo *(*get_parent_info) (NautilusFileInfo *file_info); 132 GMount *(*get_mount) (NautilusFileInfo *file_info); 133 gboolean (*can_write) (NautilusFileInfo *file_info); 134 }; 135 136 /** 137 * nautilus_file_info_list_copy: 138 * @files: (element-type NautilusFileInfo): the files to copy 139 * 140 * Returns: (element-type NautilusFileInfo) (transfer full): a copy of @files. 141 * Use #nautilus_file_info_list_free to free the list and unref its contents. 142 */ 143 GList *nautilus_file_info_list_copy (GList *files); 144 /** 145 * nautilus_file_info_list_free: 146 * @files: (element-type NautilusFileInfo): a list created with #nautilus_file_info_list_copy 147 * 148 */ 149 void nautilus_file_info_list_free (GList *files); 150 151 /** 152 * nautilus_file_info_is_gone: 153 * @file_info: a #NautilusFileInfo 154 * 155 * Returns: whether the file has been deleted 156 */ 157 gboolean nautilus_file_info_is_gone (NautilusFileInfo *file_info); 158 159 /* Name and Location */ 160 GFileType nautilus_file_info_get_file_type (NautilusFileInfo *file_info); 161 /** 162 * nautilus_file_info_get_location: 163 * @file_info: a #NautilusFileInfo 164 * 165 * Returns: (transfer full): a #GFile for the location of @file_info 166 */ 167 GFile *nautilus_file_info_get_location (NautilusFileInfo *file_info); 168 char *nautilus_file_info_get_name (NautilusFileInfo *file_info); 169 char *nautilus_file_info_get_uri (NautilusFileInfo *file_info); 170 char *nautilus_file_info_get_activation_uri (NautilusFileInfo *file_info); 171 /** 172 * nautilus_file_info_get_parent_location: 173 * @file_info: a #NautilusFileInfo 174 * 175 * Returns: (allow-none) (transfer full): a #GFile for the parent location of @file_info, 176 * or %NULL if @file_info has no parent 177 */ 178 GFile *nautilus_file_info_get_parent_location (NautilusFileInfo *file_info); 179 char *nautilus_file_info_get_parent_uri (NautilusFileInfo *file_info); 180 /** 181 * nautilus_file_info_get_mount: 182 * @file_info: a #NautilusFileInfo 183 * 184 * Returns: (nullable) (transfer full): a #GMount for the mount of @file_info, 185 * or %NULL if @file_info has no mount 186 */ 187 GMount *nautilus_file_info_get_mount (NautilusFileInfo *file_info); 188 char *nautilus_file_info_get_uri_scheme (NautilusFileInfo *file_info); 189 /** 190 * nautilus_file_info_get_parent_info: 191 * @file_info: a #NautilusFileInfo 192 * 193 * It's not safe to call this recursively multiple times, as it works 194 * only for files already cached by Nautilus. 195 * 196 * Returns: (nullable) (transfer full): a #NautilusFileInfo for the parent of @file_info, 197 * or %NULL if @file_info has no parent. 198 */ 199 NautilusFileInfo *nautilus_file_info_get_parent_info (NautilusFileInfo *file_info); 200 201 /** 202 * nautilus_file_info_get_mime_type: 203 * @file_info: a #NautilusFileInfo 204 * 205 * Returns: (transfer full): the MIME type of @file_info 206 */ 207 char * nautilus_file_info_get_mime_type (NautilusFileInfo *file_info); 208 gboolean nautilus_file_info_is_mime_type (NautilusFileInfo *file_info, 209 const char *mime_type); 210 gboolean nautilus_file_info_is_directory (NautilusFileInfo *file_info); 211 gboolean nautilus_file_info_can_write (NautilusFileInfo *file_info); 212 213 214 /* Modifying the NautilusFileInfo */ 215 void nautilus_file_info_add_emblem (NautilusFileInfo *file_info, 216 const char *emblem_name); 217 char *nautilus_file_info_get_string_attribute (NautilusFileInfo *file_info, 218 const char *attribute_name); 219 void nautilus_file_info_add_string_attribute (NautilusFileInfo *file_info, 220 const char *attribute_name, 221 const char *value); 222 223 /* Invalidating file info */ 224 void nautilus_file_info_invalidate_extension_info (NautilusFileInfo *file_info); 225 226 /** 227 * nautilus_file_info_lookup: 228 * @location: the location for which to look up a corresponding #NautilusFileInfo object 229 * 230 * Returns: (transfer full): a #NautilusFileInfo 231 */ 232 NautilusFileInfo *nautilus_file_info_lookup (GFile *location); 233 /** 234 * nautilus_file_info_create: 235 * @location: the location to create the file info for 236 * 237 * Returns: (transfer full): a #NautilusFileInfo 238 */ 239 NautilusFileInfo *nautilus_file_info_create (GFile *location); 240 /** 241 * nautilus_file_info_lookup_for_uri: 242 * @uri: the URI to lookup the file info for 243 * 244 * Returns: (transfer full): a #NautilusFileInfo 245 */ 246 NautilusFileInfo *nautilus_file_info_lookup_for_uri (const char *uri); 247 /** 248 * nautilus_file_info_create_for_uri: 249 * @uri: the URI to lookup the file info for 250 * 251 * Returns: (transfer full): a #NautilusFileInfo 252 */ 253 NautilusFileInfo *nautilus_file_info_create_for_uri (const char *uri); 254 255 G_END_DECLS 256