qulogic/pidgin

Merged pidgin/main into default

2017-12-26, Arkadiy Illarionov
945ad9fd90f6
Merged pidgin/main into default
--- a/doc/reference/libpurple/libpurple-docs.xml Wed Nov 22 14:33:46 2017 +0300
+++ b/doc/reference/libpurple/libpurple-docs.xml Tue Dec 26 10:54:14 2017 +0300
@@ -58,6 +58,7 @@
<xi:include href="xml/nat-pmp.xml" />
<xi:include href="xml/network.xml" />
<xi:include href="xml/notify.xml" />
+ <xi:include href="xml/options.xml" />
<xi:include href="xml/plugins.xml" />
<xi:include href="xml/prefs.xml" />
<xi:include href="xml/pluginpref.xml" />
--- a/finch/gntblist.c Wed Nov 22 14:33:46 2017 +0300
+++ b/finch/gntblist.c Tue Dec 26 10:54:14 2017 +0300
@@ -127,10 +127,6 @@
static void add_chat(PurpleChat *chat, FinchBlist *ggblist);
static void add_node(PurpleBlistNode *node, FinchBlist *ggblist);
static void node_update(PurpleBuddyList *list, PurpleBlistNode *node);
-#if 0
-static gboolean is_contact_online(PurpleContact *contact);
-static gboolean is_group_online(PurpleGroup *group);
-#endif
static void draw_tooltip(FinchBlist *ggblist);
static void tooltip_for_buddy(PurpleBuddy *buddy, GString *str, gboolean full);
static gboolean remove_typing_cb(gpointer null);
@@ -385,27 +381,6 @@
fnode = purple_blist_node_get_ui_data(node);
if (fnode && fnode->signed_timer)
flag |= GNT_TEXT_FLAG_BLINK;
- } else if (PURPLE_IS_GROUP(node)) {
- /* If the node is collapsed, then check to see if any of the priority buddies of
- * any of the contacts within this group recently signed on/off, and set the blink
- * flag appropriately. */
- /* XXX: Refs #5444 */
- /* XXX: there's no way I can ask if the node is expanded or not? *sigh*
- * API addition would be necessary */
-#if 0
- if (!gnt_tree_get_expanded(GNT_TREE(ggblist->tree), node)) {
- for (node = purple_blist_node_get_first_child(node); node;
- node = purple_blist_node_get_sibling_next(node)) {
- PurpleBlistNode *pnode;
- pnode = purple_contact_get_priority_buddy((PurpleContact*)node);
- fnode = purple_blist_node_get_ui_data(node);
- if (fnode && fnode->signed_timer) {
- flag |= GNT_TEXT_FLAG_BLINK;
- break;
- }
- }
- }
-#endif
}
return flag;
@@ -418,37 +393,6 @@
gnt_tree_set_row_color(GNT_TREE(ggblist->tree), node, get_display_color(node));
}
-#if 0
-static gboolean
-is_contact_online(PurpleContact *contact)
-{
- PurpleBlistNode *node;
- for (node = purple_blist_node_get_first_child(((PurpleBlistNode*)contact)); node;
- node = purple_blist_node_get_sibling_next(node)) {
- FinchBlistNode *fnode = purple_blist_node_get_ui_data(node);
- if (PURPLE_BUDDY_IS_ONLINE((PurpleBuddy*)node) ||
- (fnode && fnode->signed_timer))
- return TRUE;
- }
- return FALSE;
-}
-
-static gboolean
-is_group_online(PurpleGroup *group)
-{
- PurpleBlistNode *node;
- for (node = purple_blist_node_get_first_child(((PurpleBlistNode*)group)); node;
- node = purple_blist_node_get_sibling_next(node)) {
- if (PURPLE_IS_CHAT(node) &&
- purple_account_is_connected(((PurpleChat *)node)->account))
- return TRUE;
- else if (is_contact_online((PurpleContact*)node))
- return TRUE;
- }
- return FALSE;
-}
-#endif
-
static void
new_node(PurpleBlistNode *node)
{
@@ -999,20 +943,6 @@
blist_update_row_flags((PurpleBlistNode*)contact);
}
-#if 0
-static void
-buddy_signed_on(PurpleBuddy *buddy, FinchBlist *ggblist)
-{
- add_node((PurpleBlistNode*)buddy, ggblist);
-}
-
-static void
-buddy_signed_off(PurpleBuddy *buddy, FinchBlist *ggblist)
-{
- node_remove(purple_blist_get_buddy_list(), (PurpleBlistNode*)buddy);
-}
-#endif
-
PurpleBlistUiOps *finch_blist_get_ui_ops()
{
return &blist_ui_ops;
@@ -3127,17 +3057,6 @@
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", finch_blist_get_handle(),
PURPLE_CALLBACK(buddy_signed_on_off), ggblist);
-#if 0
- /* These I plan to use to indicate unread-messages etc. */
- purple_signal_connect(purple_conversations_get_handle(), "received-im-msg", finch_blist_get_handle(),
- PURPLE_CALLBACK(received_im_msg), list);
- purple_signal_connect(purple_conversations_get_handle(), "sent-im-msg", finch_blist_get_handle(),
- PURPLE_CALLBACK(sent_im_msg), NULL);
-
- purple_signal_connect(purple_conversations_get_handle(), "received-chat-msg", finch_blist_get_handle(),
- PURPLE_CALLBACK(received_chat_msg), list);
-#endif
-
g_signal_connect(G_OBJECT(ggblist->tree), "selection_changed", G_CALLBACK(selection_changed), ggblist);
g_signal_connect(G_OBJECT(ggblist->tree), "key_pressed", G_CALLBACK(key_pressed), ggblist);
g_signal_connect(G_OBJECT(ggblist->tree), "context-menu", G_CALLBACK(context_menu), ggblist);
--- a/finch/gntplugin.c Wed Nov 22 14:33:46 2017 +0300
+++ b/finch/gntplugin.c Tue Dec 26 10:54:14 2017 +0300
@@ -446,95 +446,6 @@
}
}
-#if 0
-static void
-install_selected_file_cb(gpointer handle, const char *filename)
-{
- /* Try to init the selected file.
- * If it succeeds, try to make a copy of the file in $USERDIR/plugins/.
- * If the copy succeeds, unload and destroy the plugin in the original
- * location and init+load the new one.
- * Select the plugin in the plugin list.
- */
- char *path;
- PurplePlugin *plugin;
-
- g_return_if_fail(plugins.window);
-
- plugin = purple_plugin_probe(filename);
- if (!plugin) {
- purple_notify_error(handle, _("Error loading plugin"),
- _("The selected file is not a valid plugin."),
- _("Please open the debug window and try again to see the exact error message."), NULL);
- return;
- }
- if (g_list_find(gnt_tree_get_rows(GNT_TREE(plugins.tree)), plugin)) {
- purple_plugin_load(plugin);
- gnt_tree_set_choice(GNT_TREE(plugins.tree), plugin, purple_plugin_is_loaded(plugin));
- gnt_tree_set_selected(GNT_TREE(plugins.tree), plugin);
- return;
- }
-
- path = g_build_filename(purple_user_dir(), "plugins", NULL);
- if (purple_build_dir(path, S_IRUSR | S_IWUSR | S_IXUSR) == 0) {
- char *content = NULL;
- gsize length = 0;
-
- if (g_file_get_contents(filename, &content, &length, NULL)) {
- char *file = g_path_get_basename(filename);
- g_free(path);
- path = g_build_filename(purple_user_dir(), "plugins", file, NULL);
- if (purple_util_write_data_to_file_absolute(path, content, length)) {
- purple_plugin_destroy(plugin);
- plugin = purple_plugin_probe(path);
- if (!plugin) {
- purple_debug_warning("gntplugin", "This is really strange. %s can be loaded, but %s can't!\n",
- filename, path);
- g_unlink(path);
- plugin = purple_plugin_probe(filename);
- }
- } else {
- }
- }
- g_free(content);
- }
- g_free(path);
-
- purple_plugin_load(plugin);
-
- if (plugin->info->type == PURPLE_PLUGIN_LOADER) {
- GList *cur;
- for (cur = PURPLE_PLUGIN_LOADER_INFO(plugin)->exts; cur != NULL;
- cur = cur->next)
- purple_plugins_probe(cur->data);
- return;
- }
-
- if (plugin->info->type != PURPLE_PLUGIN_STANDARD ||
- (plugin->info->flags & PURPLE_PLUGIN_FLAG_INVISIBLE) ||
- plugin->error)
- return;
-
- gnt_tree_add_choice(GNT_TREE(plugins.tree), plugin,
- gnt_tree_create_row(GNT_TREE(plugins.tree), plugin->info->name), NULL, NULL);
- gnt_tree_set_choice(GNT_TREE(plugins.tree), plugin, purple_plugin_is_loaded(plugin));
- gnt_tree_set_row_flags(GNT_TREE(plugins.tree), plugin, GNT_TEXT_FLAG_BOLD);
- gnt_tree_set_selected(GNT_TREE(plugins.tree), plugin);
-}
-
-static void
-install_plugin_cb(GntWidget *w, gpointer null)
-{
- static int handle;
-
- purple_request_close_with_handle(&handle);
- purple_request_file(&handle, _("Select plugin to install"), NULL,
- FALSE, G_CALLBACK(install_selected_file_cb), NULL,
- NULL, &handle);
- g_signal_connect_swapped(G_OBJECT(w), "destroy", G_CALLBACK(purple_request_close_with_handle), &handle);
-}
-#endif
-
void finch_plugins_show_all(void)
{
GntWidget *window, *tree, *box, *aboot, *button;
@@ -603,13 +514,6 @@
box = gnt_hbox_new(FALSE);
gnt_box_add_widget(GNT_BOX(window), box);
-#if 0
- button = gnt_button_new(_("Install Plugin..."));
- gnt_box_add_widget(GNT_BOX(box), button);
- gnt_util_set_trigger_widget(GNT_WIDGET(tree), GNT_KEY_INS, button);
- g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(install_plugin_cb), NULL);
-#endif
-
button = gnt_button_new(_("Close"));
gnt_box_add_widget(GNT_BOX(box), button);
g_signal_connect_swapped(G_OBJECT(button), "activate",
--- a/finch/libfinch.c Wed Nov 22 14:33:46 2017 +0300
+++ b/finch/libfinch.c Tue Dec 26 10:54:14 2017 +0300
@@ -29,6 +29,7 @@
#include "glibcompat.h"
#include "log.h"
#include "notify.h"
+#include "options.h"
#include "plugins.h"
#include "protocol.h"
#include "pounce.h"
@@ -146,9 +147,6 @@
{"config", 'c', 0,
G_OPTION_ARG_FILENAME, &opt_config_dir_arg,
_("use DIR for config files"), _("DIR")},
- {"debug", 'd', 0,
- G_OPTION_ARG_NONE, &debug_enabled,
- _("print debugging messages to stderr"), NULL},
{"nologin", 'n', 0,
G_OPTION_ARG_NONE, &opt_nologin,
_("don't automatically login"), NULL},
@@ -170,6 +168,9 @@
g_option_context_set_summary(context, DISPLAY_VERSION);
g_option_context_add_main_entries(context, option_entries, PACKAGE);
+ g_option_context_add_group(context, purple_get_option_group());
+ g_option_context_add_group(context, gplugin_get_option_group());
+
#ifdef G_OS_WIN32
/* Handle Unicode filenames on Windows. See GOptionContext docs. */
args = g_win32_get_command_line();
--- a/finch/libgnt/gntfilesel.c Wed Nov 22 14:33:46 2017 +0300
+++ b/finch/libgnt/gntfilesel.c Tue Dec 26 10:54:14 2017 +0300
@@ -38,10 +38,6 @@
#include <glib/gstdio.h>
-#if 0
-#include <glob.h>
-#endif
-
enum
{
SIG_FILE_SELECTED,
@@ -281,12 +277,7 @@
{
char *path;
char *str;
-#if 0
- int count;
- glob_t gl;
- GStatBuf st;
- int glob_ret;
-#endif
+
if (strcmp(key, "\r") && strcmp(key, "\n"))
return FALSE;
@@ -309,39 +300,9 @@
g_free(path);
return FALSE;
}
-#if 0
- /* XXX: there needs to be a way to allow other methods for globbing,
- * like the read_fn stuff. */
- glob_ret = glob(path, GLOB_MARK, NULL, &gl);
- if (!glob_ret) { /* XXX: do something with the return value */
- char *loc = g_path_get_dirname(gl.gl_pathv[0]);
- g_stat(gl.gl_pathv[0], &st);
- gnt_file_sel_set_current_location(sel, loc); /* XXX: check the return value */
- g_free(loc);
- if (!S_ISDIR(st.st_mode) && !sel->dirsonly) {
- gnt_tree_remove_all(GNT_TREE(sel->files));
- for (count = 0; count < gl.gl_pathc; count++) {
- char *tmp = process_path(gl.gl_pathv[count]);
- loc = g_path_get_dirname(tmp);
- if (g_utf8_collate(sel->current, loc) == 0) {
- char *base = g_path_get_basename(tmp);
- char size[128];
- snprintf(size, sizeof(size), "%ld", (long)st.st_size);
- gnt_tree_add_row_after(GNT_TREE(sel->files), base,
- gnt_tree_create_row(GNT_TREE(sel->files), base, size, ""), NULL, NULL);
- }
- g_free(loc);
- g_free(tmp);
- }
- gnt_widget_draw(sel->files);
- }
- } else if (sel->files) {
- gnt_tree_remove_all(GNT_TREE(sel->files));
- gnt_widget_draw(sel->files);
- }
- globfree(&gl);
-#endif
+ /* XXX: Add support for globbing via g_pattern_spec_* */
+
success:
g_free(path);
return TRUE;
--- a/finch/libgnt/gntmain.c Wed Nov 22 14:33:46 2017 +0300
+++ b/finch/libgnt/gntmain.c Tue Dec 26 10:54:14 2017 +0300
@@ -340,12 +340,6 @@
}
*k = '\0';
-#if 0
- gnt_warning("a key: [%s] %#x %#x %#x %#x %#x %#x", keys,
- (guchar)keys[0], (guchar)keys[1], (guchar)keys[2],
- (guchar)keys[3], (guchar)keys[4], (guchar)keys[5]);
-#endif
-
/* TODO: we could call detect_mouse_action here, but no
* events are triggered (yet?) for mouse on win32.
*/
@@ -395,17 +389,6 @@
if (mouse_enabled && detect_mouse_action(k))
goto end;
-#if 0
- /* I am not sure what's happening here. If this actually does something,
- * then this needs to go in gnt_keys_refine. */
- if (*k < 0) { /* Alt not sending ESC* */
- *(k + 1) = 128 - *k;
- *k = 27;
- *(k + 2) = 0;
- rd++;
- }
-#endif
-
while (rd) {
char back;
int p;
@@ -450,12 +433,6 @@
g_io_channel_set_close_on_unref(channel, TRUE);
-#if 0
- g_io_channel_set_encoding(channel, NULL, NULL);
- g_io_channel_set_buffered(channel, FALSE);
- g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL );
-#endif
-
channel_read_callback = result = g_io_add_watch_full(channel, G_PRIORITY_HIGH,
(G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),
io_invoke, NULL, NULL);
@@ -465,10 +442,6 @@
io_invoke_error, GINT_TO_POINTER(result), NULL);
g_io_channel_unref(channel);
-
-#if 0
- gnt_warning("setting up IO (%d)", channel_read_callback);
-#endif
}
static gboolean
--- a/finch/libgnt/gntmenuitem.c Wed Nov 22 14:33:46 2017 +0300
+++ b/finch/libgnt/gntmenuitem.c Tue Dec 26 10:54:14 2017 +0300
@@ -65,13 +65,8 @@
gnt_menuitem_init(GTypeInstance *instance, gpointer klass)
{
GntMenuItem *item = GNT_MENU_ITEM(instance);
-#if 0
- GntMenuItemPriv *priv = &item->priv;
- priv->visible = TRUE;
-#else
item->visible = TRUE;
-#endif
}
/******************************************************************************
@@ -167,13 +162,7 @@
void
gnt_menuitem_set_visible(GntMenuItem *item, gboolean visible)
{
-#if 0
- GntMenuItemPriv *priv = &item->priv;
-
- priv->visible = visible;
-#else
item->visible = visible;
-#endif
}
gboolean
@@ -181,11 +170,7 @@
{
g_return_val_if_fail(GNT_IS_MENU_ITEM(item), FALSE);
-#if 0
- return item->priv.visible;
-#else
return item->visible;
-#endif
}
void
--- a/finch/libgnt/gntwidget.c Wed Nov 22 14:33:46 2017 +0300
+++ b/finch/libgnt/gntwidget.c Tue Dec 26 10:54:14 2017 +0300
@@ -322,42 +322,8 @@
if (widget->window == NULL)
{
-#if 0
- int x, y, maxx, maxy, w, h;
- int oldw, oldh;
- gboolean shadow = TRUE;
-
- if (!gnt_widget_has_shadow(widget))
- shadow = FALSE;
-
- x = widget->priv.x;
- y = widget->priv.y;
- w = oldw = widget->priv.width + shadow;
- h = oldh = widget->priv.height + shadow;
-
- getmaxyx(stdscr, maxy, maxx);
- maxy -= 1; /* room for the taskbar */
+ widget->window = newpad(widget->priv.height + 20, widget->priv.width + 20);
- x = MAX(0, x);
- y = MAX(0, y);
- if (x + w >= maxx)
- x = MAX(0, maxx - w);
- if (y + h >= maxy)
- y = MAX(0, maxy - h);
-
- w = MIN(w, maxx);
- h = MIN(h, maxy);
-
- widget->priv.x = x;
- widget->priv.y = y;
- if (w != oldw || h != oldh) {
- widget->priv.width = w - shadow;
- widget->priv.height = h - shadow;
- g_signal_emit(widget, signals[SIG_SIZE_CHANGED], 0, oldw, oldh);
- }
-#else
- widget->window = newpad(widget->priv.height + 20, widget->priv.width + 20); /* XXX: */
-#endif
init_widget(widget);
}
@@ -403,11 +369,6 @@
{
g_signal_emit(widget, signals[SIG_HIDE], 0);
wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_NORMAL));
-#if 0
- /* XXX: I have no clue why, but this seemed to be necessary. */
- if (gnt_widget_has_shadow(widget))
- mvwvline(widget->window, 1, widget->priv.width, ' ', widget->priv.height);
-#endif
gnt_screen_release(widget);
GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_INVISIBLE);
GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_MAPPED);
--- a/finch/libgnt/test.c Wed Nov 22 14:33:46 2017 +0300
+++ b/finch/libgnt/test.c Tue Dec 26 10:54:14 2017 +0300
@@ -16,25 +16,6 @@
gnt_box_set_title(GNT_BOX(box), "This is a test");
gnt_widget_show(box);
-#if 0
-
- gnt_widget_set_focus(w, TRUE);
-
- /* XXX: This is to just test stuff */
- if (text[0] == 27)
- {
- if (strcmp(text+1, GNT_KEY_LEFT) == 0 && w->priv.x)
- (w->priv.x)--;
- else if (strcmp(text+1, GNT_KEY_RIGHT) == 0)
- (w->priv.x)++;
- else if (strcmp(text+1, GNT_KEY_UP) == 0 && w->priv.y)
- (w->priv.y)--;
- else if (strcmp(text+1, GNT_KEY_DOWN) == 0)
- (w->priv.y)++;
- }
-
- gnt_widget_draw(w);
-#endif
return FALSE;
}
@@ -57,11 +38,7 @@
{
g_return_val_if_fail(GNT_IS_TREE(tree), FALSE);
gnt_tree_scroll(GNT_TREE(tree), 1);
- /*wscrl(tree->window, 1);*/
- /*box(tree->window, ACS_VLINE, ACS_HLINE);*/
- /*wrefresh(tree->window);*/
- /*char *s = 0;*/
- /**s = 'a';*/
+
return TRUE;
}
@@ -90,7 +67,6 @@
gnt_box_add_widget(GNT_BOX(vbox), widget2);
gnt_box_add_widget(GNT_BOX(hbox), label);
- /*gnt_box_add_widget(GNT_BOX(hbox), vbox);*/
gnt_box_add_widget(GNT_BOX(hbox), gnt_entry_new("a"));
@@ -106,18 +82,12 @@
GNT_WIDGET_UNSET_FLAGS(hbox, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW);
gnt_box_set_title(GNT_BOX(hbox), "111111111111111111111111111111111111111111111111111111111111111This is the title …");
- /*gnt_widget_set_take_focus(vbox, TRUE);*/
- /*gnt_widget_set_take_focus(hbox, TRUE);*/
- /*gnt_widget_set_position(hbox, 10, 10);*/
-
gnt_widget_show(hbox);
g_signal_connect(hbox, "key_pressed", G_CALLBACK(key_pressed), tree);
g_signal_connect(widget, "activate", G_CALLBACK(button1), hbox);
g_signal_connect(widget2, "activate", G_CALLBACK(button2), hbox);
- /*g_timeout_add(1000, (GSourceFunc)w_scroll, tree);*/
-
gnt_main();
return 0;
--- a/libpurple/conversationtypes.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/conversationtypes.c Tue Dec 26 10:54:14 2017 +0300
@@ -806,14 +806,6 @@
return;
}
-#if 0
- PurpleAccount *account = purple_conversation_get_account(conv);
- /* XXX: this should not be necessary */
- if (purple_strequal(purple_normalize(account, who), priv->nick)) {
- flags |= PURPLE_MESSAGE_SEND;
- }
-#endif
-
flags = purple_message_get_flags(msg);
if (flags & PURPLE_MESSAGE_RECV) {
if (purple_utf8_has_word(purple_message_get_contents(msg), priv->nick)) {
@@ -1455,36 +1447,11 @@
{
/* Still connected */
int chat_id = purple_chat_conversation_get_id(chat);
-#if 0
+
/*
- * This is unfortunately necessary, because calling
- * purple_serv_chat_leave() calls this purple_conversation_destroy(),
- * which leads to two calls here.. We can't just return after
- * this, because then it'll return on the next pass. So, since
- * purple_serv_got_chat_left(), which is eventually called from the
- * protocol that purple_serv_chat_leave() calls, removes this conversation
- * from the gc's buddy_chats list, we're going to check to see
- * if this exists in the list. If so, we want to return after
- * calling this, because it'll be called again. If not, fall
- * through, because it'll have already been removed, and we'd
- * be on the 2nd pass.
- *
- * Long paragraph. <-- Short sentence.
- *
- * -- ChipX86
- */
-
- if (gc && g_slist_find(gc->buddy_chats, conv) != NULL) {
- purple_serv_chat_leave(gc, chat_id);
-
- return;
- }
-#endif
- /*
- * Instead of all of that, lets just close the window when
- * the user tells us to, and let the protocol deal with the
- * internals on it's own time. Don't do this if the protocol already
- * knows it left the chat.
+ * Close the window when the user tells us to, and let the protocol
+ * deal with the internals on it's own time. Don't do this if the
+ * protocol already knows it left the chat.
*/
if (!purple_chat_conversation_has_left(chat))
purple_serv_chat_leave(gc, chat_id);
--- a/libpurple/dbus-server.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/dbus-server.c Tue Dec 26 10:54:14 2017 +0300
@@ -691,13 +691,7 @@
gboolean xboolean;
gpointer ptr = NULL;
gpointer val;
-#if 0
- if (purple_value_is_outgoing(purple_values[i]))
- {
- ptr = my_arg(gpointer);
- g_return_val_if_fail(ptr, TRUE);
- }
-#endif
+
switch (types[i])
{
case G_TYPE_INT:
@@ -768,13 +762,8 @@
DBusMessageIter iter;
char *newname;
-#if 0 /* this is noisy with no dbus connection */
- g_return_if_fail(purple_dbus_connection);
-#else
if (purple_dbus_connection == NULL)
return;
-#endif
-
/*
* The test below is a hack that prevents our "dbus-method-called"
--- a/libpurple/http.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/http.c Tue Dec 26 10:54:14 2017 +0300
@@ -236,11 +236,6 @@
guint16 host_len1; /* host string length */
guint16 host_len2; /* host string length */
guint32 host_off; /* host string offset (always 0x00000020) */
-
-#if 0
- guint8 host[*]; /* host string (ASCII) */
- guint8 dom[*]; /* domain string (ASCII) */
-#endif
};
static time_t purple_http_rfc1123_to_time(const gchar *str);
--- a/libpurple/log.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/log.c Tue Dec 26 10:54:14 2017 +0300
@@ -364,19 +364,6 @@
PurpleLogLogger *purple_log_logger_new(const char *id, const char *name, int functions, ...)
{
-#if 0
- void(*create)(PurpleLog *),
- gsize(*write)(PurpleLog *, PurpleMessageFlags, const char *, GDateTime *, const char *),
- void(*finalize)(PurpleLog *),
- GList*(*list)(PurpleLogType type, const char*, PurpleAccount*),
- char*(*read)(PurpleLog*, PurpleLogReadFlags*),
- int(*size)(PurpleLog*),
- int(*total_size)(PurpleLogType type, const char *name, PurpleAccount *account),
- GList*(*list_syslog)(PurpleAccount *account),
- void(*get_log_sets)(PurpleLogSetCallback cb, GHashTable *sets),
- gboolean(*remove)(PurpleLog *log),
- gboolean(*is_deletable)(PurpleLog *log))
-#endif
PurpleLogLogger *logger;
va_list args;
--- a/libpurple/media.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/media.c Tue Dec 26 10:54:14 2017 +0300
@@ -499,15 +499,6 @@
g_hash_table_insert(media->priv->sessions, g_strdup(session->id), session);
}
-#if 0
-static gboolean
-purple_media_remove_session(PurpleMedia *media, PurpleMediaSession *session)
-{
- g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
- return g_hash_table_remove(media->priv->sessions, session->id);
-}
-#endif
-
static PurpleMediaStream *
purple_media_insert_stream(PurpleMediaSession *session,
const gchar *name, gboolean initiator)
--- a/libpurple/meson.build Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/meson.build Tue Dec 26 10:54:14 2017 +0300
@@ -39,6 +39,7 @@
'nat-pmp.c',
'network.c',
'notify.c',
+ 'options.c',
'plugins.c',
'pluginpref.c',
'pounce.c',
@@ -118,6 +119,7 @@
'nat-pmp.h',
'network.h',
'notify.h',
+ 'options.h',
'plugins.h',
'pluginpref.h',
'pounce.h',
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/options.c Tue Dec 26 10:54:14 2017 +0300
@@ -0,0 +1,96 @@
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here. Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
+ */
+
+#include "internal.h"
+
+#include "options.h"
+
+#include "network.h"
+
+/******************************************************************************
+ * Callbacks
+ *****************************************************************************/
+static gboolean
+debug_cb(const gchar *option_name, const gchar *value,
+ gpointer data, GError **error)
+{
+ purple_debug_set_enabled(TRUE);
+
+ if (purple_strequal(value, "colored")) {
+ purple_debug_set_colored(TRUE);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+force_online_cb(const gchar *option_name, const gchar *value,
+ gpointer data, GError **error)
+{
+ purple_network_force_online();
+
+ return TRUE;
+}
+
+/******************************************************************************
+ * API
+ *****************************************************************************/
+
+/**
+ * purple_get_option_group:
+ *
+ * Returns a #GOptionGroup for the commandline arguments recognized by
+ * LibPurple. You should add this option group to your #GOptionContext with
+ * g_option_context_add_group(), if you are using g_option_context_parse() to
+ * parse your commandline arguments.
+ *
+ * Return Value: (transfer full): a #GOptionGroup for the commandline arguments
+ * recognized by LibPurple.
+ */
+GOptionGroup *
+purple_get_option_group(void) {
+ GOptionGroup *group = NULL;
+ GOptionEntry entries[] = {
+ {
+ "debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG,
+ G_OPTION_ARG_CALLBACK, &debug_cb,
+ _("print debugging messages to stdout"),
+ _("[colored]")
+ }, {
+ "force-online", 'f', 0,
+ G_OPTION_ARG_NONE, &force_online_cb,
+ _("force online, regardless of network status"),
+ NULL
+ },
+ };
+
+ group = g_option_group_new(
+ "libpurple",
+ _("LibPurple options"),
+ _("Show LibPurple Options"),
+ NULL,
+ NULL
+ );
+
+ g_option_group_add_entries(group, entries);
+
+ return group;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/options.h Tue Dec 26 10:54:14 2017 +0300
@@ -0,0 +1,42 @@
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here. Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
+ */
+
+#ifndef PURPLE_OPTIONS_H
+#define PURPLE_OPTIONS_H
+
+/**
+ * SECTION:options
+ * @section_id: libpurple-options
+ * @short_description: <filename>options.h</filename>
+ * @title: Options API
+ *
+ * The functions defined here are to help in handling command line options.
+ */
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+GOptionGroup *purple_get_option_group(void);
+
+G_END_DECLS
+
+#endif /* PURPLE_OPTIONS_H */
--- a/libpurple/plugins/filectl.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/plugins/filectl.c Tue Dec 26 10:54:14 2017 +0300
@@ -86,27 +86,6 @@
free(arg1);
free(arg2);
-/* purple_find_conversation() is gone in 2.0.0. */
-#if 0
- } else if (!g_ascii_strncasecmp(command, "send", 4)) {
- PurpleConversation *conv;
-
- arg1 = getarg(buffer, 1, 0);
- arg2 = getarg(buffer, 2, 1);
-
- conv = purple_find_conversation(PURPLE_CONV_TYPE_ANY, arg1);
- if (conv != NULL)
- {
- /*
- purple_conversation_write(conv, arg2, WFLAG_SEND, NULL, time(NULL), -1);
- purple_serv_send_im(conv->gc, arg1, arg2, 0);
- */
- }
-
- free(arg1);
- free(arg2);
-#endif
-
} else if (!g_ascii_strncasecmp(command, "away", 4)) {
arg1 = getarg(buffer, 1, 1);
/* serv_set_away_all(arg1); */
--- a/libpurple/plugins/log_reader.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/plugins/log_reader.c Tue Dec 26 10:54:14 2017 +0300
@@ -2444,35 +2444,6 @@
if (path) {
/* Read talk.ini file to find the log directory. */
GError *error = NULL;
-
-#if 0 /* FIXME: Not tested yet. */
- GKeyFile *key_file;
-
- purple_debug_info("Trillian talk.ini read", "Reading %s\n", path);
-
- error = NULL;
- if (!g_key_file_load_from_file(key_file, path, G_KEY_FILE_NONE, GError &error)) {
- purple_debug_error("Trillian talk.ini read",
- "Error reading talk.ini\n");
- if (error)
- g_error_free(error);
- } else {
- char *logdir = g_key_file_get_string(key_file, "Logging", "Directory", &error);
- if (error) {
- purple_debug_error("Trillian talk.ini read",
- "Error reading Directory value from Logging section\n");
- g_error_free(error);
- }
-
- if (logdir) {
- g_strchomp(logdir);
- purple_prefs_add_string("/plugins/core/log_reader/trillian/log_directory", logdir);
- found = TRUE;
- }
-
- g_key_file_free(key_file);
- }
-#else
gchar *contents = NULL;
if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) {
@@ -2514,7 +2485,6 @@
g_free(contents);
}
g_free(path);
-#endif
} /* path */
if (!found) {
--- a/libpurple/stun.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/stun.c Tue Dec 26 10:54:14 2017 +0300
@@ -63,14 +63,6 @@
guint16 len;
};
-#if 0
-struct stun_change {
- struct stun_header hdr;
- struct stun_attrib attrib;
- char value[4];
-};
-#endif /* 0 */
-
struct stun_conn {
int fd;
struct sockaddr_in addr;
@@ -150,27 +142,6 @@
return TRUE;
}
-#if 0
-static void do_test2(struct stun_conn *sc) {
- struct stun_change data;
- data.hdr.type = htons(0x0001);
- data.hdr.len = 0;
- data.hdr.transid[0] = rand();
- data.hdr.transid[1] = ntohl(((int)'g' << 24) + ((int)'a' << 16) + ((int)'i' << 8) + (int)'m');
- data.hdr.transid[2] = rand();
- data.hdr.transid[3] = rand();
- data.attrib.type = htons(0x003);
- data.attrib.len = htons(4);
- data.value[3] = 6;
- sc->packet = (struct stun_header*)&data;
- sc->packetsize = sizeof(struct stun_change);
- sc->retry = 0;
- sc->test = 2;
- sendto(sc->fd, sc->packet, sc->packetsize, 0, (struct sockaddr *)&(sc->addr), sizeof(struct sockaddr_in));
- sc->timeout = g_timeout_add(500, (GSourceFunc) timeoutfunc, sc);
-}
-#endif /* 0 */
-
static void reply_cb(gpointer data, gint source, PurpleInputCondition cond) {
struct stun_conn *sc = data;
guchar buffer[65536];
--- a/libpurple/tests/test_util.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/tests/test_util.c Tue Dec 26 10:54:14 2017 +0300
@@ -472,6 +472,10 @@
"aaaa\xef\xbb\xbf",
"aaaa\xef\xbb\xbf",
}, {
+ /* U+FFFE (should be stripped) */
+ "aaaa\xef\xbf\xbe",
+ "aaaa",
+ }, {
NULL,
NULL,
}
@@ -484,20 +488,12 @@
g_free(result);
+ /* NULL as input is a valid test, but it's the last test, so we break
+ * after it.
+ */
if(data[i].input == NULL)
break;
}
-
-#if 0
- /* invalid UTF-8 */
- /* disabled because make check fails on an assertion */
- fail_unless(NULL == purple_utf8_strip_unprintables("abc\x80\x7f"));
- /* disabled because make check fails on an assertion */
- /* U+DB80 (Private Use High Surrogate, First) -- should be stripped */
- assert_string_equal_free("aaaa", purple_utf8_strip_unprintables("aaaa\xed\xa0\x80"));
- /* U+FFFE (should be stripped) */
- assert_string_equal_free("aaaa", purple_utf8_strip_unprintables("aaaa\xef\xbf\xbe"));
-#endif
}
/******************************************************************************
--- a/libpurple/trie.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/trie.c Tue Dec 26 10:54:14 2017 +0300
@@ -244,44 +244,6 @@
return state;
}
-#if 0
-static gchar *
-purple_trie_print(PurpleTrieState *state, int limit)
-{
- GString *str = g_string_new(NULL);
- int i;
-
- if (limit < 0)
- return g_strdup("{ LIMIT }");
-
- if (state->found_word)
- g_string_append(str, "*");
- g_string_append(str, "{ ");
- for (i = 0; i < 256; i++) {
- gchar *chp;
- if (!state->children)
- continue;
- if (!state->children[i])
- continue;
- if (i == 0)
- g_string_append(str, "(null)->");
- else
- g_string_append_printf(str, "%c->", i);
- if (state->children[i] == state)
- g_string_append(str, "loop");
- else {
- chp = purple_trie_print(state->children[i], limit - 1);
- g_string_append(str, chp);
- g_string_append_c(str, ' ');
- g_free(chp);
- }
- }
- g_string_append(str, "}");
-
- return g_string_free(str, FALSE);
-}
-#endif
-
static gboolean
purple_trie_states_build(PurpleTrie *trie)
{
--- a/libpurple/upnp.h Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/upnp.h Tue Dec 26 10:54:14 2017 +0300
@@ -62,19 +62,6 @@
*/
void purple_upnp_discover(PurpleUPnPCallback cb, gpointer cb_data);
-#if 0
-/**
- * purple_upnp_get_control_info:
- *
- * Retrieve the current UPnP control info, if there is any available.
- * This will only be filled in if purple_upnp_discover() had been called,
- * and finished discovering.
- *
- * Returns: The control URL for the IGD we'll use to use the IGD services
- */
-const PurpleUPnPControlInfo* purple_upnp_get_control_info(void);
-#endif
-
/**
* purple_upnp_get_public_ip:
*
--- a/libpurple/util.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/util.c Tue Dec 26 10:54:14 2017 +0300
@@ -2613,13 +2613,6 @@
str2[j++] = '\n';
}
/* Check for tags which begin CDATA and need to be closed */
-#if 0 /* FIXME.. option is end tag optional, we can't handle this right now */
- else if (g_ascii_strncasecmp(str2 + i, "<option", 7) == 0)
- {
- /* FIXME: We should not do this if the OPTION is SELECT'd */
- cdata_close_tag = "</option>";
- }
-#endif
else if (g_ascii_strncasecmp(str2 + i, "<script", 7) == 0)
{
cdata_close_tag = "</script>";
@@ -5226,69 +5219,3 @@
return ret;
}
-
-#if 0
-
-/* Temporarily removed - re-add this when you need ini file support. */
-
-#define PURPLE_KEY_FILE_DEFAULT_MAX_SIZE 102400
-#define PURPLE_KEY_FILE_HARD_LIMIT 10485760
-
-gboolean
-purple_key_file_load_from_ini(GKeyFile *key_file, const gchar *file,
- gsize max_size)
-{
- const gchar *header = "[default]\n\n";
- int header_len = strlen(header);
- int fd;
- GStatBuf st;
- gsize file_size, buff_size;
- gchar *buff;
- GError *error = NULL;
-
- g_return_val_if_fail(key_file != NULL, FALSE);
- g_return_val_if_fail(file != NULL, FALSE);
- g_return_val_if_fail(max_size < PURPLE_KEY_FILE_HARD_LIMIT, FALSE);
-
- if (max_size == 0)
- max_size = PURPLE_KEY_FILE_DEFAULT_MAX_SIZE;
-
- fd = g_open(file, O_RDONLY, S_IREAD);
- if (fd == -1) {
- purple_debug_error("util", "Failed to read ini file %s", file);
- return FALSE;
- }
-
- if (_purple_fstat(fd, &st) != 0) {
- purple_debug_error("util", "Failed to fstat ini file %s", file);
- return FALSE;
- }
-
- file_size = (st.st_size > max_size) ? max_size : st.st_size;
-
- buff_size = file_size + header_len;
- buff = g_new(gchar, buff_size);
- memcpy(buff, header, header_len);
- if (read(fd, buff + header_len, file_size) != (gssize)file_size) {
- purple_debug_error("util",
- "Failed to read whole ini file %s", file);
- g_close(fd, NULL);
- free(buff);
- return FALSE;
- }
- g_close(fd, NULL);
-
- g_key_file_load_from_data(key_file, buff, buff_size,
- G_KEY_FILE_NONE, &error);
-
- free(buff);
-
- if (error) {
- purple_debug_error("util", "Failed parsing ini file %s: %s",
- file, error->message);
- return FALSE;
- }
-
- return TRUE;
-}
-#endif
--- a/libpurple/xmlnode.c Wed Nov 22 14:33:46 2017 +0300
+++ b/libpurple/xmlnode.c Tue Dec 26 10:54:14 2017 +0300
@@ -74,19 +74,6 @@
node = new_node(name, PURPLE_XMLNODE_TYPE_TAG);
purple_xmlnode_insert_child(parent, node);
-#if 0
- /* This would give PurpleXmlNodes more appropriate namespacing
- * when creating them. Otherwise, unless an explicit namespace
- * is set, purple_xmlnode_get_namespace() will return NULL, when
- * there may be a default namespace.
- *
- * I'm unconvinced that it's useful, and concerned it may break things.
- *
- * _insert_child would need the same thing, probably (assuming
- * xmlns->node == NULL)
- */
- purple_xmlnode_set_namespace(node, purple_xmlnode_get_default_namespace(node))
-#endif
return node;
}
--- a/meson.build Wed Nov 22 14:33:46 2017 +0300
+++ b/meson.build Tue Dec 26 10:54:14 2017 +0300
@@ -864,7 +864,7 @@
DYNAMIC_BONJOUR = DYNAMIC_PRPLS.contains('bonjour')
DYNAMIC_FACEBOOK = DYNAMIC_PRPLS.contains('facebook')
-DYNAMIC_GG = DYNAMIC_PRPLS.contains('gg ')
+DYNAMIC_GG = DYNAMIC_PRPLS.contains('gg')
DYNAMIC_IRC = DYNAMIC_PRPLS.contains('irc')
DYNAMIC_JABBER = DYNAMIC_PRPLS.contains('jabber')
DYNAMIC_NOVELL = DYNAMIC_PRPLS.contains('novell')
--- a/pidgin/gtkstyle.h Wed Nov 22 14:33:46 2017 +0300
+++ b/pidgin/gtkstyle.h Tue Dec 26 10:54:14 2017 +0300
@@ -1,8 +1,3 @@
-/**
- * @file gtkstyle.h GTK+ Style utility functions
- * @ingroup pidgin
- */
-
/* pidgin
*
* Pidgin is the legal property of its developers, whose names are too numerous
@@ -23,6 +18,14 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
+
+/**
+ * SECTION:gtkstyle
+ * @section_id: pidgin-gtkstyle
+ * @short_description: <filename>gtkstyle.h</filename>
+ * @title: Style API
+ */
+
#ifndef _PIDGINSTYLE_H_
#define _PIDGINSTYLE_H_
@@ -30,30 +33,27 @@
G_BEGIN_DECLS
-/*@{*/
-
/**
- * Returns TRUE if dark mode is enabled and foreground colours should be invertred
+ * pidgin_style_is_dark:
+ * @style: The GtkStyle in use, or NULL to use a cached version.
*
- * @param style The GtkStyle in use, or NULL to use a cached version.
+ * Returns whether or not dark mode is enabled.
*
- * @return @c TRUE if dark mode, @c FALSE otherwise
+ * Returns: TRUE if dark mode is enabled and foreground colours should be invertred
*/
gboolean pidgin_style_is_dark(GtkStyle *style);
/**
- * Lighten a color if dark mode is enabled.
+ * pidgin_style_adjust_contrast:
+ * @style: The GtkStyle in use.
+ * @color: Color to be lightened. Transformed color will be written here.
*
- * @param style The GtkStyle in use.
- *
- * @param color Color to be lightened. Transformed color will be written here.
+ * Lighten a color if dark mode is enabled.
*/
void pidgin_style_adjust_contrast(GtkStyle *style, GdkColor *color);
-/*@}*/
-
G_END_DECLS
#endif /* _PIDGINSTYLE_H_ */
--- a/pidgin/libpidgin.c Wed Nov 22 14:33:46 2017 +0300
+++ b/pidgin/libpidgin.c Tue Dec 26 10:54:14 2017 +0300
@@ -33,6 +33,7 @@
#include "log.h"
#include "network.h"
#include "notify.h"
+#include "options.h"
#include "prefs.h"
#include "protocol.h"
#include "pounce.h"
@@ -375,25 +376,10 @@
purple_blist_set_visible(TRUE);
}
-static gboolean debug_colored = FALSE;
-static gboolean debug_enabled = FALSE;
static gboolean opt_login = FALSE;
static gchar *opt_login_arg = NULL;
static gboolean
-debug_opt_arg_func(const gchar *option_name, const gchar *value,
- gpointer data, GError **error)
-{
- debug_enabled = TRUE;
-
- if (purple_strequal(value, "colored")) {
- debug_colored = TRUE;
- }
-
- return TRUE;
-}
-
-static gboolean
login_opt_arg_func(const gchar *option_name, const gchar *value,
gpointer data, GError **error)
{
@@ -408,7 +394,6 @@
int pidgin_start(int argc, char *argv[])
{
GApplication *app;
- gboolean opt_force_online = FALSE;
gboolean opt_nologin = FALSE;
gboolean opt_version = FALSE;
gboolean opt_si = TRUE; /* Check for single instance? */
@@ -441,13 +426,6 @@
{"config", 'c', 0,
G_OPTION_ARG_FILENAME, &opt_config_dir_arg,
_("use DIR for config files"), _("DIR")},
- {"debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG,
- G_OPTION_ARG_CALLBACK, &debug_opt_arg_func,
- _("print debugging messages to stdout"),
- _("[colored]")},
- {"force-online", 'f', 0,
- G_OPTION_ARG_NONE, &opt_force_online,
- _("force online, regardless of network status"), NULL},
{"login", 'l', G_OPTION_FLAG_OPTIONAL_ARG,
G_OPTION_ARG_CALLBACK, &login_opt_arg_func,
_("enable specified account(s) (optional argument NAME\n"
@@ -468,11 +446,8 @@
{NULL}
};
- debug_colored = FALSE;
#ifdef DEBUG
- debug_enabled = TRUE;
-#else
- debug_enabled = FALSE;
+ purple_debug_set_enabled(TRUE);
#endif
#ifdef ENABLE_NLS
@@ -594,6 +569,8 @@
g_free(summary);
g_option_context_add_main_entries(context, option_entries, PACKAGE);
+ g_option_context_add_group(context, purple_get_option_group());
+ g_option_context_add_group(context, gplugin_get_option_group());
g_option_context_add_group(context, gtk_get_option_group(TRUE));
#ifdef G_OS_WIN32
@@ -646,11 +623,6 @@
* Fire up this baby.
*/
- if (g_getenv("PIDGIN_DEBUG_COLORED") != NULL)
- debug_colored = TRUE;
- purple_debug_set_enabled(debug_enabled);
- purple_debug_set_colored(debug_colored);
-
app = G_APPLICATION(gtk_application_new("im.pidgin.Pidgin",
G_APPLICATION_NON_UNIQUE));
@@ -741,11 +713,6 @@
g_free(opt_config_dir_arg);
opt_config_dir_arg = NULL;
- /* This needs to be before purple_blist_show() so the
- * statusbox gets the forced online status. */
- if (opt_force_online)
- purple_network_force_online();
-
/*
* We want to show the blist early in the init process so the
* user feels warm and fuzzy (not cold and prickley).
--- a/po/POTFILES.in Wed Nov 22 14:33:46 2017 +0300
+++ b/po/POTFILES.in Tue Dec 26 10:54:14 2017 +0300
@@ -54,6 +54,7 @@
libpurple/mediamanager.c
libpurple/media/backend-fs2.c
libpurple/message.c
+libpurple/options.c
libpurple/plugins.c
libpurple/plugins/autoaccept.c
libpurple/plugins/buddynote.c