This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository efm2.

View the commit online.

commit 6fcee398ef502c5a5d1be84b126418cb60246980
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
AuthorDate: Sun Jul 7 10:01:41 2024 +0100

    fill in some oops gaps in meta mv ... now it carries all meta right
    
    woot!
---
 src/backends/default/meta.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-
 src/backends/default/meta.h |  6 +++++-
 src/backends/default/mv.c   |  2 +-
 src/backends/default/open.c | 15 ++++++++++++-
 4 files changed, 71 insertions(+), 4 deletions(-)

diff --git a/src/backends/default/meta.c b/src/backends/default/meta.c
index ad1b553..8fd1e50 100644
--- a/src/backends/default/meta.c
+++ b/src/backends/default/meta.c
@@ -6,6 +6,7 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 #include "eina_list.h"
+#include "eina_types.h"
 #include "sha.h"
 #include "meta.h"
 #include "util.h"
@@ -188,7 +189,8 @@ merge_again:
           if (ini)
             {
               if ((ini->data) && (efreet_ini_section_set(ini, "Efm Meta")))
-                eina_hash_foreach(ini->section, _cb_meta_desktop_x_foreach_merge, mf);
+                eina_hash_foreach(ini->section,
+                                  _cb_meta_desktop_x_foreach_merge, mf);
               efreet_ini_free(ini);
             }
         }
@@ -420,6 +422,54 @@ meta_shutdown(void)
   eina_stringshare_del(_config_dir);
 }
 
+static void
+_meta_file_sync(Meta_File *mf)
+{
+  char *meta_path = _meta_file_get(mf);
+  Efreet_Ini *ini;
+
+  if (!meta_path) return;
+  ini = efreet_ini_new(meta_path);
+  if (ini)
+    {
+      if ((ini->data) && (efreet_ini_section_set(ini, "Efm Meta")))
+        eina_hash_foreach(ini->section, _cb_meta_desktop_x_foreach_merge, mf);
+      efreet_ini_free(ini);
+    }
+  free(meta_path);
+}
+
+static void
+_meta_path_sync(const char *path)
+{
+  Meta_File *mf = _meta_file_find(path);
+  if (!mf) return;
+  _meta_file_sync(mf);
+}
+
+static Eina_Bool
+_cb_meta_sync(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED,
+              void *data, void *fdata EINA_UNUSED)
+{
+  Meta_File *mf = data;
+
+  _meta_file_sync(mf);
+  return EINA_TRUE;
+}
+
+void
+meta_sync(void)
+{
+  _meta_writes_flush();
+  eina_hash_foreach(_meta_hash, _cb_meta_sync, NULL);
+}
+
+void
+meta_path_sync(const char *path)
+{
+  _meta_path_sync(path);
+}
+
 void
 meta_set(const char *path, const char *meta, const char *data)
 { // set meta data key "meta" on ffile "Path", data = "" -> delete meta
diff --git a/src/backends/default/meta.h b/src/backends/default/meta.h
index 8f8a979..ca7566e 100644
--- a/src/backends/default/meta.h
+++ b/src/backends/default/meta.h
@@ -7,8 +7,12 @@ typedef struct _Meta_File Meta_File;
 void meta_init(const char *config_dir);
 void meta_shutdown(void);
 
-void meta_set(const char *path, const char *meta, const char *data);
+void meta_sync(void);
+
+void meta_path_sync(const char *path);
+
 Eina_Stringshare *meta_get(const char *path, const char *meta);
+void              meta_set(const char *path, const char *meta, const char *data);
 
 char     *meta_path_find(const char *path, const char *extn);
 char     *meta_path_user_find(const char *path, const char *extn);
diff --git a/src/backends/default/mv.c b/src/backends/default/mv.c
index d2022a0..56bf28b 100644
--- a/src/backends/default/mv.c
+++ b/src/backends/default/mv.c
@@ -168,7 +168,7 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
     dsttmpdir = strdup(eina_strbuf_string_get(buf));
     eina_strbuf_reset(buf);
     eina_strbuf_append(buf, fs->dst);
-    eina_strbuf_append(buf, "/.efm");
+    eina_strbuf_append(buf, "/.efm/");
     eina_strbuf_append(buf, fname);
     eina_strbuf_append(buf, ".tmp");
     dsttmpfile = strdup(eina_strbuf_string_get(buf));
diff --git a/src/backends/default/open.c b/src/backends/default/open.c
index cc74001..f9a5b44 100644
--- a/src/backends/default/open.c
+++ b/src/backends/default/open.c
@@ -1112,6 +1112,7 @@ _file_add(const char *path)
 
   strbuf = cmd_strbuf_new("file-add");
   cmd_strbuf_append(strbuf, "path", path);
+  meta_path_sync(path);
   if (!_file_add_mod_info(strbuf, path, EINA_FALSE)) eina_strbuf_free(strbuf);
   else cmd_strbuf_print_consume(strbuf);
 }
@@ -1301,6 +1302,7 @@ _op_run(const char *op, Eina_List *files, const char *dst)
     eina_strbuf_append(buf, "\n");
   }
   eina_strbuf_append(buf, "end\n");
+  meta_sync();
   ecore_exe_send(exe, eina_strbuf_string_get(buf), eina_strbuf_length_get(buf));
   eina_strbuf_free(buf);
 }
@@ -1360,6 +1362,12 @@ _handle_drop_paste(const char *over, const char *action, Eina_List *files)
     }
 }
 
+static void
+_meta_update(const char *path)
+{
+  _file_mod(path);
+}
+
 void
 do_handle_cmd(Cmd *c)
 {
@@ -1378,10 +1386,15 @@ do_handle_cmd(Cmd *c)
       // meta-set path=/path/file.txt [xy=10,33] [comment=blah] ...
       KEY_WALK_BEGIN
       {
-        if (!strcmp(key, "path")) path = data;
+        if (!strcmp(key, "path"))
+          {
+            if (path) _meta_update(path);
+            path = data;
+          }
         else meta_set(path, key, data);
       }
       KEY_WALK_END
+      if (path) _meta_update(path);
     }
   else if (!strcmp(c->command, "meta-del"))
     { // delete a meta key

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to