summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>2012-06-27 19:07:05 +0000
committerenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>2012-06-27 19:07:05 +0000
commitcb57b297a498b69aec0d1f0680498fb40256bfab (patch)
treea3c0045cfdbc4db132bcbbd42a58e31cfaa6457d
parente86887e7bacbefd5667354818afb6fd6db52d98a (diff)
downloadefreet-cb57b297a498b69aec0d1f0680498fb40256bfab.tar.gz
efreet-cb57b297a498b69aec0d1f0680498fb40256bfab.tar.bz2
efreet-cb57b297a498b69aec0d1f0680498fb40256bfab.zip
efreet: Fix missing cache info
If a desktop was in the regular cache because of direct access, and then added by a change in XDG_DATA_DIRS it wouldn't end in the utils cache unless something triggered a complete cache rebuild. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/efreet@72962 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33
-rw-r--r--src/bin/efreet_desktop_cache_create.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/bin/efreet_desktop_cache_create.c b/src/bin/efreet_desktop_cache_create.c
index 16a6322..21f2922 100644
--- a/src/bin/efreet_desktop_cache_create.c
+++ b/src/bin/efreet_desktop_cache_create.c
@@ -23,8 +23,9 @@ static Eet_File *util_ef = NULL;
static Eina_Hash *desktops = NULL;
-static Eina_Hash *file_ids = NULL;
-static Eina_Hash *paths = NULL;
+static Eina_Hash *file_ids = NULL;
+static Efreet_Cache_Hash *old_file_ids = NULL;
+static Eina_Hash *paths = NULL;
static Eina_Hash *mime_types = NULL;
static Eina_Hash *categories = NULL;
@@ -69,6 +70,11 @@ cache_add(const char *path, const char *file_id, int priority __UNUSED__, int *c
else INF(" NO UNCACHED");
}
if (!desk) return 1;
+ if (file_id && old_file_ids && !eina_hash_find(old_file_ids->hash, file_id))
+ {
+ *changed = 1;
+ INF(" NOT IN UTILS");
+ }
if (!eina_hash_find(paths, desk->orig_path))
{
if (!eet_data_write(ef, edd, desk->orig_path, desk, 0))
@@ -281,6 +287,13 @@ main(int argc, char **argv)
eet_close(ef);
}
+ ef = eet_open(efreet_desktop_util_cache_file(), EET_FILE_MODE_READ);
+ if (ef)
+ {
+ old_file_ids = eet_data_read(ef, efreet_hash_string_edd(), "file_id");
+ eet_close(ef);
+ }
+
/* create cache */
snprintf(file, sizeof(file), "%s.XXXXXX", efreet_desktop_cache_file());
tmpfd = mkstemp(file);
@@ -367,10 +380,7 @@ main(int argc, char **argv)
}
if (user_dirs)
- {
- IF_FREE(user_dirs->array);
- free(user_dirs);
- }
+ efreet_cache_array_string_free(user_dirs);
/* store user dirs */
if (store_dirs)
@@ -428,6 +438,12 @@ main(int argc, char **argv)
eina_hash_free(comment);
eina_hash_free(exec);
+ if (old_file_ids)
+ {
+ eina_hash_free(old_file_ids->hash);
+ free(old_file_ids);
+ }
+
eina_hash_free(file_ids);
eina_hash_free(paths);
@@ -501,6 +517,11 @@ error:
IF_FREE(dir);
edd_error:
if (user_dirs) efreet_cache_array_string_free(user_dirs);
+ if (old_file_ids)
+ {
+ eina_hash_free(old_file_ids->hash);
+ free(old_file_ids);
+ }
efreet_shutdown();
efreet_error:
ecore_shutdown();