Mercurial > geeqie
diff src/metadata.c @ 1222:31dc2f240afb
low-level keyword-to-mark functionality
author | nadvornik |
---|---|
date | Thu, 25 Dec 2008 12:28:04 +0000 |
parents | a0c249bcc4ff |
children | ebfd305d902e |
line wrap: on
line diff
--- a/src/metadata.c Thu Dec 25 12:19:37 2008 +0000 +++ b/src/metadata.c Thu Dec 25 12:28:04 2008 +0000 @@ -789,4 +789,73 @@ return list; } +/* + * keywords to marks + */ + + +gboolean meta_data_get_keyword_mark(FileData *fd, gint n, gpointer data) +{ + GList *keywords; + gboolean found = FALSE; + if (metadata_read(fd, &keywords, NULL)) + { + GList *work = keywords; + + while (work) + { + gchar *kw = work->data; + work = work->next; + + if (strcmp(kw, data) == 0) + { + found = TRUE; + break; + } + } + string_list_free(keywords); + } + return found; +} + +gboolean meta_data_set_keyword_mark(FileData *fd, gint n, gboolean value, gpointer data) +{ + GList *keywords = NULL; + gboolean found = FALSE; + gboolean changed = FALSE; + GList *work; + metadata_read(fd, &keywords, NULL); + + work = keywords; + + while (work) + { + gchar *kw = work->data; + + if (strcmp(kw, data) == 0) + { + found = TRUE; + if (!value) + { + changed = TRUE; + keywords = g_list_delete_link(keywords, work); + g_free(kw); + } + break; + } + work = work->next; + } + if (value && !found) + { + changed = TRUE; + keywords = g_list_append(keywords, g_strdup(data)); + } + + if (changed) metadata_write(fd, &keywords, NULL); + + string_list_free(keywords); + return TRUE; +} + + /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */