SHA256
1
0
forked from pool/pidgin

Accepting request 352089 from GNOME:Apps

Does not fix the current fallout, but forwarding anyway

OBS-URL: https://build.opensuse.org/request/show/352089
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/pidgin?expand=0&rev=111
This commit is contained in:
Dominique Leuenberger 2016-01-09 22:12:58 +00:00 committed by Git OBS Bridge
parent 5e8714ba19
commit 4288cd1794
15 changed files with 120 additions and 3114 deletions

View File

@ -1,350 +0,0 @@
# HG changeset patch
# User David Woodhouse <David.Woodhouse@intel.com>
# Date 1425675783 0
# Node ID 6b4576edf2a694ab55d0d06d3643c44601a75b15
# Parent 714ba418d0aa5ba0cc4cc3b9db37296cd2bbf041
Add out-of-band DTMF support and dialpad to use it
This is a backport of e4c122196b08 from the trunk. It adds the UI and
farstream backend support for sending DTMF.
Fixes #15575
diff --git a/libpurple/media.c b/libpurple/media.c
--- a/libpurple/media.c
+++ b/libpurple/media.c
@@ -1439,3 +1439,46 @@
}
#endif /* USE_GSTREAMER */
+gboolean
+purple_media_send_dtmf(PurpleMedia *media, const gchar *session_id,
+ gchar dtmf, guint8 volume, guint16 duration)
+{
+#ifdef USE_VV
+ PurpleAccount *account = NULL;
+ PurpleConnection *gc = NULL;
+ PurplePlugin *prpl = NULL;
+ PurplePluginProtocolInfo *prpl_info = NULL;
+ PurpleMediaBackendIface *backend_iface = NULL;
+
+ if (media)
+ {
+ account = purple_media_get_account(media);
+ backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(media->priv->backend);
+ }
+ if (account)
+ gc = purple_account_get_connection(account);
+ if (gc)
+ prpl = purple_connection_get_prpl(gc);
+ if (prpl)
+ prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
+
+ if (dtmf == 'a')
+ dtmf = 'A';
+ else if (dtmf == 'b')
+ dtmf = 'B';
+ else if (dtmf == 'c')
+ dtmf = 'C';
+ else if (dtmf == 'd')
+ dtmf = 'D';
+
+ g_return_val_if_fail(strchr("0123456789ABCD#*", dtmf), FALSE);
+
+ if (backend_iface && backend_iface->send_dtmf
+ && backend_iface->send_dtmf(media->priv->backend,
+ session_id, dtmf, volume, duration))
+ {
+ return TRUE;
+ }
+#endif
+ return FALSE;
+}
diff --git a/libpurple/media.h b/libpurple/media.h
--- a/libpurple/media.h
+++ b/libpurple/media.h
@@ -437,6 +437,21 @@
*/
void purple_media_remove_output_windows(PurpleMedia *media);
+/**
+ * Sends a DTMF signal out-of-band.
+ *
+ * @param media The media instance to send a DTMF signal to.
+ * @param sess_id The session id of the session to send the DTMF signal on.
+ * @param dtmf The character representing the DTMF in the range [0-9#*A-D].
+ * @param volume The power level expressed in dBm0 after dropping the sign
+ * in the range of 0 to 63. A larger value represents a lower volume.
+ * @param duration The duration of the tone in milliseconds.
+ *
+ * @since 2.11
+ */
+gboolean purple_media_send_dtmf(PurpleMedia *media, const gchar *session_id,
+ gchar dtmf, guint8 volume, guint16 duration);
+
#ifdef __cplusplus
}
#endif
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c
--- a/libpurple/media/backend-fs2.c
+++ b/libpurple/media/backend-fs2.c
@@ -94,6 +94,9 @@
static void purple_media_backend_fs2_set_params(PurpleMediaBackend *self,
guint num_params, GParameter *params);
static const gchar **purple_media_backend_fs2_get_available_params(void);
+static gboolean purple_media_backend_fs2_send_dtmf(
+ PurpleMediaBackend *self, const gchar *sess_id,
+ gchar dtmf, guint8 volume, guint16 duration);
static void free_stream(PurpleMediaBackendFs2Stream *stream);
static void free_session(PurpleMediaBackendFs2Session *session);
@@ -499,6 +502,7 @@
iface->set_send_codec = purple_media_backend_fs2_set_send_codec;
iface->set_params = purple_media_backend_fs2_set_params;
iface->get_available_params = purple_media_backend_fs2_get_available_params;
+ iface->send_dtmf = purple_media_backend_fs2_send_dtmf;
}
static FsMediaType
@@ -2436,6 +2440,65 @@
return supported_params;
}
+static gboolean
+send_dtmf_callback(gpointer userdata)
+{
+ FsSession *session = userdata;
+
+ fs_session_stop_telephony_event(session);
+
+ return FALSE;
+}
+static gboolean
+purple_media_backend_fs2_send_dtmf(PurpleMediaBackend *self,
+ const gchar *sess_id, gchar dtmf, guint8 volume,
+ guint16 duration)
+{
+ PurpleMediaBackendFs2Session *session;
+ FsDTMFEvent event;
+
+ g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
+
+ session = get_session(PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
+ if (session == NULL)
+ return FALSE;
+
+ /* Convert DTMF char into FsDTMFEvent enum */
+ switch(dtmf) {
+ case '0': event = FS_DTMF_EVENT_0; break;
+ case '1': event = FS_DTMF_EVENT_1; break;
+ case '2': event = FS_DTMF_EVENT_2; break;
+ case '3': event = FS_DTMF_EVENT_3; break;
+ case '4': event = FS_DTMF_EVENT_4; break;
+ case '5': event = FS_DTMF_EVENT_5; break;
+ case '6': event = FS_DTMF_EVENT_6; break;
+ case '7': event = FS_DTMF_EVENT_7; break;
+ case '8': event = FS_DTMF_EVENT_8; break;
+ case '9': event = FS_DTMF_EVENT_9; break;
+ case '*': event = FS_DTMF_EVENT_STAR; break;
+ case '#': event = FS_DTMF_EVENT_POUND; break;
+ case 'A': event = FS_DTMF_EVENT_A; break;
+ case 'B': event = FS_DTMF_EVENT_B; break;
+ case 'C': event = FS_DTMF_EVENT_C; break;
+ case 'D': event = FS_DTMF_EVENT_D; break;
+ default:
+ return FALSE;
+ }
+
+ if (!fs_session_start_telephony_event(session->session,
+ event, volume)) {
+ return FALSE;
+ }
+
+ if (duration <= 50) {
+ fs_session_stop_telephony_event(session->session);
+ } else {
+ purple_timeout_add(duration, send_dtmf_callback,
+ session->session);
+ }
+
+ return TRUE;
+}
#else
GType
purple_media_backend_fs2_get_type(void)
diff --git a/libpurple/media/backend-iface.h b/libpurple/media/backend-iface.h
--- a/libpurple/media/backend-iface.h
+++ b/libpurple/media/backend-iface.h
@@ -71,6 +71,9 @@
void (*set_params) (PurpleMediaBackend *self,
guint num_params, GParameter *params);
const gchar **(*get_available_params) (void);
+ gboolean (*send_dtmf) (PurpleMediaBackend *self,
+ const gchar *sess_id, gchar dtmf, guint8 volume,
+ guint16 duration);
};
/**
diff --git a/pidgin/gtkmedia.c b/pidgin/gtkmedia.c
--- a/pidgin/gtkmedia.c
+++ b/pidgin/gtkmedia.c
@@ -41,6 +41,7 @@
#ifdef _WIN32
#include <gdk/gdkwin32.h>
#endif
+#include <gdk/gdkkeysyms.h>
#include <gst/interfaces/xoverlay.h>
@@ -759,6 +760,136 @@
}
static void
+phone_dtmf_pressed_cb(GtkButton *button, gpointer user_data)
+{
+ PidginMedia *gtkmedia = user_data;
+ gint num;
+ gchar *sid;
+
+ num = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button), "dtmf-digit"));
+ sid = g_object_get_data(G_OBJECT(button), "session-id");
+
+ purple_media_send_dtmf(gtkmedia->priv->media, sid, num, 25, 50);
+}
+
+static inline GtkWidget *
+phone_create_button(const gchar *text_hi, const gchar *text_lo)
+{
+ GtkWidget *button;
+ GtkWidget *label_hi;
+ GtkWidget *label_lo;
+ GtkWidget *grid;
+ const gchar *text_hi_local;
+
+ if (text_hi)
+ text_hi_local = _(text_hi);
+ else
+ text_hi_local = "";
+
+ grid = gtk_vbox_new(TRUE, 0);
+
+ button = gtk_button_new();
+ label_hi = gtk_label_new(text_hi_local);
+ gtk_misc_set_alignment(GTK_MISC(label_hi), 0.5, 0.5);
+ gtk_box_pack_end(GTK_BOX(grid), label_hi, FALSE, TRUE, 0);
+ label_lo = gtk_label_new(text_lo);
+ gtk_misc_set_alignment(GTK_MISC(label_lo), 0.5, 0.5);
+ gtk_label_set_use_markup(GTK_LABEL(label_lo), TRUE);
+ gtk_box_pack_end(GTK_BOX(grid), label_lo, FALSE, TRUE, 0);
+ gtk_container_add(GTK_CONTAINER(button), grid);
+
+ return button;
+}
+
+static struct phone_label {
+ gchar *subtext;
+ gchar *text;
+ gchar chr;
+} phone_labels[] = {
+ {"<b>1</b>", NULL, '1'},
+ /* Translators note: These are the letters on the keys of a numeric
+ keypad; translate according to §7.2.4 of
+ http://www.etsi.org/deliver/etsi_es/202100_202199/202130/01.01.01_60/es_20213 */
+ /* Letters on the '2' key of a numeric keypad */
+ {"<b>2</b>", N_("ABC"), '2'},
+ /* Letters on the '3' key of a numeric keypad */
+ {"<b>3</b>", N_("DEF"), '3'},
+ /* Letters on the '4' key of a numeric keypad */
+ {"<b>4</b>", N_("GHI"), '4'},
+ /* Letters on the '5' key of a numeric keypad */
+ {"<b>5</b>", N_("JKL"), '5'},
+ /* Letters on the '6' key of a numeric keypad */
+ {"<b>6</b>", N_("MNO"), '6'},
+ /* Letters on the '7' key of a numeric keypad */
+ {"<b>7</b>", N_("PQRS"), '7'},
+ /* Letters on the '8' key of a numeric keypad */
+ {"<b>8</b>", N_("TUV"), '8'},
+ /* Letters on the '9' key of a numeric keypad */
+ {"<b>9</b>", N_("WXYZ"), '9'},
+ {"<b>*</b>", NULL, '*'},
+ {"<b>0</b>", NULL, '0'},
+ {"<b>#</b>", NULL, '#'},
+ {NULL, NULL, 0}
+};
+
+static gboolean
+pidgin_media_dtmf_key_press_event_cb(GtkWidget *widget,
+ GdkEvent *event, gpointer user_data)
+{
+ PidginMedia *gtkmedia = user_data;
+ GdkEventKey *key = (GdkEventKey *) event;
+
+ if (event->type != GDK_KEY_PRESS) {
+ return FALSE;
+ }
+
+ if ((key->keyval >= GDK_KEY_0 && key->keyval <= GDK_KEY_9) ||
+ key->keyval == GDK_KEY_asterisk ||
+ key->keyval == GDK_KEY_numbersign) {
+ gchar *sid = g_object_get_data(G_OBJECT(widget), "session-id");
+
+ purple_media_send_dtmf(gtkmedia->priv->media, sid, key->keyval, 25, 50);
+ }
+
+ return FALSE;
+}
+
+static GtkWidget *
+pidgin_media_add_dtmf_widget(PidginMedia *gtkmedia,
+ PurpleMediaSessionType type, const gchar *_sid)
+{
+ GtkWidget *grid = gtk_table_new(4, 3, TRUE);
+ GtkWidget *button;
+ gint index = 0;
+ GtkWindow *win = &gtkmedia->parent;
+
+ /* Add buttons */
+ for (index = 0; phone_labels[index].subtext != NULL; index++) {
+ button = phone_create_button(phone_labels[index].text,
+ phone_labels[index].subtext);
+ g_signal_connect(button, "pressed",
+ G_CALLBACK(phone_dtmf_pressed_cb), gtkmedia);
+ g_object_set_data(G_OBJECT(button), "dtmf-digit",
+ GINT_TO_POINTER(phone_labels[index].chr));
+ g_object_set_data_full(G_OBJECT(button), "session-id",
+ g_strdup(_sid), g_free);
+ gtk_table_attach(GTK_TABLE(grid), button, index % 3,
+ index % 3 + 1, index / 3, index / 3 + 1,
+ GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
+ 2, 2);
+ }
+
+ g_signal_connect(G_OBJECT(win), "key-press-event",
+ G_CALLBACK(pidgin_media_dtmf_key_press_event_cb), gtkmedia);
+ g_object_set_data_full(G_OBJECT(win), "session-id",
+ g_strdup(_sid), g_free);
+
+ gtk_widget_show_all(grid);
+
+ return grid;
+}
+
+static void
pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia, const gchar *sid)
{
GtkWidget *send_widget = NULL, *recv_widget = NULL, *button_widget = NULL;
@@ -888,7 +1019,11 @@
gtk_box_pack_end(GTK_BOX(recv_widget),
pidgin_media_add_audio_widget(gtkmedia,
- PURPLE_MEDIA_SEND_AUDIO, NULL), FALSE, FALSE, 0);
+ PURPLE_MEDIA_SEND_AUDIO, sid), FALSE, FALSE, 0);
+
+ gtk_box_pack_end(GTK_BOX(recv_widget),
+ pidgin_media_add_dtmf_widget(gtkmedia,
+ PURPLE_MEDIA_SEND_AUDIO, sid), FALSE, FALSE, 0);
}
if (type & PURPLE_MEDIA_AUDIO &&

File diff suppressed because it is too large Load Diff

View File

@ -1,38 +0,0 @@
--- a/finch/gntsound.c
+++ b/finch/gntsound.c
@@ -449,6 +449,7 @@ bus_call (GstBus *bus, GstMessage *msg,
case GST_MESSAGE_EOS:
gst_element_set_state(play, GST_STATE_NULL);
gst_object_unref(GST_OBJECT(play));
+ return FALSE;
break;
case GST_MESSAGE_WARNING:
gst_message_parse_warning(msg, &err, NULL);
--- a/libpurple/mediamanager.c
+++ b/libpurple/mediamanager.c
@@ -288,6 +288,7 @@ pipeline_bus_call(GstBus *bus, GstMessag
switch(GST_MESSAGE_TYPE(msg)) {
case GST_MESSAGE_EOS:
purple_debug_info("mediamanager", "End of Stream\n");
+ return FALSE;
break;
case GST_MESSAGE_ERROR: {
gchar *debug = NULL;
@@ -305,6 +306,7 @@
"Debug details: %s\n", debug);
g_free (debug);
}
+ return FALSE;
break;
}
default:
--- a/pidgin/gtksound.c
+++ b/pidgin/gtksound.c
@@ -394,6 +394,7 @@ bus_call (GstBus *bus,
case GST_MESSAGE_EOS:
gst_element_set_state(play, GST_STATE_NULL);
gst_object_unref(GST_OBJECT(play));
+ return FALSE;
break;
case GST_MESSAGE_WARNING:
gst_message_parse_warning(msg, &err, NULL);

View File

@ -1,44 +0,0 @@
# HG changeset patch
# User Youness Alaoui <kakaroto@kakaroto.homelinux.net>
# Date 1404874798 14400
# Node ID b52be4fef1ded825e262095480915f2c675a5694
# Parent 2b41ba1fde8a80a4f2d715874a0b02449d4b66ad
Fix gstreamer elements references
In backend-fs2, the create_src will unref the src after it's done with
it, if we simply return the created source, it will segfault.
The issue never happened before because every source so far also has
the UNIQUE flag, which causes it to go in a different branch of the
code which does ref the element and add it to the bin.
Refs #16315
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
--- a/libpurple/mediamanager.c
+++ b/libpurple/mediamanager.c
@@ -443,7 +443,11 @@
if (src) {
GstElement *capsfilter = gst_bin_get_by_name(GST_BIN(src), "prpl_video_caps");
- g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL);
+ if (capsfilter) {
+ g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL);
+ gst_object_unref (capsfilter);
+ }
+ gst_object_unref (src);
}
g_free(id);
@@ -550,6 +554,11 @@
} else {
ret = purple_media_element_info_call_create(info,
media, session_id, participant);
+ if (element_type & PURPLE_MEDIA_ELEMENT_SRC) {
+ gst_object_ref(ret);
+ gst_bin_add(GST_BIN(purple_media_manager_get_pipeline(manager)),
+ ret);
+ }
}
if (ret == NULL)

View File

@ -1,52 +0,0 @@
# HG changeset patch
# User Jakub Adam <jakub.adam@ktknet.cz>
# Date 1407847148 -7200
# Node ID 7767aaeade6404396204794f9bc75d9a2cb723f0
# Parent 8e4fa54f166211ffd6cd869cca611e8d64ea1fdf
media: make "init-media" signal handler optional
Change the logic so that the PurpleMedia instance isn't disposed when
"init-media" has no connected handlers.
We want the media object freed only when some signal callback function
explicitly returns FALSE, indicating an error during the initialization.
This is mostly useful for the imminent addition of private media streams.
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
--- a/libpurple/mediamanager.c
+++ b/libpurple/mediamanager.c
@@ -334,7 +334,7 @@
{
#ifdef USE_VV
PurpleMedia *media;
- gboolean signal_ret;
+ guint signal_id;
media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
"manager", manager,
@@ -343,12 +343,17 @@
"initiator", initiator,
NULL));
- g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0,
- media, account, remote_user, &signal_ret);
+ signal_id = purple_media_manager_signals[INIT_MEDIA];
- if (signal_ret == FALSE) {
- g_object_unref(media);
- return NULL;
+ if (g_signal_has_handler_pending(manager, signal_id, 0, FALSE)) {
+ gboolean signal_ret;
+
+ g_signal_emit(manager, signal_id, 0, media, account, remote_user,
+ &signal_ret);
+ if (signal_ret == FALSE) {
+ g_object_unref(media);
+ return NULL;
+ }
}
manager->priv->medias = g_list_append(manager->priv->medias, media);

View File

@ -1,290 +0,0 @@
# HG changeset patch
# User Youness Alaoui <kakaroto@kakaroto.homelinux.net>
# Date 1404764862 14400
# Node ID d729a9b2126594df3e38647e926ac7c0a7db807b
# Parent 7767aaeade6404396204794f9bc75d9a2cb723f0
Add Private media API
Creating a private media can be useful for plugins that want to create a
PurpleMedia for internal use without the front-end being notified of its
creation.
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
--- a/libpurple/mediamanager.c
+++ b/libpurple/mediamanager.c
@@ -86,6 +86,7 @@
GstElement *pipeline;
PurpleMediaCaps ui_caps;
GList *medias;
+ GList *private_medias;
GList *elements;
GList *output_windows;
gulong next_output_window_id;
@@ -111,6 +112,7 @@
enum {
INIT_MEDIA,
+ INIT_PRIVATE_MEDIA,
UI_CAPS_CHANGED,
LAST_SIGNAL
};
@@ -161,6 +163,15 @@
G_TYPE_BOOLEAN, 3, PURPLE_TYPE_MEDIA,
G_TYPE_POINTER, G_TYPE_STRING);
+ purple_media_manager_signals[INIT_PRIVATE_MEDIA] =
+ g_signal_new ("init-private-media",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ purple_smarshal_BOOLEAN__OBJECT_POINTER_STRING,
+ G_TYPE_BOOLEAN, 3, PURPLE_TYPE_MEDIA,
+ G_TYPE_POINTER, G_TYPE_STRING);
+
purple_media_manager_signals[UI_CAPS_CHANGED] = g_signal_new ("ui-caps-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
@@ -177,6 +188,7 @@
{
media->priv = PURPLE_MEDIA_MANAGER_GET_PRIVATE(media);
media->priv->medias = NULL;
+ media->priv->private_medias = NULL;
media->priv->next_output_window_id = 1;
#ifdef USE_VV
media->priv->backend_type = PURPLE_TYPE_MEDIA_BACKEND_FS2;
@@ -198,6 +210,10 @@
g_list_delete_link(priv->medias, priv->medias)) {
g_object_unref(priv->medias->data);
}
+ for (; priv->private_medias; priv->private_medias =
+ g_list_delete_link(priv->private_medias, priv->private_medias)) {
+ g_object_unref(priv->private_medias->data);
+ }
for (; priv->elements; priv->elements =
g_list_delete_link(priv->elements, priv->elements)) {
g_object_unref(priv->elements->data);
@@ -325,12 +341,13 @@
}
#endif /* USE_GSTREAMER */
-PurpleMedia *
-purple_media_manager_create_media(PurpleMediaManager *manager,
- PurpleAccount *account,
- const char *conference_type,
- const char *remote_user,
- gboolean initiator)
+static PurpleMedia *
+create_media(PurpleMediaManager *manager,
+ PurpleAccount *account,
+ const char *conference_type,
+ const char *remote_user,
+ gboolean initiator,
+ gboolean private)
{
#ifdef USE_VV
PurpleMedia *media;
@@ -343,7 +360,9 @@
"initiator", initiator,
NULL));
- signal_id = purple_media_manager_signals[INIT_MEDIA];
+ signal_id = private ?
+ purple_media_manager_signals[INIT_PRIVATE_MEDIA] :
+ purple_media_manager_signals[INIT_MEDIA];
if (g_signal_has_handler_pending(manager, signal_id, 0, FALSE)) {
gboolean signal_ret;
@@ -356,26 +375,33 @@
}
}
- manager->priv->medias = g_list_append(manager->priv->medias, media);
+ if (private)
+ manager->priv->private_medias = g_list_append(
+ manager->priv->private_medias, media);
+ else
+ manager->priv->medias = g_list_append(manager->priv->medias, media);
return media;
#else
return NULL;
#endif
}
-GList *
-purple_media_manager_get_media(PurpleMediaManager *manager)
+static GList *
+get_media(PurpleMediaManager *manager, gboolean private)
{
#ifdef USE_VV
- return manager->priv->medias;
+ if (private)
+ return manager->priv->private_medias;
+ else
+ return manager->priv->medias;
#else
return NULL;
#endif
}
-GList *
-purple_media_manager_get_media_by_account(PurpleMediaManager *manager,
- PurpleAccount *account)
+static GList *
+get_media_by_account(PurpleMediaManager *manager,
+ PurpleAccount *account, gboolean private)
{
#ifdef USE_VV
GList *media = NULL;
@@ -383,7 +409,10 @@
g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), NULL);
- iter = manager->priv->medias;
+ if (private)
+ iter = manager->priv->private_medias;
+ else
+ iter = manager->priv->medias;
for (; iter; iter = g_list_next(iter)) {
if (purple_media_get_account(iter->data) == account) {
media = g_list_prepend(media, iter->data);
@@ -397,21 +426,73 @@
}
void
-purple_media_manager_remove_media(PurpleMediaManager *manager,
- PurpleMedia *media)
+purple_media_manager_remove_media(PurpleMediaManager *manager, PurpleMedia *media)
{
#ifdef USE_VV
GList *list;
+ GList **medias;
g_return_if_fail(manager != NULL);
- list = g_list_find(manager->priv->medias, media);
+ if ((list = g_list_find(manager->priv->medias, media))) {
+ medias = &manager->priv->medias;
+ } else if ((list = g_list_find(manager->priv->private_medias, media))) {
+ medias = &manager->priv->private_medias;
+ }
+
if (list)
- manager->priv->medias =
- g_list_delete_link(manager->priv->medias, list);
+ *medias = g_list_delete_link(*medias, list);
#endif
}
+PurpleMedia *
+purple_media_manager_create_media(PurpleMediaManager *manager,
+ PurpleAccount *account,
+ const char *conference_type,
+ const char *remote_user,
+ gboolean initiator)
+{
+ return create_media (manager, account, conference_type,
+ remote_user, initiator, FALSE);
+}
+
+GList *
+purple_media_manager_get_media(PurpleMediaManager *manager)
+{
+ return get_media (manager, FALSE);
+}
+
+GList *
+purple_media_manager_get_media_by_account(PurpleMediaManager *manager,
+ PurpleAccount *account)
+{
+ return get_media_by_account (manager, account, FALSE);
+}
+
+PurpleMedia *
+purple_media_manager_create_private_media(PurpleMediaManager *manager,
+ PurpleAccount *account,
+ const char *conference_type,
+ const char *remote_user,
+ gboolean initiator)
+{
+ return create_media (manager, account, conference_type,
+ remote_user, initiator, TRUE);
+}
+
+GList *
+purple_media_manager_get_private_media(PurpleMediaManager *manager)
+{
+ return get_media (manager, TRUE);
+}
+
+GList *
+purple_media_manager_get_private_media_by_account(PurpleMediaManager *manager,
+ PurpleAccount *account)
+{
+ return get_media_by_account (manager, account, TRUE);
+}
+
#ifdef USE_VV
static void
request_pad_unlinked_cb(GstPad *pad, GstPad *peer, gpointer user_data)
diff --git a/libpurple/mediamanager.h b/libpurple/mediamanager.h
--- a/libpurple/mediamanager.h
+++ b/libpurple/mediamanager.h
@@ -130,6 +130,56 @@
PurpleMedia *media);
/**
+ * Creates a private media session. A private media session is a
+ * media session which is private to the caller. It is meant to be
+ * used by plugins to create a media session that the front-end does
+ * not get notified about. It is useful especially for sessions with a
+ * type of PURPLE_MEDIA_APPLICATION which the front-end wouldn't know
+ * how to handle.
+ *
+ * @param manager The media manager to create the session under.
+ * @param account The account to create the session on.
+ * @param conference_type The conference type to feed into Farsight2.
+ * @param remote_user The remote user to initiate the session with.
+ * @param initiator TRUE if the local user is the initiator of this media
+ * call, FALSE otherwise.
+ *
+ * @return A newly created media session.
+ *
+ * @since 2.11.0
+ */
+PurpleMedia *purple_media_manager_create_private_media(
+ PurpleMediaManager *manager,
+ PurpleAccount *account,
+ const char *conference_type,
+ const char *remote_user,
+ gboolean initiator);
+
+/**
+ * Gets all of the private media sessions.
+ *
+ * @param manager The media manager to get all of the sessions from.
+ *
+ * @return A list of all the private media sessions.
+ *
+ * @since 2.11.0
+ */
+GList *purple_media_manager_get_private_media(PurpleMediaManager *manager);
+
+/**
+ * Gets all of the private media sessions for a given account.
+ *
+ * @param manager The media manager to get the sessions from.
+ * @param account The account the sessions are on.
+ *
+ * @return A list of the private media sessions on the given account.
+ *
+ * @since 2.11.0
+ */
+GList *purple_media_manager_get_private_media_by_account(
+ PurpleMediaManager *manager, PurpleAccount *account);
+
+/**
* Signals that output windows should be created for the chosen stream.
*
* This shouldn't be called outside of mediamanager.c and media.c

View File

@ -1,23 +0,0 @@
# HG changeset patch
# User Youness Alaoui <kakaroto@kakaroto.homelinux.net>
# Date 1404159462 14400
# Node ID 2b41ba1fde8a80a4f2d715874a0b02449d4b66ad
# Parent f02f7d1fb4d545c6d7353745094e1afcf0428ca9
Fix send-video enum typo
Refs #16315
diff --git a/libpurple/media/enum-types.c b/libpurple/media/enum-types.c
--- a/libpurple/media/enum-types.c
+++ b/libpurple/media/enum-types.c
@@ -175,7 +175,7 @@
{ PURPLE_MEDIA_RECV_VIDEO,
"PURPLE_MEDIA_RECV_VIDEO", "recv-video" },
{ PURPLE_MEDIA_SEND_VIDEO,
- "PURPLE_MEDIA_SEND_VIDEO", "send-audio" },
+ "PURPLE_MEDIA_SEND_VIDEO", "send-video" },
{ PURPLE_MEDIA_AUDIO,
"PURPLE_MEDIA_AUDIO", "audio" },
{ PURPLE_MEDIA_VIDEO,

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:69dcfeead545d1ff2262c33285ad8d231429763d10aee50c38601999b762e828
size 13568253

3
pidgin-2.10.12.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2c7523f0fefe89749c03b2b738ab9f7bd186da435be4762f1487eee31e77ffdd
size 9837598

View File

@ -0,0 +1,7 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iEYEABECAAYFAlaFud4ACgkQdf4lmqisgDLznQCfWyI2lo7UotafQcwb+7HGbWdV
3UAAnRgqfjZ2NRtjMPDaVgJiC31Dyvwx
=raka
-----END PGP SIGNATURE-----

View File

@ -1,7 +1,7 @@
diff -Naur pidgin-2.10.10.orig/configure.ac pidgin-2.10.10/configure.ac diff -Naur pidgin-2.10.12.orig/configure.ac pidgin-2.10.12/configure.ac
--- pidgin-2.10.10.orig/configure.ac --- pidgin-2.10.12.orig/configure.ac
+++ pidgin-2.10.10/configure.ac +++ pidgin-2.10.12/configure.ac
@@ -2124,6 +2124,20 @@ @@ -2222,6 +2222,20 @@
fi fi
dnl ####################################################################### dnl #######################################################################
@ -22,9 +22,9 @@ diff -Naur pidgin-2.10.10.orig/configure.ac pidgin-2.10.10/configure.ac
dnl # Check for Tcl dnl # Check for Tcl
dnl ####################################################################### dnl #######################################################################
AC_ARG_ENABLE(tcl, [AC_HELP_STRING([--disable-tcl], AC_ARG_ENABLE(tcl, [AC_HELP_STRING([--disable-tcl],
diff -Naur pidgin-2.10.10.orig/libpurple/account.c pidgin-2.10.10/libpurple/account.c diff -Naur pidgin-2.10.12.orig/libpurple/account.c pidgin-2.10.12/libpurple/account.c
--- pidgin-2.10.10.orig/libpurple/account.c --- pidgin-2.10.12.orig/libpurple/account.c
+++ pidgin-2.10.10/libpurple/account.c +++ pidgin-2.10.12/libpurple/account.c
@@ -54,6 +54,13 @@ @@ -54,6 +54,13 @@
#define PURPLE_ACCOUNT_GET_PRIVATE(account) \ #define PURPLE_ACCOUNT_GET_PRIVATE(account) \
((PurpleAccountPrivate *) (account->priv)) ((PurpleAccountPrivate *) (account->priv))
@ -132,7 +132,7 @@ diff -Naur pidgin-2.10.10.orig/libpurple/account.c pidgin-2.10.10/libpurple/acco
/* Read the alias */ /* Read the alias */
child = xmlnode_get_child(node, "alias"); child = xmlnode_get_child(node, "alias");
@@ -3305,6 +3331,63 @@ @@ -3306,6 +3332,63 @@
purple_signals_unregister_by_instance(handle); purple_signals_unregister_by_instance(handle);
} }
@ -196,10 +196,10 @@ diff -Naur pidgin-2.10.10.orig/libpurple/account.c pidgin-2.10.10/libpurple/acco
/* libpurple 3.0.0 compatibility */ /* libpurple 3.0.0 compatibility */
static void static void
diff -Naur pidgin-2.10.10.orig/libpurple/Makefile.am pidgin-2.10.10/libpurple/Makefile.am diff -Naur pidgin-2.10.12.orig/libpurple/Makefile.am pidgin-2.10.12/libpurple/Makefile.am
--- pidgin-2.10.10.orig/libpurple/Makefile.am --- pidgin-2.10.12.orig/libpurple/Makefile.am
+++ pidgin-2.10.10/libpurple/Makefile.am +++ pidgin-2.10.12/libpurple/Makefile.am
@@ -305,6 +305,7 @@ @@ -309,6 +309,7 @@
$(GLIB_LIBS) \ $(GLIB_LIBS) \
$(LIBXML_LIBS) \ $(LIBXML_LIBS) \
$(NETWORKMANAGER_LIBS) \ $(NETWORKMANAGER_LIBS) \
@ -207,8 +207,8 @@ diff -Naur pidgin-2.10.10.orig/libpurple/Makefile.am pidgin-2.10.10/libpurple/Ma
$(INTLLIBS) \ $(INTLLIBS) \
$(FARSTREAM_LIBS) \ $(FARSTREAM_LIBS) \
$(GSTREAMER_LIBS) \ $(GSTREAMER_LIBS) \
@@ -326,7 +327,8 @@ @@ -334,7 +335,8 @@
$(GSTREAMER_CFLAGS) \ $(GSTAPP_CFLAGS) \
$(GSTINTERFACES_CFLAGS) \ $(GSTINTERFACES_CFLAGS) \
$(IDN_CFLAGS) \ $(IDN_CFLAGS) \
- $(NETWORKMANAGER_CFLAGS) - $(NETWORKMANAGER_CFLAGS)

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,24 @@
-------------------------------------------------------------------
Sat Jan 2 09:45:54 UTC 2016 - sor.alexei@meowr.ru
- Update to 2.10.12:
+ General:
- purple-url-handler now works with Python 3.x.
- Fix an issue where transient startup statuses could be
deleted (pidgin.im#16762).
+ Pidgin: The shout smile now matches the default theme.
+ Gadu-Gadu: Update internal libgadu to version 1.12.1.
- Use tarball signing.
- Rebase pidgin-gnome-keyring.patch.
- Remove pidgin-2.10.11-add-dtmf-support.patch,
pidgin-2.10.11-gst-references.patch,
pidgin-2.10.11-send-video-enum.patch,
pidgin-2.10.11-application-media.patch,
pidgin-2.10.11-init-media-optional.patch,
pidgin-2.10.11-fix-sound-play-fd-leak.patch,
pidgin-2.10.11-private-media.patch and
pidgin-port-to-gst-1.0.patch: added upstream.
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Sep 9 08:19:54 UTC 2015 - dimstar@opensuse.org Wed Sep 9 08:19:54 UTC 2015 - dimstar@opensuse.org

53
pidgin.keyring Normal file
View File

@ -0,0 +1,53 @@
pub dsa1024/A8AC8032 2004-12-03
Key fingerprint = 364E 2EB3 8EA6 A8D6 1FB9 63AD 75FE 259A A8AC 8032
uid [ unknown] Gary Kramlich (grim) <grim@reaperworld.com>
sub elg2048/A471F9D3 2004-12-03
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2
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
=+0NZ
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,7 +1,7 @@
# #
# spec file for package pidgin # spec file for package pidgin
# #
# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -18,14 +18,16 @@
%define _name Pidgin %define _name Pidgin
Name: pidgin Name: pidgin
Version: 2.10.11 Version: 2.10.12
Release: 0 Release: 0
Summary: Multiprotocol Instant Messaging Client Summary: Multiprotocol Instant Messaging Client
License: GPL-2.0+ License: GPL-2.0+
Group: Productivity/Networking/Instant Messenger Group: Productivity/Networking/Instant Messenger
Url: http://pidgin.im/ Url: https://pidgin.im/
Source: http://downloads.sf.net/%{name}/%{name}-%{version}.tar.gz Source: http://downloads.sf.net/%{name}/%{name}-%{version}.tar.bz2
Source1: pidgin-prefs.xml Source1: http://downloads.sf.net/%{name}/%{name}-%{version}.tar.bz2.asc
Source2: pidgin.keyring
Source3: pidgin-prefs.xml
# PATCH-FIX-OPENSUSE pidgin-nonblock-common.patch # PATCH-FIX-OPENSUSE pidgin-nonblock-common.patch
Patch0: pidgin-nonblock-common.patch Patch0: pidgin-nonblock-common.patch
# PATCH-FIX-OPENSUSE pidgin-nonblock-gwim.patch # PATCH-FIX-OPENSUSE pidgin-nonblock-gwim.patch
@ -34,27 +36,12 @@ Patch1: pidgin-nonblock-gwim.patch
Patch2: pidgin-nonblock-common2.patch Patch2: pidgin-nonblock-common2.patch
# PATCH-FEATURE-SLE pidgin-gnome-keyring.patch # PATCH-FEATURE-SLE pidgin-gnome-keyring.patch
Patch3: pidgin-gnome-keyring.patch Patch3: pidgin-gnome-keyring.patch
# PATCH-FIX-OPENSUSE pidgin-fix-perl-build.patch vuntz@opensuse.org -- Revert http://developer.pidgin.im/viewmtn/revision/info/f32151852a00fb5abd3fdccdd8df2419031666de as it breaks the build # PATCH-FIX-OPENSUSE pidgin-fix-perl-build.patch vuntz@opensuse.org -- Revert http://developer.pidgin.im/viewmtn/revision/info/f32151852a00fb5abd3fdccdd8df2419031666de as it breaks the build.
Patch4: pidgin-fix-perl-build.patch Patch4: pidgin-fix-perl-build.patch
# PATCH-FIX-UPSTREAM pidgin-crash-missing-gst-registry.patch boo#866455 pidgin.im#16224 cxiong@suse.com -- Fix crash when GST registry cache file is missing. # PATCH-FIX-UPSTREAM pidgin-crash-missing-gst-registry.patch boo#866455 pidgin.im#16224 cxiong@suse.com -- Fix crash when GST registry cache file is missing.
Patch6: pidgin-crash-missing-gst-registry.patch Patch5: pidgin-crash-missing-gst-registry.patch
Patch7: pidgin-2.10.11-send-video-enum.patch
# PATCH-FEATURE-UPSTREAM pidgin-2.10.11-gst-references.patch dimstar@opensuse.org -- http://hg.pidgin.im/pidgin/main/rev/b52be4fef1de
Patch8: pidgin-2.10.11-gst-references.patch
# PATCH-FEATURE-UPSTREAM pidgin-2.10.11-add-dtmf-support.patch dimstar@opensuse.org -- http://hg.pidgin.im/pidgin/main/rev/6b4576edf2a6
Patch9: pidgin-2.10.11-add-dtmf-support.patch
# PATCH-FEATURE-UPSTREAM pidgin-port-to-gst-1.0.patch dimstar@opensuse.org -- Port to GStreamer 1.0 / farstream 0.2; taken from https://pidgin.im/pipermail/devel/2015-March/023645.html
Patch10: pidgin-port-to-gst-1.0.patch
# PATCH-FIX-UPSTREAM pidgin-2.10.11-init-media-optional.patch dimstar@opensuse.org -- make "init-media" signal handler optional
Patch11: pidgin-2.10.11-init-media-optional.patch
# PATCH-FIX-UPSTREAM pidgin-2.10.11-private-media.patch dimstar@opensuse.org -- Add Private media API.
Patch12: pidgin-2.10.11-private-media.patch
# PATCH-FIX-UPSTREAM pidgin-2.10.11-application-media.patch dimstar@opensuse.org -- Add application media type and APIs, pidgin.im#16315
Patch13: pidgin-2.10.11-application-media.patch
# PATCH-FIX-UPSTREAM pidgin-2.10.11-fix-sound-play-fd-leak.patch boo#942818 sor.alexei@meowr.ru -- Fix a file desriptor leak while playing sound files.
Patch14: pidgin-2.10.11-fix-sound-play-fd-leak.patch
# PATCH-FIX-UPSTREAM pidgin-ncurses-6.0-accessors.patch pidgin.im#16764 dimstar@opensuse.org -- Fix build with NCurses 6.0 with WINDOW_OPAQUE set to 1 # PATCH-FIX-UPSTREAM pidgin-ncurses-6.0-accessors.patch pidgin.im#16764 dimstar@opensuse.org -- Fix build with NCurses 6.0 with WINDOW_OPAQUE set to 1
Patch15: pidgin-ncurses-6.0-accessors.patch Patch6: pidgin-ncurses-6.0-accessors.patch
BuildRequires: NetworkManager-devel BuildRequires: NetworkManager-devel
# Can use external libzephyr. # Can use external libzephyr.
BuildRequires: cyrus-sasl-devel BuildRequires: cyrus-sasl-devel
@ -277,16 +264,10 @@ translation-update-upstream
%patch2 -p1 %patch2 -p1
%patch3 -p1 %patch3 -p1
%patch4 -p1 %patch4 -p1
%patch5 -p1
%patch6 -p1 %patch6 -p1
%patch7 -p1
%patch8 -p1 cp -f %{SOURCE3} %{name}-prefs.xml
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
# Change Myanmar/Myanmar to Myanmar. # Change Myanmar/Myanmar to Myanmar.
mv -f po/my_MM.po po/my.po mv -f po/my_MM.po po/my.po
@ -324,10 +305,10 @@ make %{?_smp_mflags}
%install %install
%make_install %make_install
mkdir -p %{buildroot}%{_sysconfdir}/purple/
%if 0%{?suse_version} > 1140 %if 0%{?suse_version} > 1140
cp -f %{SOURCE1} %{buildroot}%{_sysconfdir}/purple/prefs.xml install -Dm 0644 %{name}-prefs.xml %{buildroot}%{_sysconfdir}/purple/prefs.xml
%else %else
mkdir -p %{buildroot}%{_sysconfdir}/purple/
rm -f %{buildroot}%{_sysconfdir}/gconf/schemas/purple.schemas rm -f %{buildroot}%{_sysconfdir}/gconf/schemas/purple.schemas
%endif %endif
%perl_process_packlist %perl_process_packlist
@ -373,7 +354,7 @@ find %{buildroot}%{_libdir}/finch/ -maxdepth 1 -xtype f -print | \
%files %files
%defattr(-,root,root) %defattr(-,root,root)
%doc AUTHORS COPYING COPYRIGHT ChangeLog NEWS README doc/the_penguin.txt %doc AUTHORS COPYING COPYRIGHT ChangeLog README doc/the_penguin.txt
%{_bindir}/%{name} %{_bindir}/%{name}
%{_libdir}/%{name}/ %{_libdir}/%{name}/
%dir %{_datadir}/appdata/ %dir %{_datadir}/appdata/
@ -411,10 +392,16 @@ find %{buildroot}%{_libdir}/finch/ -maxdepth 1 -xtype f -print | \
%if 0%{?suse_version} < 1140 %if 0%{?suse_version} < 1140
# These locales are not included in respective products. # These locales are not included in respective products.
# See https://bugzilla.opensuse.org/show_bug.cgi?id=659001 # See https://bugzilla.opensuse.org/show_bug.cgi?id=659001
%dir %{_datadir}/locale/brx/
%dir %{_datadir}/locale/brx/LC_MESSAGES/
%dir %{_datadir}/locale/ku_IQ/ %dir %{_datadir}/locale/ku_IQ/
%dir %{_datadir}/locale/ku_IQ/LC_MESSAGES/ %dir %{_datadir}/locale/ku_IQ/LC_MESSAGES/
%dir %{_datadir}/locale/mhr/ %dir %{_datadir}/locale/mhr/
%dir %{_datadir}/locale/mhr/LC_MESSAGES/ %dir %{_datadir}/locale/mhr/LC_MESSAGES/
%dir %{_datadir}/locale/ms_MY/
%dir %{_datadir}/locale/ms_MY/LC_MESSAGES/
%dir %{_datadir}/locale/sd/
%dir %{_datadir}/locale/sd/LC_MESSAGES/
%endif %endif
%if 0%{?suse_version} > 1140 %if 0%{?suse_version} > 1140