summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Bailey <rekkanoryo@rekkanoryo.org>2008-11-25 17:02:37 +0000
committerJohn Bailey <rekkanoryo@rekkanoryo.org>2008-11-25 17:02:37 +0000
commitdb7064a245a027eea08749f241a7b435175c2f96 (patch)
treef3e52bb4bc3541dfaa71c351284514e638450a2e
parent3ddfe86925dbe3e0da1410aeda74d54242cb7787 (diff)
parent584e1326d2fea19d6e3afcc12536794e1d0ce43f (diff)
downloadpidgin-db7064a245a027eea08749f241a7b435175c2f96.tar.gz
propagate from branch 'im.pidgin.pidgin' (head 48d838a2e5801782bbc6719b1209e8c932871436)
to branch 'im.pidgin.cpw.rekkanoryo.icqxstatus' (head 9374b413e29099439bfdaf519f9090e4d440b02b)
-rw-r--r--COPYRIGHT6
-rw-r--r--ChangeLog9
-rw-r--r--Makefile.am1
-rw-r--r--libpurple/dnsquery.c9
-rw-r--r--libpurple/notify.h164
-rw-r--r--libpurple/plugins/statenotify.c6
-rw-r--r--libpurple/protocols/gg/gg.c493
-rw-r--r--libpurple/protocols/gg/gg.h3
-rw-r--r--libpurple/protocols/irc/cmds.c9
-rw-r--r--libpurple/protocols/irc/dcc_send.c10
-rw-r--r--libpurple/protocols/irc/msgs.c18
-rw-r--r--libpurple/protocols/irc/parse.c10
-rw-r--r--libpurple/protocols/jabber/message.c16
-rw-r--r--libpurple/protocols/jabber/parser.c15
-rw-r--r--libpurple/protocols/jabber/presence.c2
-rw-r--r--libpurple/protocols/jabber/si.c2
-rw-r--r--libpurple/protocols/msn/msn.c3
-rw-r--r--libpurple/protocols/msn/notification.c2
-rw-r--r--libpurple/protocols/msn/servconn.c3
-rw-r--r--libpurple/protocols/msn/soap.c483
-rw-r--r--libpurple/protocols/msn/soap.h5
-rw-r--r--libpurple/protocols/msn/switchboard.c42
-rw-r--r--libpurple/protocols/sametime/sametime.c2
-rw-r--r--libpurple/protocols/simple/simple.c7
-rw-r--r--libpurple/protocols/zephyr/zephyr.c2
-rw-r--r--libpurple/proxy.c11
-rw-r--r--pidgin/plugins/relnot.c51
-rw-r--r--pidgin/win32/winpidgin.c19
-rw-r--r--po/hu.po1185
29 files changed, 1295 insertions, 1293 deletions
diff --git a/COPYRIGHT b/COPYRIGHT
index 543eb05ef7..3252e99ef3 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -220,6 +220,7 @@ Patrik Kullman
Tuomas Kuosmanen
Tero Kuusela
Richard Laager
+Jacky Lam
Scott Lamb
Dennis Lambe Jr.
Joe LaPenna
@@ -307,7 +308,7 @@ Havoc Pennington
Ted Percival
Eduardo Pérez
Matt Perry
-Diego Petten
+Diego Petten
Nathan Peterson
Sebastián E. Peyrott
Celso Pinto
@@ -323,7 +324,7 @@ Nathan Poznick
Jory A. Pratt
Brent Priddy
Justin Pryzby
-Florian Quze
+Florian Quèze
Ignacio Casal Quinteiro
Federicco Mena Quintero
Yosef Radchenko
@@ -477,6 +478,7 @@ Ma Xuan
Jared Yanovich
Timmy Yee
Nickolai Zeldovich
+Tom Zickel
Marco Ziech
Piotr Zielinski
Jeroen Zwartepoorte
diff --git a/ChangeLog b/ChangeLog
index 65fdcf119c..5dfb361427 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,13 @@ version 2.5.3 (??/??/????):
--with-system-ssl-certs and GnuTLS need to include these in the
system certs directory.
* Corrected maximum message lengths for Yahoo!
+ * Fix some problems with Gadu-Gadu buddy icons (Adam Strzelecki)
+ * Enable auto-reply on Zephyr, to emulate 'zaway' (Toby Schaffer)
+ * The Buddy State Notification plugin no longer prints duplicate
+ notifications when the same buddy is in multiple groups (Florian Quèze)
+ * The Buddy State Notification plugin no longer turns JID's, MSN Passport
+ ID's, etc. into links (Florian Quèze)
+ * Fix a crash in SIMPLE when a malformed message is received.
Pidgin:
* On GTK+ 2.14 and higher, we're using the gtk-tooltip-delay setting
@@ -18,6 +25,8 @@ version 2.5.3 (??/??/????):
To completely disable tooltips (e.g. if you had an old tooltip_delay
of zero), add this to ~/.purple/gtkrc-2.0:
gtk-enable-tooltips = 0
+ * Moved the release notification dialog to a mini-dialog in the
+ buddylist. (Thanks to Casey Ho)
Finch:
* Allow binding meta+arrow keys for actions.
diff --git a/Makefile.am b/Makefile.am
index ae9e5d8f17..11f87db6b0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -34,6 +34,7 @@ commit-check:
(cd po ; intltool-update -m 2>&1 | grep -v '^mismatched quotes.*\.py$$' | sed "s|current directory|po directory|" | grep . ; if [ $$? = 0 ] ; then exit 1 ; else exit 0 ; fi)
LC_ALL=C sort -c -t/ -u po/POTFILES.in
LC_ALL=C sort -c -t/ -u po/POTFILES.skip
+ iconv -f utf8 -t utf8 COPYRIGHT | cmp COPYRIGHT -
version-check: commit-check
# We don't want to release development versions.
diff --git a/libpurple/dnsquery.c b/libpurple/dnsquery.c
index 39ce702674..cc5d39e674 100644
--- a/libpurple/dnsquery.c
+++ b/libpurple/dnsquery.c
@@ -345,6 +345,12 @@ purple_dnsquery_resolver_destroy(PurpleDnsQueryResolverProcess *resolver)
{
g_return_if_fail(resolver != NULL);
+ /* Keep this before the kill() call below. */
+ if (resolver->inpa != 0) {
+ purple_input_remove(resolver->inpa);
+ resolver->inpa = 0;
+ }
+
/*
* We might as well attempt to kill our child process. It really
* doesn't matter if this fails, because children will expire on
@@ -353,9 +359,6 @@ purple_dnsquery_resolver_destroy(PurpleDnsQueryResolverProcess *resolver)
if (resolver->dns_pid > 0)
kill(resolver->dns_pid, SIGKILL);
- if (resolver->inpa != 0)
- purple_input_remove(resolver->inpa);
-
close(resolver->fd_in);
close(resolver->fd_out);
diff --git a/libpurple/notify.h b/libpurple/notify.h
index 34a9a24aa6..3e65a11ea8 100644
--- a/libpurple/notify.h
+++ b/libpurple/notify.h
@@ -236,7 +236,8 @@ void purple_notify_searchresults_new_rows(PurpleConnection *gc,
* Adds a stock button that will be displayed in the search results dialog.
*
* @param results The search results object.
- * @param type Type of the button. (TODO: Only one button of a given type can be displayed.)
+ * @param type Type of the button. (TODO: Only one button of a given type
+ * can be displayed.)
* @param cb Function that will be called on the click event.
*/
void purple_notify_searchresults_button_add(PurpleNotifySearchResults *results,
@@ -245,8 +246,9 @@ void purple_notify_searchresults_button_add(PurpleNotifySearchResults *results,
/**
- * Adds a plain labelled button that will be displayed in the search results dialog.
- *
+ * Adds a plain labelled button that will be displayed in the search results
+ * dialog.
+ *
* @param results The search results object
* @param label The label to display
* @param cb Function that will be called on the click event
@@ -267,7 +269,7 @@ PurpleNotifySearchResults *purple_notify_searchresults_new(void);
* Returns a newly created search result column object.
*
* @param title Title of the column. NOTE: Title will get g_strdup()ed.
- *
+ *
* @return The new search column object.
*/
PurpleNotifySearchColumn *purple_notify_searchresults_column_new(const char *title);
@@ -470,53 +472,58 @@ void *purple_notify_formatted(void *handle, const char *title,
* The text is essentially a stripped-down format of HTML, the same that
* IMs may send.
*
- * @param gc The PurpleConnection handle associated with the information.
- * @param who The username associated with the information.
- * @param user_info The PurpleNotifyUserInfo which contains the information
- * @param cb The callback to call when the user closes
- * the notification.
- * @param user_data The data to pass to the callback.
+ * @param gc The PurpleConnection handle associated with the information.
+ * @param who The username associated with the information.
+ * @param user_info The PurpleNotifyUserInfo which contains the information
+ * @param cb The callback to call when the user closes the notification.
+ * @param user_data The data to pass to the callback.
*
- * @return A UI-specific handle.
+ * @return A UI-specific handle.
*/
void *purple_notify_userinfo(PurpleConnection *gc, const char *who,
PurpleNotifyUserInfo *user_info, PurpleNotifyCloseCallback cb,
gpointer user_data);
/**
- * Create a new PurpleNotifyUserInfo which is suitable for passing to purple_notify_userinfo()
+ * Create a new PurpleNotifyUserInfo which is suitable for passing to
+ * purple_notify_userinfo()
*
- * @return A new PurpleNotifyUserInfo, which the caller must destroy when done
+ * @return A new PurpleNotifyUserInfo, which the caller must destroy when done
*/
PurpleNotifyUserInfo *purple_notify_user_info_new(void);
/**
* Destroy a PurpleNotifyUserInfo
*
- * @param user_info The PurpleNotifyUserInfo
+ * @param user_info The PurpleNotifyUserInfo
*/
void purple_notify_user_info_destroy(PurpleNotifyUserInfo *user_info);
/**
- * Retrieve the array of PurpleNotifyUserInfoEntry objects from a PurpleNotifyUserInfo
+ * Retrieve the array of PurpleNotifyUserInfoEntry objects from a
+ * PurpleNotifyUserInfo
*
- * This GList may be manipulated directly with normal GList functions such as g_list_insert(). Only
- * PurpleNotifyUserInfoEntry are allowed in the list. If a PurpleNotifyUserInfoEntry item is added to the list,
- * it should not be g_free()'d by the caller; PurpleNotifyUserInfo will g_free it when destroyed.
+ * This GList may be manipulated directly with normal GList functions such
+ * as g_list_insert(). Only PurpleNotifyUserInfoEntry are allowed in the
+ * list. If a PurpleNotifyUserInfoEntry item is added to the list, it
+ * should not be g_free()'d by the caller; PurpleNotifyUserInfo will g_free
+ * it when destroyed.
*
- * To remove a PurpleNotifyUserInfoEntry, use purple_notify_user_info_remove_entry(). Do not use the GList directly.
+ * To remove a PurpleNotifyUserInfoEntry, use
+ * purple_notify_user_info_remove_entry(). Do not use the GList directly.
*
- * @param user_info The PurpleNotifyUserInfo
+ * @param user_info The PurpleNotifyUserInfo
*
- * @constreturn A GList of PurpleNotifyUserInfoEntry objects
+ * @constreturn A GList of PurpleNotifyUserInfoEntry objects
*/
GList *purple_notify_user_info_get_entries(PurpleNotifyUserInfo *user_info);
/**
- * Create a textual representation of a PurpleNotifyUserInfo, separating entries with newline
+ * Create a textual representation of a PurpleNotifyUserInfo, separating
+ * entries with newline
*
- * @param user_info The PurpleNotifyUserInfo
- * @param newline The separation character
+ * @param user_info The PurpleNotifyUserInfo
+ * @param newline The separation character
*/
char *purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo *user_info, const char *newline);
@@ -524,46 +531,58 @@ char *purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo *user_i
* Add a label/value pair to a PurpleNotifyUserInfo object.
* PurpleNotifyUserInfo keeps track of the order in which pairs are added.
*
- * @param user_info The PurpleNotifyUserInfo
- * @param label A label, which for example might be displayed by a UI with a colon after it ("Status:"). Do not include a colon.
- * If NULL, value will be displayed without a label.
- * @param value The value, which might be displayed by a UI after the label.
- * If NULL, label will still be displayed; the UI should then treat label as independent
- * and not include a colon if it would otherwise.
+ * @param user_info The PurpleNotifyUserInfo
+ * @param label A label, which for example might be displayed by a
+ * UI with a colon after it ("Status:"). Do not include
+ * a colon. If NULL, value will be displayed without a
+ * label.
+ * @param value The value, which might be displayed by a UI after
+ * the label. If NULL, label will still be displayed;
+ * the UI should then treat label as independent and not
+ * include a colon if it would otherwise.
*/
void purple_notify_user_info_add_pair(PurpleNotifyUserInfo *user_info, const char *label, const char *value);
/**
* Prepend a label/value pair to a PurpleNotifyUserInfo object
*
- * @param user_info The PurpleNotifyUserInfo
- * @param label A label, which for example might be displayed by a UI with a colon after it ("Status:"). Do not include a colon.
- * If NULL, value will be displayed without a label.
- * @param value The value, which might be displayed by a UI after the label.
- * If NULL, label will still be displayed; the UI should then treat label as independent
- * and not include a colon if it would otherwise.
+ * @param user_info The PurpleNotifyUserInfo
+ * @param label A label, which for example might be displayed by a
+ * UI with a colon after it ("Status:"). Do not include
+ * a colon. If NULL, value will be displayed without a
+ * label.
+ * @param value The value, which might be displayed by a UI after
+ * the label. If NULL, label will still be displayed;
+ * the UI should then treat label as independent and not
+ * include a colon if it would otherwise.
*/
void purple_notify_user_info_prepend_pair(PurpleNotifyUserInfo *user_info, const char *label, const char *value);
/**
- * Remove a PurpleNotifyUserInfoEntry from a PurpleNotifyUserInfo object without freeing the entry.
+ * Remove a PurpleNotifyUserInfoEntry from a PurpleNotifyUserInfo object
+ * without freeing the entry.
*
- * @param user_info The PurpleNotifyUserInfo
- * @param user_info_entry The PurpleNotifyUserInfoEntry
+ * @param user_info The PurpleNotifyUserInfo
+ * @param user_info_entry The PurpleNotifyUserInfoEntry
*/
void purple_notify_user_info_remove_entry(PurpleNotifyUserInfo *user_info, PurpleNotifyUserInfoEntry *user_info_entry);
+
/**
* Create a new PurpleNotifyUserInfoEntry
*
- * If added to a PurpleNotifyUserInfo object, this should not be free()'d, as PurpleNotifyUserInfo will do so
- * when destroyed. purple_notify_user_info_add_pair() and purple_notify_user_info_prepend_pair() are convenience
- * methods for creating entries and adding them to a PurpleNotifyUserInfo.
+ * If added to a PurpleNotifyUserInfo object, this should not be free()'d,
+ * as PurpleNotifyUserInfo will do so when destroyed.
+ * purple_notify_user_info_add_pair() and
+ * purple_notify_user_info_prepend_pair() are convenience methods for
+ * creating entries and adding them to a PurpleNotifyUserInfo.
*
- * @param label A label, which for example might be displayed by a UI with a colon after it ("Status:"). Do not include a colon.
- * If NULL, value will be displayed without a label.
- * @param value The value, which might be displayed by a UI after the label.
- * If NULL, label will still be displayed; the UI should then treat label as independent
- * and not include a colon if it would otherwise.
+ * @param label A label, which for example might be displayed by a UI
+ * with a colon after it ("Status:"). Do not include a
+ * colon. If NULL, value will be displayed without a label.
+ * @param value The value, which might be displayed by a UI after the
+ * label. If NULL, label will still be displayed; the UI
+ * should then treat label as independent and not include a
+ * colon if it would otherwise.
*
* @result A new PurpleNotifyUserInfoEntry
*/
@@ -572,71 +591,74 @@ PurpleNotifyUserInfoEntry *purple_notify_user_info_entry_new(const char *label,
/**
* Add a section break. A UI might display this as a horizontal line.
*
- * @param user_info The PurpleNotifyUserInfo
+ * @param user_info The PurpleNotifyUserInfo
*/
void purple_notify_user_info_add_section_break(PurpleNotifyUserInfo *user_info);
/**
* Prepend a section break. A UI might display this as a horizontal line.
*
- * @param user_info The PurpleNotifyUserInfo
+ * @param user_info The PurpleNotifyUserInfo
* @since 2.5.0
*/
void purple_notify_user_info_prepend_section_break(PurpleNotifyUserInfo *user_info);
-
+
/**
- * Add a section header. A UI might display this in a different font from other text.
+ * Add a section header. A UI might display this in a different font
+ * from other text.
*
- * @param user_info The PurpleNotifyUserInfo
- * @param label The name of the section
+ * @param user_info The PurpleNotifyUserInfo
+ * @param label The name of the section
*/
void purple_notify_user_info_add_section_header(PurpleNotifyUserInfo *user_info, const char *label);
-
+
/**
- * Prepend a section header. A UI might display this in a different font from other text.
+ * Prepend a section header. A UI might display this in a different font
+ * from other text.
*
- * @param user_info The PurpleNotifyUserInfo
- * @param label The name of the section
+ * @param user_info The PurpleNotifyUserInfo
+ * @param label The name of the section
* @since 2.5.0
*/
void purple_notify_user_info_prepend_section_header(PurpleNotifyUserInfo *user_info, const char *label);
-
+
/**
- * Remove the last item which was added to a PurpleNotifyUserInfo. This could be used to remove a section header which is not needed.
+ * Remove the last item which was added to a PurpleNotifyUserInfo. This
+ * could be used to remove a section header which is not needed.
*/
void purple_notify_user_info_remove_last_item(PurpleNotifyUserInfo *user_info);
/**
* Get the label for a PurpleNotifyUserInfoEntry
*
- * @param user_info_entry The PurpleNotifyUserInfoEntry
+ * @param user_info_entry The PurpleNotifyUserInfoEntry
*
- * @result The label
+ * @return The label
*/
const gchar *purple_notify_user_info_entry_get_label(PurpleNotifyUserInfoEntry *user_info_entry);
/**
* Set the label for a PurpleNotifyUserInfoEntry
*
- * @param user_info_entry The PurpleNotifyUserInfoEntry
- * @param label The label
+ * @param user_info_entry The PurpleNotifyUserInfoEntry
+ * @param label The label
*/
void purple_notify_user_info_entry_set_label(PurpleNotifyUserInfoEntry *user_info_entry, const char *label);
/**
* Get the value for a PurpleNotifyUserInfoEntry
*
- * @param user_info_entry The PurpleNotifyUserInfoEntry
+ * @param user_info_entry The PurpleNotifyUserInfoEntry
*
- * @result The value
+ * @result The value
*/
const gchar *purple_notify_user_info_entry_get_value(PurpleNotifyUserInfoEntry *user_info_entry);
/**
* Set the value for a PurpleNotifyUserInfoEntry
*
- * @param user_info_entry The PurpleNotifyUserInfoEntry
- * @param value The value
+ * @param user_info_entry The PurpleNotifyUserInfoEntry
+ * @param value The value
*/
void purple_notify_user_info_entry_set_value(PurpleNotifyUserInfoEntry *user_info_entry, const char *value);
@@ -644,17 +666,17 @@ void purple_notify_user_info_entry_set_value(PurpleNotifyUserInfoEntry *user_inf
/**
* Get the type of a PurpleNotifyUserInfoEntry
*
- * @param user_info_entry The PurpleNotifyUserInfoEntry
+ * @param user_info_entry The PurpleNotifyUserInfoEntry
*
- * @result The PurpleNotifyUserInfoEntryType
+ * @return The PurpleNotifyUserInfoEntryType
*/
PurpleNotifyUserInfoEntryType purple_notify_user_info_entry_get_type(PurpleNotifyUserInfoEntry *user_info_entry);
/**
* Set the type of a PurpleNotifyUserInfoEntry
*
- * @param user_info_entry The PurpleNotifyUserInfoEntry
- * @param type The PurpleNotifyUserInfoEntryType
+ * @param user_info_entry The PurpleNotifyUserInfoEntry
+ * @param type The PurpleNotifyUserInfoEntryType
*/
void purple_notify_user_info_entry_set_type(PurpleNotifyUserInfoEntry *user_info_entry,
PurpleNotifyUserInfoEntryType type);
diff --git a/libpurple/plugins/statenotify.c b/libpurple/plugins/statenotify.c
index e9f25d5653..dc25596f2b 100644
--- a/libpurple/plugins/statenotify.c
+++ b/libpurple/plugins/statenotify.c
@@ -32,13 +32,17 @@ write_status(PurpleBuddy *buddy, const char *message)
return;
g_return_if_fail(conv->type == PURPLE_CONV_TYPE_IM);
+ /* Prevent duplicate notifications for buddies in multiple groups */
+ if (buddy != purple_find_buddy(buddy->account, buddy->name))
+ return;
+
who = purple_buddy_get_alias(buddy);
escaped = g_markup_escape_text(who, -1);
g_snprintf(buf, sizeof(buf), message, escaped);
g_free(escaped);
- purple_conv_im_write(conv->u.im, NULL, buf, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_ACTIVE_ONLY, time(NULL));
+ purple_conv_im_write(conv->u.im, NULL, buf, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_ACTIVE_ONLY | PURPLE_MESSAGE_NO_LINKIFY, time(NULL));
}
static void
diff --git a/libpurple/protocols/gg/gg.c b/libpurple/protocols/gg/gg.c
index 5522ce04b8..4ef1e45511 100644
--- a/libpurple/protocols/gg/gg.c
+++ b/libpurple/protocols/gg/gg.c
@@ -61,7 +61,6 @@ static PurplePlugin *my_protocol = NULL;
*
* @return Zero if proxy setup is valid, otherwise -1.
*/
-/* static int ggp_setup_proxy(PurpleAccount *account) {{{ */
static int ggp_setup_proxy(PurpleAccount *account)
{
PurpleProxyInfo *gpi;
@@ -88,11 +87,7 @@ static int ggp_setup_proxy(PurpleAccount *account)
return 0;
}
-/* }}} */
-/*
- */
-/* static void ggp_async_token_handler(gpointer _gc, gint fd, PurpleInputCondition cond) {{{ */
static void ggp_async_token_handler(gpointer _gc, gint fd, PurpleInputCondition cond)
{
PurpleConnection *gc = _gc;
@@ -157,11 +152,7 @@ static void ggp_async_token_handler(gpointer _gc, gint fd, PurpleInputCondition
token->cb = NULL;
cb(gc);
}
-/* }}} */
-/*
- */
-/* static void ggp_token_request(PurpleConnection *gc, GGPTokenCallback cb) {{{ */
static void ggp_token_request(PurpleConnection *gc, GGPTokenCallback cb)
{
PurpleAccount *account;
@@ -199,7 +190,6 @@ static void ggp_token_request(PurpleConnection *gc, GGPTokenCallback cb)
*
* @param Current action handler.
*/
-/* static void ggp_action_buddylist_get(PurplePluginAction *action) {{{ */
static void ggp_action_buddylist_get(PurplePluginAction *action)
{
PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -209,14 +199,12 @@ static void ggp_action_buddylist_get(PurplePluginAction *action)
gg_userlist_request(info->session, GG_USERLIST_GET, NULL);
}
-/* }}} */
/**
* Upload the buddylist to the server.
*
* @param action Current action handler.
*/
-/* static void ggp_action_buddylist_put(PurplePluginAction *action) {{{ */
static void ggp_action_buddylist_put(PurplePluginAction *action)
{
PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -232,14 +220,12 @@ static void ggp_action_buddylist_put(PurplePluginAction *action)
gg_userlist_request(info->session, GG_USERLIST_PUT, buddylist);
g_free(buddylist);
}
-/* }}} */
/**
* Delete buddylist from the server.
*
* @param action Current action handler.
*/
-/* static void ggp_action_buddylist_delete(PurplePluginAction *action) {{{ */
static void ggp_action_buddylist_delete(PurplePluginAction *action)
{
PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -249,11 +235,7 @@ static void ggp_action_buddylist_delete(PurplePluginAction *action)
gg_userlist_request(info->session, GG_USERLIST_PUT, NULL);
}
-/* }}} */
-/*
- */
-/* static void ggp_callback_buddylist_save_ok(PurpleConnection *gc, const char *file) {{{ */
static void ggp_callback_buddylist_save_ok(PurpleConnection *gc, const char *filename)
{
PurpleAccount *account = purple_connection_get_account(gc);
@@ -284,11 +266,7 @@ static void ggp_callback_buddylist_save_ok(PurpleConnection *gc, const char *fil
g_free(buddylist);
}
-/* }}} */
-/*
- */
-/* static void ggp_callback_buddylist_load_ok(PurpleConnection *gc, gchar *file) {{{ */
static void ggp_callback_buddylist_load_ok(PurpleConnection *gc, gchar *file)
{
PurpleAccount *account = purple_connection_get_account(gc);
@@ -334,11 +312,7 @@ static void ggp_action_buddylist_save(PurplePluginAction *action)
purple_connection_get_account(gc), NULL, NULL,
gc);
}
-/* }}} */
-/*
- */
-/* static void ggp_action_buddylist_load(PurplePluginAction *action) {{{ */
static void ggp_action_buddylist_load(PurplePluginAction *action)
{
PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -349,11 +323,7 @@ static void ggp_action_buddylist_load(PurplePluginAction *action)
purple_connection_get_account(gc), NULL, NULL,
gc);
}
-/* }}} */
-/*
- */
-/* static void ggp_callback_register_account_ok(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
static void ggp_callback_register_account_ok(PurpleConnection *gc,
PurpleRequestFields *fields)
{
@@ -435,11 +405,7 @@ exit_err:
g_free(token->id);
g_free(token);
}
-/* }}} */
-/*
- */
-/* static void ggp_callback_register_account_cancel(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
static void ggp_callback_register_account_cancel(PurpleConnection *gc,
PurpleRequestFields *fields)
{
@@ -453,11 +419,7 @@ static void ggp_callback_register_account_cancel(PurpleConnection *gc,
g_free(token);
}
-/* }}} */
-/*
- */
-/* static void ggp_register_user_dialog(PurpleConnection *gc) {{{ */
static void ggp_register_user_dialog(PurpleConnection *gc)
{
PurpleAccount *account;
@@ -510,13 +472,9 @@ static void ggp_register_user_dialog(PurpleConnection *gc)
purple_connection_get_account(gc), NULL, NULL,
gc);
}
-/* }}} */
/* ----- PUBLIC DIRECTORY SEARCH ---------------------------------------- */
-/*
- */
-/* static void ggp_callback_show_next(PurpleConnection *gc, GList *row, gpointer user_data) {{{ */
static void ggp_callback_show_next(PurpleConnection *gc, GList *row, gpointer user_data)
{
GGPInfo *info = gc->proto_data;
@@ -533,21 +491,13 @@ static void ggp_callback_show_next(PurpleConnection *gc, GList *row, gpointer us
ggp_search_add(info->searches, seq, form);
purple_debug_info("gg", "ggp_callback_show_next(): Added seq %u", seq);
}
-/* }}} */
-/*
- */
-/* static void ggp_callback_add_buddy(PurpleConnection *gc, GList *row, gpointer user_data) {{{ */
static void ggp_callback_add_buddy(PurpleConnection *gc, GList *row, gpointer user_data)
{
purple_blist_request_add_buddy(purple_connection_get_account(gc),
g_list_nth_data(row, 0), NULL, NULL);
}
-/* }}} */
-/*
- */
-/* static void ggp_callback_im(PurpleConnection *gc, GList *row, gpointer user_data) {{{ */
static void ggp_callback_im(PurpleConnection *gc, GList *row, gpointer user_data)
{
PurpleAccount *account;
@@ -560,11 +510,7 @@ static void ggp_callback_im(PurpleConnection *gc, GList *row, gpointer user_data
conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, name);
purple_conversation_present(conv);
}
-/* }}} */
-/*
- */
-/* static void ggp_callback_find_buddies(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
static void ggp_callback_find_buddies(PurpleConnection *gc, PurpleRequestFields *fields)
{
GGPInfo *info = gc->proto_data;
@@ -611,11 +557,7 @@ static void ggp_callback_find_buddies(PurpleConnection *gc, PurpleRequestFields
ggp_search_add(info->searches, seq, form);
purple_debug_info("gg", "ggp_callback_find_buddies(): Added seq %u", seq);
}
-/* }}} */
-/*
- */
-/* static void ggp_find_buddies(PurplePluginAction *action) {{{ */
static void ggp_find_buddies(PurplePluginAction *action)
{
PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -672,13 +614,9 @@ static void ggp_find_buddies(PurplePluginAction *action)
purple_connection_get_account(gc), NULL, NULL,
gc);
}
-/* }}} */
/* ----- CHANGE PASSWORD ------------------------------------------------ */
-/*
- */
-/* static void ggp_callback_change_passwd_ok(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
static void ggp_callback_change_passwd_ok(PurpleConnection *gc, PurpleRequestFields *fields)
{
PurpleAccount *account;
@@ -750,11 +688,7 @@ exit_err:
g_free(info->token->data);
g_free(info->token);
}
-/* }}} */
-/*
- */
-/* static void ggp_change_passwd_dialog(PurpleConnection *gc) {{{ */
static void ggp_change_passwd_dialog(PurpleConnection *gc)
{
PurpleRequestFields *fields;
@@ -811,24 +745,16 @@ static void ggp_change_passwd_dialog(PurpleConnection *gc)
g_free(msg);
}
-/* }}} */
-/*
- */
-/* static void ggp_change_passwd(PurplePluginAction *action) {{{ */
static void ggp_change_passwd(PurplePluginAction *action)
{
PurpleConnection *gc = (PurpleConnection *)action->context;
ggp_token_request(gc, ggp_change_passwd_dialog);
}
-/* }}} */
/* ----- CONFERENCES ---------------------------------------------------- */
-/*
- */
-/* static void ggp_callback_add_to_chat_ok(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
static void ggp_callback_add_to_chat_ok(PurpleConnection *gc, PurpleRequestFields *fields)
{
PurpleRequestField *field;
@@ -842,11 +768,7 @@ static void ggp_callback_add_to_chat_ok(PurpleConnection *gc, PurpleRequestField
ggp_confer_participants_add_uin(gc, sel->data,
GPOINTER_TO_INT(purple_request_field_list_get_data(field, sel->data)));
}
-/* }}} */
-/*
- */
-/* static void ggp_bmenu_add_to_chat(PurpleBlistNode *node, gpointer ignored) {{{ */
static void ggp_bmenu_add_to_chat(PurpleBlistNode *node, gpointer ignored)
{
PurpleBuddy *buddy;
@@ -889,13 +811,9 @@ static void ggp_bmenu_add_to_chat(PurpleBlistNode *node, gpointer ignored)
gc);
g_free(msg);
}
-/* }}} */
/* ----- BLOCK BUDDIES -------------------------------------------------- */
-/*
- */
-/* static void ggp_bmenu_block(PurpleBlistNode *node, gpointer ignored) {{{ */
static void ggp_bmenu_block(PurpleBlistNode *node, gpointer ignored)
{
PurpleConnection *gc;
@@ -921,7 +839,6 @@ static void ggp_bmenu_block(PurpleBlistNode *node, gpointer ignored)
purple_debug_info("gg", "send: uin=%d; mode=BLOCKED\n", uin);
}
}
-/* }}} */
/* ---------------------------------------------------------------------- */
/* ----- INTERNAL CALLBACKS --------------------------------------------- */
@@ -940,7 +857,6 @@ static int ggp_to_gg_status(PurpleStatus *status, char **msg);
* @param status ID of the status.
* @param descr Description.
*/
-/* static void ggp_generic_status_handler(PurpleConnection *gc, uin_t uin, int status, const char *descr) {{{ */
static void ggp_generic_status_handler(PurpleConnection *gc, uin_t uin,
int status, const char *descr)
{
@@ -980,11 +896,7 @@ static void ggp_generic_status_handler(PurpleConnection *gc, uin_t uin,
g_free(from);
g_free(msg);
}
-/* }}} */
-/*
- */
-/* static void ggp_sr_close_cb(gpointer user_data) {{{ */
static void ggp_sr_close_cb(gpointer user_data)
{
GGPSearchForm *form = user_data;
@@ -994,7 +906,6 @@ static void ggp_sr_close_cb(gpointer user_data)
purple_debug_info("gg", "ggp_sr_close_cb(): Removed seq %u", form->seq);
ggp_search_form_destroy(form);
}
-/* }}} */
/**
* Translate a status' ID to a more user-friendly name.
@@ -1003,7 +914,6 @@ static void ggp_sr_close_cb(gpointer user_data)
*
* @return The user-friendly name of the status.
*/
-/* static const char *ggp_status_by_id(unsigned int id) {{{ */
static const char *ggp_status_by_id(unsigned int id)
{
const char *st;
@@ -1026,11 +936,7 @@ static const char *ggp_status_by_id(unsigned int id)
return st;
}
-/* }}} */
-/*
- */
-/* static void ggp_pubdir_handle_info(PurpleConnection *gc, gg_pubdir50_t req, GGPSearchForm *form) {{{ */
static void ggp_pubdir_handle_info(PurpleConnection *gc, gg_pubdir50_t req,
GGPSearchForm *form)
{
@@ -1089,11 +995,7 @@ static void ggp_pubdir_handle_info(PurpleConnection *gc, gg_pubdir50_t req,
g_free(who);
purple_notify_user_info_destroy(user_info);
}
-/* }}} */
-/*
- */
-/* static void ggp_pubdir_handle_full(PurpleConnection *gc, gg_pubdir50_t req, GGPSearchForm *form) {{{ */
static void ggp_pubdir_handle_full(PurpleConnection *gc, gg_pubdir50_t req,
GGPSearchForm *form)
{
@@ -1193,11 +1095,7 @@ static void ggp_pubdir_handle_full(PurpleConnection *gc, gg_pubdir50_t req,
purple_notify_searchresults_new_rows(gc, results, form->window);
}
}
-/* }}} */
-/*
- */
-/* static void ggp_pubdir_reply_handler(PurpleConnection *gc, gg_pubdir50_t req) {{{ */
static void ggp_pubdir_reply_handler(PurpleConnection *gc, gg_pubdir50_t req)
{
GGPInfo *info = gc->proto_data;
@@ -1236,15 +1134,56 @@ static void ggp_pubdir_reply_handler(PurpleConnection *gc, gg_pubdir50_t req)
break;
}
}
-/* }}} */
+
+static void ggp_recv_image_handler(PurpleConnection *gc, const struct gg_event *ev)
+{
+ gint imgid = 0;
+ GGPInfo *info = gc->proto_data;
+ GList *entry = g_list_first(info->pending_richtext_messages);
+ gchar *handlerid = g_strdup_printf("IMGID_HANDLER-%i", ev->event.image_reply.crc32);
+
+ imgid = purple_imgstore_add_with_id(
+ g_memdup(ev->event.image_reply.image, ev->event.image_reply.size),
+ ev->event.image_reply.size,
+ ev->event.image_reply.filename);
+
+ purple_debug_info("gg", "ggp_recv_image_handler: got image with crc32: %u\n", ev->event.image_reply.crc32);
+
+ while(entry) {
+ if (strstr((gchar *)entry->data, handlerid) != NULL) {
+ gchar **split = g_strsplit((gchar *)entry->data, handlerid, 3);
+ gchar *text = g_strdup_printf("%s%i%s", split[0], imgid, split[1]);
+ purple_debug_info("gg", "ggp_recv_image_handler: found message matching crc32: %s\n", (gchar *)entry->data);
+ g_strfreev(split);
+ info->pending_richtext_messages = g_list_remove(info->pending_richtext_messages, entry->data);
+ /* We don't have any more images to download */
+ if (strstr(text, "<IMG ID=\"IMGID_HANDLER") == NULL) {
+ gchar *buf = g_strdup_printf("%lu", (unsigned long int)ev->event.msg.sender);
+ serv_got_im(gc, buf, text, PURPLE_MESSAGE_IMAGES, ev->event.msg.time);
+ g_free(buf);
+ purple_debug_info("gg", "ggp_recv_image_handler: richtext message: %s\n", text);
+ g_free(text);
+ break;
+ }
+ info->pending_richtext_messages = g_list_append(info->pending_richtext_messages, text);
+ break;
+ }
+ entry = g_list_next(entry);
+ }
+ g_free(handlerid);
+
+ return;
+}
+
/**
* Dispatch a message received from a buddy.
*
* @param gc PurpleConnection.
* @param ev Gadu-Gadu event structure.
+ *
+ * Image receiving, some code borrowed from Kadu http://www.kadu.net
*/
-/* static void ggp_recv_message_handler(PurpleConnection *gc, const struct gg_event *ev) {{{ */
static void ggp_recv_message_handler(PurpleConnection *gc, const struct gg_event *ev)
{
GGPInfo *info = gc->proto_data;
@@ -1261,7 +1200,109 @@ static void ggp_recv_message_handler(PurpleConnection *gc, const struct gg_event
msg = g_markup_escape_text(tmp, -1);
g_free(tmp);
- purple_debug_info("gg", "msg form (%s): %s (class = %d; rcpt_count = %d)\n",
+ /* We got richtext message */
+ if (ev->event.msg.formats_length)
+ {
+ gboolean got_image = FALSE, bold = FALSE, italic = FALSE, under = FALSE;
+ char *cformats = (char *)ev->event.msg.formats;
+ char *cformats_end = cformats + ev->event.msg.formats_length;
+ gint increased_len = 0;
+ struct gg_msg_richtext_format *actformat;
+ struct gg_msg_richtext_image *actimage;
+ GString *message = g_string_new(msg);
+ gchar *handlerid;
+
+ purple_debug_info("gg", "ggp_recv_message_handler: richtext msg from (%s): %s %i formats\n", from, msg, ev->event.msg.formats_length);
+
+ while (cformats < cformats_end)
+ {
+ gint byteoffset;
+ actformat = (struct gg_msg_richtext_format *)cformats;
+ cformats += sizeof(struct gg_msg_richtext_format);
+ byteoffset = g_utf8_offset_to_pointer(message->str, actformat->position + increased_len) - message->str;
+
+ if(actformat->position == 0 && actformat->font == 0) {
+ purple_debug_warning("gg", "ggp_recv_message_handler: bogus formatting (inc: %i)\n", increased_len);
+ continue;
+ }
+ purple_debug_info("gg", "ggp_recv_message_handler: format at pos: %i, image:%i, bold:%i, italic: %i, under:%i (inc: %i)\n",
+ actformat->position,
+ (actformat->font & GG_FONT_IMAGE) != 0,
+ (actformat->font & GG_FONT_BOLD) != 0,
+ (actformat->font & GG_FONT_ITALIC) != 0,
+ (actformat->font & GG_FONT_UNDERLINE) != 0,
+ increased_len);
+
+ if (actformat->font & GG_FONT_IMAGE) {
+ got_image = TRUE;
+ actimage = (struct gg_msg_richtext_image*)(cformats);
+ cformats += sizeof(struct gg_msg_richtext_image);
+ purple_debug_info("gg", "ggp_recv_message_handler: image received, size: %d, crc32: %i\n", actimage->size, actimage->crc32);
+
+ /* Checking for errors, image size shouldn't be
+ * larger than 255.000 bytes */
+ if (actimage->size > 255000) {
+ purple_debug_warning("gg", "ggp_recv_message_handler: received image large than 255 kb\n");
+ continue;
+ }
+
+ gg_image_request(info->session, ev->event.msg.sender,
+ actimage->size, actimage->crc32);
+
+ handlerid = g_strdup_printf("<IMG ID=\"IMGID_HANDLER-%i\">", actimage->crc32);
+ g_string_insert(message, byteoffset, handlerid);
+ increased_len += strlen(handlerid);
+ g_free(handlerid);
+ continue;
+ }
+
+ if (actformat->font & GG_FONT_BOLD) {
+ if (bold == FALSE) {
+ g_string_insert(message, byteoffset, "<b>");
+ increased_len += 3;
+ bold = TRUE;
+ }
+ } else if (bold) {
+ g_string_insert(message, byteoffset, "</b>");
+ increased_len += 4;
+ bold = FALSE;
+ }
+
+ if (actformat->font & GG_FONT_ITALIC) {
+ if (italic == FALSE) {
+ g_string_insert(message, byteoffset, "<i>");
+ increased_len += 3;
+ italic = TRUE;
+ }
+ } else if (italic) {
+ g_string_insert(message, byteoffset, "</i>");
+ increased_len += 4;
+ italic = FALSE;
+ }
+
+ if (actformat->font & GG_FONT_UNDERLINE) {
+ if (under == FALSE) {
+ g_string_insert(message, byteoffset, "<u>");
+ increased_len += 3;
+ under = TRUE;
+ }
+ } else if (under) {
+ g_string_insert(message, byteoffset, "</u>");
+ increased_len += 4;
+ under = FALSE;
+ }
+ }
+
+ msg = message->str;
+ g_string_free(message, FALSE);
+
+ if (got_image) {
+ info->pending_richtext_messages = g_list_append(info->pending_richtext_messages, msg);
+ return;
+ }
+ }
+
+ purple_debug_info("gg", "ggp_recv_message_handler: msg from (%s): %s (class = %d; rcpt_count = %d)\n",
from, msg, ev->event.msg.msgclass,
ev->event.msg.recipients_count);
@@ -1298,11 +1339,32 @@ static void ggp_recv_message_handler(PurpleConnection *gc, const struct gg_event
g_free(msg);
g_free(from);
}
-/* }}} */
-/*
- */
-/* static void ggp_callback_recv(gpointer _gc, gint fd, PurpleInputCondition cond) {{{ */
+static void ggp_send_image_handler(PurpleConnection *gc, const struct gg_event *ev)
+{
+ GGPInfo *info = gc->proto_data;
+ PurpleStoredImage *image;
+ gint imgid = GPOINTER_TO_INT(g_hash_table_lookup(info->pending_images, &ev->event.image_request.crc32));
+
+ purple_debug_info("gg", "ggp_send_image_handler: image request received, crc32: %u\n", ev->event.image_request.crc32);
+
+ if(imgid)
+ {
+ if((image = purple_imgstore_find_by_id(imgid))) {
+ gint image_size = purple_imgstore_get_size(image);
+ gconstpointer image_bin = purple_imgstore_get_data(image);
+ const char *image_filename = purple_imgstore_get_filename(image);
+
+ purple_debug_info("gg", "ggp_send_image_handler: sending image imgid: %i, crc: %u\n", imgid, ev->event.image_request.crc32);
+ gg_image_reply(info->session, (unsigned long int)ev->event.image_request.sender, image_filename, image_bin, image_size);
+ purple_imgstore_unref(image);
+ } else {
+ purple_debug_error("gg", "ggp_send_image_handler: image imgid: %i, crc: %u in hash but not found in imgstore!\n", imgid, ev->event.image_request.crc32);
+ }
+ g_hash_table_remove(info->pending_images, &ev->event.image_request.crc32);
+ }
+}
+
static void ggp_callback_recv(gpointer _gc, gint fd, PurpleInputCondition cond)
{
PurpleConnection *gc = _gc;
@@ -1327,11 +1389,18 @@ static void ggp_callback_recv(gpointer _gc, gint fd, PurpleInputCondition cond)
ggp_recv_message_handler(gc, ev);
break;
case GG_EVENT_ACK:
+ /* Changing %u to %i fixes compiler warning */
purple_debug_info("gg",
- "message sent to: %u, delivery status=%d, seq=%d\n",
+ "ggp_callback_recv: message sent to: %i, delivery status=%d, seq=%d\n",
ev->event.ack.recipient, ev->event.ack.status,
ev->event.ack.seq);
break;
+ case GG_EVENT_IMAGE_REPLY:
+ ggp_recv_image_handler(gc, ev);
+ break;
+ case GG_EVENT_IMAGE_REQUEST:
+ ggp_send_image_handler(gc, ev);
+ break;
case GG_EVENT_NOTIFY:
case GG_EVENT_NOTIFY_DESCR:
{
@@ -1423,11 +1492,7 @@ static void ggp_callback_recv(gpointer _gc, gint fd, PurpleInputCondition cond)
gg_free_event(ev);
}
-/* }}} */
-/*
- */
-/* static void ggp_async_login_handler(gpointer _gc, gint fd, PurpleInputCondition cond) {{{ */
static void ggp_async_login_handler(gpointer _gc, gint fd, PurpleInputCondition cond)
{
PurpleConnection *gc = _gc;
@@ -1516,20 +1581,16 @@ static void ggp_async_login_handler(gpointer _gc, gint fd, PurpleInputCondition
gg_free_event(ev);
}
-/* }}} */
/* ---------------------------------------------------------------------- */
/* ----- PurplePluginProtocolInfo ----------------------------------------- */
/* ---------------------------------------------------------------------- */
-/* static const char *ggp_list_icon(PurpleAccount *account, PurpleBuddy *buddy) {{{ */
static const char *ggp_list_icon(PurpleAccount *account, PurpleBuddy *buddy)
{
return "gadu-gadu";
}
-/* }}} */
-/* static char *ggp_status_text(PurpleBuddy *b) {{{ */
static char *ggp_status_text(PurpleBuddy *b)
{
PurpleStatus *status;
@@ -1555,20 +1616,21 @@ static char *ggp_status_text(PurpleBuddy *b)
return text;
}
}
-/* }}} */
-/* static void ggp_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) {{{ */
static void ggp_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full)
{
PurpleStatus *status;
char *text, *tmp;
- const char *msg, *name;
+ const char *msg, *name, *alias;
g_return_if_fail(b != NULL);
status = purple_presence_get_active_status(purple_buddy_get_presence(b));
msg = purple_status_get_attr_string(status, "message");
name = purple_status_get_name(status);
+ alias = purple_buddy_get_alias(b);
+
+ purple_notify_user_info_add_pair (user_info, _("Alias"), alias);
if (msg != NULL) {
text = g_markup_escape_text(msg, -1);
@@ -1585,9 +1647,7 @@ static void ggp_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gb
purple_notify_user_info_add_pair(user_info, _("Status"), name);
}
}
-/* }}} */
-/* static GList *ggp_status_types(PurpleAccount *account) {{{ */
static GList *ggp_status_types(PurpleAccount *account)
{
PurpleStatusType *type;
@@ -1631,9 +1691,7 @@ static GList *ggp_status_types(PurpleAccount *account)
return types;
}
-/* }}} */
-/* static GList *ggp_blist_node_menu(PurpleBlistNode *node) {{{ */
static GList *ggp_blist_node_menu(PurpleBlistNode *node)
{
PurpleMenuAction *act;
@@ -1663,9 +1721,7 @@ static GList *ggp_blist_node_menu(PurpleBlistNode *node)
return m;
}
-/* }}} */
-/* static GList *ggp_chat_info(PurpleConnection *gc) {{{ */
static GList *ggp_chat_info(PurpleConnection *gc)
{
GList *m = NULL;
@@ -1679,9 +1735,7 @@ static GList *ggp_chat_info(PurpleConnection *gc)
return m;
}
-/* }}} */
-/* static void ggp_login(PurpleAccount *account) {{{ */
static void ggp_login(PurpleAccount *account)
{
PurpleConnection *gc;
@@ -1703,11 +1757,14 @@ static void ggp_login(PurpleAccount *account)
info->chats_count = 0;
info->token = NULL;
info->searches = ggp_search_new();
+ info->pending_richtext_messages = NULL;
+ info->pending_images = g_hash_table_new(g_int_hash, g_int_equal);
gc->proto_data = info;
glp->uin = ggp_get_uin(account);
glp->password = (char *)purple_account_get_password(account);
+ glp->image_size = 255;
presence = purple_account_get_presence(account);
status = purple_presence_get_active_status(presence);
@@ -1727,9 +1784,7 @@ static void ggp_login(PurpleAccount *account)
gc->inpa = purple_input_add(info->session->fd, PURPLE_INPUT_READ,
ggp_async_login_handler, gc);
}
-/* }}} */
-/* static void ggp_close(PurpleConnection *gc) {{{ */
static void ggp_close(PurpleConnection *gc)
{
@@ -1757,6 +1812,8 @@ static void ggp_close(PurpleConnection *gc)
purple_notify_close_with_handle(gc);
ggp_search_destroy(info->searches);
+ g_list_free(info->pending_richtext_messages);
+ g_hash_table_destroy(info->pending_images);
g_free(info);
gc->proto_data = NULL;
}
@@ -1768,25 +1825,108 @@ static void ggp_close(PurpleConnection *gc)
purple_debug_info("gg", "Connection closed.\n");
}
-/* }}} */
-/* static int ggp_send_im(PurpleConnection *gc, const char *who, const char *msg, PurpleMessageFlags flags) {{{ */
static int ggp_send_im(PurpleConnection *gc, const char *who, const char *msg,
PurpleMessageFlags flags)
{
GGPInfo *info = gc->proto_data;
char *tmp, *plain;
- int ret = 0;
-
- if (strlen(msg) == 0) {
+ int ret = 1;
+ unsigned char format[1024];
+ unsigned int format_length = sizeof(struct gg_msg_richtext);
+ gint pos = 0;
+ GData *attribs;
+ const char *start, *end = NULL, *last;
+
+ if (msg == NULL || *msg == '\0') {
return 0;
}
- purple_debug_info("gg", "ggp_send_im: msg = %s\n", msg);
- plain = purple_unescape_html(msg);
+ last = msg;
+
+ /* Check if the message is richtext */
+ /* TODO: Check formatting, too */
+ if(purple_markup_find_tag("img", last, &start, &end, &attribs)) {
+
+ GString *string_buffer = g_string_new(NULL);
+ struct gg_msg_richtext fmt;
+
+ do {
+ PurpleStoredImage *image;
+ const char *id;
+
+ /* Add text before the image */
+ if(start - last) {
+ pos = pos + g_utf8_strlen(last, start - last);
+ g_string_append_len(string_buffer, last, start - last);
+ }
+
+ if((id = g_datalist_get_data(&attribs, "id")) && (image = purple_imgstore_find_by_id(atoi(id)))) {
+ struct gg_msg_richtext_format actformat;
+ struct gg_msg_richtext_image actimage;
+ gint image_size = purple_imgstore_get_size(image);
+ gconstpointer image_bin = purple_imgstore_get_data(image);
+ const char *image_filename = purple_imgstore_get_filename(image);
+ uint32_t crc32 = gg_crc32(0, image_bin, image_size);
+
+ g_hash_table_insert(info->pending_images, &crc32, GINT_TO_POINTER(atoi(id)));
+ purple_imgstore_ref(image);
+ purple_debug_info("gg", "ggp_send_im_richtext: got crc: %i for imgid: %i\n", crc32, atoi(id));
+
+ actformat.font = GG_FONT_IMAGE;
+ actformat.position = pos;
+
+ actimage.unknown1 = 0x0109;
+ actimage.size = gg_fix32(image_size);
+ actimage.crc32 = gg_fix32(crc32);
+
+ if (actimage.size > 255000) {
+ purple_debug_warning("gg", "ggp_send_im_richtext: image over 255kb!\n");
+ continue;
+ }
+
+ purple_debug_info("gg", "ggp_send_im_richtext: adding images to richtext, size: %i, crc32: %u, name: %s\n", actimage.size, actimage.crc32, image_filename);
+
+ memcpy(format + format_length, &actformat, sizeof(actformat));
+ format_length += sizeof(actformat);
+ memcpy(format + format_length, &actimage, sizeof(actimage));
+ format_length += sizeof(actimage);
+ } else {
+ purple_debug_error("gg", "ggp_send_im_richtext: image not found in the image store!");
+ }
+
+ last = end + 1;
+ g_datalist_clear(&attribs);
+
+ } while(purple_markup_find_tag("img", last, &start, &end, &attribs));
+
+ /* Add text after the images */
+ if(last && *last) {
+ pos = pos + g_utf8_strlen(last, -1);
+ g_string_append(string_buffer, last);
+ }
+
+ fmt.flag = 2;
+ fmt.length = format_length - sizeof(fmt);
+ memcpy(format, &fmt, sizeof(fmt));
+
+ purple_debug_info("gg", "ggp_send_im: richtext msg = %s\n", string_buffer->str);
+ plain = purple_unescape_html(string_buffer->str);
+ g_string_free(string_buffer, TRUE);
+ } else {
+ purple_debug_info("gg", "ggp_send_im: msg = %s\n", msg);
+ plain = purple_unescape_html(msg);
+ }
+
tmp = charset_convert(plain, "UTF-8", "CP1250");
- if (NULL == tmp || strlen(tmp) == 0) {
+ if (tmp && (format_length - sizeof(struct gg_msg_richtext))) {
+ if(gg_send_message_richtext(info->session, GG_CLASS_CHAT, ggp_str_to_uin(who), (unsigned char *)tmp, format, format_length) < 0) {
+ ret = -1;
+ } else {
+ ret = 1;
+ }
+ } else if (NULL == tmp || *tmp == 0) {
ret = 0;
} else if (strlen(tmp) > GG_MSG_MAXSIZE) {
ret = -E2BIG;
@@ -1802,9 +1942,7 @@ static int ggp_send_im(PurpleConnection *gc, const char *who, const char *msg,
return ret;
}
-/* }}} */
-/* static void ggp_get_info(PurpleConnection *gc, const char *name) { {{{ */
static void ggp_get_info(PurpleConnection *gc, const char *name)
{
GGPInfo *info = gc->proto_data;
@@ -1822,9 +1960,7 @@ static void ggp_get_info(PurpleConnection *gc, const char *name)
ggp_search_add(info->searches, seq, form);
purple_debug_info("gg", "ggp_get_info(): Added seq %u", seq);
}
-/* }}} */
-/* static void ggp_set_status(PurpleAccount *account, PurpleStatus *status) {{{ */
static int ggp_to_gg_status(PurpleStatus *status, char **msg)
{
const char *status_id = purple_status_get_id(status);
@@ -1869,9 +2005,7 @@ static int ggp_to_gg_status(PurpleStatus *status, char **msg)
return new_status;
}
}
-/* }}} */
-/* static void ggp_set_status(PurpleAccount *account, PurpleStatus *status) {{{ */
static void ggp_set_status(PurpleAccount *account, PurpleStatus *status)
{
PurpleConnection *gc;
@@ -1897,9 +2031,7 @@ static void ggp_set_status(PurpleAccount *account, PurpleStatus *status)
ggp_status_fake_to_self(account);
}
-/* }}} */
-/* static void ggp_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) {{{ */
static void ggp_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
{
PurpleAccount *account;
@@ -1912,9 +2044,7 @@ static void ggp_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup
ggp_status_fake_to_self(account);
}
}
-/* }}} */
-/* static void ggp_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) {{{ */
static void ggp_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy,
PurpleGroup *group)
{
@@ -1922,9 +2052,7 @@ static void ggp_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy,
gg_remove_notify(info->session, ggp_str_to_uin(buddy->name));
}
-/* }}} */
-/* static void ggp_join_chat(PurpleConnection *gc, GHashTable *data) {{{ */
static void ggp_join_chat(PurpleConnection *gc, GHashTable *data)
{
GGPInfo *info = gc->proto_data;
@@ -1957,15 +2085,11 @@ static void ggp_join_chat(PurpleConnection *gc, GHashTable *data)
purple_account_get_username(account), NULL,
PURPLE_CBFLAGS_NONE, TRUE);
}
-/* }}} */
-/* static char *ggp_get_chat_name(GHashTable *data) { {{{ */
static char *ggp_get_chat_name(GHashTable *data) {
return g_strdup(g_hash_table_lookup(data, "name"));
}
-/* }}} */
-/* static int ggp_chat_send(PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags) {{{ */
static int ggp_chat_send(PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags)
{
PurpleConversation *conv;
@@ -2017,9 +2141,7 @@ static int ggp_chat_send(PurpleConnection *gc, int id, const char *message, Purp
return 0;
}
-/* }}} */
-/* static void ggp_keepalive(PurpleConnection *gc) {{{ */
static void ggp_keepalive(PurpleConnection *gc)
{
GGPInfo *info = gc->proto_data;
@@ -2034,9 +2156,7 @@ static void ggp_keepalive(PurpleConnection *gc)
_("Not connected to the server."));
}
}
-/* }}} */
-/* static void ggp_register_user(PurpleAccount *account) {{{ */
static void ggp_register_user(PurpleAccount *account)
{
PurpleConnection *gc = purple_account_get_connection(account);
@@ -2046,9 +2166,7 @@ static void ggp_register_user(PurpleAccount *account)
ggp_token_request(gc, ggp_register_user_dialog);
}
-/* }}} */
-/* static GList *ggp_actions(PurplePlugin *plugin, gpointer context) {{{ */
static GList *ggp_actions(PurplePlugin *plugin, gpointer context)
{
GList *m = NULL;
@@ -2088,19 +2206,15 @@ static GList *ggp_actions(PurplePlugin *plugin, gpointer context)
return m;
}
-/* }}} */
-/* static gboolean ggp_offline_message(const PurpleBuddy *buddy) {{{ */
static gboolean ggp_offline_message(const PurpleBuddy *buddy)
{
return TRUE;
}
-/* }}} */
-/* prpl_info setup {{{ */
static PurplePluginProtocolInfo prpl_info =
{
- OPT_PROTO_REGISTER_NOSCREENNAME,
+ OPT_PROTO_REGISTER_NOSCREENNAME | OPT_PROTO_IM_IMAGE,
NULL, /* user_splits */
NULL, /* protocol_options */
{"png", 32, 32, 96, 96, 0, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */
@@ -2170,36 +2284,34 @@ static PurplePluginProtocolInfo prpl_info =
sizeof(PurplePluginProtocolInfo), /* struct_size */
NULL
};
-/* }}} */
-/* PurplePluginInfo setup {{{ */
static PurplePluginInfo info = {
- PURPLE_PLUGIN_MAGIC, /* magic */
- PURPLE_MAJOR_VERSION, /* major_version */
- PURPLE_MINOR_VERSION, /* minor_version */
- PURPLE_PLUGIN_PROTOCOL, /* plugin type */
- NULL, /* ui_requirement */
- 0, /* flags */
- NULL, /* dependencies */
+ PURPLE_PLUGIN_MAGIC, /* magic */
+ PURPLE_MAJOR_VERSION, /* major_version */
+ PURPLE_MINOR_VERSION, /* minor_version */
+ PURPLE_PLUGIN_PROTOCOL, /* plugin type */
+ NULL, /* ui_requirement */
+ 0, /* flags */
+ NULL, /* dependencies */
PURPLE_PRIORITY_DEFAULT, /* priority */
- "prpl-gg", /* id */
- "Gadu-Gadu", /* name */
- DISPLAY_VERSION, /* version */
+ "prpl-gg", /* id */
+ "Gadu-Gadu", /* name */
+ DISPLAY_VERSION, /* version */
N_("Gadu-Gadu Protocol Plugin"), /* summary */
N_("Polish popular IM"), /* description */
- "boler@sourceforge.net", /* author */
- PURPLE_WEBSITE, /* homepage */
+ "boler@sourceforge.net", /* author */
+ PURPLE_WEBSITE, /* homepage */
- NULL, /* load */
- NULL, /* unload */
- NULL, /* destroy */
+ NULL, /* load */
+ NULL, /* unload */
+ NULL, /* destroy */
- NULL, /* ui_info */
- &prpl_info, /* extra_info */
- NULL, /* prefs_info */
- ggp_actions, /* actions */
+ NULL, /* ui_info */
+ &prpl_info, /* extra_info */
+ NULL, /* prefs_info */
+ ggp_actions, /* actions */
/* padding */
NULL,
@@ -2207,9 +2319,7 @@ static PurplePluginInfo info = {
NULL,
NULL
};
-/* }}} */
-/* static void purple_gg_debug_handler(int level, const char * format, va_list args) {{{ */
static void purple_gg_debug_handler(int level, const char * format, va_list args) {
PurpleDebugLevel purple_level;
char *msg = g_strdup_vprintf(format, args);
@@ -2232,11 +2342,7 @@ static void purple_gg_debug_handler(int level, const char * format, va_list args
purple_debug(purple_level, "gg", "%s", msg);
g_free(msg);
}
-/* }}} */
-/*
- */
-/* static void init_plugin(PurplePlugin *plugin) {{{ */
static void init_plugin(PurplePlugin *plugin)
{
PurpleAccountOption *option;
@@ -2250,7 +2356,6 @@ static void init_plugin(PurplePlugin *plugin)
gg_debug_handler = purple_gg_debug_handler;
}
-/* }}} */
PURPLE_INIT_PLUGIN(gg, init_plugin, info);
diff --git a/libpurple/protocols/gg/gg.h b/libpurple/protocols/gg/gg.h
index 73994c0417..cfee61232c 100644
--- a/libpurple/protocols/gg/gg.h
+++ b/libpurple/protocols/gg/gg.h
@@ -64,9 +64,10 @@ typedef struct {
int chats_count;
+ GList *pending_richtext_messages;
+ GHashTable *pending_images;
} GGPInfo;
-
#endif /* _PURPLE_GG_H */
/* vim: set ts=8 sts=0 sw=8 noet: */
diff --git a/libpurple/protocols/irc/cmds.c b/libpurple/protocols/irc/cmds.c
index 5a792368c2..34a5e40a45 100644
--- a/libpurple/protocols/irc/cmds.c
+++ b/libpurple/protocols/irc/cmds.c
@@ -71,7 +71,7 @@ int irc_cmd_away(struct irc_conn *irc, const char *cmd, const char *target, cons
int irc_cmd_ctcp(struct irc_conn *irc, const char *cmd, const char *target, const char **args)
{
/* we have defined args as args[0] is target and args[1] is ctcp command */
- char *buf;
+ char *buf;
GString *string;
/* check if we have args */
@@ -141,11 +141,11 @@ int irc_cmd_ctcp_action(struct irc_conn *irc, const char *cmd, const char *targe
action[strlen(action) - 1] = '\0';
if (purple_conversation_get_type(convo) == PURPLE_CONV_TYPE_CHAT)
serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)),
- purple_connection_get_display_name(gc),
- 0, action, time(NULL));
+ purple_connection_get_display_name(gc),
+ 0, action, time(NULL));
else
purple_conv_im_write(PURPLE_CONV_IM(convo), purple_connection_get_display_name(gc),
- action, 0, time(NULL));
+ action, 0, time(NULL));
g_free(action);
}
@@ -156,7 +156,6 @@ int irc_cmd_ctcp_version(struct irc_conn *irc, const char *cmd, const char *targ
{
char *buf;
-
if (!args || !args[0])
return 0;
diff --git a/libpurple/protocols/irc/dcc_send.c b/libpurple/protocols/irc/dcc_send.c
index 61937c8e8e..5731531c96 100644
--- a/libpurple/protocols/irc/dcc_send.c
+++ b/libpurple/protocols/irc/dcc_send.c
@@ -302,7 +302,7 @@ irc_dccsend_network_listen_cb(int sock, gpointer data)
if (sock < 0) {
purple_notify_error(gc, NULL, _("File Transfer Failed"),
- _("Could not open a listening port."));
+ _("Could not open a listening port."));
purple_xfer_cancel_local(xfer);
return;
}
@@ -313,14 +313,14 @@ irc_dccsend_network_listen_cb(int sock, gpointer data)
purple_debug_misc("irc", "port is %hu\n", port);
/* Monitor the listening socket */
xfer->watcher = purple_input_add(sock, PURPLE_INPUT_READ,
- irc_dccsend_send_connected, xfer);
+ irc_dccsend_send_connected, xfer);
/* Send the intended recipient the DCC request */
arg[0] = xfer->who;
inet_aton(purple_network_get_my_ip(irc->fd), &addr);
arg[1] = tmp = g_strdup_printf("\001DCC SEND \"%s\" %u %hu %" G_GSIZE_FORMAT "\001",
- xfer->filename, ntohl(addr.s_addr),
- port, xfer->size);
+ xfer->filename, ntohl(addr.s_addr),
+ port, xfer->size);
irc_cmd_privmsg(gc->proto_data, "msg", NULL, arg);
g_free(tmp);
@@ -343,7 +343,7 @@ static void irc_dccsend_send_init(PurpleXfer *xfer) {
if (xd->listen_data == NULL) {
purple_xfer_unref(xfer);
purple_notify_error(gc, NULL, _("File Transfer Failed"),
- _("Could not open a listening port."));
+ _("Could not open a listening port."));
purple_xfer_cancel_local(xfer);
}
diff --git a/libpurple/protocols/irc/msgs.c b/libpurple/protocols/irc/msgs.c
index 6dbd4f662d..23fb42362f 100644
--- a/libpurple/protocols/irc/msgs.c
+++ b/libpurple/protocols/irc/msgs.c
@@ -123,10 +123,10 @@ static void irc_connected(struct irc_conn *irc, const char *nick)
void irc_msg_default(struct irc_conn *irc, const char *name, const char *from, char **args)
{
char *clean;
- /* This, too, should be escaped somehow (smarter) */
- clean = purple_utf8_salvage(args[0]);
+ /* This, too, should be escaped somehow (smarter) */
+ clean = purple_utf8_salvage(args[0]);
purple_debug(PURPLE_DEBUG_INFO, "irc", "Unrecognized message: %s\n", clean);
- g_free(clean);
+ g_free(clean);
}
void irc_msg_features(struct irc_conn *irc, const char *name, const char *from, char **args)
@@ -814,8 +814,8 @@ void irc_msg_join(struct irc_conn *irc, const char *name, const char *from, char
purple_conversation_set_data(convo, IRC_NAMES_FLAG,
GINT_TO_POINTER(FALSE));
/* Until purple_conversation_present does something that
- * one would expect in Pidgin, this call produces buggy
- * behavior both for the /join and auto-join cases. */
+ * one would expect in Pidgin, this call produces buggy
+ * behavior both for the /join and auto-join cases. */
/* purple_conversation_present(convo); */
return;
}
@@ -1043,7 +1043,7 @@ void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char
return;
/* Undernet likes to :-quote the channel name, for no good reason
- * that I can see. This catches that. */
+ * that I can see. This catches that. */
channel = (args[0][0] == ':') ? &args[0][1] : args[0];
convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, channel, irc->account);
@@ -1056,8 +1056,8 @@ void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char
if (!purple_utf8_strcasecmp(nick, purple_connection_get_display_name(gc))) {
char *escaped = g_markup_escape_text(args[1], -1);
msg = g_strdup_printf(_("You have parted the channel%s%s"),
- (args[1] && *args[1]) ? ": " : "",
- (escaped && *escaped) ? escaped : "");
+ (args[1] && *args[1]) ? ": " : "",
+ (escaped && *escaped) ? escaped : "");
g_free(escaped);
purple_conv_chat_write(PURPLE_CONV_CHAT(convo), channel, msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
g_free(msg);
@@ -1168,7 +1168,7 @@ static void irc_msg_handle_privmsg(struct irc_conn *irc, const char *name, const
serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)), nick, 0, msg, time(NULL));
else
purple_debug_error("irc", "Got a %s on %s, which does not exist\n",
- notice ? "NOTICE" : "PRIVMSG", to);
+ notice ? "NOTICE" : "PRIVMSG", to);
}
g_free(msg);
g_free(nick);
diff --git a/libpurple/protocols/irc/parse.c b/libpurple/protocols/irc/parse.c
index 38002ca9d5..1b3d9dae10 100644
--- a/libpurple/protocols/irc/parse.c
+++ b/libpurple/protocols/irc/parse.c
@@ -494,7 +494,7 @@ char *irc_mirc2txt (const char *string)
}
}
result[j] = '\0';
- return result;
+ return result;
}
const char *irc_nick_skip_mode(struct irc_conn *irc, const char *nick)
@@ -732,9 +732,9 @@ void irc_parse_msg(struct irc_conn *irc, char *input)
static void irc_parse_error_cb(struct irc_conn *irc, char *input)
{
char *clean;
- /* This really should be escaped somehow that you can tell what
- * the junk was -- but as it is, it can crash glib. */
- clean = purple_utf8_salvage(input);
+ /* This really should be escaped somehow that you can tell what
+ * the junk was -- but as it is, it can crash glib. */
+ clean = purple_utf8_salvage(input);
purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unrecognized string: %s\n", clean);
- g_free(clean);
+ g_free(clean);
}
diff --git a/libpurple/protocols/jabber/message.c b/libpurple/protocols/jabber/message.c
index 10d434ee14..0143dd45b0 100644
--- a/libpurple/protocols/jabber/message.c
+++ b/libpurple/protocols/jabber/message.c
@@ -913,19 +913,15 @@ jabber_conv_support_custom_smileys(const PurpleConnection *gc,
return FALSE;
}
- jb = jabber_buddy_find(js, who, FALSE);
- if (!jb) {
- purple_debug_error("jabber",
- "jabber_conv_support_custom smileys: could not find buddy\n");
- return FALSE;
- }
-
-
-
switch (purple_conversation_get_type(conv)) {
/* for the time being, we will not support custom smileys in MUCs */
case PURPLE_CONV_TYPE_IM:
- return jabber_buddy_has_capability(jb, XEP_0231_NAMESPACE);
+ jb = jabber_buddy_find(js, who, FALSE);
+ if (jb) {
+ return jabber_buddy_has_capability(jb, XEP_0231_NAMESPACE);
+ } else {
+ return NULL;
+ }
break;
default:
return FALSE;
diff --git a/libpurple/protocols/jabber/parser.c b/libpurple/protocols/jabber/parser.c
index f0a485c437..3ace589f04 100644
--- a/libpurple/protocols/jabber/parser.c
+++ b/libpurple/protocols/jabber/parser.c
@@ -114,7 +114,8 @@ jabber_parser_element_end_libxml(void *user_data, const xmlChar *element_name,
xmlnode *packet = js->current;
js->current = NULL;
jabber_process_packet(js, &packet);
- xmlnode_free(packet);
+ if (packet != NULL)
+ xmlnode_free(packet);
}
}
@@ -137,11 +138,19 @@ jabber_parser_structured_error_handler(void *user_data, xmlErrorPtr error)
{
JabberStream *js = user_data;
+ if (error->level == XML_ERR_WARNING && error->message != NULL
+ && strcmp(error->message, "xmlns: URI vcard-temp is not absolute\n") == 0)
+ /*
+ * This message happens when parsing vcards, and is normal, so don't
+ * bother logging it because people scare easily.
+ */
+ return;
+
purple_debug_error("jabber", "XML parser error for JabberStream %p: "
- "Domain %i, code %i, level %i: %s\n",
+ "Domain %i, code %i, level %i: %s",
js,
error->domain, error->code, error->level,
- (error->message ? error->message : "(null)"));
+ (error->message ? error->message : "(null)\n"));
}
static xmlSAXHandler jabber_parser_libxml = {
diff --git a/libpurple/protocols/jabber/presence.c b/libpurple/protocols/jabber/presence.c
index d5af230b4e..162f25fc67 100644
--- a/libpurple/protocols/jabber/presence.c
+++ b/libpurple/protocols/jabber/presence.c
@@ -459,7 +459,7 @@ void jabber_presence_parse(JabberStream *js, xmlnode *packet)
if (buddy) {
jb = jabber_buddy_find(js, from, TRUE);
- if ((jb->subscription & JABBER_SUB_TO))
+ if ((jb->subscription & (JABBER_SUB_TO | JABBER_SUB_PENDING)))
onlist = TRUE;
}
diff --git a/libpurple/protocols/jabber/si.c b/libpurple/protocols/jabber/si.c
index 24c273731c..8fb5da9cb9 100644
--- a/libpurple/protocols/jabber/si.c
+++ b/libpurple/protocols/jabber/si.c
@@ -798,7 +798,7 @@ jabber_si_xfer_bytestreams_listen_cb(int sock, gpointer data)
if (!(sh->jid && sh->host && sh->port > 0))
continue;
- purple_debug_info("jabber", "jabber_si_xfer_bytestreams_listen_cb() will be looking at jsx %p: jsx->streamhosts %p and sh->jid %p",
+ purple_debug_info("jabber", "jabber_si_xfer_bytestreams_listen_cb() will be looking at jsx %p: jsx->streamhosts %p and sh->jid %p\n",
jsx, jsx->streamhosts, sh->jid);
if(g_list_find_custom(jsx->streamhosts, sh->jid, jabber_si_compare_jid) != NULL)
continue;
diff --git a/libpurple/protocols/msn/msn.c b/libpurple/protocols/msn/msn.c
index 31cf762c56..b6cbce16bb 100644
--- a/libpurple/protocols/msn/msn.c
+++ b/libpurple/protocols/msn/msn.c
@@ -1196,6 +1196,9 @@ msn_send_im(PurpleConnection *gc, const char *who, const char *message,
purple_debug_info("msn", "prepare to send online Message\n");
if (g_ascii_strcasecmp(who, username))
{
+ if (flags & PURPLE_MESSAGE_AUTO_RESP) {
+ msn_message_set_flag(msg, 'U');
+ }
if (msn_user_is_yahoo(account, who)) {
/*we send the online and offline Message to Yahoo User via UBM*/
purple_debug_info("msn", "send to Yahoo User\n");
diff --git a/libpurple/protocols/msn/notification.c b/libpurple/protocols/msn/notification.c
index 42595e7fda..6f01a5aae5 100644
--- a/libpurple/protocols/msn/notification.c
+++ b/libpurple/protocols/msn/notification.c
@@ -491,7 +491,7 @@ ubm_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
* command and we are processing it */
if (cmd->payload == NULL) {
cmdproc->last_cmd->payload_cb = msg_cmd_post;
- cmd->payload_len = atoi(cmd->params[4]);
+ cmd->payload_len = atoi(cmd->params[3]);
} else {
g_return_if_fail(cmd->payload_cb != NULL);
diff --git a/libpurple/protocols/msn/servconn.c b/libpurple/protocols/msn/servconn.c
index 13cdf8d7ed..728e4410ec 100644
--- a/libpurple/protocols/msn/servconn.c
+++ b/libpurple/protocols/msn/servconn.c
@@ -69,8 +69,7 @@ msn_servconn_destroy(MsnServConn *servconn)
return;
}
- if (servconn->connected)
- msn_servconn_disconnect(servconn);
+ msn_servconn_disconnect(servconn);
if (servconn->destroy_cb)
servconn->destroy_cb(servconn);
diff --git a/libpurple/protocols/msn/soap.c b/libpurple/protocols/msn/soap.c
index c2be9f0774..b8dd1167b6 100644
--- a/libpurple/protocols/msn/soap.c
+++ b/libpurple/protocols/msn/soap.c
@@ -1,6 +1,6 @@
/**
* @file soap.c
- * C file for SOAP connection related process
+ * Functions relating to SOAP connections.
*
* purple
*
@@ -56,6 +56,7 @@ typedef struct _MsnSoapConnection {
gboolean connected;
guint event_handle;
+ guint run_timer;
GString *buf;
gsize handled_len;
gsize body_len;
@@ -69,22 +70,99 @@ typedef struct _MsnSoapConnection {
MsnSoapRequest *current_request;
} MsnSoapConnection;
-static void msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data);
static gboolean msn_soap_connection_run(gpointer data);
-static MsnSoapConnection *msn_soap_connection_new(MsnSession *session,
- const char *host);
-static void msn_soap_connection_handle_next(MsnSoapConnection *conn);
-static void msn_soap_connection_destroy(MsnSoapConnection *conn);
+static MsnSoapConnection *
+msn_soap_connection_new(MsnSession *session, const char *host)
+{
+ MsnSoapConnection *conn = g_new0(MsnSoapConnection, 1);
+ conn->session = session;
+ conn->host = g_strdup(host);
+ conn->queue = g_queue_new();
+ return conn;
+}
-static void msn_soap_message_send_internal(MsnSession *session, MsnSoapMessage *message,
- const char *host, const char *path, gboolean secure,
- MsnSoapCallback cb, gpointer cb_data, gboolean first);
+static void
+msn_soap_message_destroy(MsnSoapMessage *message)
+{
+ g_slist_foreach(message->headers, (GFunc)g_free, NULL);
+ g_slist_free(message->headers);
+ g_free(message->action);
+ if (message->xml)
+ xmlnode_free(message->xml);
+ g_free(message);
+}
+
+static void
+msn_soap_request_destroy(MsnSoapRequest *req, gboolean keep_message)
+{
+ g_free(req->path);
+ if (!keep_message)
+ msn_soap_message_destroy(req->message);
+ g_free(req);
+}
+
+static void
+msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect)
+{
+ if (conn->event_handle) {
+ purple_input_remove(conn->event_handle);
+ conn->event_handle = 0;
+ }
-static void msn_soap_request_destroy(MsnSoapRequest *req, gboolean keep_message);
-static void msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect);
-static gboolean msn_soap_write_cb_internal(gpointer data, gint fd, PurpleInputCondition cond, gboolean initial);
-static void msn_soap_process(MsnSoapConnection *conn);
+ if (conn->run_timer) {
+ purple_timeout_remove(conn->run_timer);
+ conn->run_timer = 0;
+ }
+
+ if (conn->message) {
+ msn_soap_message_destroy(conn->message);
+ conn->message = NULL;
+ }
+
+ if (conn->buf) {
+ g_string_free(conn->buf, TRUE);
+ conn->buf = NULL;
+ }
+
+ if (conn->ssl && (disconnect || conn->close_when_done)) {
+ purple_ssl_close(conn->ssl);
+ conn->ssl = NULL;
+ }
+
+ if (conn->current_request) {
+ msn_soap_request_destroy(conn->current_request, FALSE);
+ conn->current_request = NULL;
+ }
+}
+
+static void
+msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data)
+{
+ MsnSoapRequest *req = item;
+
+ if (req->cb)
+ req->cb(req->message, NULL, req->cb_data);
+
+ msn_soap_request_destroy(req, FALSE);
+}
+
+static void
+msn_soap_connection_destroy(MsnSoapConnection *conn)
+{
+ if (conn->current_request) {
+ MsnSoapRequest *req = conn->current_request;
+ conn->current_request = NULL;
+ msn_soap_connection_destroy_foreach_cb(req, conn);
+ }
+
+ msn_soap_connection_sanitize(conn, TRUE);
+ g_queue_foreach(conn->queue, msn_soap_connection_destroy_foreach_cb, conn);
+ g_queue_free(conn->queue);
+
+ g_free(conn->host);
+ g_free(conn);
+}
static gboolean
msn_soap_cleanup_each(gpointer key, gpointer value, gpointer data)
@@ -113,8 +191,8 @@ msn_soap_cleanup_for_session(gpointer data)
&t);
if (g_hash_table_size(sess->soap_table) == 0) {
- purple_timeout_remove(sess->soap_cleanup_handle);
sess->soap_cleanup_handle = 0;
+ return FALSE;
}
}
@@ -147,38 +225,54 @@ msn_soap_get_connection(MsnSession *session, const char *host)
return conn;
}
-static MsnSoapConnection *
-msn_soap_connection_new(MsnSession *session, const char *host)
+static void
+msn_soap_connection_handle_next(MsnSoapConnection *conn)
{
- MsnSoapConnection *conn = g_new0(MsnSoapConnection, 1);
- conn->session = session;
- conn->host = g_strdup(host);
- conn->queue = g_queue_new();
- return conn;
+ msn_soap_connection_sanitize(conn, FALSE);
+
+ conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
+
+ if (conn->current_request) {
+ MsnSoapRequest *req = conn->current_request;
+ conn->current_request = NULL;
+ msn_soap_connection_destroy_foreach_cb(req, conn);
+ }
}
static void
-msn_soap_connected_cb(gpointer data, PurpleSslConnection *ssl,
- PurpleInputCondition cond)
+msn_soap_message_send_internal(MsnSession *session, MsnSoapMessage *message,
+ const char *host, const char *path, gboolean secure,
+ MsnSoapCallback cb, gpointer cb_data, gboolean first)
{
- MsnSoapConnection *conn = data;
+ MsnSoapConnection *conn = msn_soap_get_connection(session, host);
+ MsnSoapRequest *req = g_new0(MsnSoapRequest, 1);
- conn->connected = TRUE;
+ req->path = g_strdup(path);
+ req->message = message;
+ req->secure = secure;
+ req->cb = cb;
+ req->cb_data = cb_data;
+
+ if (first) {
+ g_queue_push_head(conn->queue, req);
+ } else {
+ g_queue_push_tail(conn->queue, req);
+ }
- if (conn->event_handle == 0)
- conn->event_handle = purple_timeout_add(0, msn_soap_connection_run, conn);
+ if (conn->run_timer == 0)
+ conn->run_timer = purple_timeout_add(0, msn_soap_connection_run,
+ conn);
}
-static void
-msn_soap_error_cb(PurpleSslConnection *ssl, PurpleSslErrorType error,
- gpointer data)
+void
+msn_soap_message_send(MsnSession *session, MsnSoapMessage *message,
+ const char *host, const char *path, gboolean secure,
+ MsnSoapCallback cb, gpointer cb_data)
{
- MsnSoapConnection *conn = data;
+ g_return_if_fail(message != NULL);
- /* sslconn already frees the connection in case of error */
- conn->ssl = NULL;
-
- g_hash_table_remove(conn->session->soap_table, conn->host);
+ msn_soap_message_send_internal(session, message, host, path, secure,
+ cb, cb_data, FALSE);
}
static gboolean
@@ -259,65 +353,17 @@ msn_soap_handle_body(MsnSoapConnection *conn, MsnSoapMessage *response)
}
static void
-msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
+msn_soap_message_add_header(MsnSoapMessage *message,
+ const char *name, const char *value)
{
- MsnSoapConnection *conn = data;
- int count = 0, cnt, perrno;
- /* This buffer needs to be larger than any packets received from
- login.live.com or Adium will fail to receive the packet
- (something weird with the login.live.com server). With NSS it works
- fine, so I believe it's some bug with OS X */
- char buf[16 * 1024];
- gsize cursor;
-
- if (conn->message == NULL) {
- conn->message = msn_soap_message_new(NULL, NULL);
- }
-
- if (conn->buf == NULL) {
- conn->buf = g_string_new_len(buf, 0);
- }
-
- cursor = conn->buf->len;
- while ((cnt = purple_ssl_read(conn->ssl, buf, sizeof(buf))) > 0) {
- purple_debug_info("soap", "read %d bytes\n", cnt);
- count += cnt;
- g_string_append_len(conn->buf, buf, cnt);
- }
-
- perrno = errno;
- if (cnt < 0 && perrno != EAGAIN)
- purple_debug_info("soap", "read: %s\n", g_strerror(perrno));
-
-#ifndef MSN_UNSAFE_DEBUG
- if (conn->current_request->secure)
- purple_debug_misc("soap", "Received secure request.\n");
- else
-#endif
- if (count != 0)
- purple_debug_misc("soap", "current %s\n", conn->buf->str + cursor);
-
- /* && count is necessary for Adium, on OS X the last read always
- return an error, so we want to proceed anyway. See #5212 for
- discussion on this and the above buffer size issues */
- if(cnt < 0 && errno == EAGAIN && count == 0)
- return;
+ char *header = g_strdup_printf("%s: %s\r\n", name, value);
- /* msn_soap_process could alter errno */
- msn_soap_process(conn);
-
- if (cnt < 0 && perrno != EAGAIN) {
- /* It's possible msn_soap_process closed the ssl connection */
- if (conn->ssl) {
- purple_ssl_close(conn->ssl);
- conn->ssl = NULL;
- msn_soap_connection_handle_next(conn);
- }
- }
+ message->headers = g_slist_prepend(message->headers, header);
}
static void
-msn_soap_process(MsnSoapConnection *conn) {
+msn_soap_process(MsnSoapConnection *conn)
+{
gboolean handled = FALSE;
char *cursor;
char *linebreak;
@@ -429,9 +475,61 @@ msn_soap_process(MsnSoapConnection *conn) {
}
static void
-msn_soap_write_cb(gpointer data, gint fd, PurpleInputCondition cond)
+msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
{
- msn_soap_write_cb_internal(data, fd, cond, FALSE);
+ MsnSoapConnection *conn = data;
+ int count = 0, cnt, perrno;
+ /* This buffer needs to be larger than any packets received from
+ login.live.com or Adium will fail to receive the packet
+ (something weird with the login.live.com server). With NSS it works
+ fine, so I believe it's some bug with OS X */
+ char buf[16 * 1024];
+ gsize cursor;
+
+ if (conn->message == NULL) {
+ conn->message = msn_soap_message_new(NULL, NULL);
+ }
+
+ if (conn->buf == NULL) {
+ conn->buf = g_string_new_len(buf, 0);
+ }
+
+ cursor = conn->buf->len;
+ while ((cnt = purple_ssl_read(conn->ssl, buf, sizeof(buf))) > 0) {
+ purple_debug_info("soap", "read %d bytes\n", cnt);
+ count += cnt;
+ g_string_append_len(conn->buf, buf, cnt);
+ }
+
+ perrno = errno;
+ if (cnt < 0 && perrno != EAGAIN)
+ purple_debug_info("soap", "read: %s\n", g_strerror(perrno));
+
+#ifndef MSN_UNSAFE_DEBUG
+ if (conn->current_request->secure)
+ purple_debug_misc("soap", "Received secure request.\n");
+ else
+#endif
+ if (count != 0)
+ purple_debug_misc("soap", "current %s\n", conn->buf->str + cursor);
+
+ /* && count is necessary for Adium, on OS X the last read always
+ return an error, so we want to proceed anyway. See #5212 for
+ discussion on this and the above buffer size issues */
+ if(cnt < 0 && errno == EAGAIN && count == 0)
+ return;
+
+ /* msn_soap_process could alter errno */
+ msn_soap_process(conn);
+
+ if (cnt < 0 && perrno != EAGAIN) {
+ /* It's possible msn_soap_process closed the ssl connection */
+ if (conn->ssl) {
+ purple_ssl_close(conn->ssl);
+ conn->ssl = NULL;
+ msn_soap_connection_handle_next(conn);
+ }
+ }
}
static gboolean
@@ -441,7 +539,8 @@ msn_soap_write_cb_internal(gpointer data, gint fd, PurpleInputCondition cond,
MsnSoapConnection *conn = data;
int written;
- if (cond != PURPLE_INPUT_WRITE) return TRUE;
+ if (cond != PURPLE_INPUT_WRITE)
+ return TRUE;
written = purple_ssl_write(conn->ssl, conn->buf->str + conn->handled_len,
conn->buf->len - conn->handled_len);
@@ -451,7 +550,8 @@ msn_soap_write_cb_internal(gpointer data, gint fd, PurpleInputCondition cond,
else if (written <= 0) {
purple_ssl_close(conn->ssl);
conn->ssl = NULL;
- if (!initial) msn_soap_connection_handle_next(conn);
+ if (!initial)
+ msn_soap_connection_handle_next(conn);
return FALSE;
}
@@ -475,13 +575,54 @@ msn_soap_write_cb_internal(gpointer data, gint fd, PurpleInputCondition cond,
return TRUE;
}
+static void
+msn_soap_write_cb(gpointer data, gint fd, PurpleInputCondition cond)
+{
+ msn_soap_write_cb_internal(data, fd, cond, FALSE);
+}
+
+static void
+msn_soap_error_cb(PurpleSslConnection *ssl, PurpleSslErrorType error,
+ gpointer data)
+{
+ MsnSoapConnection *conn = data;
+
+ /* sslconn already frees the connection in case of error */
+ conn->ssl = NULL;
+
+ g_hash_table_remove(conn->session->soap_table, conn->host);
+}
+
+static void
+msn_soap_connected_cb(gpointer data, PurpleSslConnection *ssl,
+ PurpleInputCondition cond)
+{
+ MsnSoapConnection *conn = data;
+
+ conn->connected = TRUE;
+
+ if (conn->run_timer == 0)
+ conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
+}
+
+MsnSoapMessage *
+msn_soap_message_new(const char *action, xmlnode *xml)
+{
+ MsnSoapMessage *message = g_new0(MsnSoapMessage, 1);
+
+ message->action = g_strdup(action);
+ message->xml = xml;
+
+ return message;
+}
+
static gboolean
msn_soap_connection_run(gpointer data)
{
MsnSoapConnection *conn = data;
MsnSoapRequest *req = g_queue_peek_head(conn->queue);
- conn->event_handle = 0;
+ conn->run_timer = 0;
if (req) {
if (conn->ssl == NULL) {
@@ -532,13 +673,13 @@ msn_soap_connection_run(gpointer data)
if (!msn_soap_write_cb_internal(conn, conn->ssl->fd, PURPLE_INPUT_WRITE, TRUE)) {
/* Not connected => reconnect and retry */
purple_debug_info("soap", "not connected, reconnecting\n");
-
+
conn->connected = FALSE;
conn->current_request = NULL;
msn_soap_connection_sanitize(conn, FALSE);
-
+
g_queue_push_head(conn->queue, req);
- conn->event_handle = purple_timeout_add(0, msn_soap_connection_run, conn);
+ conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
}
g_free(body);
@@ -547,151 +688,3 @@ msn_soap_connection_run(gpointer data)
return FALSE;
}
-
-void
-msn_soap_message_send(MsnSession *session, MsnSoapMessage *message,
- const char *host, const char *path, gboolean secure,
- MsnSoapCallback cb, gpointer cb_data)
-{
- msn_soap_message_send_internal(session, message, host, path, secure,
- cb, cb_data, FALSE);
-}
-
-static void
-msn_soap_message_send_internal(MsnSession *session, MsnSoapMessage *message,
- const char *host, const char *path, gboolean secure,
- MsnSoapCallback cb, gpointer cb_data, gboolean first)
-{
- MsnSoapConnection *conn = msn_soap_get_connection(session, host);
- MsnSoapRequest *req = g_new0(MsnSoapRequest, 1);
-
- req->path = g_strdup(path);
- req->message = message;
- req->secure = secure;
- req->cb = cb;
- req->cb_data = cb_data;
-
- if (first) {
- g_queue_push_head(conn->queue, req);
- } else {
- g_queue_push_tail(conn->queue, req);
- }
-
- if (conn->event_handle == 0)
- conn->event_handle = purple_timeout_add(0, msn_soap_connection_run,
- conn);
-}
-
-static void
-msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect)
-{
- if (conn->event_handle) {
- purple_input_remove(conn->event_handle);
- conn->event_handle = 0;
- }
-
- if (conn->message) {
- msn_soap_message_destroy(conn->message);
- conn->message = NULL;
- }
-
- if (conn->buf) {
- g_string_free(conn->buf, TRUE);
- conn->buf = NULL;
- }
-
- if (conn->ssl && (disconnect || conn->close_when_done)) {
- purple_ssl_close(conn->ssl);
- conn->ssl = NULL;
- }
-
- if (conn->current_request) {
- msn_soap_request_destroy(conn->current_request, FALSE);
- conn->current_request = NULL;
- }
-}
-
-static void
-msn_soap_connection_handle_next(MsnSoapConnection *conn)
-{
- msn_soap_connection_sanitize(conn, FALSE);
-
- conn->event_handle = purple_timeout_add(0, msn_soap_connection_run, conn);
-
- if (conn->current_request) {
- MsnSoapRequest *req = conn->current_request;
- conn->current_request = NULL;
- msn_soap_connection_destroy_foreach_cb(req, conn);
- }
-}
-
-static void
-msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data)
-{
- MsnSoapRequest *req = item;
-
- if (req->cb)
- req->cb(req->message, NULL, req->cb_data);
-
- msn_soap_request_destroy(req, FALSE);
-}
-
-static void
-msn_soap_connection_destroy(MsnSoapConnection *conn)
-{
- if (conn->current_request) {
- MsnSoapRequest *req = conn->current_request;
- conn->current_request = NULL;
- msn_soap_connection_destroy_foreach_cb(req, conn);
- }
-
- msn_soap_connection_sanitize(conn, TRUE);
- g_queue_foreach(conn->queue, msn_soap_connection_destroy_foreach_cb, conn);
- g_queue_free(conn->queue);
-
- g_free(conn->host);
- g_free(conn);
-}
-
-MsnSoapMessage *
-msn_soap_message_new(const char *action, xmlnode *xml)
-{
- MsnSoapMessage *message = g_new0(MsnSoapMessage, 1);
-
- message->action = g_strdup(action);
- message->xml = xml;
-
- return message;
-}
-
-void
-msn_soap_message_destroy(MsnSoapMessage *message)
-{
- if (message) {
- g_slist_foreach(message->headers, (GFunc)g_free, NULL);
- g_slist_free(message->headers);
- g_free(message->action);
- if (message->xml)
- xmlnode_free(message->xml);
- g_free(message);
- }
-}
-
-void
-msn_soap_message_add_header(MsnSoapMessage *message,
- const char *name, const char *value)
-{
- char *header = g_strdup_printf("%s: %s\r\n", name, value);
-
- message->headers = g_slist_prepend(message->headers, header);
-}
-
-static void
-msn_soap_request_destroy(MsnSoapRequest *req, gboolean keep_message)
-{
- g_free(req->path);
- if (!keep_message)
- msn_soap_message_destroy(req->message);
- g_free(req);
-}
-
diff --git a/libpurple/protocols/msn/soap.h b/libpurple/protocols/msn/soap.h
index 7d1a64c656..e862e4e570 100644
--- a/libpurple/protocols/msn/soap.h
+++ b/libpurple/protocols/msn/soap.h
@@ -44,13 +44,8 @@ struct _MsnSoapMessage {
MsnSoapMessage *msn_soap_message_new(const char *action, xmlnode *xml);
-void msn_soap_message_add_header(MsnSoapMessage *req,
- const char *name, const char *value);
-
void msn_soap_message_send(MsnSession *session, MsnSoapMessage *message,
const char *host, const char *path, gboolean secure,
MsnSoapCallback cb, gpointer cb_data);
-void msn_soap_message_destroy(MsnSoapMessage *message);
-
#endif
diff --git a/libpurple/protocols/msn/switchboard.c b/libpurple/protocols/msn/switchboard.c
index 1d3cfcad6d..6797e7a35d 100644
--- a/libpurple/protocols/msn/switchboard.c
+++ b/libpurple/protocols/msn/switchboard.c
@@ -577,6 +577,7 @@ release_msg(MsnSwitchBoard *swboard, MsnMessage *msg)
MsnTransaction *trans;
char *payload;
gsize payload_len;
+ char flag;
g_return_if_fail(swboard != NULL);
g_return_if_fail(msg != NULL);
@@ -590,32 +591,35 @@ release_msg(MsnSwitchBoard *swboard, MsnMessage *msg)
msn_message_show_readable(msg, "SB SEND", FALSE);
#endif
+ flag = msn_message_get_flag(msg);
trans = msn_transaction_new(cmdproc, "MSG", "%c %" G_GSIZE_FORMAT,
- msn_message_get_flag(msg), payload_len);
+ flag, payload_len);
/* Data for callbacks */
msn_transaction_set_data(trans, msg);
- if (msg->type == MSN_MSG_TEXT)
- {
- msg->ack_ref = TRUE;
- msn_message_ref(msg);
- swboard->ack_list = g_list_append(swboard->ack_list, msg);
- msn_transaction_set_timeout_cb(trans, msg_timeout);
- }
- else if (msg->type == MSN_MSG_SLP)
- {
- msg->ack_ref = TRUE;
- msn_message_ref(msg);
- swboard->ack_list = g_list_append(swboard->ack_list, msg);
- msn_transaction_set_timeout_cb(trans, msg_timeout);
-#if 0
- if (msg->ack_cb != NULL)
+ if (flag != 'U') {
+ if (msg->type == MSN_MSG_TEXT)
{
- msn_transaction_add_cb(trans, "ACK", msg_ack);
- msn_transaction_add_cb(trans, "NAK", msg_nak);
+ msg->ack_ref = TRUE;
+ msn_message_ref(msg);
+ swboard->ack_list = g_list_append(swboard->ack_list, msg);
+ msn_transaction_set_timeout_cb(trans, msg_timeout);
}
+ else if (msg->type == MSN_MSG_SLP)
+ {
+ msg->ack_ref = TRUE;
+ msn_message_ref(msg);
+ swboard->ack_list = g_list_append(swboard->ack_list, msg);
+ msn_transaction_set_timeout_cb(trans, msg_timeout);
+#if 0
+ if (msg->ack_cb != NULL)
+ {
+ msn_transaction_add_cb(trans, "ACK", msg_ack);
+ msn_transaction_add_cb(trans, "NAK", msg_nak);
+ }
#endif
+ }
}
trans->payload = payload;
@@ -806,7 +810,7 @@ static void
ubm_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
{
purple_debug_misc("msn", "get UBM...\n");
- cmd->payload_len = atoi(cmd->params[4]);
+ cmd->payload_len = atoi(cmd->params[3]);
cmdproc->last_cmd->payload_cb = msg_cmd_post;
}
diff --git a/libpurple/protocols/sametime/sametime.c b/libpurple/protocols/sametime/sametime.c
index ee2cad8606..3d01af32a2 100644
--- a/libpurple/protocols/sametime/sametime.c
+++ b/libpurple/protocols/sametime/sametime.c
@@ -1445,7 +1445,7 @@ static void session_loginRedirect(struct mwSession *session,
MW_PLUGIN_DEFAULT_HOST);
if(purple_account_get_bool(account, MW_KEY_FORCE, FALSE) ||
- (! strcmp(current_host, host)) ||
+ !host || (! strcmp(current_host, host)) ||
(purple_proxy_connect(NULL, account, host, port, connect_cb, pd) == NULL)) {
/* if we're configured to force logins, or if we're being
diff --git a/libpurple/protocols/simple/simple.c b/libpurple/protocols/simple/simple.c
index 223211e740..8c847c6310 100644
--- a/libpurple/protocols/simple/simple.c
+++ b/libpurple/protocols/simple/simple.c
@@ -1630,6 +1630,13 @@ static void process_input(struct simple_account_data *sip, struct sip_connection
cur[0] = '\0';
purple_debug_info("simple", "\n\nreceived - %s\n######\n%s\n#######\n\n", ctime(&currtime), conn->inbuf);
msg = sipmsg_parse_header(conn->inbuf);
+
+ if(!msg) {
+ /* Should we re-use this error message (from lower in the function)? */
+ purple_debug_misc("simple", "received a incomplete sip msg: %s\n", conn->inbuf);
+ return;
+ }
+
cur[0] = '\r';
cur += 2;
restlen = conn->inbufused - (cur - conn->inbuf);
diff --git a/libpurple/protocols/zephyr/zephyr.c b/libpurple/protocols/zephyr/zephyr.c
index 2298933691..14bb5c68de 100644
--- a/libpurple/protocols/zephyr/zephyr.c
+++ b/libpurple/protocols/zephyr/zephyr.c
@@ -1571,7 +1571,7 @@ static void zephyr_login(PurpleAccount * account)
#ifdef WIN32
username = purple_account_get_username(account);
#endif
- gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC;
+ gc->flags |= PURPLE_CONNECTION_AUTO_RESP | PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC;
gc->proto_data = zephyr=g_new0(zephyr_account,1);
zephyr->account = account;
diff --git a/libpurple/proxy.c b/libpurple/proxy.c
index 91d4fe8ab9..9df0be05db 100644
--- a/libpurple/proxy.c
+++ b/libpurple/proxy.c
@@ -944,12 +944,15 @@ http_canread(gpointer data, gint source, PurpleInputCondition cond)
} else if((header = g_strrstr((const char *)connect_data->read_buffer, "Proxy-Authenticate: Basic"))) {
gchar *t1, *t2;
+ const char *username, *password;
+
+ username = purple_proxy_info_get_username(connect_data->gpi);
+ password = purple_proxy_info_get_password(connect_data->gpi);
t1 = g_strdup_printf("%s:%s",
- purple_proxy_info_get_username(connect_data->gpi),
- purple_proxy_info_get_password(connect_data->gpi) ?
- purple_proxy_info_get_password(connect_data->gpi) : "");
- t2 = purple_base64_encode((const guchar *)t1, strlen(t1));
+ username ? username : "",
+ password ? password : "");
+ t2 = purple_base64_encode((guchar *)t1, strlen(t1));
g_free(t1);
request = g_strdup_printf(
diff --git a/pidgin/plugins/relnot.c b/pidgin/plugins/relnot.c
index 13b63b665e..607646dae3 100644
--- a/pidgin/plugins/relnot.c
+++ b/pidgin/plugins/relnot.c
@@ -34,7 +34,10 @@
#include "connection.h"
#include "core.h"
#include "debug.h"
+#include "gtkblist.h"
+#include "gtkutils.h"
#include "notify.h"
+#include "pidginstock.h"
#include "prefs.h"
#include "util.h"
#include "version.h"
@@ -45,12 +48,26 @@
#define MIN_CHECK_INTERVAL 60 * 60 * 24
static void
+release_hide()
+{
+ /* No-op. We may use this method in the future to avoid showing
+ * the popup twice */
+}
+
+static void
+release_show()
+{
+ purple_notify_uri(NULL, PURPLE_WEBSITE);
+}
+
+static void
version_fetch_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
const gchar *response, size_t len, const gchar *error_message)
{
- gchar *cur_ver, *formatted;
+ gchar *cur_ver;
const char *tmp, *changelog;
char response_code[4];
+ GtkWidget *release_dialog;
GString *message;
int i = 0;
@@ -89,27 +106,21 @@ version_fetch_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
return;
cur_ver = g_strndup(changelog, i);
- changelog += i;
-
- while(*changelog == '\n') changelog++;
message = g_string_new("");
- g_string_append_printf(message, _("You are using %s version %s. The "
- "current version is %s. You can get it from "
- "<a href=\"%s\">%s</a><hr>"),
- PIDGIN_NAME, purple_core_get_version(), cur_ver,
- PURPLE_WEBSITE, PURPLE_WEBSITE);
-
- if(*changelog) {
- formatted = purple_strdup_withhtml(changelog);
- g_string_append_printf(message, _("<b>ChangeLog:</b><br>%s"),
- formatted);
- g_free(formatted);
- }
-
- purple_notify_formatted(NULL, _("New Version Available"),
- _("New Version Available"), NULL, message->str,
- NULL, NULL);
+ g_string_append_printf(message, _("You can upgrade to %s %s today."),
+ PIDGIN_NAME, cur_ver);
+
+ release_dialog = pidgin_make_mini_dialog(
+ NULL, PIDGIN_STOCK_DIALOG_INFO,
+ _("New Version Available"),
+ message->str,
+ NULL,
+ _("Later"), PURPLE_CALLBACK(release_hide),
+ _("Download Now"), PURPLE_CALLBACK(release_show),
+ NULL);
+
+ pidgin_blist_add_alert(release_dialog);
g_string_free(message, TRUE);
g_free(cur_ver);
diff --git a/pidgin/win32/winpidgin.c b/pidgin/win32/winpidgin.c
index 74917a750d..c954ab299e 100644
--- a/pidgin/win32/winpidgin.c
+++ b/pidgin/win32/winpidgin.c
@@ -621,9 +621,22 @@ WinMain (struct HINSTANCE__ *hInstance, struct HINSTANCE__ *hPrevInstance,
char *tmp;
int pidgin_argc = __argc;
char **pidgin_argv = __argv;
+ int i;
+ BOOL debug = FALSE, help = FALSE, version = FALSE, multiple = FALSE;
/* If debug or help or version flag used, create console for output */
- if (strstr(lpszCmdLine, "-d") || strstr(lpszCmdLine, "-h") || strstr(lpszCmdLine, "-v")) {
+ for (i = 1; i < __argc; i++) {
+ if (strstr(__argv[i], "-d") || strstr(__argv[i], "--debug"))
+ debug = TRUE;
+ else if (strstr(__argv[i], "-h") || strstr(__argv[i], "--help"))
+ help = TRUE;
+ else if (strstr(__argv[i], "-v") || strstr(__argv[i], "--version"))
+ version = TRUE;
+ else if (strstr(__argv[i], "-m") || strstr(__argv[i], "--multiple"))
+ multiple = TRUE;
+ }
+
+ if (debug || help || version) {
/* If stdout hasn't been redirected to a file, alloc a console
* (_istty() doesn't work for stuff using the GUI subsystem) */
if (_fileno(stdout) == -1 || _fileno(stdout) == -2) {
@@ -710,8 +723,8 @@ WinMain (struct HINSTANCE__ *hInstance, struct HINSTANCE__ *hPrevInstance,
winpidgin_add_stuff_to_path();
/* If help, version or multiple flag used, do not check Mutex */
- if (!strstr(lpszCmdLine, "-h") && !strstr(lpszCmdLine, "-v"))
- if (!winpidgin_set_running(getenv("PIDGIN_MULTI_INST") == NULL && strstr(lpszCmdLine, "-m") == NULL))
+ if (!help && !version)
+ if (!winpidgin_set_running(getenv("PIDGIN_MULTI_INST") == NULL && !multiple))
return 0;
/* Now we are ready for Pidgin .. */
diff --git a/po/hu.po b/po/hu.po
index 65c12f26fa..c2ccd7bffb 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pidgin 2.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-10-16 00:55-0700\n"
-"PO-Revision-Date: 2008-10-02 18:55+0200\n"
+"POT-Creation-Date: 2008-11-23 21:15+0100\n"
+"PO-Revision-Date: 2008-11-23 21:16+0100\n"
"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
"Language-Team: Hungarian <gnome@fsf.hu>\n"
"MIME-Version: 1.0\n"
@@ -73,7 +73,6 @@ msgstr "Értesítések új levélre"
msgid "Remember password"
msgstr "Emlékezzen a jelszóra"
-#, fuzzy
msgid "There are no protocol plugins installed."
msgstr "Nincsenek protokollbővítmények telepítve."
@@ -146,8 +145,7 @@ msgstr "Felveszi a partnert a partnerlistájára?"
#, c-format
msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s"
-msgstr ""
-"%s%s%s%s felhasználó szeretné %s partnert felvenni a partnerlistájára%s%s"
+msgstr "%s%s%s%s felhasználó szeretné %s partnert felvenni a partnerlistájára%s%s"
msgid "Authorize buddy?"
msgstr "Engedélyezi a partnert?"
@@ -242,9 +240,6 @@ msgstr "Hiba a csoport hozzáadásakor"
msgid "You must give a name for the group to add."
msgstr "Meg kell adnia a felvenni kívánt csoport nevét."
-msgid "A group with the name already exists."
-msgstr "Ilyen nevű csoport már létezik."
-
msgid "Add Group"
msgstr "Csoport felvétele"
@@ -275,15 +270,14 @@ msgstr "Információ lekérése"
msgid "Add Buddy Pounce"
msgstr "Partnerfigyelmeztetés felvétele"
-#. if (q_bud && is_online(q_bud->status)) {
msgid "Send File"
msgstr "Fájl küldése"
msgid "Blocked"
msgstr "Tiltott"
-msgid "View Log"
-msgstr "Napló megtekintése"
+msgid "Show when offline"
+msgstr "Megjelenítés, ha elérhető"
#, c-format
msgid "Please enter the new name for %s"
@@ -302,8 +296,7 @@ msgid "Removing this contact will also remove all the buddies in the contact"
msgstr "A kapcsolat eltávolítása a kapcsolat partnereit is eltávolítja"
msgid "Removing this group will also remove all the buddies in the group"
-msgstr ""
-"A csoport eltávolítása a csoportban található partnereket is eltávolítja"
+msgstr "A csoport eltávolítása a csoportban található partnereket is eltávolítja"
#, c-format
msgid "Are you sure you want to remove %s?"
@@ -326,6 +319,9 @@ msgstr "Hely megcímkézve"
msgid "Toggle Tag"
msgstr "Címke átváltása"
+msgid "View Log"
+msgstr "Napló megtekintése"
+
#. General
msgid "Nickname"
msgstr "Becenév"
@@ -373,8 +369,7 @@ msgid "New Instant Message"
msgstr "Új azonnali üzenet"
msgid "Please enter the username or alias of the person you would like to IM."
-msgstr ""
-"Adja meg azon személy felhasználónevét vagy álnevét, akinek üzenni szeretne."
+msgstr "Adja meg azon személy felhasználónevét vagy álnevét, akinek üzenni szeretne."
msgid "Channel"
msgstr "Csatorna"
@@ -600,13 +595,10 @@ msgid "You have left this chat."
msgstr "Elhagyta ezt a csevegést."
msgid "Logging started. Future messages in this conversation will be logged."
-msgstr ""
-"A naplózás elkezdődött. A társalgás jövőbeli üzenetei naplózva lesznek."
+msgstr "A naplózás elkezdődött. A társalgás jövőbeli üzenetei naplózva lesznek."
-msgid ""
-"Logging stopped. Future messages in this conversation will not be logged."
-msgstr ""
-"A naplózás befejeződött. A társalgás jövőbeli üzenetei nem lesznek naplózva."
+msgid "Logging stopped. Future messages in this conversation will not be logged."
+msgstr "A naplózás befejeződött. A társalgás jövőbeli üzenetei nem lesznek naplózva."
msgid "Send To"
msgstr "Küldés ennek"
@@ -678,8 +670,7 @@ msgstr ""
#, c-format
msgid "%s is not a valid color. See '/help msgcolor' for valid colors."
-msgstr ""
-"%s nem érvényes szín. Az érvényes színekért lásd a „help msgcolor” kimenetét."
+msgstr "%s nem érvényes szín. Az érvényes színekért lásd a „help msgcolor” kimenetét."
msgid ""
"say &lt;message&gt;: Send a message normally as if you weren't using a "
@@ -852,8 +843,7 @@ msgstr ""
"Az azonnali üzenetek csak akkor lesznek naplózva, ha az „Összes azonnali "
"üzenet naplózása” tulajdonság be van állítva."
-msgid ""
-"Chats will only be logged if the \"Log all chats\" preference is enabled."
+msgid "Chats will only be logged if the \"Log all chats\" preference is enabled."
msgstr ""
"A csevegések csak akkor lesznek naplózva, ha az „Összes csevegés naplózása” "
"tulajdonság be van állítva."
@@ -959,8 +949,7 @@ msgstr "Hiba a bővítmény betöltésekor"
msgid "The selected file is not a valid plugin."
msgstr "A kiválasztott fájl nem egy érvényes bővítmény."
-msgid ""
-"Please open the debug window and try again to see the exact error message."
+msgid "Please open the debug window and try again to see the exact error message."
msgstr ""
"Nyissa meg a hibakereső ablakot és próbálkozzon újra a pontos hibaüzenet "
"megjelenítéséhez."
@@ -1332,7 +1321,7 @@ msgstr "Típus"
#. PurpleStatusPrimitive
#. id - use default
#. name - use default
-#. savable
+#. saveable
#. user_settable
#. not independent
#. Attributes - each status can have a message.
@@ -1393,8 +1382,7 @@ msgid "Couldn't find window"
msgstr "Az ablak nem található"
msgid "This plugin cannot be loaded because it was not built with X11 support."
-msgstr ""
-"A bővítmény nem tölthető be, mivel X11 támogatás nélkül került lefordításra."
+msgstr "A bővítmény nem tölthető be, mivel X11 támogatás nélkül került lefordításra."
msgid "GntClipboard"
msgstr "GntClipboard"
@@ -1675,8 +1663,7 @@ msgstr ""
"ellenőrizhető."
#. vrq will be completed by user_auth
-msgid ""
-"The root certificate this one claims to be issued by is unknown to Pidgin."
+msgid "The root certificate this one claims to be issued by is unknown to Pidgin."
msgstr "A tanúsítványt kiadó gyökértanúsítványt a Pidgin nem ismeri."
#, c-format
@@ -2087,8 +2074,7 @@ msgid "Whether the specified command should handle \"ymsgr\" URLs"
msgstr "A megadott parancs kezelje-e az „ymsgr” URL címeket"
msgid "<b><font color=\"red\">The logger has no read function</font></b>"
-msgstr ""
-"<b><font color=\"red\">A naplózónak nincsen olvasás funkciója</font></b>"
+msgstr "<b><font color=\"red\">A naplózónak nincsen olvasás funkciója</font></b>"
msgid "HTML"
msgstr "HTML"
@@ -2148,8 +2134,7 @@ msgstr "A bővítmény típusa nem egyezik: %d (szükséges: %d"
msgid "ABI version mismatch %d.%d.x (need %d.%d.x)"
msgstr "Az ABI verziója nem egyezik: %d.%d.x (szükséges: %d.%d.x)"
-msgid ""
-"Plugin does not implement all required functions (list_icon, login and close)"
+msgid "Plugin does not implement all required functions (list_icon, login and close)"
msgstr ""
"A bővítmény nem valósítja meg az összes kívánt függvényt (list_icon, login "
"és close)"
@@ -2158,8 +2143,7 @@ msgstr ""
msgid ""
"The required plugin %s was not found. Please install this plugin and try "
"again."
-msgstr ""
-"A szükséges %s bővítmény nem található. Kérem telepítse, majd próbálja újra."
+msgstr "A szükséges %s bővítmény nem található. Kérem telepítse, majd próbálja újra."
msgid "Unable to load the plugin"
msgstr "A bővítmény nem tölthető be"
@@ -2224,8 +2208,7 @@ msgstr ""
"(Teljes elérési utat adjon meg)"
msgid "Automatically reject from users not in buddy list"
-msgstr ""
-"Automatikus visszautasítás a partnerlistán nem szereplő felhasználóktól"
+msgstr "Automatikus visszautasítás a partnerlistán nem szereplő felhasználóktól"
msgid ""
"Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2454,8 +2437,7 @@ msgstr "Megszakadt a kapcsolat a kiszolgálóval."
msgid ""
"You are currently disconnected. Messages will not be received unless you are "
"logged in."
-msgstr ""
-"Jelenleg nincs csatlakozva. Nem fogadhat üzeneteket, amíg nem jelentkezik be."
+msgstr "Jelenleg nincs csatlakozva. Nem fogadhat üzeneteket, amíg nem jelentkezik be."
msgid "Message could not be sent because the maximum length was exceeded."
msgstr "Az üzenet nem küldhető el, mivel a maximális hossz el lett érve."
@@ -2829,10 +2811,8 @@ msgstr ""
msgid "Unable to listen for incoming IM connections\n"
msgstr "Nem lehetséges a bejövő azonnali üzenő kapcsolatokat figyelni\n"
-msgid ""
-"Unable to establish connection with the local mDNS server. Is it running?"
-msgstr ""
-"Nem hozható létre kapcsolat a helyi mDNS kiszolgálóval. Egyáltalán fut?"
+msgid "Unable to establish connection with the local mDNS server. Is it running?"
+msgstr "Nem hozható létre kapcsolat a helyi mDNS kiszolgálóval. Egyáltalán fut?"
#. Creating the options for the protocol
msgid "First name"
@@ -3499,8 +3479,7 @@ msgid "nickserv: Send a command to nickserv"
msgstr "nickserv: parancs küldése a nickserv kiszolgálónak"
msgid "notice &lt;target&lt;: Send a notice to a user or channel."
-msgstr ""
-"notice &lt;cél&lt;: Értesítés küldése egy felhasználónak vagy csatornának."
+msgstr "notice &lt;cél&lt;: Értesítés küldése egy felhasználónak vagy csatornának."
msgid ""
"op &lt;nick1&gt; [nick2] ...: Grant channel operator status to someone. You "
@@ -3584,8 +3563,7 @@ msgstr ""
"tudja."
msgid "whois [server] &lt;nick&gt;: Get information on a user."
-msgstr ""
-"whois [kiszolgáló] &lt;becenév&gt;: Információk lekérése egy felhasználóról."
+msgstr "whois [kiszolgáló] &lt;becenév&gt;: Információk lekérése egy felhasználóról."
msgid "whowas &lt;nick&gt;: Get information on a user that has logged off."
msgstr ""
@@ -3623,8 +3601,7 @@ msgid "You require encryption, but no TLS/SSL support found."
msgstr "Titkosítást kér, de a TLS/SSL támogatása nem található."
msgid "Server requires plaintext authentication over an unencrypted stream"
-msgstr ""
-"A kiszolgáló szöveges hitelesítést követel meg egy nem titkosított csatornán"
+msgstr "A kiszolgáló szöveges hitelesítést követel meg egy nem titkosított csatornán"
#, c-format
msgid ""
@@ -3957,8 +3934,7 @@ msgid "Server Instructions: %s"
msgstr "Kiszolgálóutasítások: %s"
msgid "Fill in one or more fields to search for any matching XMPP users."
-msgstr ""
-"Töltsön ki legalább egy mezőt a megfelelő XMPP felhasználók kereséséhez."
+msgstr "Töltsön ki legalább egy mezőt a megfelelő XMPP felhasználók kereséséhez."
msgid "Email Address"
msgstr "E-mail cím"
@@ -4116,8 +4092,7 @@ msgstr "Dátum"
msgid "Unregister"
msgstr "Regisztráció megszüntetése"
-msgid ""
-"Please fill out the information below to change your account registration."
+msgid "Please fill out the information below to change your account registration."
msgstr "Adja meg a következő információkat a regisztrált fiók módosításához."
msgid "Please fill out the information below to register your new account."
@@ -4491,8 +4466,7 @@ msgstr "join: &lt;szoba&gt; [jelszó]: Csatlakozás csevegéshez a kiszolgáló
msgid "kick &lt;user&gt; [reason]: Kick a user from the room."
msgstr "kick &lt;felhasználó&gt; [ok]: Felhasználó kirúgása a szobából."
-msgid ""
-"msg &lt;user&gt; &lt;message&gt;: Send a private message to another user."
+msgid "msg &lt;user&gt; &lt;message&gt;: Send a private message to another user."
msgstr ""
"msg &lt;felhasználó&gt; &lt;üzenet&gt;: Magánüzenet küldése másik "
"felhasználónak."
@@ -4543,7 +4517,6 @@ msgstr "Fájlátviteli proxy-k"
#. this should probably be part of global smiley theme settings later on,
#. shared with MSN
-#, fuzzy
msgid "Show Custom Smileys"
msgstr "Egyéni hangulatjelek megjelenítése"
@@ -4915,13 +4888,11 @@ msgstr "Ismeretlen hibakód %d"
msgid "MSN Error: %s\n"
msgstr "MSN hiba: %s\n"
-#, fuzzy
msgid "Other Contacts"
-msgstr "Előnyben részesített kapcsolat"
+msgstr "Egyéb partnerek"
-#, fuzzy
msgid "Non-IM Contacts"
-msgstr "Kapcsolat eltávolítása"
+msgstr "Nem azonnali üzenetváltási partnerek"
msgid "Nudge"
msgstr "Bökés"
@@ -4979,8 +4950,7 @@ msgid "No text is blocked for this account."
msgstr "Nincs tiltott szöveg ehhez a fiókhoz."
#, c-format
-msgid ""
-"MSN servers are currently blocking the following regular expressions:<br/>%s"
+msgid "MSN servers are currently blocking the following regular expressions:<br/>%s"
msgstr ""
"Az MSN kiszolgálók jelenleg a következő reguláris kifejezéseket tiltják:<br/>"
"%s"
@@ -5021,7 +4991,7 @@ msgstr "Ebédelni mentem"
#. primitive
#. ID
#. name - use default
-#. savable
+#. saveable
#. should be user_settable some day
#. independent
msgid "Artist"
@@ -5234,8 +5204,7 @@ msgstr "Profil URL-je"
#. *< id
#. *< name
#. *< version
-#. * summary
-#. * description
+#. *< summary
msgid "Windows Live Messenger Protocol Plugin"
msgstr "Windows Live Messenger protokollbővítmény"
@@ -5272,6 +5241,7 @@ msgstr "%s ezen: %s (%s)"
msgid "%s just sent you a Nudge!"
msgstr "%s megbökte!"
+#. char *adl = g_strndup(payload, len);
#, c-format
msgid "Unknown error (%d)"
msgstr "Ismeretlen hiba (%d)"
@@ -5279,9 +5249,8 @@ msgstr "Ismeretlen hiba (%d)"
msgid "Unable to add user"
msgstr "Nem vehető fel a felhasználó"
-#, fuzzy
msgid "The following users are missing from your addressbook"
-msgstr "A keresés eredményei a következők"
+msgstr "A következő felhasználók hiányoznak a címjegyzékéből"
#, c-format
msgid "Unable to add user on %s (%s)"
@@ -5397,8 +5366,7 @@ msgstr "Az MSN kiszolgálók átmenetileg leállnak."
msgid "Unable to authenticate: %s"
msgstr "Nem sikerült a hitelesítés: %s"
-msgid ""
-"Your MSN buddy list is temporarily unavailable. Please wait and try again."
+msgid "Your MSN buddy list is temporarily unavailable. Please wait and try again."
msgstr ""
"Az Ön MSN partnerlistája átmenetileg nem érhető el. Kérem várjon és próbálja "
"újra később."
@@ -5431,8 +5399,7 @@ msgid "Out To Lunch"
msgstr "Ebédelni mentem"
msgid "Message may have not been sent because a timeout occurred:"
-msgstr ""
-"Időtúllépés következett be, emiatt az üzenet lehet, hogy nem lett elküldve:"
+msgstr "Időtúllépés következett be, emiatt az üzenet lehet, hogy nem lett elküldve:"
msgid "Message could not be sent, not allowed while invisible:"
msgstr "Az üzenet nem küldhető el, láthatatlan módban nem engedélyezett:"
@@ -5454,8 +5421,7 @@ msgstr ""
"kiszolgálóval. Ez valószínűleg kiszolgálóhiba, pár perc múlva próbálkozzon "
"újra:"
-msgid ""
-"Message could not be sent because an error with the switchboard occurred:"
+msgid "Message could not be sent because an error with the switchboard occurred:"
msgstr "Az üzenet nem küldhető el, mivel hiba lépett fel a közvetítés közben:"
msgid "Message may have not been sent because an unknown error occurred:"
@@ -5469,13 +5435,11 @@ msgstr "%s felvette Önt a partnerlistájára."
msgid "%s has removed you from his or her buddy list."
msgstr "%s eltávolította Önt a partnerlistájáról."
-#, fuzzy
msgid "Delete Buddy from Address Book?"
-msgstr "Hozzáadás a címjegyzékhez"
+msgstr "Törli a partnert a címjegyzékből?"
-#, fuzzy
msgid "Do you want to delete this buddy from your address book as well?"
-msgstr "Fel kívánja venni ezt a partnert a listájára?"
+msgstr "Törölni kívánja a partnert a címjegyzékéből is?"
#. only notify the user about problems adding to the friends list
#. * maybe we should do something else for other lists, but it probably
@@ -5953,8 +5917,7 @@ msgstr "A felhasználó letiltotta Önt"
msgid ""
"This evaluation version does not allow more than ten users to log in at one "
"time"
-msgstr ""
-"Ez a próbaverzió nem engedélyezi tíznél több felhasználó egyidejű belépését"
+msgstr "Ez a próbaverzió nem engedélyezi tíznél több felhasználó egyidejű belépését"
msgid "The user is either offline or you are blocked"
msgstr "A felhasználó kilépett, vagy Ön le van tiltva"
@@ -5994,8 +5957,7 @@ msgstr ""
#, c-format
msgid "Unable to send message. Could not create the conference (%s)."
-msgstr ""
-"Az üzenetet nem lehet elküldeni. Nem sikerült létrehozni a konferenciát (%s)."
+msgstr "Az üzenetet nem lehet elküldeni. Nem sikerült létrehozni a konferenciát (%s)."
#, c-format
msgid ""
@@ -6035,8 +5997,7 @@ msgstr "Nem lehet %s felhasználót eltávolítani a magánszféra-listáról (%
#, c-format
msgid "Unable to change server side privacy settings (%s)."
-msgstr ""
-"Nem lehet megváltoztatni a kiszolgálóoldali magánszféra-beállításokat (%s)."
+msgstr "Nem lehet megváltoztatni a kiszolgálóoldali magánszféra-beállításokat (%s)."
#, c-format
msgid "Unable to create conference (%s)."
@@ -6100,12 +6061,10 @@ msgid "Would you like to join the conversation?"
msgstr "Szeretne csatlakozni a társalgáshoz?"
msgid "You have been logged out because you logged in at another workstation."
-msgstr ""
-"Ki lett jelentkeztetve, mivel bejelentkezett egy másik munkaállomásról."
+msgstr "Ki lett jelentkeztetve, mivel bejelentkezett egy másik munkaállomásról."
#, c-format
-msgid ""
-"%s appears to be offline and did not receive the message that you just sent."
+msgid "%s appears to be offline and did not receive the message that you just sent."
msgstr "Úgy tűnik, %s kilépett, és nem kapta meg az utoljára küldött üzenetet."
msgid ""
@@ -6449,6 +6408,7 @@ msgstr ""
"tartalmazhatnak."
#. Unregistered screen name
+#. uid is not exist
msgid "Invalid username."
msgstr "Érvénytelen felhasználónév."
@@ -6556,8 +6516,7 @@ msgstr "ICQ engedélyezés elutasítva."
#. Someone has granted you authorization
#, c-format
msgid "The user %u has granted your request to add them to your buddy list."
-msgstr ""
-"%u felhasználó elfogadta a kérését, így felveheti őt a partnerlistájára."
+msgstr "%u felhasználó elfogadta a kérését, így felveheti őt a partnerlistájára."
#, c-format
msgid ""
@@ -6611,27 +6570,21 @@ msgstr "_Elutasítás"
#, c-format
msgid "You missed %hu message from %s because it was invalid."
msgid_plural "You missed %hu messages from %s because they were invalid."
-msgstr[0] ""
-"Nem kapott meg %hu üzenetet a következőtől: %s, mert az érvénytelen volt."
-msgstr[1] ""
-"Nem kapott meg %hu üzenetet a következőtől: %s, mert az érvénytelen volt."
+msgstr[0] "Nem kapott meg %hu üzenetet a következőtől: %s, mert az érvénytelen volt."
+msgstr[1] "Nem kapott meg %hu üzenetet a következőtől: %s, mert az érvénytelen volt."
#, c-format
msgid "You missed %hu message from %s because it was too large."
msgid_plural "You missed %hu messages from %s because they were too large."
-msgstr[0] ""
-"Nem kapott meg %hu üzenetet a következőtől: %s, mert az túl nagy volt."
-msgstr[1] ""
-"Nem kapott meg %hu üzenetet a következőtől: %s, mert az túl nagy volt."
+msgstr[0] "Nem kapott meg %hu üzenetet a következőtől: %s, mert az túl nagy volt."
+msgstr[1] "Nem kapott meg %hu üzenetet a következőtől: %s, mert az túl nagy volt."
# #: ../src/protocols/oscar/oscar.c:1605
# #, c-format
# msgid "You missed %d message from %s because the rate limit has been exceeded."
#, c-format
-msgid ""
-"You missed %hu message from %s because the rate limit has been exceeded."
-msgid_plural ""
-"You missed %hu messages from %s because the rate limit has been exceeded."
+msgid "You missed %hu message from %s because the rate limit has been exceeded."
+msgid_plural "You missed %hu messages from %s because the rate limit has been exceeded."
msgstr[0] ""
"Nem kapott meg %hu üzenetet a következőtől: %s, mert túllépte a küldés "
"gyakoriságának a korlátját."
@@ -6640,10 +6593,8 @@ msgstr[1] ""
"gyakoriságának a korlátját."
#, c-format
-msgid ""
-"You missed %hu message from %s because his/her warning level is too high."
-msgid_plural ""
-"You missed %hu messages from %s because his/her warning level is too high."
+msgid "You missed %hu message from %s because his/her warning level is too high."
+msgid_plural "You missed %hu messages from %s because his/her warning level is too high."
msgstr[0] ""
"Nem kapott meg %hu üzenetet a következőtől: %s, mert a feladó "
"figyelmeztetési szintje túl magas volt."
@@ -6653,8 +6604,7 @@ msgstr[1] ""
#, c-format
msgid "You missed %hu message from %s because your warning level is too high."
-msgid_plural ""
-"You missed %hu messages from %s because your warning level is too high."
+msgid_plural "You missed %hu messages from %s because your warning level is too high."
msgstr[0] ""
"Nem kapott meg %hu üzenetet a következőtől: %s, mert az Ön figyelmeztetési "
"szintje túl magas."
@@ -6818,8 +6768,7 @@ msgstr "%s e-mail címe a következő: %s"
msgid "Account Info"
msgstr "Fiókinformációk"
-msgid ""
-"Your IM Image was not sent. You must be Direct Connected to send IM Images."
+msgid "Your IM Image was not sent. You must be Direct Connected to send IM Images."
msgstr ""
"Az Ön IM képe nem lett elküldve. IM képek küldéséhez közvetlen kapcsolatban "
"kell lennie."
@@ -6843,10 +6792,8 @@ msgid ""
msgid_plural ""
"The maximum profile length of %d bytes has been exceeded. It has been "
"truncated for you."
-msgstr[0] ""
-"A profil mérete túllépte a maximális %d bájtot. Ez csonkításra került."
-msgstr[1] ""
-"A profil mérete túllépte a maximális %d bájtot. Ez csonkításra került."
+msgstr[0] "A profil mérete túllépte a maximális %d bájtot. Ez csonkításra került."
+msgstr[1] "A profil mérete túllépte a maximális %d bájtot. Ez csonkításra került."
msgid "Profile too long."
msgstr "A profil túl hosszú."
@@ -6879,10 +6826,10 @@ msgstr ""
"kezdődniük, és betűket, számokat és szóközöket, vagy csak számokból "
"állhatnak."
-msgid "Unable To Add"
+msgid "Unable to Add"
msgstr "Nem sikerült felvenni"
-msgid "Unable To Retrieve Buddy List"
+msgid "Unable to Retrieve Buddy List"
msgstr "Nem lehet lekérni a partnerek listáját"
msgid ""
@@ -6948,8 +6895,7 @@ msgid "_Exchange:"
msgstr "_Váltás:"
msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats."
-msgstr ""
-"Az Ön IM képe nem lett elküldve. Nem küldhet IM képeket AIM csevegésekbe."
+msgstr "Az Ön IM képe nem lett elküldve. Nem küldhet IM képeket AIM csevegésekbe."
msgid "iTunes Music Store Link"
msgstr "iTunes zenebolt hivatkozás"
@@ -7081,8 +7027,7 @@ msgstr "Több párhuzamos bejelentkezés engedélyezése"
#, c-format
msgid "Asking %s to connect to us at %s:%hu for Direct IM."
-msgstr ""
-"%s felkérése, hogy kapcsolódjon hozzánk ezen: %s:%hu közvetlen kapcsolattal."
+msgstr "%s felkérése, hogy kapcsolódjon hozzánk ezen: %s:%hu közvetlen kapcsolattal."
#, c-format
msgid "Attempting to connect to %s:%hu."
@@ -7105,42 +7050,6 @@ msgstr ""
"képekhez. Ezzel láthatóvá válik az IP címe, ami veszélyeztetheti a "
"magánszférája biztonságát."
-msgid "Primary Information"
-msgstr "Elsődleges információk"
-
-msgid "Personal Introduction"
-msgstr "Személyes bemutatkozás"
-
-msgid "QQ Number"
-msgstr "QQ szám"
-
-msgid "Country/Region"
-msgstr "Ország/terület"
-
-msgid "Province/State"
-msgstr "Megye/állam"
-
-msgid "Horoscope Symbol"
-msgstr "Horoszkóp szimbólum"
-
-msgid "Zodiac Sign"
-msgstr "Zodiákus jel"
-
-msgid "Blood Type"
-msgstr "Vércsoport"
-
-msgid "College"
-msgstr "Főiskola"
-
-msgid "Zipcode"
-msgstr "Irányítószám"
-
-msgid "Cellphone Number"
-msgstr "Mobil telefonszám"
-
-msgid "Phone Number"
-msgstr "Telefonszám"
-
msgid "Aquarius"
msgstr "Vízöntő"
@@ -7216,186 +7125,228 @@ msgstr "Disznó"
msgid "Other"
msgstr "Egyéb"
-#, fuzzy
-msgid "Modify information"
-msgstr "Információk módosítása"
+msgid "Visible"
+msgstr "Látható"
-#, fuzzy
-msgid "Update information"
-msgstr "Információk frissítése"
+msgid "Firend Only"
+msgstr "Csak barát"
-#. TODO: We don't really need to notify the user about this, do we?
-#. TODO: Does the user really need to be notified about this?
-msgid "QQ Buddy"
-msgstr "QQ partner"
+msgid "Private"
+msgstr "Magánjellegű"
-msgid "Successed:"
-msgstr "Sikeres:"
+msgid "QQ Number"
+msgstr "QQ szám"
-msgid "Change buddy information."
-msgstr "Partnerinformációk módosítása."
+msgid "Country/Region"
+msgstr "Ország/terület"
-#, c-format
-msgid ""
-"Setting custom faces is not currently supported. Please choose an image from "
-"%s."
-msgstr ""
-"Az egyéni arcképek beállítása jelenleg nem támogatott. Válasszon egy képet "
-"innen: %s."
+msgid "Province/State"
+msgstr "Megye/állam"
+
+msgid "Zipcode"
+msgstr "Irányítószám"
+
+msgid "Phone Number"
+msgstr "Telefonszám"
+
+msgid "Authorize adding"
+msgstr "Felvétel engedélyezése"
+
+msgid "Cellphone Number"
+msgstr "Mobil telefonszám"
+
+msgid "Personal Introduction"
+msgstr "Személyes bemutatkozás"
+
+msgid "City/Area"
+msgstr "Város/terület"
+
+msgid "Publish Mobile"
+msgstr "Mobil közzététele"
+
+msgid "Publish Contact"
+msgstr "Kapcsolat közzététele"
+
+msgid "College"
+msgstr "Főiskola"
+
+msgid "Horoscope"
+msgstr "Horoszkóp"
+
+msgid "Zodiac"
+msgstr "Zodiákus"
+
+msgid "Blood"
+msgstr "Vércsoport"
+
+msgid "True"
+msgstr "Igaz"
-msgid "Invalid QQ Face"
-msgstr "Érvénytelen QQ arckép"
+msgid "False"
+msgstr "Hamis"
+
+msgid "Modify Contact"
+msgstr "Partner módosítása"
+
+msgid "Modify Address"
+msgstr "Cím módosítása"
+
+msgid "Modify Extended Information"
+msgstr "Bővített információk módosítása"
+
+msgid "Modify Information"
+msgstr "Információk módosítása"
+
+msgid "Update"
+msgstr "Frissítés"
+
+msgid "Could not change buddy information."
+msgstr "A partnerinformációk nem módosíthatók."
#, c-format
-msgid "You rejected %d's request"
-msgstr "Visszautasította %d kérését"
+msgid "%d needs Q&A"
+msgstr "%d Q&A-t igényel"
-msgid "Reject request"
-msgstr "Kérés visszautasítása"
+msgid "Add buddy Q&A"
+msgstr "Partner Q&A hozzáadása"
-#. title
-#, fuzzy
-msgid "Sorry, you are not my style..."
-msgstr "Bocs, nem vagy az esetem…"
+msgid "Input answer here"
+msgstr "Írja be ide a válaszát"
-msgid "Add buddy with auth request failed"
-msgstr "A partner felvétele felhatalmazási kéréssel meghiúsult"
+msgid "Send"
+msgstr "Küldés"
-msgid "Failed:"
-msgstr "Sikertelen:"
+msgid "Invalid answer."
+msgstr "Érvénytelen válasz."
-msgid "Remove buddy"
-msgstr "Partner törlése"
+msgid "Authorization denied message:"
+msgstr "Hozzáférés elutasítva üzenet:"
-msgid "Remove from other's buddy list"
-msgstr "Eltávolítás mások partnerlistájáról"
+msgid "Sorry, You are not my style."
+msgstr "Bocs, nem vagy az esetem…"
-#, fuzzy, c-format
+#, c-format
msgid "%d needs authentication"
msgstr "A(z) %d felhasználó felhatalmazást kér"
+msgid "Add buddy authorize"
+msgstr "Partnerengedélyezés felvétele"
+
msgid "Input request here"
msgstr "Írja be ide kérését"
-#. TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands
msgid "Would you be my friend?"
msgstr "Leszünk barátok?"
-#. multiline
-#. masked
-#. hint
-msgid "Send"
-msgstr "Küldés"
-
-#, c-format
-msgid "Add into %d's buddy list"
-msgstr "Hozzáadás %d partnerlistájához"
+msgid "QQ Buddy"
+msgstr "QQ partner"
-msgid "QQ Number Error"
-msgstr "QQ számhiba"
+msgid "Add buddy"
+msgstr "Partner hozzáadása"
msgid "Invalid QQ Number"
msgstr "Érvénytelen QQ szám"
+msgid "Failed sending authorize"
+msgstr "Az engedély küldése meghiúsult"
+
+#, c-format
+msgid "Failed removing buddy %d"
+msgstr "A partner (%d) eltávolítása meghiúsult"
+
+#, c-format
+msgid "Failed removing me from %d's buddy list"
+msgstr "Az eltávolításom %d partnerlistájáról meghiúsult"
+
+msgid "No reason given"
+msgstr "Nincs ok megadva"
+
+#. only need to get value
+#, c-format
+msgid "You have been added by %s"
+msgstr "%s felvette"
+
+msgid "Would you like to add him?"
+msgstr "Szeretné felvenni?"
+
+#, c-format
+msgid "Rejected by %s"
+msgstr "%s visszautasította"
+
+#, c-format
+msgid "Message: %s"
+msgstr "Üzenet: %s"
+
msgid "ID: "
msgstr "Azonosító: "
msgid "Group ID"
msgstr "Csoportazonosító"
-msgid "Creator"
-msgstr "Létrehozó"
-
-msgid "Group Description"
-msgstr "Csoportleírás"
-
-msgid "Auth"
-msgstr "Engedélyezés"
-
msgid "QQ Qun"
msgstr "QQ Qun"
msgid "Please enter Qun number"
msgstr "Adja meg a Qun számot"
-#, fuzzy
msgid "You can only search for permanent Qun\n"
msgstr "Csak állandó Qun-t kereshet\n"
-#, fuzzy, c-format
-msgid "%d request to join Qun %d"
-msgstr "A(z) %d felhasználó csatlakozni szeretne a(z) %d Qun-hoz"
+msgid "Not member"
+msgstr "Nem tag"
-#, c-format
-msgid "Message: %s"
-msgstr "Üzenet: %s"
-
-msgid "QQ Qun Operation"
-msgstr "QQ Qun művelet"
-
-msgid "Approve"
-msgstr "Jóváhagyás"
-
-#, fuzzy, c-format
-msgid "Failed to join Qun %d, operated by admin %d"
-msgstr "Partner csatlakoztatása a csevegéshez sikertelen"
+msgid "Member"
+msgstr "Tag"
-#, fuzzy, c-format
-msgid "Successed to join Qun %d, operated by admin %d"
-msgstr "Partner csatlakoztatása a csevegéshez sikertelen"
+msgid "Requesting"
+msgstr "Kérés"
-#, fuzzy, c-format
-msgid "[%d] removed from Qun \"%d\""
-msgstr "Ön [%d] kilépett a következő csoportból: „%d”"
+msgid "Admin"
+msgstr "Rendszergazda"
-#, fuzzy
-msgid "Notice:"
+msgid "Notice"
msgstr "Megjegyzés"
-#, fuzzy, c-format
-msgid "[%d] added to Qun \"%d\""
-msgstr "Ön [%d] kilépett a következő csoportból: „%d”"
+msgid "Detail"
+msgstr "Részletek"
-msgid "I am not a member"
-msgstr "Nem vagyok tag"
-
-msgid "I am a member"
-msgstr "Tag vagyok"
-
-#, fuzzy
-msgid "I am requesting"
-msgstr "Hibás kérés"
+msgid "Creator"
+msgstr "Létrehozó"
-msgid "I am the admin"
-msgstr "Admin vagyok"
+msgid "About me"
+msgstr "A névjegyem"
-msgid "Unknown status"
-msgstr "Ismeretlen állapot"
+msgid "Category"
+msgstr "Kategória"
-#, fuzzy
msgid "The Qun does not allow others to join"
-msgstr "Ez a csoport nem engedélyezi mások csatlakozását"
+msgstr "Ez a Qun nem engedélyezi mások csatlakozását"
-#, fuzzy
-msgid "Remove from Qun"
-msgstr "Csoport törlése"
+msgid "Join QQ Qun"
+msgstr "Csatlakozás QQ Qun-hoz"
-#, fuzzy
-msgid "Join to Qun"
-msgstr "Csatlakozás csevegéshez"
+#, c-format
+msgid "Successfully joined Qun %s (%d)"
+msgstr "Sikeresen csatlakozott a(z) %s Qun-hoz (%d)"
+
+msgid "Successfully joined Qun"
+msgstr "Sikeresen csatlakozott a Qun-hoz"
#, c-format
msgid "Qun %d denied to join"
-msgstr ""
+msgstr "A Qun (%d) megtagadta a csatlakozást"
-msgid "Join Qun, Unknow Reply"
-msgstr ""
+msgid "QQ Qun Operation"
+msgstr "QQ Qun művelet"
-msgid "You entered a group ID outside the acceptable range"
-msgstr "Az elfogadható tartományon kívüli csoportazonosítót adott meg"
+msgid "Failed:"
+msgstr "Sikertelen:"
-msgid "Are you sure you want to leave this Qun?"
-msgstr "Biztos, hogy el kívánja hagyni ezt a Qun-t?"
+msgid "Join Qun, Unknow Reply"
+msgstr "Csatlakozás Qun-hoz, ismeretlen válasz"
+
+msgid "Quit Qun"
+msgstr "Kilépés a Qun-ból"
msgid ""
"Note, if you are the creator, \n"
@@ -7404,44 +7355,47 @@ msgstr ""
"Ne feledje, ha Ön hozta létre,\n"
"akkor ez a művelet törli a Qun-t."
-#. we want to see window
-msgid "Do you want to approve the request?"
-msgstr "Jóvá kívánja hagyni a kérést?"
+msgid "Sorry, you are not our style ..."
+msgstr "Bocs, nem vagy az esetünk…"
-#, fuzzy
-msgid "Change Qun member"
-msgstr "Telefonszám"
+msgid "Successfully changed Qun member"
+msgstr "Sikeresen módosított egy Qun tagot"
-#, fuzzy
-msgid "Change Qun information"
-msgstr "Csatornainformációk"
+msgid "Successfully changed Qun information"
+msgstr "Sikeresen módosította a Qun információkat"
msgid "You have successfully created a Qun"
msgstr "Sikeresen létrehozott egy Qun-t"
-#, fuzzy
-msgid "Would you like to set up the detail information now?"
-msgstr "Be kívánja állítani most a Qun részleteit?"
+msgid "Would you like to set detailed information now?"
+msgstr "Be kívánja állítani most a részletes információkat?"
msgid "Setup"
msgstr "Beállítás"
-#, fuzzy, c-format
-msgid ""
-"%s\n"
-"\n"
-"%s"
-msgstr "%s (%s)"
+#, c-format
+msgid "%d requested to join Qun %d for %s"
+msgstr "A(z) %d felhasználó csatlakozni szeretne a(z) %d Qun-hoz, ok: %s"
-#, fuzzy
-msgid "QQ Server News"
-msgstr "ICQ közvetítő kiszolgáló"
+#, c-format
+msgid "%d request to join Qun %d"
+msgstr "A(z) %d felhasználó csatlakozni szeretne a(z) %d Qun-hoz"
-msgid "System Message"
-msgstr "Rendszerüzenet"
+#, c-format
+msgid "Failed to join Qun %d, operated by admin %d"
+msgstr "A csatlakozás sikertelen a(z) %d Qun-hoz, amelyet %d admin működtet"
-msgid "Failed to send IM."
-msgstr "Az azonnali üzenet küldése meghiúsult."
+#, c-format
+msgid "<b>Joining Qun %d is approved by admin %d for %s</b>"
+msgstr "<b>A csatlakozást a Qun-hoz (%d) jóváhagyta %d admin %s számára</b>"
+
+#, c-format
+msgid "<b>Removed buddy %d.</b>"
+msgstr "<b>%d partner eltávolítva.</b>"
+
+#, c-format
+msgid "<b>New buddy %d joined.</b>"
+msgstr "<b>Új partner (%d) csatlakozott.</b>"
#, c-format
msgid "Unknown-%d"
@@ -7450,9 +7404,6 @@ msgstr "Ismeretlen-%d"
msgid "Level"
msgstr "Szint"
-msgid "Member"
-msgstr "Tag"
-
msgid " VIP"
msgstr " VIP"
@@ -7468,9 +7419,8 @@ msgstr " Mobilkapcsolat"
msgid " Video"
msgstr " Videó"
-#, fuzzy
msgid " Zone"
-msgstr "Nincs"
+msgstr " zóna"
msgid "Flag"
msgstr "Jelző"
@@ -7481,77 +7431,104 @@ msgstr "Ver"
msgid "Invalid name"
msgstr "Érvénytelen név"
+msgid "Select icon..."
+msgstr "Válasszon ikont…"
+
#, c-format
-msgid "<b>Current Online</b>: %d<br>\n"
-msgstr "<b>Jelenleg elérhető</b>: %d<br>\n"
+msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n"
+msgstr "<b>Bejelentkezés ideje</b>: %d-%d-%d, %d:%d:%d<br>\n"
#, c-format
-msgid "<b>Last Refresh</b>: %s<br>\n"
-msgstr "<b>Utolsó frissítés</b>: %s<br>\n"
+msgid "<b>Total Online Buddies</b>: %d<br>\n"
+msgstr "<b>Elérhető partnerek összesen</b>: %d<br>\n"
-#, fuzzy, c-format
+#, c-format
+msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n"
+msgstr "<b>Utolsó frissítés</b>: %d-%d-%d, %d:%d:%d<br><br>\n"
+
+#, c-format
msgid "<b>Server</b>: %s<br>\n"
-msgstr "<b>Kiszolgáló</b>: %s: %d<br>\n"
+msgstr "<b>Kiszolgáló</b>: %s<br>\n"
+
+#, c-format
+msgid "<b>Client Tag</b>: %s<br>\n"
+msgstr "<b>Klienscímke</b>: %s<br>\n"
#, c-format
msgid "<b>Connection Mode</b>: %s<br>\n"
msgstr "<b>Kapcsolat módja</b>: %s<br>\n"
-#, fuzzy, c-format
-msgid "<b>My Internet Address</b>: %s<br>\n"
-msgstr "<b>Kapcsolat módja</b>: %s<br>\n"
+#, c-format
+msgid "<b>My Internet IP</b>: %s:%d<br>\n"
+msgstr "<b>IP-címem</b>: %s:%d<br>\n"
-#, fuzzy, c-format
+#, c-format
msgid "<b>Sent</b>: %lu<br>\n"
-msgstr "<b>Kiszolgáló</b>: %s: %d<br>\n"
+msgstr "<b>Elküldve</b>: %lu<br>\n"
-#, fuzzy, c-format
+#, c-format
msgid "<b>Resend</b>: %lu<br>\n"
-msgstr "<b>Kiszolgáló</b>: %s: %d<br>\n"
+msgstr "<b>Újraküldés</b>: %lu<br>\n"
-#, fuzzy, c-format
+#, c-format
msgid "<b>Lost</b>: %lu<br>\n"
-msgstr "<b>Utolsó frissítés</b>: %s<br>\n"
+msgstr "<b>Elveszett</b>: %lu<br>\n"
-#, fuzzy, c-format
+#, c-format
msgid "<b>Received</b>: %lu<br>\n"
-msgstr "<b>Kiszolgáló</b>: %s: %d<br>\n"
-
-#, fuzzy, c-format
-msgid "<b>Received Duplicate</b>: %lu<br>\n"
-msgstr "<b>Nyilvános IP címem</b>: %s<br>\n"
+msgstr "<b>Fogadott</b>: %lu<br>\n"
#, c-format
-msgid "<b>Login Time</b>: %s<br>\n"
-msgstr "<b>Bejelentkezés ideje</b>: %s<br>\n"
+msgid "<b>Received Duplicate</b>: %lu<br>\n"
+msgstr "<b>Másodpéldány érkezett</b>: %lu<br>\n"
#, c-format
-msgid "<b>Last Login IP</b>: %s<br>\n"
-msgstr "<b>Utolsó bejelentkezési IP</b>: %s<br>\n"
+msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n"
+msgstr "<b>Idő</b>: %d-%d-%d, %d:%d:%d<br>\n"
#, c-format
-msgid "<b>Last Login Time</b>: %s\n"
-msgstr "<b>Utolsó bejelentkezés ideje</b>: %s\n"
+msgid "<b>IP</b>: %s<br>\n"
+msgstr "<b>IP</b>: %s<br>\n"
msgid "Login Information"
msgstr "Bejelentkezési információk"
-msgid "Set My Information"
-msgstr "Saját információk beállítása"
+msgid "<p><b>Original Author</b>:<br>\n"
+msgstr "<p><b>Eredeti szerző</b>:<br>\n"
+
+msgid "<p><b>Code Contributors</b>:<br>\n"
+msgstr "<p><b>Közreműködők</b>:<br>\n"
+
+msgid "<p><b>Lovely Patch Writers</b>:<br>\n"
+msgstr "<p><b>Javítások</b>:<br>\n"
+
+msgid "<p><b>Acknowledgement</b>:<br>\n"
+msgstr "<p><b>Köszönetnyilvánítás</b>:<br>\n"
+
+msgid "<p><i>And, all the boys in the backroom...</i><br>\n"
+msgstr "<p><i>és a háttéremberek...</i><br>\n"
+
+msgid "<i>Feel free to join us!</i> :)"
+msgstr "<i>csatlakozzon bátran</i> :)"
+
+#, c-format
+msgid "About OpenQ r%s"
+msgstr "Az OpenQ r%s névjegye"
+
+msgid "Change Icon"
+msgstr "Ikon módosítása"
msgid "Change Password"
msgstr "Jelszó módosítása"
-#, fuzzy
msgid "Account Information"
-msgstr "Az azonosító jellemzői"
+msgstr "Fiókinformációk"
-#, fuzzy
-msgid "Leave the QQ Qun"
-msgstr "Kilépés ebből a QQ Qun-ből"
+msgid "Update all QQ Quns"
+msgstr "Minden QQ Qun frissítése"
-msgid "Block this buddy"
-msgstr "A partner tiltása"
+msgid "About OpenQ"
+msgstr "Az OpenQ névjegye"
#. *< type
#. *< ui_requirement
@@ -7563,60 +7540,103 @@ msgstr "A partner tiltása"
#. *< version
#. * summary
#. * description
-msgid "QQ Protocol\tPlugin"
-msgstr "QQ protokoll\tbővítmény"
+msgid "QQ Protocol Plugin"
+msgstr "QQ protokollbővítmény"
-#, fuzzy
msgid "Auto"
msgstr "Auto"
-#, fuzzy
+msgid "Select Server"
+msgstr "Válassza ki a kiszolgálót"
+
+msgid "QQ2005"
+msgstr "QQ2005"
+
+msgid "QQ2007"
+msgstr "QQ2007"
+
+msgid "QQ2008"
+msgstr "QQ2008"
+
+#. #endif
msgid "Connect by TCP"
msgstr "Kapcsolódás TCP segítségével"
-#, fuzzy
msgid "Show server notice"
-msgstr "Kiszolgáló portja"
+msgstr "Kiszolgálómegjegyzés megjelenítése"
-#, fuzzy
msgid "Show server news"
-msgstr "Kiszolgáló címe"
+msgstr "Kiszolgálóhírek megjelenítése"
+
+msgid "Keep alive interval (seconds)"
+msgstr "Kapcsolat-fenntartási időköz (mp)"
-msgid "Keep alive interval(s)"
-msgstr "Kapcsolat-fenntartási időköz"
+msgid "Update interval (seconds)"
+msgstr "Frissítési időköz (mp)"
-msgid "Update interval(s)"
-msgstr "Frissítési időköz"
+msgid "Can not decrypt server reply"
+msgstr "Nem fejthető vissza a kiszolgáló válasza"
+
+msgid "Can not decrypt get server reply"
+msgstr "Nem fejthető vissza a kiszolgálólekérdezés válasza"
#, c-format
-msgid "Invalid token reply code, 0x%02X"
-msgstr "Érvénytelen jelsorválaszkód, 0x%02X"
+msgid "Failed requesting token, 0x%02X"
+msgstr "A jelsor lekérése meghiúsult: 0x%02X"
#, c-format
msgid "Invalid token len, %d"
msgstr "Érvénytelen jelsorhossz: %d"
-msgid "Unable login for not support Redirect_EX now"
-msgstr ""
+#. extend redirect used in QQ2006
+msgid "Redirect_EX is not currently supported"
+msgstr "A Redirect_EX jelenleg nem támogatott"
-#, fuzzy, c-format
-msgid "Error password: %s"
-msgstr "Hiba a jelszó módosításakor"
+#. need activation
+#. need activation
+#. need activation
+msgid "Activation required"
+msgstr "Aktiválás szükséges"
#, c-format
-msgid "Need active: %s"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Unable login for unknow reply code 0x%02X"
-msgstr "Érvénytelen jelsorválaszkód, 0x%02X"
+msgid "Unknow reply code when login (0x%02X)"
+msgstr "Ismeretlen válaszkód bejelentkezéskor (0x%02X)"
msgid "Keep alive error"
msgstr "Kapcsolat-fenntartási hiba"
-#, fuzzy
-msgid "Failed to connect all servers"
-msgstr "Nem sikerült a kiszolgálóhoz kapcsolódni"
+msgid "Requesting captcha ..."
+msgstr "Captcha kérése…"
+
+msgid "Checking code of captcha ..."
+msgstr "A captcha kódjának ellenőrzése…"
+
+msgid "Failed captcha verify"
+msgstr "A captcha ellenőrzése meghiúsult"
+
+msgid "Captcha Image"
+msgstr "Captcha kép"
+
+msgid "Enter code"
+msgstr "Adja meg a kódot"
+
+msgid "QQ Captcha Verifing"
+msgstr "QQ captcha ellenőrzés"
+
+msgid "Enter the text from the image"
+msgstr "Adja meg a szöveget a képről"
+
+#, c-format
+msgid "Unknow reply code when checking password (0x%02X)"
+msgstr "Ismeretlen válaszkód a jelszó ellenőrzésekor (0x%02X)"
+
+#, c-format
+msgid ""
+"Unknow reply code when login (0x%02X):\n"
+"%s"
+msgstr ""
+"Ismeretlen válaszkód bejelentkezéskor (0x%02X):\n"
+"%s"
#. we didn't successfully connect. tdt->toc_fd is valid here
msgid "Unable to connect."
@@ -7642,54 +7662,77 @@ msgstr "Írási hiba"
msgid "Connection lost"
msgstr "A kapcsolat elveszett"
-#. Update the login progress status display
-#, fuzzy, c-format
+msgid "Get server ..."
+msgstr "Kiszolgáló lekérdezése…"
+
msgid "Request token"
-msgstr "Kérés elutasítva"
+msgstr "Jelsor kérése"
msgid "Couldn't resolve host"
msgstr "Nem sikerült a kiszolgáló feloldása"
-#, fuzzy
msgid "Invalid server or port"
-msgstr "Érvénytelen hiba"
+msgstr "Érvénytelen kiszolgáló vagy port"
-#, c-format
-msgid "Connecting server %s, retries %d"
-msgstr "Kapcsolódási a(z) %s kiszolgálóhoz, újrapróbálkozás: %d"
+msgid "Connecting server ..."
+msgstr "Kapcsolódás kiszolgálóhoz…"
-#, fuzzy
msgid "QQ Error"
-msgstr "QQid hiba"
+msgstr "QQ hiba"
+
+msgid "Failed to send IM."
+msgstr "Az azonnali üzenet küldése meghiúsult."
+
+#, c-format
+msgid ""
+"Server News:\n"
+"%s\n"
+"%s\n"
+"%s"
+msgstr ""
+"Kiszolgáló hírei:\n"
+"%s\n"
+"%s\n"
+"%s"
+
+#, c-format
+msgid "From %s:"
+msgstr "Feladó: %s:"
+
+#, c-format
+msgid ""
+"Server notice From %s: \n"
+"%s"
+msgstr ""
+"Kiszolgálómegjegyzés ettől: %s\n"
+"%s"
-#, fuzzy
msgid "Unknow SERVER CMD"
-msgstr "Ismeretlen ok"
+msgstr "Ismeretlen kiszolgálóparancs"
-#, fuzzy, c-format
+#, c-format
msgid ""
"Error reply of %s(0x%02X)\n"
"Room %d, reply 0x%02X"
msgstr ""
-"Válasz: %s(0x%02X )\n"
-"Elküldve: %s(0x%02X )\n"
-"Szobaazonosító: %d, válasz: [0x%02X]: \n"
-"%s"
+"Hiba %s(0x%02X) válaszában\n"
+"Szoba: %d, válasz: 0x%02X"
-#, fuzzy
msgid "QQ Qun Command"
-msgstr "Parancs"
+msgstr "QQ Qun parancs"
-#, fuzzy, c-format
-msgid "You are not a member of QQ Qun \"%s\"\n"
-msgstr "Ön nem tagja a következő csoportnak: „%s”\n"
+#, c-format
+msgid "Not a member of room \"%s\"\n"
+msgstr "Ön nem tagja a következő szobának: „%s”\n"
msgid "Can not decrypt login reply"
msgstr "Nem fejthető vissza a bejelentkezési válasz"
-#, fuzzy
-msgid "Unknow reply CMD"
-msgstr "Ismeretlen ok"
+msgid "Unknow LOGIN CMD"
+msgstr "Ismeretlen bejelentkezési parancs"
+
+msgid "Unknow CLIENT CMD"
+msgstr "Ismeretlen kliensparancs"
#, c-format
msgid "%d has declined the file %s"
@@ -7702,63 +7745,6 @@ msgstr "Fájlküldés"
msgid "%d canceled the transfer of %s"
msgstr "%d megszakította a(z) %s átvitelét"
-#, fuzzy
-msgid "Do you approve the requestion?"
-msgstr "Jóvá kívánja hagyni a kérést?"
-
-#, fuzzy
-msgid "Do you add the buddy?"
-msgstr "Fel kívánja venni ezt a partnert?"
-
-#. only need to get value
-#, c-format
-msgid "You have been added by %s"
-msgstr "%s felvette"
-
-msgid "Would you like to add him?"
-msgstr "Szeretné felvenni?"
-
-#, fuzzy, c-format
-msgid "%s added you [%s] to buddy list"
-msgstr "%s felvette Önt a partnerlistájára."
-
-#, fuzzy
-msgid "QQ Budy"
-msgstr "Partner"
-
-#, c-format
-msgid "Requestion rejected by %s"
-msgstr ""
-
-#, c-format
-msgid "Requestion approved by %s"
-msgstr ""
-
-#. TODO: this should go through purple_account_request_authorization()
-#, c-format
-msgid "%s wants to add you [%s] as a friend"
-msgstr "%s fel kívánja venni Önt [%s] barátként"
-
-#, fuzzy, c-format
-msgid "%s is not in buddy list"
-msgstr "%s nincs a partnerlistáján"
-
-#, fuzzy
-msgid "Would you add?"
-msgstr "Szeretné felvenni?"
-
-#, fuzzy, c-format
-msgid "From %s:"
-msgstr "Feladó %s:"
-
-#, c-format
-msgid "%s"
-msgstr "%s"
-
-#, fuzzy
-msgid "QQ Server Notice"
-msgstr "Kiszolgáló portja"
-
msgid "Connection closed (writing)"
msgstr "Kapcsolat lezárva (írás)"
@@ -7808,8 +7794,7 @@ msgid "Starting Services"
msgstr "Szolgáltatások indítása"
#, c-format
-msgid ""
-"A Sametime administrator has issued the following announcement on server %s"
+msgid "A Sametime administrator has issued the following announcement on server %s"
msgstr ""
"Egy Sametime adminisztrátor a következő bejelentést adta ki a(z) %s "
"kiszolgálón"
@@ -8460,8 +8445,7 @@ msgid "Set Secret Channel"
msgstr "Titkos csatorna beállítása"
#, c-format
-msgid ""
-"You have to join the %s channel before you are able to join the private group"
+msgid "You have to join the %s channel before you are able to join the private group"
msgstr ""
"Mielőtt csatlakozhatna a magáncsoporthoz, csatlakoznia kell a(z) %s "
"csatornához"
@@ -8529,8 +8513,7 @@ msgstr "%s megváltoztatta a(z) <I>%s</I> témáját a következőre: %s"
#, c-format
msgid "<I>%s</I> set channel <I>%s</I> modes to: %s"
-msgstr ""
-"<I>%s</I> átállította a(z) <I>%s</I> csatorna üzemmódjait a következőkre: %s"
+msgstr "<I>%s</I> átállította a(z) <I>%s</I> csatorna üzemmódjait a következőkre: %s"
#, c-format
msgid "<I>%s</I> removed all channel <I>%s</I> modes"
@@ -8713,8 +8696,7 @@ msgstr ""
#, c-format
msgid "Received %s's public key. Would you like to accept this public key?"
-msgstr ""
-"%s nyilvános kulcsa megérkezett. El kívánja fogadni ezt a nyilvános kulcsot?"
+msgstr "%s nyilvános kulcsa megérkezett. El kívánja fogadni ezt a nyilvános kulcsot?"
#, c-format
msgid ""
@@ -8746,8 +8728,7 @@ msgstr "Hiba a SILC kiszolgálóhoz kapcsolódás közben"
msgid "Key Exchange failed"
msgstr "Kulcscsere sikertelen"
-msgid ""
-"Resuming detached session failed. Press Reconnect to create new connection."
+msgid "Resuming detached session failed. Press Reconnect to create new connection."
msgstr ""
"A leválasztott folyamat folytatása sikertelen. Kattintson az Újrakapcsolódás "
"gombra egy új kapcsolat létrehozásához."
@@ -8930,8 +8911,7 @@ msgid "whois &lt;nick&gt;: View nick's information"
msgstr "whois &lt;becenév&gt;: A becenévhez tartozó információk megjelenítése"
msgid "msg &lt;nick&gt; &lt;message&gt;: Send a private message to a user"
-msgstr ""
-"msg &lt;becenév&gt; &lt;message&gt;: Magánüzenet küldése a felhasználónak"
+msgstr "msg &lt;becenév&gt; &lt;message&gt;: Magánüzenet küldése a felhasználónak"
msgid "query &lt;nick&gt; [&lt;message&gt;]: Send a private message to a user"
msgstr ""
@@ -9000,12 +8980,10 @@ msgstr ""
"csatornáról"
msgid "info [server]: View server administrative details"
-msgstr ""
-"info [kiszolgáló]: A kiszolgáló adminisztrációs részleteinek megjelenítése"
+msgstr "info [kiszolgáló]: A kiszolgáló adminisztrációs részleteinek megjelenítése"
msgid "ban [&lt;channel&gt; +|-&lt;nick&gt;]: Ban client from channel"
-msgstr ""
-"ban [&lt;csatorna&gt; +|-&lt;becenév&gt;]: Kliens kitiltása a csatornáról"
+msgstr "ban [&lt;csatorna&gt; +|-&lt;becenév&gt;]: Kliens kitiltása a csatornáról"
msgid "getkey &lt;nick|server&gt;: Retrieve client's or server's public key"
msgstr ""
@@ -9182,8 +9160,7 @@ msgstr "Hiba: A verziók különböznek, kérem frissítse a kliensét"
#, c-format
msgid "Failure: Remote does not trust/support your public key"
-msgstr ""
-"Hiba: A távoli fél nem bízik meg vagy nem támogatja az Ön nyilvános kulcsát"
+msgstr "Hiba: A távoli fél nem bízik meg vagy nem támogatja az Ön nyilvános kulcsát"
#, c-format
msgid "Failure: Remote does not support proposed KE group"
@@ -9314,8 +9291,7 @@ msgstr "%s figyelmeztetése nincs engedélyezve."
#, c-format
msgid "A message has been dropped, you are exceeding the server speed limit."
-msgstr ""
-"Egy üzenet el lett dobva, Ön túllépte a kiszolgáló átviteli sebességhatárát."
+msgstr "Egy üzenet el lett dobva, Ön túllépte a kiszolgáló átviteli sebességhatárát."
#, c-format
msgid "Chat in %s is not available."
@@ -9477,9 +9453,6 @@ msgstr "Az Ön Yahoo! üzenete nem lett elküldve."
msgid "Yahoo! system message for %s:"
msgstr "Yahoo! rendszerüzenet %s számára:"
-msgid "Authorization denied message:"
-msgstr "Hozzáférés elutasítva üzenet:"
-
#, c-format
msgid ""
"%s has (retroactively) denied your request to add them to your list for the "
@@ -9777,8 +9750,7 @@ msgstr "A felhasználó profilja üres."
#, c-format
msgid "%s declined your conference invitation to room \"%s\" because \"%s\"."
-msgstr ""
-"%s visszalépett az Ön meghívásától a(z) „%s” konferenciaszobába, mivel: „%s”."
+msgstr "%s visszalépett az Ön meghívásától a(z) „%s” konferenciaszobába, mivel: „%s”."
msgid "Invitation Rejected"
msgstr "Meghívás visszautasítva"
@@ -9895,8 +9867,7 @@ msgstr ""
"sub &lt;osztály&gt; &lt;példány&gt; &lt;címzett&gt;: Csatlakozás új "
"csevegéshez"
-msgid ""
-"zi &lt;instance&gt;: Send a message to &lt;message,<i>instance</i>,*&gt;"
+msgid "zi &lt;instance&gt;: Send a message to &lt;message,<i>instance</i>,*&gt;"
msgstr ""
"zi &lt;példány&gt;: Üzenet küldése a következőnek: &lt;üzenet,<i>példány</i>,"
"*&gt;"
@@ -10373,9 +10344,9 @@ msgid ""
"<span size='larger' weight='bold'>Welcome to %s!</span>\n"
"\n"
"You have no IM accounts configured. To start connecting with %s press the "
-"<b>Add</b> button below and configure your first account. If you want %s to "
-"connect to multiple IM accounts, press <b>Add</b> again to configure them "
-"all.\n"
+"<b>Add...</b> button below and configure your first account. If you want %s "
+"to connect to multiple IM accounts, press <b>Add...</b> again to configure "
+"them all.\n"
"\n"
"You can come back to this window to add, edit, or remove accounts from "
"<b>Accounts->Manage Accounts</b> in the Buddy List window"
@@ -10385,7 +10356,7 @@ msgstr ""
"Nincsenek beállítva azonnaliüzenő-fiókjai. A %s használatának megkezdéséhez "
"kattintson az alábbi <b>Hozzáadás</b> gombra és állítsa be első fiókját. Ha "
"azt szeretné hogy a %s több fiókhoz csatlakozzon, kattintson újra a "
-"<b>Hozzáadás</b> gombra és állítsa be mindet.\n"
+"<b>Hozzáadás…</b> gombra és állítsa be mindet.\n"
"\n"
"A Partnerlista ablak <b>Fiókok -> Fiókok kezelése</b> menüpontja "
"segítségével visszatérhet ehhez az ablakhoz fiókok hozzáadásához, "
@@ -10393,8 +10364,7 @@ msgstr ""
#, c-format
msgid "You have %d contact named %s. Would you like to merge them?"
-msgid_plural ""
-"You currently have %d contacts named %s. Would you like to merge them?"
+msgid_plural "You currently have %d contacts named %s. Would you like to merge them?"
msgstr[0] "Jelenleg %d %s nevű partnere van. Össze kívánja vonni ezeket?"
msgstr[1] "Jelenleg %d %s nevű partnere van. Össze kívánja vonni ezeket?"
@@ -10450,9 +10420,6 @@ msgstr "Nap_ló megtekintése"
msgid "Hide when offline"
msgstr "Elrejtés, ha nem érhető el"
-msgid "Show when offline"
-msgstr "Megjelenítés, ha elérhető"
-
msgid "_Alias..."
msgstr "Ál_név…"
@@ -10499,8 +10466,7 @@ msgstr "_Kibontás"
msgid "/Tools/Mute Sounds"
msgstr "/Eszközök/Hangok némítása"
-msgid ""
-"You are not currently signed on with an account that can add that buddy."
+msgid "You are not currently signed on with an account that can add that buddy."
msgstr ""
"Jelenleg nincs bejelentkezve olyan hálózatra, amelyen felvehetné ezt a "
"partnert."
@@ -10728,8 +10694,7 @@ msgstr "Üdvözöljük újra!"
#, c-format
msgid "%d account was disabled because you signed on from another location:"
-msgid_plural ""
-"%d accounts were disabled because you signed on from another location:"
+msgid_plural "%d accounts were disabled because you signed on from another location:"
msgstr[0] "%d fiók letiltva, mivel bejelentkezett egy másik helyről:"
msgstr[1] "%d fiók letiltva, mivel bejelentkezett egy másik helyről:"
@@ -10814,8 +10779,8 @@ msgstr "Ál_név:"
msgid "Auto_join when account becomes online."
msgstr "Automatikus _csatlakozás a fiók elérhetővé válásakor."
-msgid "_Hide chat when the window is closed."
-msgstr "Cse_vegés elrejtése az ablak bezárásakor."
+msgid "_Remain in chat after window is closed."
+msgstr "Csevegésben mara_dás az ablak bezárásakor."
msgid "Please enter the name of the group to be added."
msgstr "Adja meg a felvenni kívánt csoport nevét."
@@ -10848,18 +10813,13 @@ msgstr "/Partnerek/Partnerek rendezése"
msgid "SSL Servers"
msgstr "SSL kiszolgálók"
-#, fuzzy
-msgid "Network disconnected"
-msgstr "A távoli fél bontotta a kapcsolatot"
-
msgid "Unknown command."
msgstr "Ismeretlen parancs."
msgid "That buddy is not on the same protocol as this chat."
msgstr "A partner nem ugyanazt a protokollt használja, mint ez a csevegés."
-msgid ""
-"You are not currently signed on with an account that can invite that buddy."
+msgid "You are not currently signed on with an account that can invite that buddy."
msgstr ""
"Jelenleg nincs bejelentkezve olyan fiókkal, mellyel meghívhatná ezt a "
"partnert."
@@ -11193,8 +11153,12 @@ msgstr "Hiba "
msgid "Fatal Error"
msgstr "Végzetes hiba"
-msgid "developer"
-msgstr "fejlesztő"
+# fixme: jobb ötlet?
+msgid "bug master"
+msgstr "hibaritkító"
+
+msgid "artist"
+msgstr "grafikus"
#. feel free to not translate this
msgid "Ka-Hing Cheung"
@@ -11203,11 +11167,8 @@ msgstr "Ka-Hing Cheung"
msgid "support"
msgstr "támogató"
-msgid "support/QA"
-msgstr "támogató/QA"
-
-msgid "developer & webmaster"
-msgstr "fejlesztő és webmester"
+msgid "webmaster"
+msgstr "webmester"
msgid "Senior Contributor/QA"
msgstr "Veterán közreműködő/QA"
@@ -11225,8 +11186,11 @@ msgstr "libfaim karbantartó"
msgid "hacker and designated driver [lazy bum]"
msgstr "hacker és kijelölt vezető"
-msgid "XMPP developer"
-msgstr "XMPP fejlesztő"
+msgid "support/QA"
+msgstr "támogató/QA"
+
+msgid "XMPP"
+msgstr "XMPP"
msgid "original author"
msgstr "eredeti szerző"
@@ -11475,8 +11439,7 @@ msgstr ""
#, c-format
msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>"
-msgstr ""
-"<FONT SIZE=\"4\">IRC:</FONT> #pidgin az irc.freenode.net hálózaton<BR><BR>"
+msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin az irc.freenode.net hálózaton<BR><BR>"
msgid "Current Developers"
msgstr "Jelenlegi fejlesztők"
@@ -11490,9 +11453,6 @@ msgstr "Visszavonult fejlesztők"
msgid "Retired Crazy Patch Writers"
msgstr "Visszavonult őrült patch szerzők"
-msgid "Artists"
-msgstr "Grafikusok"
-
msgid "Current Translators"
msgstr "Jelenlegi fordítók"
@@ -11589,8 +11549,7 @@ msgid "_Remove Group"
msgstr "_Csoport eltávolítása"
#, c-format
-msgid ""
-"You are about to remove %s from your buddy list. Do you want to continue?"
+msgid "You are about to remove %s from your buddy list. Do you want to continue?"
msgstr "%s eltávolítására készül a partnerlistájáról. Folytatni akarja?"
msgid "Remove Buddy"
@@ -11603,8 +11562,7 @@ msgstr "Partner _törlése"
msgid ""
"You are about to remove the chat %s from your buddy list. Do you want to "
"continue?"
-msgstr ""
-"%s csevegés eltávolítására készül a partnerlistájáról. Folytatni akarja?"
+msgstr "%s csevegés eltávolítására készül a partnerlistájáról. Folytatni akarja?"
msgid "Remove Chat"
msgstr "Csevegés eltávolítása"
@@ -11736,8 +11694,7 @@ msgid "Hyperlink prelight color"
msgstr "Hiperhivatkozás előfényszíne"
msgid "Color to draw hyperlinks when mouse is over them."
-msgstr ""
-"Hiperhivatkozások rajzolásához használt szín, amikor az egér rájuk mutat."
+msgstr "Hiperhivatkozások rajzolásához használt szín, amikor az egér rájuk mutat."
msgid "Sent Message Name Color"
msgstr "Elküldött üzenet névszíne"
@@ -11860,8 +11817,7 @@ msgstr "_Leírás"
msgid ""
"Please enter the URL and description of the link that you want to insert. "
"The description is optional."
-msgstr ""
-"Adja meg a beszúrandó hivatkozás URL címét és leírását. A leírás opcionális."
+msgstr "Adja meg a beszúrandó hivatkozás URL címét és leírását. A leírás opcionális."
msgid "Please enter the URL of the link that you want to insert."
msgstr "Adja meg a beszúrandó hivatkozás URL címét."
@@ -12013,8 +11969,7 @@ msgstr ""
msgid ""
"Are you sure you want to permanently delete the system log which started at %"
"s?"
-msgstr ""
-"Biztos, hogy törölni akarja a(z) %s időpontban kezdődött rendszernaplót?"
+msgstr "Biztos, hogy törölni akarja a(z) %s időpontban kezdődött rendszernaplót?"
msgid "Delete Log?"
msgstr "Törli a naplót?"
@@ -12028,8 +11983,7 @@ msgstr "<span size='larger' weight='bold'>Társalgás itt: %s, ekkor: %s</span>"
#, c-format
msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>"
-msgstr ""
-"<span size='larger' weight='bold'>Társalgás ezzel: %s, ekkor: %s</span>"
+msgstr "<span size='larger' weight='bold'>Társalgás ezzel: %s, ekkor: %s</span>"
#. Steal the "HELP" response and use it to trigger browsing to the logs folder
msgid "_Browse logs folder"
@@ -12109,11 +12063,6 @@ msgid ""
"and post the backtrace from the core file. If you do not know\n"
"how to get the backtrace, please read the instructions at\n"
"%swiki/GetABacktrace\n"
-"\n"
-"If you need further assistance, please IM either SeanEgn or \n"
-"LSchiere (via AIM). Contact information for Sean and Luke \n"
-"on other protocols is at\n"
-"%swiki/DeveloperPages\n"
msgstr ""
"A %s %s összeomlott és megpróbált kiírni egy magfájlt.\n"
"Ez a szoftver és nem az Ön hibája miatt történt.\n"
@@ -12127,12 +12076,6 @@ msgstr ""
"szerezze be a visszakövetést, akkor olvassa el a következő címen található\n"
"utasításokat:\n"
"%swiki/GetABacktrace\n"
-"\n"
-"Ha további segítségre van szüksége, akkor küldjön azonnali üzenetet (AIM "
-"protokollon, angolul)\n"
-"SeanEgn-nak vagy LSchiere-nek. Sean és Luke kapcsolatinformációi más\n"
-"protokollokhoz elérhetők a következő oldalon:\n"
-"%swiki/DeveloperPages\n"
#. Translators may want to transliterate the name.
#. It is not to be translated.
@@ -12168,8 +12111,7 @@ msgstr "Az URL megnyitása sikertelen"
msgid "Error launching \"%s\": %s"
msgstr "Hiba „%s” indításakor: %s"
-msgid ""
-"The 'Manual' browser command has been chosen, but no command has been set."
+msgid "The 'Manual' browser command has been chosen, but no command has been set."
msgstr "A „Kézi” böngészőparancsot választotta, de nem adott meg parancsot."
msgid "The following plugins will be unloaded."
@@ -12604,11 +12546,9 @@ msgstr "_Hangok némítása"
msgid "Sounds when conversation has _focus"
msgstr "Hangok lejátszása, ha a társalgás ablaka a_ktív"
-#, fuzzy
msgid "_Enable sounds:"
msgstr "Hangok _engedélyezése:"
-#, fuzzy
msgid "V_olume:"
msgstr "H_angerő:"
@@ -12833,13 +12773,11 @@ msgstr "Hangulatjel"
msgid "Custom Smiley Manager"
msgstr "Egyénihangulatjel-kezelő"
-#, fuzzy
msgid "Click to change your buddyicon for this account."
-msgstr "Ezen _partnerikon használata a fiókhoz:"
+msgstr "Kattintson a fiók partnerikonjának módosításához."
-#, fuzzy
msgid "Click to change your buddyicon for all accounts."
-msgstr "Ezen _partnerikon használata a fiókhoz:"
+msgstr "Kattintson az összes fiók partnerikonjának módosításához."
msgid "Waiting for network connection"
msgstr "Várakozás a hálózati kapcsolatra"
@@ -12938,8 +12876,7 @@ msgstr ""
#, c-format
msgid "The file '%s' is too large for %s. Please try a smaller image.\n"
-msgstr ""
-"A(z) „%s” fájl túl nagy a következőhöz: %s. Próbálkozzon kisebb képpel.\n"
+msgstr "A(z) „%s” fájl túl nagy a következőhöz: %s. Próbálkozzon kisebb képpel.\n"
msgid "Icon Error"
msgstr "Ikonhiba"
@@ -12952,8 +12889,7 @@ msgid "Failed to open file '%s': %s"
msgstr "Nem sikerült megnyitni a(z) „%s” fájlt: %s"
#, c-format
-msgid ""
-"Failed to load image '%s': reason not known, probably a corrupt image file"
+msgid "Failed to load image '%s': reason not known, probably a corrupt image file"
msgstr ""
"A(z) „%s” kép betöltése sikertelen: az ok nem ismert, valószínűleg sérült a "
"képfájl"
@@ -12976,8 +12912,11 @@ msgstr "Információ le_kérése"
msgid "_Invite"
msgstr "Meg_hívás"
-msgid "_Modify"
-msgstr "_Módosítás"
+msgid "_Modify..."
+msgstr "_Módosítás…"
+
+msgid "_Add..."
+msgstr "Hozzá_adás…"
msgid "_Open Mail"
msgstr "_Levél megnyitása"
@@ -13000,6 +12939,12 @@ msgstr "Ennek kiválasztása letiltja a grafikus hangulatjeleket."
msgid "none"
msgstr "nincs"
+msgid "Small"
+msgstr "Kicsi"
+
+msgid "Smaller versions of the default smilies"
+msgstr "Az alapértelmezett hangulatjelek kisebb változatai"
+
msgid "Response Probability:"
msgstr "Válasz valószínűsége:"
@@ -13083,8 +13028,7 @@ msgstr "Kapcsolat prioritása"
#. *< name
#. *< version
#. *< summary
-msgid ""
-"Allows for controlling the values associated with different buddy states."
+msgid "Allows for controlling the values associated with different buddy states."
msgstr ""
"Lehetővé teszi a partnerek különböző állapotaihoz rendelt értékek "
"beállítását."
@@ -13149,8 +13093,7 @@ msgid "Number of conversations per window"
msgstr "Társalgások száma ablakonként"
msgid "Separate IM and Chat windows when placing by number"
-msgstr ""
-"Azonnali üzenő- és csevegőablakok elkülönítése szám szerinti elhelyezésnél"
+msgstr "Azonnali üzenő- és csevegőablakok elkülönítése szám szerinti elhelyezésnél"
#. *< type
#. *< ui_requirement
@@ -13359,8 +13302,7 @@ msgstr "Ikonállapot távollét esetén"
#. * summary
#. * description
msgid "Iconifies the buddy list and your conversations when you go away."
-msgstr ""
-"Ikonállapotba helyezi a partnerlistát és a társalgásokat, amikor távol van."
+msgstr "Ikonállapotba helyezi a partnerlistát és a társalgásokat, amikor távol van."
msgid "Mail Checker"
msgstr "Levélfigyelő"
@@ -13369,8 +13311,7 @@ msgid "Checks for new local mail."
msgstr "Új helyi levél érkezését ellenőrzi."
msgid "Adds a small box to the buddy list that shows if you have new mail."
-msgstr ""
-"Kis dobozt ad a partnerlistához, amely megjelenik új levél érkezésekor."
+msgstr "Kis dobozt ad a partnerlistához, amely megjelenik új levél érkezésekor."
msgid "Markerline"
msgstr "Jelölő vonal"
@@ -13470,6 +13411,9 @@ msgstr "Új üzenetek számának beszúrása az _X tulajdonságba"
msgid "Set window manager \"_URGENT\" hint"
msgstr "„_SÜRGŐS” tipp beállítása az ablakkezelő számára"
+msgid "_Flash window"
+msgstr "_Ablak villogtatása"
+
#. Raise window method button
msgid "R_aise conversation window"
msgstr "_Társalgási ablak előtérbe hozása"
@@ -13516,8 +13460,7 @@ msgstr "Üzenetértesítés"
#. * summary
#. * description
msgid "Provides a variety of ways of notifying you of unread messages."
-msgstr ""
-"Különböző lehetőségeket nyújt az olvasatlan üzenetekre figyelmeztetésre."
+msgstr "Különböző lehetőségeket nyújt az olvasatlan üzenetekre figyelmeztetésre."
#. *< type
#. *< ui_requirement
@@ -13934,8 +13877,7 @@ msgstr "A windowsos Pidin beállításai"
msgid "Options specific to Pidgin for Windows."
msgstr "A windowsos Pidginre jellemző beállítások."
-msgid ""
-"Provides options specific to Pidgin for Windows , such as buddy list docking."
+msgid "Provides options specific to Pidgin for Windows , such as buddy list docking."
msgstr ""
"A windowsos Pidginre jellemző beállításokat biztosít, mint például a "
"partnerlista dokkolása."
@@ -13979,122 +13921,3 @@ msgstr ""
"Ez a bővítmény XMPP kiszolgálókban vagy kliensekben végzett hibakereséshez "
"hasznos."
-#, fuzzy
-#~ msgid "EOF while reading from resolver process"
-#~ msgstr ""
-#~ "Hiba a feloldó folyamatból olvasás közben:\n"
-#~ "%s"
-
-#, fuzzy
-#~ msgid "Your information has been updated"
-#~ msgstr "A jelszava meg lett változtatva."
-
-#, fuzzy
-#~ msgid "You have successfully removed a buddy"
-#~ msgstr "Sikeresen létrehozott egy Qun-t"
-
-#, fuzzy
-#~ msgid "You have successfully removed yourself from your friend's buddy list"
-#~ msgstr "%s eltávolította Önt a partnerlistájáról."
-
-#, fuzzy
-#~ msgid "You have added %d to buddy list"
-#~ msgstr "%s felvette Önt [%s] a partnerlistájára"
-
-#, fuzzy
-#~ msgid "Invalid QQid"
-#~ msgstr "Érvénytelen authzid"
-
-#, fuzzy
-#~ msgid "Please enter external group ID"
-#~ msgstr "Adja meg %s új nevét"
-
-#, fuzzy
-#~ msgid "Reason: %s"
-#~ msgstr "Verzió: \t%s\n"
-
-#, fuzzy
-#~ msgid "Your request to join group %d has been rejected by admin %d"
-#~ msgstr ""
-#~ "A csatlakozási kérelmét a(z) %d csoporthoz %d admin visszautasította"
-
-#, fuzzy
-#~ msgid "Your request to join group %d has been approved by admin %d"
-#~ msgstr ""
-#~ "A csatlakozási kérelmét a(z) %d csoporthoz %d admin visszautasította"
-
-#, fuzzy
-#~ msgid "You [%d] have left group \"%d\""
-#~ msgstr "Ön [%d] fel lett véve a következő csoportba: „%d”"
-
-#, fuzzy
-#~ msgid "You [%d] have been added to group \"%d\""
-#~ msgstr "%s felvette"
-
-#, fuzzy
-#~ msgid "This group has been added to your buddy list"
-#~ msgstr "%s felvette Önt a partnerlistájára."
-
-#, fuzzy
-#~ msgid "You have successfully left the group"
-#~ msgstr "Sikeresen létrehozott egy Qun-t"
-
-#, fuzzy
-#~ msgid "Enter your reason:"
-#~ msgstr "Írja be alább a jegyzetet…"
-
-#, fuzzy
-#~ msgid "You have successfully modified Qun member"
-#~ msgstr "Sikeresen létrehozott egy Qun-t"
-
-#, fuzzy
-#~ msgid "You have successfully modified Qun information"
-#~ msgstr "Sikeresen létrehozott egy Qun-t"
-
-#, fuzzy
-#~ msgid " Space"
-#~ msgstr "MySpace"
-
-#, fuzzy
-#~ msgid "<b>Real hostname</b>: %s: %d<br>\n"
-#~ msgstr "<b>Utolsó frissítés</b>: %s<br>\n"
-
-#, fuzzy
-#~ msgid "<b>My Public IP</b>: %s<br>\n"
-#~ msgstr "<b>Utolsó bejelentkezési IP</b>: %s<br>\n"
-
-#, fuzzy
-#~ msgid "Show Login Information"
-#~ msgstr "Bejelentkezési információk"
-
-#, fuzzy
-#~ msgid "resend interval(s)"
-#~ msgstr "Frissítési időköz"
-
-#, fuzzy
-#~ msgid "Failed to connect server"
-#~ msgstr "Nem sikerült a kiszolgálóhoz kapcsolódni."
-
-#, fuzzy
-#~ msgid "Unable to login. Check debug log."
-#~ msgstr "A bővítmény nem tölthető be"
-
-#, fuzzy
-#~ msgid "Unable to login"
-#~ msgstr "A bővítmény nem tölthető be"
-
-#, fuzzy
-#~ msgid "Failed room reply"
-#~ msgstr "A partner eltávolítása sikertelen"
-
-#, fuzzy
-#~ msgid "User %s rejected your request"
-#~ msgstr "Visszautasította %d kérését"
-
-#, fuzzy
-#~ msgid "User %s approved your request"
-#~ msgstr "Jóvá kívánja hagyni a kérést?"
-
-#, fuzzy
-#~ msgid "Notice from: %s"
-#~ msgstr "Megjegyzés"