/pidgin/main: 5b8d92fdcaa3: Use glib's Desktop file utilities in...

Jorge Villase?or <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 5b8d92fdcaa38258804ab1843a08b1f18033f4e0
Author:	 Jorge Villase?or <[email protected]>
Date:	 2016-01-19 00:11 -0800
Branch:	 default
URL: https://hg.pidgin.im/pidgin/main/rev/5b8d92fdcaa3

Description:

Use glib's Desktop file utilities instead of our own

Glib have a key-value parser which happens to be really useful to parse
Desktop files. Using this we can remove our own implementation of
this code.

diffstat:

 pidgin/gtkutils.c |  119 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 77 insertions(+), 42 deletions(-)

diffs (159 lines):

diff --git a/pidgin/gtkutils.c b/pidgin/gtkutils.c
--- a/pidgin/gtkutils.c
+++ b/pidgin/gtkutils.c
@@ -33,7 +33,6 @@
 
 #include "conversation.h"
 #include "debug.h"
-#include "desktopitem.h"
 #include "notify.h"
 #include "prefs.h"
 #include "protocol.h"
@@ -1510,50 +1509,90 @@ pidgin_dnd_file_send_image(PurpleAccount
 #ifndef _WIN32
 static void
 pidgin_dnd_file_send_desktop(PurpleAccount *account, const gchar *who,
-		PurpleDesktopItem *item)
+		const gchar *filename)
 {
-	PurpleDesktopItemType dtype;
-	char key[64];
-	const char *itemname = NULL;
-
-	const char * const *langs;
-	langs = g_get_language_names();
-	if (langs[0]) {
-		g_snprintf(key, sizeof(key), "Name[%s]", langs[0]);
-		itemname = purple_desktop_item_get_string(item, key);
+	gchar *name;
+	gchar *type;
+	gchar *url;
+	GKeyFile *desktop_file;
+	PurpleConversation *conv;
+	PidginConversation *gtkconv;
+	GError *error = NULL;
+
+	desktop_file = g_key_file_new();
+
+	if (!g_key_file_load_from_file(desktop_file, filename, G_KEY_FILE_NONE, &error)) {
+		if (error) {
+			purple_debug_warning("D&D", "Failed to load %s: %s\n",
+					filename, error->message);
+			g_error_free(error);
+		}
+		return;
 	}
 
-	if (!itemname)
-		itemname = purple_desktop_item_get_string(item, "Name");
-
-	dtype = purple_desktop_item_get_entry_type(item);
-	switch (dtype) {
-		PurpleConversation *conv;
-		PidginConversation *gtkconv;
-
-		case PURPLE_DESKTOP_ITEM_TYPE_LINK:
-		conv = PURPLE_CONVERSATION(purple_im_conversation_new(account, who));
-		gtkconv =  PIDGIN_CONVERSATION(conv);
-		pidgin_webview_insert_link(PIDGIN_WEBVIEW(gtkconv->entry),
-				purple_desktop_item_get_string(item, "URL"),
-				itemname);
-		break;
-		default:
-		/* I don't know if we really want to do anything here.  Most of
-		 * the desktop item types are crap like "MIME Type" (I have no
-		 * clue how that would be a desktop item) and "Comment"...
-		 * nothing we can really send.  The only logical one is
-		 * "Application," but do we really want to send a binary and
-		 * nothing else? Probably not.  I'll just give an error and
-		 * return. */
-		/* The original patch sent the icon used by the launcher.  That's probably wrong */
+	name = g_key_file_get_string(desktop_file, G_KEY_FILE_DESKTOP_GROUP,
+			G_KEY_FILE_DESKTOP_KEY_NAME, &error);
+	if (error) {
+		purple_debug_warning("D&D", "Failed to read the Name from a desktop file: %s\n",
+				error->message);
+		g_error_free(error);
+
+	}
+
+	type = g_key_file_get_string(desktop_file, G_KEY_FILE_DESKTOP_GROUP,
+			G_KEY_FILE_DESKTOP_KEY_TYPE, &error);
+	if (error) {
+		purple_debug_warning("D&D", "Failed to read the Type from a desktop file: %s\n",
+				error->message);
+		g_error_free(error);
+
+	}
+
+	url = g_key_file_get_string(desktop_file, G_KEY_FILE_DESKTOP_GROUP,
+			G_KEY_FILE_DESKTOP_KEY_URL, &error);
+	if (error) {
+		purple_debug_warning("D&D", "Failed to read the Type from a desktop file: %s\n",
+				error->message);
+		g_error_free(error);
+
+	}
+
+
+	/* If any of this is null, do nothing. */
+	if (!name || !type || url) {
+		g_free(type);
+		g_free(name);
+		g_free(url);
+
+		return;
+	}
+
+	/* I don't know if we really want to do anything here.  Most of
+	 * the desktop item types are crap like "MIME Type" (I have no
+	 * clue how that would be a desktop item) and "Comment"...
+	 * nothing we can really send.  The only logical one is
+	 * "Application," but do we really want to send a binary and
+	 * nothing else? Probably not.  I'll just give an error and
+	 * return. */
+	/* The original patch sent the icon used by the launcher.  That's probably wrong */
+	if (!g_strcmp0(type, "Link")) {
 		purple_notify_error(NULL, NULL, _("Cannot send launcher"),
 				_("You dragged a desktop launcher. Most "
 					"likely you wanted to send the target "
 					"of this launcher instead of this "
 					"launcher itself."), NULL);
-		break;
+
+	} else {
+
+		conv = PURPLE_CONVERSATION(purple_im_conversation_new(account, who));
+		gtkconv =  PIDGIN_CONVERSATION(conv);
+		pidgin_webview_insert_link(PIDGIN_WEBVIEW(gtkconv->entry),
+				url, name);
 	}
+
+	g_free(type);
+	g_free(name);
+	g_free(url);
 }
 #endif /* _WIN32 */
 
@@ -1563,9 +1602,6 @@ pidgin_dnd_file_manage(GtkSelectionData 
 	GdkPixbuf *pb;
 	GList *files = purple_uri_list_extract_filenames((const gchar *) gtk_selection_data_get_data(sd));
 	PurpleConnection *gc = purple_account_get_connection(account);
-#ifndef _WIN32
-	PurpleDesktopItem *item;
-#endif
 	gchar *filename = NULL;
 	gchar *basename = NULL;
 
@@ -1612,9 +1648,8 @@ pidgin_dnd_file_manage(GtkSelectionData 
 
 #ifndef _WIN32
 		/* Are we trying to send a .desktop file? */
-		else if (purple_str_has_suffix(basename, ".desktop") && (item = purple_desktop_item_new_from_file(filename))) {
-			pidgin_dnd_file_send_desktop(account, who, item);
-			purple_desktop_item_unref(item);
+		else if (purple_str_has_suffix(basename, ".desktop")) {
+			pidgin_dnd_file_send_desktop(account, who, filename);
 
 			continue;
 		}

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.