[gvfs/wip/rishi/goa: 4/5] Adjusted for new libgdata
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gvfs/wip/rishi/goa: 4/5] Adjusted for new libgdata
- Date: Fri, 19 Jun 2015 16:57:16 +0000 (UTC)
commit d76e7678f838795151a030372591507088161f1a
Author: Debarshi Ray <debarshir gnome org>
Date: Fri Jun 19 16:28:36 2015 +0200
Adjusted for new libgdata
Queries can now properly page through
Use GDataEntry:id instead of GDataDocumentsEntry:document-id
https://bugzilla.gnome.org/show_bug.cgi?id=739008
daemon/gvfsbackendgoogle.c | 158 ++++++++++++++++----------------------------
1 files changed, 58 insertions(+), 100 deletions(-)
---
diff --git a/daemon/gvfsbackendgoogle.c b/daemon/gvfsbackendgoogle.c
index fa9f219..953d8f4 100644
--- a/daemon/gvfsbackendgoogle.c
+++ b/daemon/gvfsbackendgoogle.c
@@ -2,7 +2,7 @@
/* gvfs - extensions for gio
*
* Copyright (C) 2009 Thibault Saunier
- * Copyright (C) 2014 Red Hat, Inc.
+ * Copyright (C) 2014, 2015 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -68,8 +68,7 @@ G_DEFINE_TYPE(GVfsBackendGoogle, g_vfs_backend_google, G_VFS_TYPE_BACKEND)
#define CATEGORY_SCHEMA_KIND "http://schemas.google.com/g/2005#kind";
#define CATEGORY_SCHEMA_KIND_FILE "http://schemas.google.com/docs/2007#file";
-#define MAX_RESULTS_INITIAL 50
-#define MAX_RESULTS_FACTOR 2
+#define MAX_RESULTS 50
#define REBUILD_ENTRIES_TIMEOUT 60 /* s */
@@ -312,18 +311,9 @@ build_file_info (GVfsBackendGoogle *self,
goto out;
if (is_symlink)
- {
- name = symlink_name;
- }
+ name = symlink_name;
else
- {
- /* We need the document-id, not id or resource-id, because
- * gdata_documents_entry_get_path returns a path based on it.
- */
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- name = gdata_documents_entry_get_document_id (GDATA_DOCUMENTS_ENTRY (entry));
- G_GNUC_END_IGNORE_DEPRECATIONS;
- }
+ name = gdata_entry_get_id (entry);
g_file_info_set_name (info, name);
@@ -411,9 +401,7 @@ rebuild_entries (GVfsBackendGoogle *self,
GDataDocumentsFeed *feed = NULL;
GDataDocumentsQuery *query = NULL;
GError *local_error;
- gboolean found_new;
gboolean succeeded_once = FALSE;
- guint max_results = MAX_RESULTS_INITIAL;
/* The paging mechanism based on start-index and
* gdata_query_next_page is not working at the moment. If we start
@@ -427,16 +415,14 @@ rebuild_entries (GVfsBackendGoogle *self,
* max-results and keep the start-index at 1.
*/
- do
+ query = gdata_documents_query_new_with_limits (NULL, 1, MAX_RESULTS);
+ gdata_documents_query_set_show_folders (query, TRUE);
+
+ while (TRUE)
{
GList *entries;
GList *l;
- found_new = FALSE;
-
- query = gdata_documents_query_new_with_limits (NULL, 1, max_results);
- gdata_documents_query_set_show_folders (query, TRUE);
-
local_error = NULL;
feed = gdata_documents_service_query_documents (self->service, query, cancellable, NULL, NULL,
&local_error);
if (local_error != NULL)
@@ -451,7 +437,7 @@ rebuild_entries (GVfsBackendGoogle *self,
g_propagate_error (error, local_error);
}
- goto out;
+ break;
}
if (!succeeded_once)
@@ -461,31 +447,23 @@ rebuild_entries (GVfsBackendGoogle *self,
}
entries = gdata_feed_get_entries (GDATA_FEED (feed));
+ if (entries == NULL)
+ break;
+
for (l = entries; l != NULL; l = l->next)
{
GDataEntry *entry = GDATA_ENTRY (l->data);
- const gchar *document_id;
+ const gchar *id;
- /* We need the document-id, not id or resource-id, because
- * gdata_documents_entry_get_path returns a path based on it.
- */
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- document_id = gdata_documents_entry_get_document_id (GDATA_DOCUMENTS_ENTRY (entry));
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- if (g_hash_table_lookup (self->entries, document_id) == NULL)
- {
- g_hash_table_insert (self->entries, g_strdup (document_id), g_object_ref (entry));
- found_new = TRUE;
- }
+ id = gdata_entry_get_id (entry);
+ if (g_hash_table_lookup (self->entries, id) == NULL)
+ g_hash_table_insert (self->entries, g_strdup (id), g_object_ref (entry));
}
- max_results *= MAX_RESULTS_FACTOR;
+ gdata_query_next_page (GDATA_QUERY (query));
g_clear_object (&feed);
- g_clear_object (&query);
- } while (found_new);
+ }
- out:
g_clear_object (&feed);
g_clear_object (&query);
}
@@ -557,12 +535,12 @@ g_vfs_backend_google_create_dir_monitor (GVfsBackend *_self,
GVfsMonitor *monitor = NULL;
gboolean is_folder;
gboolean is_root;
- gchar *document_id = NULL;
+ gchar *id = NULL;
g_rec_mutex_lock (&self->mutex);
- document_id = g_path_get_basename (filename);
- entry = g_hash_table_lookup (self->entries, document_id);
+ id = g_path_get_basename (filename);
+ entry = g_hash_table_lookup (self->entries, id);
is_folder_or_root (filename, entry, NULL, &is_root);
if (entry == NULL && !is_root)
@@ -576,7 +554,7 @@ g_vfs_backend_google_create_dir_monitor (GVfsBackend *_self,
goto out;
}
- entry = g_hash_table_lookup (self->entries, document_id);
+ entry = g_hash_table_lookup (self->entries, id);
if (entry == NULL)
{
g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("No such file or
directory"));
@@ -600,7 +578,7 @@ g_vfs_backend_google_create_dir_monitor (GVfsBackend *_self,
out:
g_clear_object (&monitor);
- g_free (document_id);
+ g_free (id);
g_rec_mutex_unlock (&self->mutex);
return TRUE;
}
@@ -619,7 +597,7 @@ g_vfs_backend_google_delete (GVfsBackend *_self,
GError *error;
gboolean is_root;
const gchar *real_filename;
- gchar *document_id = NULL;
+ gchar *id = NULL;
g_rec_mutex_lock (&self->mutex);
g_debug ("+ delete: %s\n", filename);
@@ -638,8 +616,8 @@ g_vfs_backend_google_delete (GVfsBackend *_self,
goto out;
}
- document_id = g_path_get_basename (filename);
- entry = g_hash_table_lookup (self->entries, document_id);
+ id = g_path_get_basename (filename);
+ entry = g_hash_table_lookup (self->entries, id);
if (entry == NULL)
{
@@ -652,7 +630,7 @@ g_vfs_backend_google_delete (GVfsBackend *_self,
goto out;
}
- entry = g_hash_table_lookup (self->entries, document_id);
+ entry = g_hash_table_lookup (self->entries, id);
if (entry == NULL)
{
g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("No such file or
directory"));
@@ -671,11 +649,11 @@ g_vfs_backend_google_delete (GVfsBackend *_self,
goto out;
}
- g_hash_table_remove (self->entries, document_id);
+ g_hash_table_remove (self->entries, id);
g_vfs_job_succeeded (G_VFS_JOB (job));
out:
- g_free (document_id);
+ g_free (id);
g_debug ("- delete\n");
g_rec_mutex_unlock (&self->mutex);
}
@@ -702,9 +680,9 @@ g_vfs_backend_google_enumerate (GVfsBackend *_self,
{
GVfsBackendGoogle *self = G_VFS_BACKEND_GOOGLE (_self);
GCancellable *cancellable = G_VFS_JOB (job)->cancellable;
+ GDataEntry *entry;
GError *error;
- GList *entries = NULL;
- GList *l;
+ GHashTableIter iter;
g_rec_mutex_lock (&self->mutex);
g_debug ("+ enumerate: %s\n", filename);
@@ -734,10 +712,9 @@ g_vfs_backend_google_enumerate (GVfsBackend *_self,
g_vfs_job_succeeded (G_VFS_JOB (job));
- entries = g_hash_table_get_values (self->entries);
- for (l = entries; l != NULL; l = l->next)
+ g_hash_table_iter_init (&iter, self->entries);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &entry))
{
- GDataEntry *entry = GDATA_ENTRY (l->data);
gchar *parent_path;
gchar *path;
@@ -760,7 +737,6 @@ g_vfs_backend_google_enumerate (GVfsBackend *_self,
g_vfs_job_enumerate_done (job);
out:
- g_list_free (entries);
g_debug ("- enumerate\n");
g_rec_mutex_unlock (&self->mutex);
}
@@ -780,7 +756,7 @@ g_vfs_backend_google_make_directory (GVfsBackend *_self,
GDataEntry *new_entry = NULL;
GError *error;
gboolean is_root;
- const gchar *document_id;
+ const gchar *id;
gchar *parent_id = NULL;
gchar *parent_path = NULL;
gchar *path = NULL;
@@ -854,14 +830,8 @@ g_vfs_backend_google_make_directory (GVfsBackend *_self,
goto out;
}
- /* We need the document-id, not id or resource-id, because
- * gdata_documents_entry_get_path returns a path based on it.
- */
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- document_id = gdata_documents_entry_get_document_id (GDATA_DOCUMENTS_ENTRY (new_entry));
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- g_hash_table_insert (self->entries, g_strdup (document_id), g_object_ref (new_entry));
+ id = gdata_entry_get_id (new_entry);
+ g_hash_table_insert (self->entries, g_strdup (id), g_object_ref (new_entry));
path = gdata_documents_entry_get_path (GDATA_DOCUMENTS_ENTRY (new_entry));
g_hash_table_insert (self->lookaside, g_strdup (filename), g_strdup (path));
@@ -982,14 +952,14 @@ g_vfs_backend_google_open_for_read (GVfsBackend *_self,
GError *error;
gboolean is_folder;
gboolean is_root;
- gchar *document_id = NULL;
gchar *export_format = NULL;
+ gchar *id = NULL;
g_rec_mutex_lock (&self->mutex);
g_debug ("+ open_for_read: %s\n", filename);
- document_id = g_path_get_basename (filename);
- entry = g_hash_table_lookup (self->entries, document_id);
+ id = g_path_get_basename (filename);
+ entry = g_hash_table_lookup (self->entries, id);
is_folder_or_root (filename, entry, NULL, &is_root);
if (is_root)
@@ -1009,7 +979,7 @@ g_vfs_backend_google_open_for_read (GVfsBackend *_self,
goto out;
}
- entry = g_hash_table_lookup (self->entries, document_id);
+ entry = g_hash_table_lookup (self->entries, id);
if (entry == NULL)
{
g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("No such file or
directory"));
@@ -1052,7 +1022,7 @@ g_vfs_backend_google_open_for_read (GVfsBackend *_self,
out:
g_free (export_format);
- g_free (document_id);
+ g_free (id);
g_debug ("- open_for_read\n");
g_rec_mutex_unlock (&self->mutex);
}
@@ -1081,7 +1051,7 @@ g_vfs_backend_google_push (GVfsBackend *_self,
GFileInfo *info = NULL;
gboolean is_root;
const gchar *content_type;
- const gchar *document_id;
+ const gchar *id;
const gchar *real_parent_path;
const gchar *title;
gchar *parent_id = NULL;
@@ -1211,14 +1181,8 @@ g_vfs_backend_google_push (GVfsBackend *_self,
goto out;
}
- /* We need the document-id, not id or resource-id, because
- * gdata_documents_entry_get_path returns a path based on it.
- */
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- document_id = gdata_documents_entry_get_document_id (GDATA_DOCUMENTS_ENTRY (new_document));
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- g_hash_table_insert (self->entries, g_strdup (document_id), g_object_ref (new_document));
+ id = gdata_entry_get_id (GDATA_ENTRY (new_document));
+ g_hash_table_insert (self->entries, g_strdup (id), g_object_ref (new_document));
path = gdata_documents_entry_get_path (GDATA_DOCUMENTS_ENTRY (new_document));
g_hash_table_insert (self->lookaside, g_strdup (destination), g_strdup (path));
@@ -1287,7 +1251,7 @@ g_vfs_backend_google_query_info (GVfsBackend *_self,
gboolean is_root;
gboolean is_symlink = FALSE;
const gchar *real_filename;
- gchar *document_id = NULL;
+ gchar *id = NULL;
gchar *symlink_name = NULL;
g_rec_mutex_lock (&self->mutex);
@@ -1301,8 +1265,8 @@ g_vfs_backend_google_query_info (GVfsBackend *_self,
filename = real_filename;
}
- document_id = g_path_get_basename (filename);
- entry = g_hash_table_lookup (self->entries, document_id);
+ id = g_path_get_basename (filename);
+ entry = g_hash_table_lookup (self->entries, id);
is_folder_or_root (filename, entry, NULL, &is_root);
if (entry == NULL && !is_root)
@@ -1316,7 +1280,7 @@ g_vfs_backend_google_query_info (GVfsBackend *_self,
goto out;
}
- entry = g_hash_table_lookup (self->entries, document_id);
+ entry = g_hash_table_lookup (self->entries, id);
}
error = NULL;
@@ -1331,7 +1295,7 @@ g_vfs_backend_google_query_info (GVfsBackend *_self,
g_vfs_job_succeeded (G_VFS_JOB (job));
out:
- g_free (document_id);
+ g_free (id);
g_free (symlink_name);
g_debug ("- query_info\n");
g_rec_mutex_unlock (&self->mutex);
@@ -1422,9 +1386,9 @@ g_vfs_backend_google_set_display_name (GVfsBackend *_self,
GDataEntry *new_entry = NULL;
GError *error;
gboolean is_root;
- const gchar *new_document_id;
+ const gchar *new_id;
const gchar *real_filename;
- gchar *document_id = NULL;
+ gchar *id = NULL;
gchar *path = NULL;
g_rec_mutex_lock (&self->mutex);
@@ -1444,8 +1408,8 @@ g_vfs_backend_google_set_display_name (GVfsBackend *_self,
goto out;
}
- document_id = g_path_get_basename (filename);
- entry = g_hash_table_lookup (self->entries, document_id);
+ id = g_path_get_basename (filename);
+ entry = g_hash_table_lookup (self->entries, id);
if (entry == NULL)
{
@@ -1458,7 +1422,7 @@ g_vfs_backend_google_set_display_name (GVfsBackend *_self,
goto out;
}
- entry = g_hash_table_lookup (self->entries, document_id);
+ entry = g_hash_table_lookup (self->entries, id);
if (entry == NULL)
{
g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("No such file or
directory"));
@@ -1479,16 +1443,10 @@ g_vfs_backend_google_set_display_name (GVfsBackend *_self,
goto out;
}
- g_hash_table_remove (self->entries, document_id);
-
- /* We need the document-id, not id or resource-id, because
- * gdata_documents_entry_get_path returns a path based on it.
- */
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- new_document_id = gdata_documents_entry_get_document_id (GDATA_DOCUMENTS_ENTRY (new_entry));
- G_GNUC_END_IGNORE_DEPRECATIONS;
+ g_hash_table_remove (self->entries, id);
- g_hash_table_insert (self->entries, g_strdup (new_document_id), g_object_ref (new_entry));
+ new_id = gdata_entry_get_id (new_entry);
+ g_hash_table_insert (self->entries, g_strdup (new_id), g_object_ref (new_entry));
path = gdata_documents_entry_get_path (GDATA_DOCUMENTS_ENTRY (new_entry));
g_vfs_job_set_display_name_set_new_path (job, path);
@@ -1499,7 +1457,7 @@ g_vfs_backend_google_set_display_name (GVfsBackend *_self,
out:
g_clear_object (&new_entry);
- g_free (document_id);
+ g_free (id);
g_free (path);
g_debug ("- set_display_name\n");
g_rec_mutex_unlock (&self->mutex);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]