diff src/ui_bookmark.c @ 902:c414002a1f27

Move history_list_*() functions to separate files: history_list.c and history_list.h.
author zas_
date Sun, 20 Jul 2008 14:56:32 +0000
parents 518c05cf63ba
children 1698baa37871
line wrap: on
line diff
--- a/src/ui_bookmark.c	Sun Jul 20 14:52:00 2008 +0000
+++ b/src/ui_bookmark.c	Sun Jul 20 14:56:32 2008 +0000
@@ -24,7 +24,9 @@
 #include <gdk/gdkkeysyms.h> /* for key values */
 
 #include "main.h"
+
 #include "filedata.h"
+#include "history_list.h"
 
 #include "secure_save.h"
 #include "ui_bookmark.h"
@@ -35,339 +37,6 @@
 #include "ui_tabcomp.h"
 
 
-/*
- *-----------------------------------------------------------------------------
- * history lists
- *-----------------------------------------------------------------------------
- */
-
-#define HISTORY_DEFAULT_KEY_COUNT 16
-
-
-typedef struct _HistoryData HistoryData;
-struct _HistoryData
-{
-	gchar *key;
-	GList *list;
-};
-
-static GList *history_list = NULL;
-
-
-static gchar *quoted_from_text(const gchar *text)
-{
-	const gchar *ptr;
-	gint c = 0;
-	gint l = strlen(text);
-
-	if (l == 0) return NULL;
-
-	while (c < l && text[c] !='"') c++;
-	if (text[c] == '"')
-		{
-		gint e;
-		c++;
-		ptr = text + c;
-		e = c;
-		while (e < l && text[e] !='"') e++;
-		if (text[e] == '"')
-			{
-			if (e - c > 0)
-				{
-				return g_strndup(ptr, e - c);
-				}
-			}
-		}
-	return NULL;
-}
-
-gint history_list_load(const gchar *path)
-{
-	FILE *f;
-	gchar *key = NULL;
-	gchar s_buf[1024];
-	gchar *pathl;
-
-	pathl = path_from_utf8(path);
-	f = fopen(pathl, "r");
-	g_free(pathl);
-	if (!f) return FALSE;
-
-	/* first line must start with History comment */
-	if (!fgets(s_buf, sizeof(s_buf), f) ||
-	    strncmp(s_buf, "#History", 8) != 0)
-		{
-		fclose(f);
-		return FALSE;
-		}
-
-	while (fgets(s_buf, sizeof(s_buf), f))
-		{
-		if (s_buf[0]=='#') continue;
-		if (s_buf[0]=='[')
-			{
-			gint c;
-			gchar *ptr;
-
-			ptr = s_buf + 1;
-			c = 0;
-			while (ptr[c] != ']' && ptr[c] != '\n' && ptr[c] != '\0') c++;
-
-			g_free(key);
-			key = g_strndup(ptr, c);
-			}
-		else
-			{
-			gchar *value;
-
-			value = quoted_from_text(s_buf);
-			if (value && key)
-				{
-				history_list_add_to_key(key, value, 0);
-				}
-			g_free(value);
-			}
-		}
-
-	fclose(f);
-
-	g_free(key);
-
-	return TRUE;
-}
-
-gint history_list_save(const gchar *path)
-{
-	SecureSaveInfo *ssi;
-	GList *list;
-	gchar *pathl;
-
-	pathl = path_from_utf8(path);
-	ssi = secure_open(pathl);
-	g_free(pathl);
-	if (!ssi)
-		{
-		log_printf(_("Unable to write history lists to: %s\n"), path);
-		return FALSE;
-		}
-
-	secure_fprintf(ssi, "#History lists\n\n");
-
-	list = g_list_last(history_list);
-	while (list && secsave_errno == SS_ERR_NONE)
-		{
-		HistoryData *hd;
-		GList *work;
-
-		hd = list->data;
-		list = list->prev;
-
-		secure_fprintf(ssi, "[%s]\n", hd->key);
-
-		/* save them inverted (oldest to newest)
-		 * so that when reading they are added correctly
-		 */
-		work = g_list_last(hd->list);
-		while (work && secsave_errno == SS_ERR_NONE)
-			{
-			secure_fprintf(ssi, "\"%s\"\n", (gchar *)work->data);
-			work = work->prev;
-			}
-		secure_fputc(ssi, '\n');
-		}
-
-	secure_fprintf(ssi, "#end\n");
-
-	return (secure_close(ssi) == 0);
-}
-
-static void history_list_free(HistoryData *hd)
-{
-	GList *work;
-
-	if (!hd) return;
-
-	work = hd->list;
-	while (work)
-		{
-		g_free(work->data);
-		work = work->next;
-		}
-
-	g_free(hd->key);
-	g_free(hd);
-}
-
-static HistoryData *history_list_find_by_key(const gchar* key)
-{
-	GList *work = history_list;
-
-	if (!key) return NULL;
-
-	while (work)
-		{
-		HistoryData *hd = work->data;
-		if (strcmp(hd->key, key) == 0) return hd;
-		work = work->next;
-		}
-	return NULL;
-}
-
-const gchar *history_list_find_last_path_by_key(const gchar* key)
-{
-	HistoryData *hd;
-
-	hd = history_list_find_by_key(key);
-	if (!hd || !hd->list) return NULL;
-
-	return hd->list->data;
-}
-
-void history_list_free_key(const gchar *key)
-{
-	HistoryData *hd;
-	hd = history_list_find_by_key(key);
-	if (!hd) return;
-
-	history_list = g_list_remove(history_list, hd);
-	history_list_free(hd);
-}
-
-void history_list_add_to_key(const gchar *key, const gchar *path, gint max)
-{
-	HistoryData *hd;
-	GList *work;
-
-	if (!key || !path) return;
-
-	hd = history_list_find_by_key(key);
-	if (!hd)
-		{
-		hd = g_new(HistoryData, 1);
-		hd->key = g_strdup(key);
-		hd->list = NULL;
-		history_list = g_list_prepend(history_list, hd);
-		}
-
-	/* if already in the list, simply move it to the top */
-	work = hd->list;
-	while (work)
-		{
-		gchar *buf = work->data;
-
-		if (strcmp(buf, path) == 0)
-			{
-			/* if not first, move it */
-			if (work != hd->list)
-				{
-				hd->list = g_list_remove(hd->list, buf);
-				hd->list = g_list_prepend(hd->list, buf);
-				}
-			return;
-			}
-		work = work->next;
-		}
-
-	hd->list = g_list_prepend(hd->list, g_strdup(path));
-
-	if (max == -1) max = HISTORY_DEFAULT_KEY_COUNT;
-	if (max > 0)
-		{
-		gint len = 0;
-		GList *work = hd->list;
-		GList *last = NULL;
-
-		while (work)
-			{
-			len++;
-			last = work;
-			work = work->next;
-			}
-
-		work = last;
-		while (work && len > max)
-			{
-			GList *node = work;
-			work = work->prev;
-
-			g_free(node->data);
-			hd->list = g_list_delete_link(hd->list, node);
-			len--;
-			}
-		}
-}
-
-void history_list_item_change(const gchar *key, const gchar *oldpath, const gchar *newpath)
-{
-	HistoryData *hd;
-	GList *work;
-
-	if (!oldpath) return;
-	hd = history_list_find_by_key(key);
-	if (!hd) return;
-
-	work = hd->list;
-	while (work)
-		{
-		gchar *buf = work->data;
-		if (strcmp(buf, oldpath) == 0)
-			{
-			if (newpath)
-				{
-				work->data = g_strdup(newpath);
-				}
-			else
-				{
-				hd->list = g_list_remove(hd->list, buf);
-				}
-			g_free(buf);
-			return;
-			}
-		work = work->next;
-		}
-}
-
-void history_list_item_move(const gchar *key, const gchar *path, gint direction)
-{
-	HistoryData *hd;
-	GList *work;
-	gint p = 0;
-
-	if (!path) return;
-	hd = history_list_find_by_key(key);
-	if (!hd) return;
-
-	work = hd->list;
-	while (work)
-		{
-		gchar *buf = work->data;
-		if (strcmp(buf, path) == 0)
-			{
-			p += direction;
-			if (p < 0) return;
-			hd->list = g_list_remove(hd->list, buf);
-			hd->list = g_list_insert(hd->list, buf, p);
-			return;
-			}
-		work = work->next;
-		p++;
-		}
-}
-
-void history_list_item_remove(const gchar *key, const gchar *path)
-{
-	history_list_item_change(key, path, NULL);
-}
-
-GList *history_list_get_by_key(const gchar *key)
-{
-	HistoryData *hd;
-
-	hd = history_list_find_by_key(key);
-	if (!hd) return NULL;
-
-	return hd->list;
-}
 
 /*
  *-----------------------------------------------------------------------------