nautilus-file-info.c 10.9 KB
Newer Older
1
/*
2
 *  nautilus-file-info.c - Information about a file
3 4 5 6 7 8 9 10 11 12 13 14 15 16
 *
 *  Copyright (C) 2003 Novell, Inc.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public
 *  License as published by the Free Software Foundation; either
 *  version 2 of the License, or (at your option) any later version.
 *
 *  This library 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
 *  Library General Public License for more details.
 *
 *  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 22
 *
 */

#include <config.h>
#include "nautilus-file-info.h"
23
#include "nautilus-extension-private.h"
24

25
NautilusFileInfo *(*nautilus_file_info_getter)(GFile * location, gboolean create);
26

27 28 29 30 31 32 33 34 35 36
/**
 * SECTION:nautilus-file-info
 * @title: NautilusFileInfo
 * @short_description: File interface for nautilus extensions
 * @include: libnautilus-extension/nautilus-file-info.h
 *
 * #NautilusFileInfo provides methods to get and modify information
 * about file objects in the file manager.
 */

37 38 39 40 41 42 43
/**
 * nautilus_file_info_list_copy:
 * @files: (element-type NautilusFileInfo): the files to copy
 *
 * Returns: (element-type NautilusFileInfo) (transfer full): a copy of @files.
 *  Use #nautilus_file_info_list_free to free the list and unref its contents.
 */
44 45 46
GList *
nautilus_file_info_list_copy (GList *files)
{
47 48 49 50 51 52 53 54 55 56
    GList *ret;
    GList *l;

    ret = g_list_copy (files);
    for (l = ret; l != NULL; l = l->next)
    {
        g_object_ref (G_OBJECT (l->data));
    }

    return ret;
57 58
}

59 60 61 62 63 64
/**
 * nautilus_file_info_list_free:
 * @files: (element-type NautilusFileInfo): a list created with
 *   #nautilus_file_info_list_copy
 *
 */
65
void
66 67
nautilus_file_info_list_free (GList *files)
{
68 69 70 71 72 73 74 75
    GList *l;

    for (l = files; l != NULL; l = l->next)
    {
        g_object_unref (G_OBJECT (l->data));
    }

    g_list_free (files);
76 77 78 79 80 81 82
}

static void
nautilus_file_info_base_init (gpointer g_class)
{
}

83
GType
84 85
nautilus_file_info_get_type (void)
{
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
    static GType type = 0;

    if (!type)
    {
        const GTypeInfo info =
        {
            sizeof (NautilusFileInfoIface),
            nautilus_file_info_base_init,
            NULL,
            NULL,
            NULL,
            NULL,
            0,
            0,
            NULL
        };

        type = g_type_register_static (G_TYPE_INTERFACE,
                                       "NautilusFileInfo",
                                       &info, 0);
        g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
    }

    return type;
110 111 112 113 114
}

gboolean
nautilus_file_info_is_gone (NautilusFileInfo *file)
{
115 116 117 118
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->is_gone != NULL, FALSE);

    return NAUTILUS_FILE_INFO_GET_IFACE (file)->is_gone (file);
119 120
}

121 122 123
GFileType
nautilus_file_info_get_file_type (NautilusFileInfo *file)
{
124 125
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), G_FILE_TYPE_UNKNOWN);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_file_type != NULL, G_FILE_TYPE_UNKNOWN);
126

127
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_file_type (file);
128 129
}

130 131 132
char *
nautilus_file_info_get_name (NautilusFileInfo *file)
{
133 134
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_name != NULL, NULL);
135

136
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_name (file);
137 138
}

139 140 141 142 143 144
/**
 * nautilus_file_info_get_location:
 * @file: a #NautilusFileInfo
 *
 * Returns: (transfer full): a #GFile for the location of @file
 */
145 146 147
GFile *
nautilus_file_info_get_location (NautilusFileInfo *file)
{
148 149
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_location != NULL, NULL);
150

151
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_location (file);
152
}
153 154 155
char *
nautilus_file_info_get_uri (NautilusFileInfo *file)
{
156 157
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri != NULL, NULL);
158

159
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri (file);
160 161
}

162 163 164
char *
nautilus_file_info_get_activation_uri (NautilusFileInfo *file)
{
165 166
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_activation_uri != NULL, NULL);
167

168
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_activation_uri (file);
169 170
}

171 172 173 174
/**
 * nautilus_file_info_get_parent_location:
 * @file: a #NautilusFileInfo
 *
175
 * Returns: (allow-none) (transfer full): a #GFile for the parent location of @file,
176 177
 *   or %NULL if @file has no parent
 */
178 179 180
GFile *
nautilus_file_info_get_parent_location (NautilusFileInfo *file)
{
181 182
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_location != NULL, NULL);
183

184
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_location (file);
185 186
}

187 188 189
char *
nautilus_file_info_get_parent_uri (NautilusFileInfo *file)
{
190 191
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_uri != NULL, NULL);
192

193
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_uri (file);
194 195
}

196 197 198 199
/**
 * nautilus_file_info_get_parent_info:
 * @file: a #NautilusFileInfo
 *
200
 * Returns: (allow-none) (transfer full): a #NautilusFileInfo for the parent of @file,
201 202
 *   or %NULL if @file has no parent
 */
203 204 205
NautilusFileInfo *
nautilus_file_info_get_parent_info (NautilusFileInfo *file)
{
206 207
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_info != NULL, NULL);
208

209
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_info (file);
210 211
}

212 213 214 215
/**
 * nautilus_file_info_get_mount:
 * @file: a #NautilusFileInfo
 *
216
 * Returns: (allow-none) (transfer full): a #GMount for the mount of @file,
217 218
 *   or %NULL if @file has no mount
 */
219 220 221
GMount *
nautilus_file_info_get_mount (NautilusFileInfo *file)
{
222 223 224 225
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mount != NULL, NULL);

    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mount (file);
226 227
}

228 229 230
char *
nautilus_file_info_get_uri_scheme (NautilusFileInfo *file)
{
231 232
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri_scheme != NULL, NULL);
233

234
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri_scheme (file);
235 236 237 238 239
}

char *
nautilus_file_info_get_mime_type (NautilusFileInfo *file)
{
240 241
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mime_type != NULL, NULL);
242

243
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mime_type (file);
244 245 246 247
}

gboolean
nautilus_file_info_is_mime_type (NautilusFileInfo *file,
248
                                 const char       *mime_type)
249
{
250 251 252
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE);
    g_return_val_if_fail (mime_type != NULL, FALSE);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->is_mime_type != NULL, FALSE);
253

254 255
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->is_mime_type (file,
                                                              mime_type);
256 257 258 259 260
}

gboolean
nautilus_file_info_is_directory (NautilusFileInfo *file)
{
261 262
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->is_directory != NULL, FALSE);
263

264
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->is_directory (file);
265 266
}

267 268 269
gboolean
nautilus_file_info_can_write (NautilusFileInfo *file)
{
270 271
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->can_write != NULL, FALSE);
272

273
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->can_write (file);
274 275
}

276 277
void
nautilus_file_info_add_emblem (NautilusFileInfo *file,
278
                               const char       *emblem_name)
279
{
280 281
    g_return_if_fail (NAUTILUS_IS_FILE_INFO (file));
    g_return_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->add_emblem != NULL);
282

283
    NAUTILUS_FILE_INFO_GET_IFACE (file)->add_emblem (file, emblem_name);
284 285 286 287
}

char *
nautilus_file_info_get_string_attribute (NautilusFileInfo *file,
288
                                         const char       *attribute_name)
289
{
290 291 292
    g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL);
    g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_string_attribute != NULL, NULL);
    g_return_val_if_fail (attribute_name != NULL, NULL);
293

294 295
    return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_string_attribute
               (file, attribute_name);
296 297 298 299
}

void
nautilus_file_info_add_string_attribute (NautilusFileInfo *file,
300 301
                                         const char       *attribute_name,
                                         const char       *value)
302
{
303 304 305 306 307 308 309
    g_return_if_fail (NAUTILUS_IS_FILE_INFO (file));
    g_return_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->add_string_attribute != NULL);
    g_return_if_fail (attribute_name != NULL);
    g_return_if_fail (value != NULL);

    NAUTILUS_FILE_INFO_GET_IFACE (file)->add_string_attribute
        (file, attribute_name, value);
310
}
Dave Camp's avatar
Dave Camp committed
311 312 313 314

void
nautilus_file_info_invalidate_extension_info (NautilusFileInfo *file)
{
315 316 317 318
    g_return_if_fail (NAUTILUS_IS_FILE_INFO (file));
    g_return_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->invalidate_extension_info != NULL);

    NAUTILUS_FILE_INFO_GET_IFACE (file)->invalidate_extension_info (file);
Dave Camp's avatar
Dave Camp committed
319
}
320

321 322 323 324 325 326
/**
 * nautilus_file_info_lookup:
 * @location: the location to lookup the file info for
 *
 * Returns: (transfer full): a #NautilusFileInfo
 */
327 328 329
NautilusFileInfo *
nautilus_file_info_lookup (GFile *location)
{
330
    return nautilus_file_info_getter (location, FALSE);
331 332
}

333 334 335 336 337 338
/**
 * nautilus_file_info_create:
 * @location: the location to create the file info for
 *
 * Returns: (transfer full): a #NautilusFileInfo
 */
339 340 341
NautilusFileInfo *
nautilus_file_info_create (GFile *location)
{
342
    return nautilus_file_info_getter (location, TRUE);
343 344
}

345 346 347 348 349 350
/**
 * nautilus_file_info_lookup_for_uri:
 * @uri: the URI to lookup the file info for
 *
 * Returns: (transfer full): a #NautilusFileInfo
 */
351 352 353
NautilusFileInfo *
nautilus_file_info_lookup_for_uri (const char *uri)
{
354 355
    GFile *location;
    NautilusFile *file;
356

357 358 359
    location = g_file_new_for_uri (uri);
    file = nautilus_file_info_lookup (location);
    g_object_unref (location);
360

361
    return file;
362 363
}

364 365 366 367 368 369
/**
 * nautilus_file_info_create_for_uri:
 * @uri: the URI to lookup the file info for
 *
 * Returns: (transfer full): a #NautilusFileInfo
 */
370 371 372
NautilusFileInfo *
nautilus_file_info_create_for_uri (const char *uri)
{
373 374
    GFile *location;
    NautilusFile *file;
375

376 377 378
    location = g_file_new_for_uri (uri);
    file = nautilus_file_info_create (location);
    g_object_unref (location);
379

380
    return file;
381
}