diff src/prpl.c @ 2191:657dbe515608

[gaim-migrate @ 2201] genericize buddy icon stuff committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 29 Aug 2001 23:41:43 +0000
parents dca8e00d7de0
children 5014b802eb41
line wrap: on
line diff
--- a/src/prpl.c	Wed Aug 29 23:38:38 2001 +0000
+++ b/src/prpl.c	Wed Aug 29 23:41:43 2001 +0000
@@ -549,3 +549,81 @@
 	} else if (gc->email_win)
 		gtk_widget_destroy(gc->email_win);
 }
+
+struct icon_data {
+	struct gaim_connection *gc;
+	char *who;
+	void *data;
+	int len;
+};
+
+static GList *icons = NULL;
+
+static gint find_icon_data(gconstpointer a, gconstpointer b)
+{
+	const struct icon_data *x = a;
+	const struct icon_data *y = b;
+
+	return ((x->gc != y->gc) || g_strcasecmp(x->who, y->who));
+}
+
+void set_icon_data(struct gaim_connection *gc, char *who, void *data, int len)
+{
+	struct icon_data tmp = { gc, who, NULL, 0 };
+	GList *l = g_list_find_custom(icons, &tmp, find_icon_data);
+	struct icon_data *id = l ? l->data : NULL;
+
+	if (id) {
+		g_free(id->data);
+		if (!data) {
+			icons = g_list_remove(icons, id);
+			g_free(id->who);
+			g_free(id);
+			return;
+		}
+	} else if (data) {
+		id = g_new0(struct icon_data, 1);
+		icons = g_list_append(icons, id);
+		id->gc = gc;
+		id->who = g_strdup(who);
+	} else {
+		return;
+	}
+
+	id->data = g_memdup(data, len);
+	id->len = len;
+
+	got_new_icon(gc, who);
+}
+
+void remove_icon_data(struct gaim_connection *gc)
+{
+	GList *list = icons;
+	struct icon_data *id;
+
+	while (list) {
+		id = list->data;
+		if (id->gc == gc) {
+			g_free(id->data);
+			g_free(id->who);
+			list = icons = g_list_remove(icons, id);
+			g_free(id);
+		} else
+			list = list->next;
+	}
+}
+
+void *get_icon_data(struct gaim_connection *gc, char *who, int *len)
+{
+	struct icon_data tmp = { gc, who, NULL, 0 };
+	GList *l = g_list_find_custom(icons, &tmp, find_icon_data);
+	struct icon_data *id = l ? l->data : NULL;
+
+	if (id) {
+		*len = id->len;
+		return id->data;
+	}
+
+	*len = 0;
+	return NULL;
+}