changeset 30752:00851eae12c7

merge of 'a7d49884941697519567616ac54f4c2884df05e2' and 'e15c002b6cf19a3cf1843b35457ff8b1efa78a5a'
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 31 Jul 2010 23:43:39 +0000
parents 66c175a474a6 (current diff) e9fbbfe1ab70 (diff)
children 2244a84407a4
files
diffstat 8 files changed, 195 insertions(+), 257 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Jul 31 20:58:10 2010 +0000
+++ b/ChangeLog	Sat Jul 31 23:43:39 2010 +0000
@@ -22,6 +22,10 @@
 	IRC:
 	* Fix non-ASCII arguments to /mode et al.  (thanks to Max Ulidtko)
 
+	MSN:
+	* Support for web-based buddy icons, used when a buddy logs in to the
+	  messenger on the Live website.
+
 	MXit:
 	* Fix filename for the Shocked emoticon. (#12364)
 	* Implement the new naming conventions where possible. (MXitId, etc)
--- a/libpurple/protocols/msn/msn.c	Sat Jul 31 20:58:10 2010 +0000
+++ b/libpurple/protocols/msn/msn.c	Sat Jul 31 23:43:39 2010 +0000
@@ -2204,6 +2204,7 @@
 		const gchar *url_text, size_t len, const gchar *error_message)
 {
 	MsnGetInfoData *info_data = (MsnGetInfoData *)data;
+	MsnSession *session;
 	PurpleNotifyUserInfo *user_info;
 	char *stripped, *p, *q, *tmp;
 	char *user_url = NULL;
@@ -2221,15 +2222,8 @@
 
 	purple_debug_info("msn", "In msn_got_info,url_text:{%s}\n",url_text);
 
-	/* Make sure the connection is still valid */
-	/* TODO: Instead of this, we should be canceling this when we disconnect */
-	if (g_list_find(purple_connections_get_all(), info_data->gc) == NULL)
-	{
-		purple_debug_warning("msn", "invalid connection. ignoring buddy info.\n");
-		g_free(info_data->name);
-		g_free(info_data);
-		return;
-	}
+	session = purple_connection_get_protocol_data(info_data->gc);
+	session->url_datas = g_slist_remove(session->url_datas, url_data);
 
 	user_info = purple_notify_user_info_new();
 	has_tooltip_text = msn_tooltip_extract_info_text(user_info, info_data);
@@ -2614,13 +2608,14 @@
 	/* Try to put the photo in there too, if there's one */
 	if (photo_url_text)
 	{
-		purple_util_fetch_url_len(photo_url_text, FALSE, NULL, FALSE, MAX_HTTP_BUDDYICON_BYTES, msn_got_photo,
-					   info2_data);
+		url_data = purple_util_fetch_url_len(photo_url_text, FALSE, NULL, FALSE,
+		                                     MAX_HTTP_BUDDYICON_BYTES,
+		                                     msn_got_photo, info2_data);
+		session->url_datas = g_slist_prepend(session->url_datas, url_data);
 	}
 	else
 	{
-		/* Emulate a callback */
-		/* TODO: Huh? */
+		/* Finish the Get Info and show the user something */
 		msn_got_photo(NULL, info2_data, NULL, 0, NULL);
 	}
 }
@@ -2639,10 +2634,12 @@
 	PurpleNotifyUserInfo *user_info = info2_data->user_info;
 	char *photo_url_text = info2_data->photo_url_text;
 
-	/* Make sure the connection is still valid if we got here by fetching a photo url */
-	/* TODO: Instead of this, we should be canceling this when we disconnect */
-	if (url_text && (error_message != NULL ||
-					 g_list_find(purple_connections_get_all(), info_data->gc) == NULL))
+	if (url_data) {
+		MsnSession *session = purple_connection_get_protocol_data(info_data->gc);
+		session->url_datas = g_slist_remove(session->url_datas, url_data);
+	}
+
+	if (url_text && error_message)
 	{
 		purple_debug_warning("msn", "invalid connection. ignoring buddy photo info.\n");
 		g_free(stripped);
@@ -2697,8 +2694,10 @@
 static void
 msn_get_info(PurpleConnection *gc, const char *name)
 {
+	MsnSession *session = purple_connection_get_protocol_data(gc);
 	MsnGetInfoData *data;
 	char *url;
+	PurpleUtilFetchUrlData *url_data;
 
 	data       = g_new0(MsnGetInfoData, 1);
 	data->gc   = gc;
@@ -2706,9 +2705,10 @@
 
 	url = g_strdup_printf("%s%s", PROFILE_URL, name);
 
-	purple_util_fetch_url(url, FALSE,
-				   "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
-				   TRUE, msn_got_info, data);
+	url_data = purple_util_fetch_url(url, FALSE,
+	                                 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
+	                                 TRUE, msn_got_info, data);
+	session->url_datas = g_slist_prepend(session->url_datas, url_data);
 
 	g_free(url);
 }
--- a/libpurple/protocols/msn/object.c	Sat Jul 31 20:58:10 2010 +0000
+++ b/libpurple/protocols/msn/object.c	Sat Jul 31 23:43:39 2010 +0000
@@ -96,15 +96,29 @@
 	GET_STRING_TAG(friendly, "Friendly");
 	GET_STRING_TAG(sha1d,    "SHA1D");
 	GET_STRING_TAG(sha1c,    "SHA1C");
+	GET_STRING_TAG(url,      "Url");
+	GET_STRING_TAG(url1,     "Url1");
 
 	/* If we are missing any of the required elements then discard the object */
-	/* SHA1C is not always sent anymore */
 	if (obj->creator == NULL || obj->size == 0 || obj->type == 0
-			|| obj->location == NULL || obj->friendly == NULL
-			|| obj->sha1d == NULL /*|| obj->sha1c == NULL*/) {
+	 || obj->sha1d == NULL) {
 		purple_debug_error("msn", "Discarding invalid msnobj: '%s'\n", str);
 		msn_object_destroy(obj);
-		obj = NULL;
+		return NULL;
+	}
+
+	if (obj->location == NULL || obj->friendly == NULL) {
+		/* Location/friendly are required for non-buddyicon objects */
+		if (obj->type != MSN_OBJECT_USERTILE) {
+			purple_debug_error("msn", "Discarding invalid msnobj: '%s'\n", str);
+			msn_object_destroy(obj);
+			return NULL;
+		/* Buddy icon object can contain Url/Url1 instead */
+		} else if (obj->url == NULL || obj->url1 == NULL) {
+			purple_debug_error("msn", "Discarding invalid msnobj: '%s'\n", str);
+			msn_object_destroy(obj);
+			return NULL;
+		}
 	}
 
 	return obj;
@@ -284,6 +298,24 @@
 	obj->sha1c = g_strdup(sha1c);
 }
 
+void
+msn_object_set_url(MsnObject *obj, const char *url)
+{
+	g_return_if_fail(obj != NULL);
+
+	g_free(obj->url);
+	obj->url = g_strdup(url);
+}
+
+void
+msn_object_set_url1(MsnObject *obj, const char *url)
+{
+	g_return_if_fail(obj != NULL);
+
+	g_free(obj->url1);
+	obj->url1 = g_strdup(url);
+}
+
 const char *
 msn_object_get_creator(const MsnObject *obj)
 {
@@ -352,6 +384,22 @@
 	}
 }
 
+const char *
+msn_object_get_url(const MsnObject *obj)
+{
+	g_return_val_if_fail(obj != NULL, NULL);
+
+	return obj->url;
+}
+
+const char *
+msn_object_get_url1(const MsnObject *obj)
+{
+	g_return_val_if_fail(obj != NULL, NULL);
+
+	return obj->url1;
+}
+
 static MsnObject *
 msn_object_find_local(const char *sha1)
 {
--- a/libpurple/protocols/msn/object.h	Sat Jul 31 20:58:10 2010 +0000
+++ b/libpurple/protocols/msn/object.h	Sat Jul 31 23:43:39 2010 +0000
@@ -50,6 +50,8 @@
 	char *friendly;
 	char *sha1d;
 	char *sha1c;
+	char *url;
+	char *url1;
 } MsnObject;
 
 /**
@@ -155,6 +157,20 @@
 void msn_object_set_image(MsnObject *obj, PurpleStoredImage *img);
 
 /**
+ * Sets the url field in a MsnObject.
+ *
+ * @param url The url value.
+ */
+void msn_object_set_url(MsnObject *obj, const char *url);
+
+/**
+ * Sets the url1 field in a MsnObject.
+ *
+ * @param url1 The url1 value.
+ */
+void msn_object_set_url1(MsnObject *obj, const char *url);
+
+/**
  * Returns a MsnObject's creator value.
  *
  * @param obj The object.
@@ -235,6 +251,24 @@
  */
 PurpleStoredImage *msn_object_get_image(const MsnObject *obj);
 
+/**
+ * Returns a MsnObject's url value.
+ *
+ * @param obj The object.
+ *
+ * @return The url value.
+ */
+const char *msn_object_get_url(const MsnObject *obj);
+
+/**
+ * Returns a MsnObject's url1 value.
+ *
+ * @param obj The object.
+ *
+ * @return The url1 value.
+ */
+const char *msn_object_get_url1(const MsnObject *obj);
+
 void msn_object_set_local(MsnObject *obj);
 
 #endif /* MSN_OBJECT_H */
--- a/libpurple/protocols/msn/session.c	Sat Jul 31 20:58:10 2010 +0000
+++ b/libpurple/protocols/msn/session.c	Sat Jul 31 23:43:39 2010 +0000
@@ -57,6 +57,11 @@
 
 	session->destroying = TRUE;
 
+	while (session->url_datas) {
+		purple_util_fetch_url_cancel(session->url_datas->data);
+		session->url_datas = g_slist_delete_link(session->url_datas, session->url_datas);
+	}
+
 	if (session->connected)
 		msn_session_disconnect(session);
 
--- a/libpurple/protocols/msn/session.h	Sat Jul 31 20:58:10 2010 +0000
+++ b/libpurple/protocols/msn/session.h	Sat Jul 31 23:43:39 2010 +0000
@@ -122,6 +122,8 @@
 
 	GHashTable *soap_table;
 	guint soap_cleanup_handle;
+
+	GSList *url_datas; /**< PurpleUtilFetchUrlData to be cancelled on exit */
 };
 
 /**
--- a/libpurple/protocols/msn/slp.c	Sat Jul 31 20:58:10 2010 +0000
+++ b/libpurple/protocols/msn/slp.c	Sat Jul 31 23:43:39 2010 +0000
@@ -39,6 +39,11 @@
 
 static void request_user_display(MsnUser *user);
 
+typedef struct {
+	MsnSession *session;
+	const char *remote_user;
+	const char *sha1;
+} MsnFetchUserDisplayData;
 
 /**************************************************************************
  * Util
@@ -1405,6 +1410,26 @@
 }
 
 static void
+fetched_user_display(PurpleUtilFetchUrlData *url_data, gpointer user_data,
+	const gchar *url_text, gsize len, const gchar *error_message)
+{
+	MsnFetchUserDisplayData *data = user_data;
+	MsnSession *session = data->session;
+
+	session->url_datas = g_slist_remove(session->url_datas, url_data);
+
+	if (url_text) {
+		purple_buddy_icons_set_for_user(session->account, data->remote_user,
+		                                g_memdup(url_text, len), len,
+		                                data->sha1);
+	}
+
+	end_user_display(NULL, session);
+
+	g_free(user_data);
+}
+
+static void
 request_user_display(MsnUser *user)
 {
 	PurpleAccount *account;
@@ -1425,8 +1450,20 @@
 	if (g_ascii_strcasecmp(user->passport,
 						   purple_account_get_username(account)))
 	{
-		msn_slplink_request_object(slplink, info, got_user_display,
-								   end_user_display, obj);
+		const char *url = msn_object_get_url1(obj);
+		if (url) {
+			MsnFetchUserDisplayData *data = g_new0(MsnFetchUserDisplayData, 1);
+			PurpleUtilFetchUrlData *url_data;
+			data->session = session;
+			data->remote_user = user->passport;
+			data->sha1 = info;
+			url_data = purple_util_fetch_url_len(url, TRUE, NULL, TRUE, 200*1024,
+			                                     fetched_user_display, data);
+			session->url_datas = g_slist_prepend(session->url_datas, url_data);
+		} else {
+			msn_slplink_request_object(slplink, info, got_user_display,
+			                           end_user_display, obj);
+		}
 	}
 	else
 	{
--- a/po/de.po	Sat Jul 31 20:58:10 2010 +0000
+++ b/po/de.po	Sat Jul 31 23:43:39 2010 +0000
@@ -11,14 +11,14 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-07-27 01:17-0400\n"
-"PO-Revision-Date: 2010-07-20 18:52+0200\n"
-"Last-Translator: Björn Voigt <bjoern@cs.tu-berlin.de>\n"
+"POT-Creation-Date: 2010-08-01 00:18+0200\n"
+"PO-Revision-Date: 2010-08-01 00:16+0200\n"
+"Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n"
 "Language-Team: Deutsch <de@li.org>\n"
-"Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #. Translators may want to transliterate the name.
@@ -6002,8 +6002,8 @@
 msgid "The two PINs you entered do not match."
 msgstr "Die beiden PINs, die Sie eingegeben haben, stimmen nicht überein."
 
-msgid "The name you entered is invalid."
-msgstr "Der eingegebene Name ist ungültig."
+msgid "The Display Name you entered is invalid."
+msgstr "Der eingegebene Anzeigename ist ungültig."
 
 msgid ""
 "The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
@@ -6025,9 +6025,8 @@
 "Ihre Profil-Informationen wurden noch nicht abgerufen. Bitte versuchen Sie "
 "es später noch einmal."
 
-#, fuzzy
 msgid "Your UID"
-msgstr "Ihre MXit-ID"
+msgstr "Ihre UID"
 
 #. pin
 #. pin (required)
@@ -6099,16 +6098,12 @@
 msgid "Connecting..."
 msgstr "Verbinde..."
 
-#, fuzzy
-msgid "The Display Name you entered is invalid."
-msgstr "Der eingegebene Name ist ungültig."
-
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "Die eingegebene PIN hat eine ungültige Länge [7-10]."
 
 #. mxit login name
 msgid "MXit ID"
-msgstr ""
+msgstr "MXit-ID"
 
 #. show the form to the user to complete
 msgid "Register New MXit Account"
@@ -6143,16 +6138,15 @@
 msgid "Invalid country selected. Please try again."
 msgstr "Ungültiges Land gewählt. Bitte versuchen Sie es noch einmal."
 
-#, fuzzy
 msgid "The MXit ID you entered is not registered. Please register first."
 msgstr ""
-"Benutzername ist nicht registriert. Bitte registrieren Sie Sich zuerst."
-
-#, fuzzy
+"Die von Ihnen eingegebene MXit-ID ist nicht registriert. Bitte registrieren "
+"Sie Sich zuerst."
+
 msgid "The MXit ID you entered is already registered. Please choose another."
 msgstr ""
-"Der Benutzername ist bereits registriert. Bitte wählen Sie einen anderen "
-"Benutzernamen."
+"Die von Ihnen eingegebene MXit-ID ist bereits registriert. Bitte wählen Sie "
+"eine andere."
 
 msgid "Internal error. Please try again later."
 msgstr "Internet Fehler. Versuchen Sie es später noch einmal."
@@ -6196,9 +6190,8 @@
 msgid "Hidden Number"
 msgstr "Versteckte Nummer"
 
-#, fuzzy
 msgid "Your MXit ID..."
-msgstr "Ihre MXit-ID"
+msgstr "Ihre MXit-ID..."
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
@@ -6222,13 +6215,11 @@
 msgstr "_Raumname:"
 
 #. Display system message in chat window
-#, fuzzy
 msgid "You have invited"
-msgstr "Sie haben Post!"
-
-#, fuzzy
+msgstr "Sie haben eingeladen"
+
 msgid "Last Online"
-msgstr "Online"
+msgstr "Zuletzt online"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
@@ -6810,8 +6801,8 @@
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
 msgstr ""
-"Kann die Nachricht nicht senden. Kann die Details vom Benutzer nicht holen "
-"(%s)."
+"Kann die Nachricht nicht senden. Kann die Details vom Benutzer nicht holen (%"
+"s)."
 
 #, c-format
 msgid "Unable to add %s to your buddy list (%s)."
@@ -6829,8 +6820,8 @@
 #, c-format
 msgid "Unable to send message to %s. Could not create the conference (%s)."
 msgstr ""
-"Kann die Nachricht nicht an %s senden. Kann die Konferenz nicht erstellen "
-"(%s)."
+"Kann die Nachricht nicht an %s senden. Kann die Konferenz nicht erstellen (%"
+"s)."
 
 #, c-format
 msgid "Unable to send message. Could not create the conference (%s)."
@@ -7243,8 +7234,8 @@
 "(There was an error receiving this message.  Either you and %s have "
 "different encodings selected, or %s has a buggy client.)"
 msgstr ""
-"(Es gab einen Fehler beim Empfang dieser Nachricht.  Entweder haben Sie und "
-"%s unterschiedliche Kodierungen gesetzt oder %s hat einen fehlerhaften "
+"(Es gab einen Fehler beim Empfang dieser Nachricht.  Entweder haben Sie und %"
+"s unterschiedliche Kodierungen gesetzt oder %s hat einen fehlerhaften "
 "Client.)"
 
 #. Label
@@ -8471,8 +8462,8 @@
 #, c-format
 msgid "<b>Joining Qun %u is approved by admin %u for %s</b>"
 msgstr ""
-"<b>Das Betreten des Qun %u wurde vom Admin bestätigt wegen by admin %u for "
-"%s</b>"
+"<b>Das Betreten des Qun %u wurde vom Admin bestätigt wegen by admin %u for %"
+"s</b>"
 
 #, c-format
 msgid "<b>Removed buddy %u.</b>"
@@ -12544,8 +12535,8 @@
 "to multiple messaging services at once.  %s is written in C using GTK+.  %s "
 "is released, and may be modified and redistributed,  under the terms of the "
 "GPL version 2 (or later).  A copy of the GPL is distributed with %s.  %s is "
-"copyrighted by its contributors, a list of whom is also distributed with "
-"%s.  There is no warranty for %s.<BR><BR>"
+"copyrighted by its contributors, a list of whom is also distributed with %"
+"s.  There is no warranty for %s.<BR><BR>"
 msgstr ""
 "%s ist ein Nachrichtendienst, basierend auf libpurple, der die Verbindung zu "
 "mehreren Nachrichtendiensten gleichzeitig unterstützt.  %s wird in C "
@@ -13117,16 +13108,16 @@
 
 #, c-format
 msgid ""
-"Are you sure you want to permanently delete the log of the conversation in "
-"%s which started at %s?"
+"Are you sure you want to permanently delete the log of the conversation in %"
+"s which started at %s?"
 msgstr ""
 "Wollen Sie wirklich den Mitschnitt der Unterhaltung in %s, gestartet am %s, "
 "permanent löschen?"
 
 #, c-format
 msgid ""
-"Are you sure you want to permanently delete the system log which started at "
-"%s?"
+"Are you sure you want to permanently delete the system log which started at %"
+"s?"
 msgstr ""
 "Wollen Sie wirklich den Systemmitschnitt, gestartet am %s, permanent löschen?"
 
@@ -13234,13 +13225,11 @@
 msgid "Exiting because another libpurple client is already running.\n"
 msgstr "Wird geschlossen, da bereits ein anderer libpurple-Client läuft\n"
 
-#, fuzzy
 msgid "_Media"
-msgstr "/_Medien"
-
-#, fuzzy
+msgstr "_Medien"
+
 msgid "_Hangup"
-msgstr "Auflegen"
+msgstr "_Auflegen"
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
@@ -15471,13 +15460,13 @@
 #, no-c-format
 msgid ""
 "Error Installing Spellchecking ($R3).$\\rIf retrying fails, manual "
-"installation instructions are at: http://developer.pidgin.im/wiki/Installing"
-"%20Pidgin#manual_win32_spellcheck_installation"
+"installation instructions are at: http://developer.pidgin.im/wiki/Installing%"
+"20Pidgin#manual_win32_spellcheck_installation"
 msgstr ""
 "Fehler beim Installieren der Rechtschreibkontrolle ($R3).$\\rFalls ein "
 "erneuter Versuch fehlschlägt, finden Sie Anweisungen zur manuellen "
-"Installation unter: http://developer.pidgin.im/wiki/Installing"
-"%20Pidgin#manual_win32_spellcheck_installation"
+"Installation unter: http://developer.pidgin.im/wiki/Installing%"
+"20Pidgin#manual_win32_spellcheck_installation"
 
 #. Installer Subsection Text
 msgid "GTK+ Runtime (required if not present)"
@@ -15552,188 +15541,7 @@
 
 #. Text displayed on Installer Finish Page
 msgid "Visit the Pidgin Web Page"
-msgstr "Besuchen Sie die Pidgin Webseite"
+msgstr "Besuchen Sie die Pidgin-Webseite"
 
 msgid "You do not have permission to uninstall this application."
 msgstr "Sie haben keine Berechtigung, diese Anwendung zu deinstallieren."
-
-#~ msgid "The nick name you entered is invalid."
-#~ msgstr "Der eingegebene Spitzname ist ungültig."
-
-#~ msgid "MXit Login Name"
-#~ msgstr "MXit-Login-Name"
-
-#~ msgid "Nick Name"
-#~ msgstr "Spitzname"
-
-#~ msgid "Your Mobile Number..."
-#~ msgstr "Ihre Handynummer..."
-
-#~ msgid "/Media/_Hangup"
-#~ msgstr "/Medien/_Auflegen"
-
-#~ msgid "The certificate is not valid yet."
-#~ msgstr "Das Zertifikat ist noch nicht gültig."
-
-#~ msgid "Rate to host"
-#~ msgstr "Bewertung zum Host"
-
-#~ msgid "Rate to client"
-#~ msgstr "Bewertung zum Client"
-
-#~ msgid "Unknown reason."
-#~ msgstr "Unbekannter Grund."
-
-#~ msgid "Current Mood"
-#~ msgstr "Momentane Stimmung"
-
-#~ msgid "New Mood"
-#~ msgstr "Neue Stimmung"
-
-#~ msgid "Change your Mood"
-#~ msgstr "Ihre Stimmung ändern"
-
-#~ msgid "How do you feel right now?"
-#~ msgstr "Wie fühlen Sie sich gerade?"
-
-#~ msgid "Change Mood..."
-#~ msgstr "Stimmung ändern..."
-
-#~ msgid "Artist"
-#~ msgstr "Interpret"
-
-#~ msgid "Album"
-#~ msgstr "Album"
-
-#~ msgid "Pager server"
-#~ msgstr "Pager-Server"
-
-#~ msgid "Yahoo Chat server"
-#~ msgstr "Yahoo-Chat-Server"
-
-#~ msgid "Yahoo Chat port"
-#~ msgstr "Yahoo-Chat-Port"
-
-#~ msgid "Orientation"
-#~ msgstr "Ausrichtung"
-
-#~ msgid "The orientation of the tray."
-#~ msgstr "Die Ausrichtung der Kontrollleiste."
-
-#~ msgid "Error creating conference."
-#~ msgstr "Fehler beim Erstellen der Konferenz."
-
-#~ msgid "Unable to bind socket to port: %s"
-#~ msgstr "Kann die Socket nicht an den Port binden: %s"
-
-#~ msgid "Unable to listen on socket: %s"
-#~ msgstr "Lauschen auf Socket nicht möglich: %s"
-
-#~ msgid "%s just sent you a Nudge!"
-#~ msgstr "%s hat Sie gerade angestoßen!"
-
-#~ msgid "Friendly name changes too rapidly"
-#~ msgstr "Benutzernamen werden zu oft geändert"
-
-#~ msgid "This Hotmail account may not be active."
-#~ msgstr "Dieses Hotmail-Konto ist vielleicht nicht aktiv."
-
-#~ msgid "Profile URL"
-#~ msgstr "URL des Profils"
-
-#~ msgid "MSN Protocol Plugin"
-#~ msgstr "MSN-Protokoll-Plugin"
-
-#~ msgid "%s is not a valid group."
-#~ msgstr "%s ist keine gültige Gruppe."
-
-#~ msgid "Unknown error."
-#~ msgstr "Unbekannter Fehler."
-
-#~ msgid "%s on %s (%s)"
-#~ msgstr "%s auf %s (%s)"
-
-#~ msgid "Unable to add user on %s (%s)"
-#~ msgstr "Kann den Benutzer nicht zu %s (%s) hinzufügen"
-
-#~ msgid "Unable to block user on %s (%s)"
-#~ msgstr "Kann den Benutzer nicht für %s (%s) blockieren"
-
-#~ msgid "Unable to permit user on %s (%s)"
-#~ msgstr "Kann den Benutzer nicht für %s (%s) erlauben"
-
-#~ msgid "%s could not be added because your buddy list is full."
-#~ msgstr "%s konnte nicht hinzugefügt werden, da Ihre Buddy-Liste voll ist."
-
-#~ msgid "%s is not a valid passport account."
-#~ msgstr "%s ist kein gültiges Passport-Konto."
-
-#~ msgid "Service Temporarily Unavailable."
-#~ msgstr "Dienst momentan nicht verfügbar."
-
-#~ msgid "Unable to rename group"
-#~ msgstr "Kann die Gruppe nicht umbenennen"
-
-#~ msgid "Unable to delete group"
-#~ msgstr "Kann die Gruppe nicht löschen"
-
-#~ msgid "%s has added you to his or her buddy list."
-#~ msgstr "Der Benutzer %s hat Sie zu seiner Buddy-Liste hinzugefügt."
-
-#~ msgid "%s has removed you from his or her buddy list."
-#~ msgstr "Der Benutzer %s hat Sie von seiner Buddy-Liste gelöscht."
-
-#~ msgid ""
-#~ "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
-#~ "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
-#~ msgstr ""
-#~ "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
-#~ "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
-
-#~ msgid ""
-#~ "<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>"
-#~ msgstr ""
-#~ "<FONT SIZE=\"4\">IRC-Kanal:</FONT> #pidgin auf irc.freenode.net<BR><BR>"
-
-#~ msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
-#~ msgstr ""
-#~ "<FONT SIZE=\"4\">XMPP-MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
-
-#~ msgid "Debugging Information"
-#~ msgstr "Debugging-Information"
-
-#~ msgid ""
-#~ "Unrecognized file type\n"
-#~ "\n"
-#~ "Defaulting to PNG."
-#~ msgstr ""
-#~ "Nicht erkannter Dateityp\n"
-#~ "\n"
-#~ "Verwende Standard (PNG)."
-
-#~ msgid ""
-#~ "Error saving image\n"
-#~ "\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Fehler beim Speichern des Bildes\n"
-#~ "\n"
-#~ "%s"
-
-#~ msgid "Failed to open file '%s': %s"
-#~ msgstr "Öffnen der Datei '%s' fehlgeschlagen: %s"
-
-#~ msgid ""
-#~ "Failed to load image '%s': reason not known, probably a corrupt image file"
-#~ msgstr ""
-#~ "Bild '%s' konnte nicht geladen werden: Grund unbekannt, vermutlich eine "
-#~ "korrupte Bilddatei"
-
-#~ msgid "Insert an <iq/> stanza."
-#~ msgstr "Einen <iq/> Block einfügen."
-
-#~ msgid "Insert a <presence/> stanza."
-#~ msgstr "Einen <presence/> Block einfügen."
-
-#~ msgid "Insert a <message/> stanza."
-#~ msgstr "Einen <message/> Block einfügen."