/soc/2015/igor.gajowiak/chatlog: 4f8245b0afb9: Fixed protocol na...

Igor Gajowiak igor.gajowiak at gmail.com
Sat Aug 15 09:45:52 EDT 2015


Changeset: 4f8245b0afb96e50ac7352f18df5e5574ee5df17
Author:	 Igor Gajowiak <igor.gajowiak at gmail.com>
Date:	 2015-08-15 15:45 +0200
Branch:	 default
URL: https://hg.pidgin.im/soc/2015/igor.gajowiak/chatlog/rev/4f8245b0afb9

Description:

Fixed protocol name normalization in the legacy log.

diffstat:

 libpurple/plugins/log/legacylog.c |  39 ++++++++++++++++++++++++++++++---------
 1 files changed, 30 insertions(+), 9 deletions(-)

diffs (80 lines):

diff --git a/libpurple/plugins/log/legacylog.c b/libpurple/plugins/log/legacylog.c
--- a/libpurple/plugins/log/legacylog.c
+++ b/libpurple/plugins/log/legacylog.c
@@ -42,6 +42,8 @@ static GRegex *date_regex = NULL;
 static GRegex *time_regex = NULL;
 static GRegex *contact_regex = NULL;
 
+static GHashTable *protocol_icon_to_id_hash = NULL;
+
 typedef enum
 {
 	DIR_DEPTH_PROTOCOL    = 1,
@@ -293,18 +295,12 @@ uninit_iter(Iter *iter)
 		uninit_iter_at_depth(iter, i);
 }
 
-/*
- * TODO: check all protocols
- */
 static const gchar *
 normalize_protocol_name(const gchar *protocol)
 {
-	if (strcmp(protocol, "jabber") == 0)
-		return "prpl-jabber";
-	else if (strcmp(protocol, "gadu-gadu") == 0)
-		return "prpl-gg";
-	else
-		return protocol;
+	gpointer protocol_id = g_hash_table_lookup(
+		protocol_icon_to_id_hash, protocol);
+	return protocol_id ? (const gchar *) protocol_id : "";
 }
 
 static gboolean
@@ -672,6 +668,27 @@ plugin_query(GError **error)
 	);
 }
 
+static GHashTable *
+init_protocol_icon_to_id_hash()
+{
+	GHashTable *res = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
+		g_free);
+
+	GList *protocols = purple_protocols_get_all();
+
+	for (GList *it = protocols; it != NULL; it = it->next) {
+		PurpleProtocol *protocol = PURPLE_PROTOCOL(it->data);
+
+		g_hash_table_insert(res,
+			g_strdup(purple_protocol_class_list_icon(protocol, NULL, NULL)),
+			g_strdup(purple_protocol_get_id(protocol)));
+	}
+
+	g_list_free(protocols);
+
+	return res;
+}
+
 static gboolean
 plugin_load(PurplePlugin *plugin, GError **error)
 {
@@ -697,6 +714,8 @@ plugin_load(PurplePlugin *plugin, GError
 	contact_regex = g_regex_new("^(.*)\\.chat$", 0, 0, NULL);
 	g_assert(contact_regex);
 
+	protocol_icon_to_id_hash = init_protocol_icon_to_id_hash();
+
 	return TRUE;
 }
 
@@ -712,6 +731,8 @@ plugin_unload(PurplePlugin *plugin, GErr
 	g_object_unref(legacylog_instance);
 	legacylog_instance = NULL;
 
+	g_hash_table_destroy(protocol_icon_to_id_hash);
+
 	return TRUE;
 }
 



More information about the Commits mailing list