[gnome-documents] zpj-miner: don't descend into folders that didn't change



commit 68c88e8f5627835644fd916d3966d9842a2fd7a4
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Mon Oct 1 20:24:31 2012 -0400

    zpj-miner: don't descend into folders that didn't change
    
    Since now we can detect whether an entry changed, and SkyDrive
    propagates time changes from files inside folders, we can avoid
    descending into directories which we know didn't change.
    This makes the SkyDrive indexing faster.

 src/miner/gd-zpj-miner.c |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)
---
diff --git a/src/miner/gd-zpj-miner.c b/src/miner/gd-zpj-miner.c
index f9f598b..eb18923 100644
--- a/src/miner/gd-zpj-miner.c
+++ b/src/miner/gd-zpj-miner.c
@@ -32,6 +32,7 @@ G_DEFINE_TYPE (GdZpjMiner, gd_zpj_miner, GD_TYPE_MINER)
 static gboolean
 account_miner_job_process_entry (GdAccountMinerJob *job,
                                  ZpjSkydriveEntry *entry,
+                                 gboolean *entry_updated,
                                  GError **error)
 {
   GDateTime *created_time, *updated_time;
@@ -196,6 +197,9 @@ account_miner_job_process_entry (GdAccountMinerJob *job,
   if (*error != NULL)
     return FALSE;
 
+  if (entry_updated)
+    *entry_updated = mtime_changed;
+
   return TRUE;
 }
 
@@ -218,18 +222,31 @@ account_miner_job_traverse_folder (GdAccountMinerJob *job,
       ZpjSkydriveEntry *entry = (ZpjSkydriveEntry *) l->data;
       const gchar *id;
 
-      id = zpj_skydrive_entry_get_id (entry);
-
       if (ZPJ_IS_SKYDRIVE_FOLDER (entry))
         {
-          account_miner_job_traverse_folder (job, id, error);
+          gboolean entry_updated;
+          account_miner_job_process_entry (job, entry, &entry_updated, error);
+
+          if (*error != NULL)
+            goto out;
+
+          if (entry_updated)
+            {
+              id = zpj_skydrive_entry_get_id (entry);
+              account_miner_job_traverse_folder (job, id, error);
+            }
+
           if (*error != NULL)
             goto out;
         }
       else if (ZPJ_IS_SKYDRIVE_PHOTO (entry))
-        continue;
-
-      account_miner_job_process_entry (job, entry, error);
+        {
+          continue;
+        }
+      else
+        {
+          account_miner_job_process_entry (job, entry, NULL, error);
+        }
 
       if (*error != NULL)
         {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]