diff options
Diffstat (limited to 'daemon/gvfsbackendmtp.c')
-rw-r--r-- | daemon/gvfsbackendmtp.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/daemon/gvfsbackendmtp.c b/daemon/gvfsbackendmtp.c index 8f1c4df6..9f1d84de 100644 --- a/daemon/gvfsbackendmtp.c +++ b/daemon/gvfsbackendmtp.c @@ -54,6 +54,7 @@ #include "gvfsjobcreatemonitor.h" #include "gvfsjobmakedirectory.h" #include "gvfsmonitor.h" +#include "gvfsgphoto2utils.h" /* ------------------------------------------------------------------------------------------------- */ @@ -785,9 +786,10 @@ mtp_heartbeat (GVfsBackendMtp *backend) } static char * -get_dev_path_from_host (GVfsJob *job, - GUdevClient *gudev_client, - const char *host) +get_dev_path_and_device_from_host (GVfsJob *job, + GUdevClient *gudev_client, + const char *host, + GUdevDevice **device) { /* turn usb:001,041 string into an udev device name */ if (!g_str_has_prefix (host, "[usb:")) { @@ -811,15 +813,14 @@ get_dev_path_from_host (GVfsJob *job, DEBUG ("(II) get_dev_path_from_host: Parsed '%s' into device name %s\n", host, dev_path); /* find corresponding GUdevDevice */ - GUdevDevice *device = g_udev_client_query_by_device_file (gudev_client, dev_path); - if (!device) { + *device = g_udev_client_query_by_device_file (gudev_client, dev_path); + if (!*device) { g_free (dev_path); g_vfs_job_failed_literal (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("Couldn't find matching udev device.")); return NULL; } - g_object_unref (device); return dev_path; } @@ -832,6 +833,7 @@ do_mount (GVfsBackend *backend, gboolean is_automount) { GVfsBackendMtp *op_backend = G_VFS_BACKEND_MTP (backend); + GUdevDevice *device; DEBUG ("(I) do_mount\n"); @@ -851,7 +853,10 @@ do_mount (GVfsBackend *backend, return; } - char *dev_path = get_dev_path_from_host (G_VFS_JOB (job), op_backend->gudev_client, host); + char *dev_path = get_dev_path_and_device_from_host (G_VFS_JOB (job), + op_backend->gudev_client, + host, + &device); if (dev_path == NULL) { g_object_unref (op_backend->gudev_client); /* get_dev_path_from_host() sets job state. */ @@ -859,6 +864,11 @@ do_mount (GVfsBackend *backend, } op_backend->dev_path = dev_path; + op_backend->volume_name = g_vfs_get_volume_name (device, "ID_MTP"); + op_backend->volume_icon = g_vfs_get_volume_icon (device); + op_backend->volume_symbolic_icon = g_vfs_get_volume_symbolic_icon (device); + g_object_unref (device); + op_backend->on_uevent_id = g_signal_connect_object (op_backend->gudev_client, "uevent", G_CALLBACK (on_uevent), op_backend, 0); @@ -928,6 +938,9 @@ do_unmount (GVfsBackend *backend, GVfsJobUnmount *job, op_backend->on_uevent_id); g_object_unref (op_backend->gudev_client); g_clear_pointer (&op_backend->dev_path, g_free); + g_clear_pointer (&op_backend->volume_name, g_free); + g_clear_pointer (&op_backend->volume_icon, g_free); + g_clear_pointer (&op_backend->volume_symbolic_icon, g_free); LIBMTP_Release_Device (op_backend->device); g_mutex_unlock (&op_backend->mutex); @@ -1063,16 +1076,20 @@ get_device_info (GVfsBackendMtp *backend, GFileInfo *info) char *friendlyname = LIBMTP_Get_Friendlyname (device); g_file_info_set_display_name (info, friendlyname == NULL ? - _("Unnamed Device") : friendlyname); + backend->volume_name : friendlyname); free (friendlyname); g_file_info_set_content_type (info, "inode/directory"); g_file_info_set_size (info, 0); - GIcon *icon = g_themed_icon_new ("multimedia-player"); + GIcon *icon = g_themed_icon_new (backend->volume_icon); g_file_info_set_icon (info, icon); g_object_unref (icon); + icon = g_themed_icon_new (backend->volume_symbolic_icon); + g_file_info_set_symbolic_icon (info, icon); + g_object_unref (icon); + g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE); g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE); g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE); |