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.