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:
parent
5e8714ba19
commit
4288cd1794
@ -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 = >kmedia->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
@ -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);
|
|
@ -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)
|
|
||||||
|
|
@ -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);
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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,
|
|
||||||
|
|
@ -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
3
pidgin-2.10.12.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2c7523f0fefe89749c03b2b738ab9f7bd186da435be4762f1487eee31e77ffdd
|
||||||
|
size 9837598
|
7
pidgin-2.10.12.tar.bz2.asc
Normal file
7
pidgin-2.10.12.tar.bz2.asc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
Version: GnuPG v1
|
||||||
|
|
||||||
|
iEYEABECAAYFAlaFud4ACgkQdf4lmqisgDLznQCfWyI2lo7UotafQcwb+7HGbWdV
|
||||||
|
3UAAnRgqfjZ2NRtjMPDaVgJiC31Dyvwx
|
||||||
|
=raka
|
||||||
|
-----END PGP SIGNATURE-----
|
@ -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
@ -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
53
pidgin.keyring
Normal 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-----
|
57
pidgin.spec
57
pidgin.spec
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user