diff options
| author | Tomas Bzatek <tbzatek@redhat.com> | 2009-03-09 17:26:25 +0100 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@redhat.com> | 2009-03-09 17:26:25 +0100 |
| commit | acf6257fd280266c8a4618b3830c9bfbd974d74f (patch) | |
| tree | 7c7dc6d7dc41ba4c8f42f255122157db2787f22b | |
| parent | d41de27fbc89a5dea19a1bcd9e30fc82ad7b68ec (diff) | |
| download | nautilus-gdu-acf6257fd280266c8a4618b3830c9bfbd974d74f.tar.gz nautilus-gdu-acf6257fd280266c8a4618b3830c9bfbd974d74f.tar.xz nautilus-gdu-acf6257fd280266c8a4618b3830c9bfbd974d74f.zip | |
Handle G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE from gdu-based gvfs
| -rw-r--r-- | TODO | 5 | ||||
| -rw-r--r-- | src/nautilus-gdu.c | 159 |
2 files changed, 57 insertions, 107 deletions
@@ -17,7 +17,8 @@ Standalone mode: DONE - carefully count references (valgrind) DONE - UI cleanup: get rid of those twin icons (show them only when expanded) find a way how to expand the combo box to full width - - desktop file + icon + DONE - desktop file + - icon DONE - display insensitive placeholder item "Please select a volume to format" @@ -26,7 +27,7 @@ Standalone mode: DONE, NEEDS_TESTING - monitor device/presentable events like eject, umount etc. (try to pull the USB key out and window should disappear) - show custom icon if user has set it in Nautilus - is firmware needed for some devices? -- different partition tables? +DONE - different partition tables? DONE - what to do if device is blank (zeroed, no MBR)? DONE - handle read only device - gdu_device_is_read_only() - test with DVD-RAM media - stay consistent with volume labels in Nautilus and gdu (requires gvfs-devicekit port) diff --git a/src/nautilus-gdu.c b/src/nautilus-gdu.c index d006a7e..39c396b 100644 --- a/src/nautilus-gdu.c +++ b/src/nautilus-gdu.c @@ -41,6 +41,8 @@ static void nautilus_gdu_class_init (NautilusGDUClass *class); static GType nautilus_gdu_type = 0; +/* TODO: push upstream */ +#define G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE "mountable::unix-device-file" @@ -53,30 +55,37 @@ find_presentable_from_file (NautilusFileInfo *nautilus_file) GFileInfo *info; GError *error; GFileType file_type; + GMount *mount; + GVolume *volume; char *mount_path = NULL; + char *device_file = NULL; g_return_val_if_fail (nautilus_file != NULL, NULL); file = nautilus_file_info_get_location (nautilus_file); g_return_val_if_fail (file != NULL, NULL); file_type = nautilus_file_info_get_file_type (nautilus_file); -#if 0 - /* is file native? (not local, but at least locally mounted) */ - if (! g_file_is_native (file)) { - g_object_unref (file); - return NULL; - } -#endif - /* first try to find mount target from a mountable */ if (file_type == G_FILE_TYPE_MOUNTABLE || file_type == G_FILE_TYPE_SHORTCUT) { - mount_path = nautilus_file_info_get_activation_uri (nautilus_file); - if (mount_path == NULL) { - error = NULL; + /* get a mount if exists and extract device file from it */ + mount = nautilus_file_info_get_mount (nautilus_file); + if (mount) { + mount_path = nautilus_file_info_get_activation_uri (nautilus_file); + volume = g_mount_get_volume (mount); + if (volume) { + device_file = g_volume_get_identifier (volume, "unix-device"); + g_object_unref (volume); + } + g_object_unref (mount); + } - /* TODO: retrieve HAL/DeviceKit device ID for non-mounted devices */ - info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, G_FILE_QUERY_INFO_NONE, NULL, &error); + /* not mounted, assuming we've been spawned from computer:// */ + if (mount_path == NULL && device_file == NULL) { + error = NULL; + /* retrieve DeviceKit device ID for non-mounted devices */ + info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI "," G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE, G_FILE_QUERY_INFO_NONE, NULL, &error); if (info) { + device_file = g_file_info_get_attribute_as_string (info, G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE); mount_path = g_file_info_get_attribute_as_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI); g_object_unref (info); } @@ -102,10 +111,17 @@ find_presentable_from_file (NautilusFileInfo *nautilus_file) } } - if (mount_path) { + + if (device_file) + presentable = find_presentable_from_device_path (device_file); + else + if (mount_path) presentable = find_presentable_from_mount_path (mount_path); + + if (device_file) + g_free (device_file); + if (mount_path) g_free (mount_path); - } g_object_unref (file); return presentable; @@ -123,110 +139,30 @@ format_callback (NautilusMenuItem *item, nautilus_gdu_spawn_dialog (presentable, FALSE); } -static GList * -nautilus_gdu_get_background_items (NautilusMenuProvider *provider, - GtkWidget *window, - NautilusFileInfo *file_info) -{ -// g_print ("nautilus_gdu_get_background_items\n"); - /* not used */ - return NULL; -} - GList * nautilus_gdu_get_file_items (NautilusMenuProvider *provider, GtkWidget *window, GList *files) { NautilusMenuItem *item; - GTimeVal start_time, stop_time; - - g_get_current_time (&start_time); + GduPresentable *presentable; if (g_list_length (files) != 1) { return NULL; } - -#if 0 - g_print ("nautilus_gdu_get_file_items: item[0] uri '%s', type = %d, activation_uri '%s', name '%s'\n", - nautilus_file_info_get_uri (files->data), - nautilus_file_info_get_file_type (files->data), - nautilus_file_info_get_activation_uri (files->data), - nautilus_file_info_get_name (files->data)); - - GError *error = NULL; - GMount *mount; - mount = g_file_find_enclosing_mount (nautilus_file_info_get_location(files->data), NULL, &error); - g_print ("nautilus_gdu_get_file_items: mount = %p\n", mount); - if (error) { - g_print ("nautilus_gdu_get_file_items: error = %s\n", error->message); - } - - GFileInfo *info; - - error = NULL; - info = g_file_query_info (nautilus_file_info_get_location (files->data), - G_FILE_ATTRIBUTE_STANDARD_TARGET_URI "," G_FILE_ATTRIBUTE_ID_FILE "," - G_FILE_ATTRIBUTE_ID_FILESYSTEM "," G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE "," - G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI "," G_FILE_ATTRIBUTE_UNIX_DEVICE "," - G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT, G_FILE_QUERY_INFO_NONE, NULL, &error); - if (info) { - g_print ("nautilus_gdu_get_file_items: G_FILE_ATTRIBUTE_STANDARD_TARGET_URI = %s\n", g_file_info_get_attribute_as_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI)); - g_print ("nautilus_gdu_get_file_items: G_FILE_ATTRIBUTE_ID_FILE = %s\n", g_file_info_get_attribute_as_string (info, G_FILE_ATTRIBUTE_ID_FILE)); - g_print ("nautilus_gdu_get_file_items: G_FILE_ATTRIBUTE_ID_FILESYSTEM = %s\n", g_file_info_get_attribute_as_string (info, G_FILE_ATTRIBUTE_ID_FILESYSTEM)); - g_print ("nautilus_gdu_get_file_items: G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE = %d\n", g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE)); - g_print ("nautilus_gdu_get_file_items: G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI = %s\n", g_file_info_get_attribute_as_string (info, G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI)); - g_print ("nautilus_gdu_get_file_items: G_FILE_ATTRIBUTE_UNIX_DEVICE = %d\n", g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_DEVICE)); - g_print ("nautilus_gdu_get_file_items: G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT = %d\n", g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT)); - } - if (error) { - g_print ("nautilus_gdu_get_file_items: error = %s\n", error->message); - } - - - /* GDU stuff */ - GduPool *pool; - GList *presentables; - GduPresentable *presentable; - GduDevice *device; - - pool = gdu_pool_new (); - presentables = gdu_pool_get_presentables (pool); - - - - while (presentables != NULL) { - presentable = presentables->data; - device = gdu_presentable_get_device (presentable); - g_print ("nautilus_gdu_get_file_items: found presentable name '%s', mounted as %s, \n device %s, object_path %s, uuid %s\n", - gdu_presentable_get_name (presentable), gdu_device_get_mount_path (device), gdu_device_get_device_file (device), - gdu_device_get_object_path (device), gdu_device_id_get_uuid (device)); - g_object_unref (device); - g_object_unref (presentable); - presentables = g_list_next (presentables); - } - - - if (presentables) - g_list_free (presentables); - g_object_unref (pool); - -#else - GduPresentable *presentable; -#endif - - presentable = find_presentable_from_file (files->data); - - g_get_current_time (&stop_time); - g_print ("I spent %ld ms searching for DK presentable\n", (stop_time.tv_sec - start_time.tv_sec) * 1000 + (stop_time.tv_usec - start_time.tv_usec) / 1000); - if (! presentable) return NULL; - item = nautilus_menu_item_new ("NautilusGDU::format", _("_Format..."), _("Open dummy dialog"), "palimpsest"); - g_object_set_data (G_OBJECT (item), "NautilusGDU::screen", gtk_widget_get_screen (window)); + /* TODO: icon */ + item = nautilus_menu_item_new ("NautilusGDU::format", + _("_Format..."), + _("Create new filesystem on the selected device"), + "palimpsest"); + g_object_set_data (G_OBJECT (item), + "NautilusGDU::screen", + gtk_widget_get_screen (window)); g_object_set_data_full (G_OBJECT (item), "presentable", g_object_ref (presentable), (GDestroyNotify) g_object_unref); @@ -240,6 +176,7 @@ nautilus_gdu_get_file_items (NautilusMenuProvider *provider, } +#if 0 GList * nautilus_gdu_get_toolbar_items (NautilusMenuProvider *provider, GtkWidget *window, @@ -250,13 +187,25 @@ nautilus_gdu_get_toolbar_items (NautilusMenuProvider *provider, return NULL; } +static GList * +nautilus_gdu_get_background_items (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *file_info) +{ + g_print ("nautilus_gdu_get_background_items\n"); + /* not used */ + return NULL; +} +#endif static void nautilus_gdu_menu_provider_iface_init (NautilusMenuProviderIface *iface) { - iface->get_background_items = nautilus_gdu_get_background_items; iface->get_file_items = nautilus_gdu_get_file_items; +#if 0 + iface->get_background_items = nautilus_gdu_get_background_items; iface->get_toolbar_items = nautilus_gdu_get_toolbar_items; +#endif } static void |
