/* * nautilus-vcs.c - Version control extension for Nautilus * * Copyright (C) 2003 Novell, Inc. * * This library 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 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 General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Author: Dave Camp * */ #include #include #include #include #include #include G_BEGIN_DECLS #define NAUTILUS_TYPE_REC_DIRECTORY (nautilus_rec_directory_get_type ()) #define NAUTILUS_REC_DIRECTORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NAUTILUS_TYPE_REC_DIRECTORY, NautilusRecDirectory)) #define NAUTILUS_IS_REC_DIRECTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NAUTILUS_TYPE_REC_DIRECTORY)) typedef struct _NautilusRecDirectory NautilusRecDirectory; typedef struct _NautilusRecDirectoryClass NautilusRecDirectoryClass; typedef void (*NautilusRecDirectoryReadyCallback) (NautilusRecDirectory *directory, gpointer user_data); struct _NautilusRecDirectory { GObject parent_slot; /* No extra instance members */ }; struct _NautilusRecDirectoryClass { GObjectClass parent_slot; /* No extra class members */ }; GType nautilus_rec_directory_get_type (void); void nautilus_rec_directory_register_type (GTypeModule *module); NautilusRecDirectory * nautilus_rec_directory_get (const char *directory_uri); G_END_DECLS static GObjectClass *parent_class; static void nautilus_rec_directory_instance_init (NautilusRecDirectory *cvs); static void nautilus_rec_directory_class_init (NautilusRecDirectoryClass *class); static NautilusOperationResult nautilus_rec_update_file_info (NautilusInfoProvider *provider, NautilusFileInfo *file, GClosure *update_complete, NautilusOperationHandle **handle) { NautilusFileInfoIface *file_iface = NAUTILUS_FILE_INFO_GET_IFACE(file); char* name = file_iface->get_name(file); if (file_iface->is_directory(file)) { int len = strlen(name); if ((len > 4) && (strcmp(&name[len - 4], ".rec") == 0)) { g_print ("nautilus-rec: dir »%s«\n", name); file_iface->set_mime_type(file, "application/x-vdr"); } } return NAUTILUS_OPERATION_COMPLETE; } static void nautilus_rec_provider_iface_init (NautilusInfoProviderIface *iface) { iface->update_file_info = nautilus_rec_update_file_info; } static void nautilus_rec_directory_dispose (GObject *obj) { NautilusRecDirectory *directory; directory = NAUTILUS_REC_DIRECTORY (obj); G_OBJECT_CLASS (parent_class)->dispose (obj); } static void nautilus_rec_directory_finalize (GObject *obj) { NautilusRecDirectory *directory; directory = NAUTILUS_REC_DIRECTORY (obj); G_OBJECT_CLASS (parent_class)->finalize (obj); } static void nautilus_rec_directory_instance_init (NautilusRecDirectory *directory) { /* nothing yet */ } static void nautilus_rec_directory_class_init (NautilusRecDirectoryClass *class) { parent_class = g_type_class_peek_parent (class); G_OBJECT_CLASS (class)->dispose = nautilus_rec_directory_dispose; G_OBJECT_CLASS (class)->finalize = nautilus_rec_directory_finalize; } /* Type registration. Because this type is implemented in a module * that can be unloaded, we separate type registration from get_type(). * the type_register() function will be called by the module's * initialization function. */ static GType rec_directory_type = 0; GType nautilus_rec_directory_get_type (void) { return rec_directory_type; } void nautilus_rec_directory_register_type (GTypeModule *module) { static const GTypeInfo type_info = { sizeof (NautilusRecDirectoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) nautilus_rec_directory_class_init, NULL, NULL, sizeof (NautilusRecDirectory), 0, (GInstanceInitFunc) nautilus_rec_directory_instance_init, }; static const GInterfaceInfo iface_info = { (GInterfaceInitFunc)nautilus_rec_provider_iface_init, NULL, NULL }; rec_directory_type = g_type_module_register_type (module, G_TYPE_OBJECT, "NautilusRecDirectory", &type_info, 0); g_type_module_add_interface (module, rec_directory_type, NAUTILUS_TYPE_INFO_PROVIDER, &iface_info);} /* Extension module functions. These functions are defined in * nautilus-extensions-types.h, and must be implemented by all * extensions. */ /* Initialization function. In addition to any module-specific * initialization, any types implemented by the module should * be registered here. */ void nautilus_module_initialize (GTypeModule *module) { g_print ("Initializing nautilus-rec extension\n"); nautilus_rec_directory_register_type (module); } /* Perform module-specific shutdown. */ void nautilus_module_shutdown (void) { g_print ("Shutting down nautilus-rec extension\n"); } /* List all the extension types. */ void nautilus_module_list_types (const GType **types, int *num_types) { static GType type_list[1]; type_list[0] = NAUTILUS_TYPE_REC_DIRECTORY; *types = type_list; *num_types = 1; }