diff options
author | Ondrej Holy <oholy@redhat.com> | 2018-06-05 13:04:15 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2018-07-12 14:26:40 +0000 |
commit | 5bc9cb7802b7e9e797ff73a53a04f41a8cf7682a (patch) | |
tree | e74f34f982018785b1dd521ccbd5bd321961aebd | |
parent | 5e276b2c92015f8c6eff42be99eafc8d54b570a7 (diff) | |
download | gvfs-5bc9cb7802b7e9e797ff73a53a04f41a8cf7682a.tar.gz |
google: Do not create .desktop files for native fileswip/oholy/do-not-use-desktop-files
Currently, .desktop file with a link to the original location is provided,
when a native file is opened because Google doesn't provide its proprietary
formats and GLocalFile doesn't know G_FILE_TYPE_SHORTCUT. It is a bit
tricky and confusing, among other because the .desktop files aren't
automatically converted back to native files when writing.
What is worse, Nautilus has dropped support for .desktop files recently,
so you see "There was an error launching the application." instead of the
requested file. It doesn't make more sense to provide this .desktop files,
so let's remove this fallback and return error instead.
https://gitlab.gnome.org/GNOME/nautilus/issues/448
-rw-r--r-- | daemon/gvfsbackendgoogle.c | 68 |
1 files changed, 13 insertions, 55 deletions
diff --git a/daemon/gvfsbackendgoogle.c b/daemon/gvfsbackendgoogle.c index 23bd8f58..7bea4bff 100644 --- a/daemon/gvfsbackendgoogle.c +++ b/daemon/gvfsbackendgoogle.c @@ -907,7 +907,6 @@ build_file_info (GVfsBackendGoogle *self, gchar *escaped_name = NULL; gchar *content_type = NULL; gchar *copy_name = NULL; - gchar *generated_copy_name = NULL; gint64 atime; gint64 ctime; gint64 mtime; @@ -1025,21 +1024,7 @@ build_file_info (GVfsBackendGoogle *self, g_file_info_set_display_name (info, title); g_file_info_set_edit_name (info, title); - generated_copy_name = generate_copy_name (self, entry); - - /* While copying remote Drive content to local storage, we want to - * create Link-type desktop files because GLocalFile doesn't know - * about shortcuts. That might change in future. - */ - if (file_type == G_FILE_TYPE_SHORTCUT) - { - copy_name = g_strconcat (generated_copy_name, ".desktop", NULL); - } - else - { - copy_name = generated_copy_name; - generated_copy_name = NULL; - } + copy_name = generate_copy_name (self, entry); /* Sanitize copy-name by replacing slashes with dashes. This is * what nautilus does (for desktop files). @@ -1097,7 +1082,6 @@ build_file_info (GVfsBackendGoogle *self, out: g_free (copy_name); - g_free (generated_copy_name); g_free (escaped_name); g_free (content_type); g_list_free (links); @@ -2249,6 +2233,8 @@ g_vfs_backend_google_open_for_read (GVfsBackend *_self, GError *error; gchar *content_type = NULL; gchar *entry_path = NULL; + GDataAuthorizationDomain *auth_domain; + const gchar *uri; g_rec_mutex_lock (&self->mutex); g_debug ("+ open_for_read: %s\n", filename); @@ -2278,47 +2264,19 @@ g_vfs_backend_google_open_for_read (GVfsBackend *_self, goto out; } - /* While copying remote Drive content to local storage, we want to - * create Link-type desktop files because GLocalFile doesn't know - * about shortcuts. That might change in future. - */ - if (g_str_has_prefix (content_type, CONTENT_TYPE_PREFIX_GOOGLE)) + if (is_native_file (entry)) { - GDataLink *alternate; - GKeyFile *file; - const gchar *title; - const gchar *uri; - gchar *data; - gsize length; - - file = g_key_file_new (); - - title = gdata_entry_get_title (entry); - g_key_file_set_string (file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NAME, title); - g_key_file_set_string (file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_TYPE, "Link"); - - alternate = gdata_entry_look_up_link (entry, GDATA_LINK_ALTERNATE); - uri = gdata_link_get_uri (alternate); - g_key_file_set_string (file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_URL, uri); - - data = g_key_file_to_data (file, &length, NULL); - stream = g_memory_input_stream_new_from_data (data, (gssize) length, g_free); - - g_key_file_free (file); + g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_NOT_REGULAR_FILE, _("File is not a regular file")); + goto out; } - else - { - GDataAuthorizationDomain *auth_domain; - const gchar *uri; - auth_domain = gdata_documents_service_get_primary_authorization_domain (); - uri = gdata_entry_get_content_uri (entry); - stream = gdata_download_stream_new (GDATA_SERVICE (self->service), auth_domain, uri, cancellable); - if (stream == NULL) - { - g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_FAILED, _("Error getting data from file")); - goto out; - } + auth_domain = gdata_documents_service_get_primary_authorization_domain (); + uri = gdata_entry_get_content_uri (entry); + stream = gdata_download_stream_new (GDATA_SERVICE (self->service), auth_domain, uri, cancellable); + if (stream == NULL) + { + g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_FAILED, _("Error getting data from file")); + goto out; } g_object_set_data_full (G_OBJECT (stream), "g-vfs-backend-google-entry", g_object_ref (entry), g_object_unref); |