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: */