]> err.no Git - libchamplain/commitdiff
Substract the highest removed popularity from non cleared tiles
authorPierre-Luc Beaudoin <pierre-luc@pierlux.com>
Sat, 2 May 2009 00:13:11 +0000 (20:13 -0400)
committerPierre-Luc Beaudoin <pierre-luc@pierlux.com>
Sat, 2 May 2009 00:13:11 +0000 (20:13 -0400)
Without this the tiles that didn't get deleted have a big head start
on the popularity side on new tiles.

champlain/champlain-cache.c

index 221fc21722441d2f77787aad2fa0e9847f4f5bca..47b30b57f4fdf16fa83332fd489ccf98f2050c06 100644 (file)
@@ -473,6 +473,8 @@ champlain_cache_purge (ChamplainCache *self)
   sqlite3_stmt *stmt;
   int rc = 0;
   guint current_size = 0;
+  guint highest_popularity = 0;
+  gchar *error;
 
   query = g_strdup_printf ("SELECT SUM (size) FROM tiles;");
   rc = sqlite3_prepare (priv->data, query, strlen (query), &stmt, NULL);
@@ -494,7 +496,7 @@ champlain_cache_purge (ChamplainCache *self)
   sqlite3_finalize (stmt);
 
   /* Ok, delete the less popular tiles until size_limit reached */
-  query = g_strdup_printf ("SELECT filename, size FROM tiles ORDER BY popularity;");
+  query = g_strdup_printf ("SELECT filename, size, popularity FROM tiles ORDER BY popularity;");
   rc = sqlite3_prepare (priv->data, query, strlen (query), &stmt, NULL);
   if (rc != SQLITE_OK)
     {
@@ -509,6 +511,7 @@ champlain_cache_purge (ChamplainCache *self)
 
       filename = sqlite3_column_text (stmt, 0);
       size = sqlite3_column_int (stmt, 1);
+      highest_popularity = sqlite3_column_int (stmt, 2);
       DEBUG ("Deleting %s of size %d", filename, size);
 
       delete_tile (self, filename);
@@ -521,5 +524,15 @@ champlain_cache_purge (ChamplainCache *self)
 
   sqlite3_finalize (stmt);
   g_free (query);
+
+  query = g_strdup_printf ("UPDATE tiles SET popularity = popularity - %d;",
+      highest_popularity);
+  sqlite3_exec (priv->data, query, NULL, NULL, &error);
+  if (error != NULL)
+    {
+      DEBUG ("Updating popularity failed: %s", error);
+      sqlite3_free (error);
+    }
+  g_free (query);
 }