efreet - consider ctime changes as changes too
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Sat, 16 Nov 2019 12:58:34 +0000 (12:58 +0000)
committerJongmin Lee <jm105.lee@samsung.com>
Sun, 17 Nov 2019 21:03:58 +0000 (06:03 +0900)
some distros do odd things with source desktop files and set their
mtime timestamps to 0... thus we can't tell that there is a change.
thier ctimes do change, so consider the newer of either of these as
the modification time to not miss updates

@fix

src/bin/efreet/efreet_desktop_cache_create.c
src/lib/efreet/efreet_desktop.c

index ec7553d..8988168 100644 (file)
@@ -70,13 +70,22 @@ cache_add(Eet_File *ef, const char *path, const char *file_id, int priority EINA
         *changed = 1;
         INF("  NEW");
     }
-    else if (ecore_file_mod_time(desk->orig_path) != desk->load_time)
+    else
     {
-        efreet_desktop_free(desk);
-        *changed = 1;
-        desk = efreet_desktop_uncached_new(path);
-        if (desk) INF("  CHANGED");
-        else      INF("  NO UNCACHED");
+        struct stat st;
+        if (!stat(desk->orig_path, &st))
+        {
+           time_t modtime = st.st_mtime;
+           if (modtime < st.st_ctime) modtime = st.st_ctime;
+           if (modtime != desk->load_time)
+           {
+              efreet_desktop_free(desk);
+              *changed = 1;
+              desk = efreet_desktop_uncached_new(path);
+              if (desk) INF("  CHANGED");
+              else      INF("  NO UNCACHED");
+           }
+        }
     }
     if (!desk) return 1;
     if (file_id && old_file_ids && !eina_hash_find(old_file_ids->hash, file_id))
index e56d06c..f0c46d4 100644 (file)
@@ -218,7 +218,17 @@ efreet_desktop_empty_new(const char *file)
     if (!desktop) return NULL;
 
     desktop->orig_path = strdup(file);
-    desktop->load_time = ecore_file_mod_time(file);
+    do
+    {
+       struct stat st;
+
+       if (!stat(desktop->orig_path, &st))
+       {
+          time_t modtime = st.st_mtime;
+          if (modtime < st.st_ctime) modtime = st.st_ctime;
+          desktop->load_time = modtime;
+       }
+    } while (0);
 
     desktop->ref = 1;