libpurple/log.c

branch
release-2.x.y
changeset 43263
b9cf92c8b16b
parent 40925
a4a68d315090
--- a/libpurple/log.c	Wed Jun 04 23:03:56 2025 -0500
+++ b/libpurple/log.c	Wed Jun 04 23:12:27 2025 -0500
@@ -336,18 +336,63 @@
 char *
 purple_log_get_log_dir(PurpleLogType type, const char *name, PurpleAccount *account)
 {
-	PurplePlugin *prpl;
-	PurplePluginProtocolInfo *prpl_info;
-	const char *prpl_name;
-	char *acct_name;
-	const char *target;
-	char *dir;
+	PurplePlugin *prpl = NULL;
+	char *acct_name = NULL;
+	char *dir = NULL;
+	const char *prpl_id = NULL;
+	const char *prpl_name = NULL;
+	const char *target = NULL;
+
+	prpl_id = purple_account_get_protocol_id(account);
+	prpl = purple_find_prpl(prpl_id);
+	if(prpl != NULL) {
+		PurplePluginProtocolInfo *prpl_info = NULL;
 
-	prpl = purple_find_prpl(purple_account_get_protocol_id(account));
-	if (!prpl)
-		return NULL;
-	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
-	prpl_name = prpl_info->list_icon(account, NULL);
+		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
+		prpl_name = prpl_info->list_icon(account, NULL);
+	} else {
+		/* If the protocol doesn't exist anymore, use the protocol id, which is
+		 * the id of the protocol plugin, to map it to the list icon (which is
+		 * what we used for the log directory for some reason) that the
+		 * protocol was known to have.
+		 */
+		if(purple_strequal(prpl_id, "prpl-aim")) {
+			prpl_name = "aim";
+		} else if(purple_strequal(prpl_id, "prpl-gg")) {
+			prpl_name = "gadu-gadu";
+		} else if(purple_strequal(prpl_id, "prpl-icq")) {
+			prpl_name = "icq";
+		} else if(purple_strequal(prpl_id, "prpl-msn")) {
+			prpl_name = "msn";
+		} else if(purple_strequal(prpl_id, "prpl-loubserp-mxit")) {
+			prpl_name = "mxit";
+		} else if(purple_strequal(prpl_id, "prpl-myspace")) {
+			prpl_name = "myspace";
+		} else if(purple_strequal(prpl_id, "prpl-napster")) {
+			prpl_name = "napster";
+		} else if(purple_strequal(prpl_id, "prpl-novell")) {
+			prpl_name = "novell";
+		} else if(purple_strequal(prpl_id, "prpl-qq")) {
+			prpl_name = "qq";
+		} else if(purple_strequal(prpl_id, "prpl-meanwhile")) {
+			prpl_name = "meanwhile";
+		} else if(purple_strequal(prpl_id, "prpl-silc")) {
+			/* silc and silc10 have the same id's and list_icon values. */
+			prpl_name = "silc";
+		} else if(purple_strequal(prpl_id, "prpl-toc")) {
+			prpl_name = "toc-aim";
+		} else if(purple_strequal(prpl_id, "prpl-trepia")) {
+			prpl_name = "trepia";
+		} else if(purple_strequal(prpl_id, "prpl-yahoo")) {
+			prpl_name = "yahoo";
+		} else if(purple_strequal(prpl_id, "prpl-yahoojp")) {
+			prpl_name = "yahoo";
+		} else if(purple_strequal(prpl_id, "prpl-zephyr")) {
+			prpl_name = "zephyr";
+		} else {
+			return NULL;
+		}
+	}
 
 	acct_name = g_strdup(purple_escape_filename(purple_normalize(account,
 				purple_account_get_username(account))));

mercurial