[gvfs/wip/rishi/goa: 4/5] Adjusted for new libgdata



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]