adium 3040:8dc9314899cd: Input/output volume changing methods, r...
commits at adium.im
commits at adium.im
Thu Dec 10 06:50:05 UTC 2009
details: http://hg.adium.im/adium/rev/8dc9314899cd
revision: 3040:8dc9314899cd
author: Zachary West <zacw at adium.im>
date: Thu Dec 10 01:49:48 2009 -0500
Input/output volume changing methods, removing some more GTKy code.
diffs (442 lines):
diff -r 5da4ba3a19c3 -r 8dc9314899cd Frameworks/Adium Framework/Source/AIAccount.h
--- a/Frameworks/Adium Framework/Source/AIAccount.h Thu Dec 10 01:29:55 2009 -0500
+++ b/Frameworks/Adium Framework/Source/AIAccount.h Thu Dec 10 01:49:48 2009 -0500
@@ -123,11 +123,30 @@
- (void)media:(AIMedia *)media setPause:(BOOL)pause;
/*!
+ * @brief Set the input volume for media.
+ *
+ * @param inputVolume The input volume between 0 and 1.0
+ */
+- (void)media:(AIMedia *)media setInputVolume:(CGFloat)inputVolume;
+
+/*!
+ * @brief Set the output volume for media.
+ *
+ * @param outputVolume The output volume between 0 and 1.0
+ */
+- (void)media:(AIMedia *)media setOutputVolume:(CGFloat)outputVolume;
+
+/*!
* @brief Close a media
*
* @param media The AIMedia to close
*/
- (void)closeMedia:(AIMedia *)media;
+
+/*!
+ * @brief Accept a pending media
+ */
+- (void)incomingMedia:(AIMedia *)media acceptPendingRequest:(BOOL)accept;
@end
/*!
diff -r 5da4ba3a19c3 -r 8dc9314899cd Plugins/Purple Service/CBPurpleAccount.h
--- a/Plugins/Purple Service/CBPurpleAccount.h Thu Dec 10 01:29:55 2009 -0500
+++ b/Plugins/Purple Service/CBPurpleAccount.h Thu Dec 10 01:49:48 2009 -0500
@@ -71,33 +71,14 @@
//Instructs the account to cancel a file transfer in progress
- (void)cancelFileTransfer:(ESFileTransfer *)fileTransfer;
-/*!
- * @brief Set the hold state for media.
- *
- * @param hold If the media's state should be hold
- */
- (void)media:(AIMedia *)media setHold:(BOOL)hold;
-
-/*!
- * @brief Set the mute state for media.
- *
- * @param mute If the media's state should be mute
- */
- (void)media:(AIMedia *)media setMute:(BOOL)mute;
-
-/*!
- * @brief Set the pause state for media.
- *
- * @param pause If the media's state should be pause
- */
- (void)media:(AIMedia *)media setPause:(BOOL)pause;
-
-/*!
- * @brief Close a media
- *
- * @param media The AIMedia to close
- */
+- (void)media:(AIMedia *)media setInputVolume:(CGFloat)inputVolume;
+- (void)media:(AIMedia *)media setOutputVolume:(CGFloat)outputVolume;
- (void)closeMedia:(AIMedia *)media;
+- (void)incomingMedia:(AIMedia *)media acceptPendingRequest:(BOOL)accept;
+#pragma mark -
//Private (for subclasses only) file transfer methods
- (PurpleXfer *)newOutgoingXferForFileTransfer:(ESFileTransfer *)fileTransfer;
diff -r 5da4ba3a19c3 -r 8dc9314899cd Plugins/Purple Service/CBPurpleAccount.m
--- a/Plugins/Purple Service/CBPurpleAccount.m Thu Dec 10 01:29:55 2009 -0500
+++ b/Plugins/Purple Service/CBPurpleAccount.m Thu Dec 10 01:49:48 2009 -0500
@@ -1800,6 +1800,26 @@
}
/*!
+ * @brief Set the input volume for media.
+ *
+ * @param inputVolume The input volume between 0 and 1.0
+ */
+- (void)media:(AIMedia *)media setInputVolume:(CGFloat)inputVolume
+{
+ purple_media_set_input_volume((PurpleMedia *)media.protocolInfo, NULL, (double)inputVolume);
+}
+
+/*!
+ * @brief Set the output volume for media.
+ *
+ * @param outputVolume The output volume between 0 and 1.0
+ */
+- (void)media:(AIMedia *)media setOutputVolume:(CGFloat)outputVolume
+{
+ purple_media_set_output_volume((PurpleMedia *)media.protocolInfo, NULL, NULL, (double)outputVolume);
+}
+
+/*!
* @brief Close a media
*
* @param media The AIMedia to close
@@ -1811,6 +1831,17 @@
NULL, NULL, TRUE);
}
+/*!
+ * @brief Accept a pending media
+ */
+- (void)incomingMedia:(AIMedia *)media acceptPendingRequest:(BOOL)accept
+{
+ purple_media_stream_info((PurpleMedia *)media.protocolInfo,
+ accept ? PURPLE_MEDIA_INFO_ACCEPT : PURPLE_MEDIA_INFO_REJECT,
+ NULL, NULL, TRUE);
+
+}
+
//Account Connectivity -------------------------------------------------------------------------------------------------
#pragma mark Connect
//Connect this account (Our password should be in the instance variable 'password' all ready for us)
diff -r 5da4ba3a19c3 -r 8dc9314899cd Plugins/Purple Service/adiumPurpleMedia.m
--- a/Plugins/Purple Service/adiumPurpleMedia.m Thu Dec 10 01:29:55 2009 -0500
+++ b/Plugins/Purple Service/adiumPurpleMedia.m Thu Dec 10 01:49:48 2009 -0500
@@ -25,163 +25,6 @@
#include <libpurple/media-gst.h>
#include <gst/interfaces/xoverlay.h>
-struct _AdiumMedia
-{
- GtkWindow parent;
- AdiumMediaPrivate *priv;
-};
-
-struct _AdiumMediaPrivate
-{
- PurpleMedia *media;
- gchar *screenname;
- gulong level_handler_id;
-
- GtkItemFactory *item_factory;
- GtkWidget *menubar;
- GtkWidget *statusbar;
-
- GtkWidget *hold;
- GtkWidget *mute;
- GtkWidget *pause;
-
- GtkWidget *send_progress;
- GtkWidget *recv_progress;
-
- AdiumMediaState state;
-
- GtkWidget *display;
- GtkWidget *send_widget;
- GtkWidget *recv_widget;
- GtkWidget *button_widget;
- GtkWidget *local_video;
- GtkWidget *remote_video;
-
- guint timeout_id;
- PurpleMediaSessionType request_type;
-};
-
-#ifdef HAVE_X11
-static int
-adium_x_error_handler(Display *display, XErrorEvent *event)
-{
- const gchar *error_type;
- switch (event->error_code) {
-#define XERRORCASE(type) case type: error_type = #type; break
- XERRORCASE(BadAccess);
- XERRORCASE(BadAlloc);
- XERRORCASE(BadAtom);
- XERRORCASE(BadColor);
- XERRORCASE(BadCursor);
- XERRORCASE(BadDrawable);
- XERRORCASE(BadFont);
- XERRORCASE(BadGC);
- XERRORCASE(BadIDChoice);
- XERRORCASE(BadImplementation);
- XERRORCASE(BadLength);
- XERRORCASE(BadMatch);
- XERRORCASE(BadName);
- XERRORCASE(BadPixmap);
- XERRORCASE(BadRequest);
- XERRORCASE(BadValue);
- XERRORCASE(BadWindow);
-#undef XERRORCASE
- default:
- error_type = "unknown";
- break;
- }
- purple_debug_error("media", "A %s Xlib error has occurred. "
- "The program would normally crash now.\n",
- error_type);
- return 0;
-}
-#endif
-
-static void
-menu_hangup(gpointer data, guint action, GtkWidget *item)
-{
- AdiumMedia *gtkmedia = ADIUM_MEDIA(data);
- purple_media_stream_info(gtkmedia->priv->media,
- PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE);
-}
-
-static GtkItemFactoryEntry menu_items[] = {
- { N_("/_Media"), NULL, NULL, 0, "<Branch>", NULL },
- { N_("/Media/_Hangup"), NULL, menu_hangup, 0, "<Item>", NULL },
-};
-
-static gint menu_item_count = sizeof(menu_items) / sizeof(menu_items[0]);
-
-static const char *
-item_factory_translate_func (const char *path, gpointer func_data)
-{
- return _(path);
-}
-
-static GtkWidget *
-setup_menubar(AdiumMedia *window)
-{
- GtkAccelGroup *accel_group;
- GtkWidget *menu;
-
- accel_group = gtk_accel_group_new ();
- gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
- g_object_unref(accel_group);
-
- window->priv->item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,
- "<main>", accel_group);
-
- gtk_item_factory_set_translate_func(window->priv->item_factory,
- (GtkTranslateFunc)item_factory_translate_func,
- NULL, NULL);
-
- gtk_item_factory_create_items(window->priv->item_factory,
- menu_item_count, menu_items, window);
- g_signal_connect(G_OBJECT(accel_group), "accel-changed",
- G_CALLBACK(adium_save_accels_cb), NULL);
-
- menu = gtk_item_factory_get_widget(
- window->priv->item_factory, "<main>");
-
- gtk_widget_show(menu);
- return menu;
-}
-
-static void
-adium_media_init (AdiumMedia *media)
-{
- GtkWidget *vbox;
- media->priv = ADIUM_MEDIA_GET_PRIVATE(media);
-
-#ifdef HAVE_X11
- XSetErrorHandler(adium_x_error_handler);
-#endif
-
- vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(media), vbox);
-
- media->priv->statusbar = gtk_statusbar_new();
- gtk_box_pack_end(GTK_BOX(vbox), media->priv->statusbar,
- FALSE, FALSE, 0);
- gtk_statusbar_push(GTK_STATUSBAR(media->priv->statusbar),
- 0, _("Calling..."));
- gtk_widget_show(media->priv->statusbar);
-
- media->priv->menubar = setup_menubar(media);
- gtk_box_pack_start(GTK_BOX(vbox), media->priv->menubar,
- FALSE, TRUE, 0);
-
- media->priv->display = gtk_vbox_new(FALSE, ADIUM_HIG_BOX_SPACE);
- gtk_container_set_border_width(GTK_CONTAINER(media->priv->display),
- ADIUM_HIG_BOX_SPACE);
- gtk_box_pack_start(GTK_BOX(vbox), media->priv->display,
- TRUE, TRUE, ADIUM_HIG_BOX_SPACE);
- gtk_widget_show(vbox);
-
- g_signal_connect(G_OBJECT(media), "delete-event",
- G_CALLBACK(adium_media_delete_event_cb), media);
-}
-
static void
level_message_cb(PurpleMedia *media, gchar *session_id, gchar *participant,
double level, AdiumMedia *gtkmedia)
@@ -231,15 +74,6 @@
}
static void
-adium_media_finalize(GObject *media)
-{
- /* AdiumMedia *gtkmedia = ADIUM_MEDIA(media); */
- purple_debug_info("gtkmedia", "adium_media_finalize\n");
-
- G_OBJECT_CLASS(parent_class)->finalize(media);
-}
-
-static void
adium_media_emit_message(AdiumMedia *gtkmedia, const char *msg)
{
PurpleConversation *conv = purple_find_conversation_with_account(
@@ -305,89 +139,6 @@
0, error);
}
-static void
-adium_media_accept_cb(PurpleMedia *media, int index)
-{
- purple_media_stream_info(media, PURPLE_MEDIA_INFO_ACCEPT,
- NULL, NULL, TRUE);
-}
-
-static void
-adium_media_reject_cb(PurpleMedia *media, int index)
-{
- purple_media_stream_info(media, PURPLE_MEDIA_INFO_REJECT,
- NULL, NULL, TRUE);
-}
-
-static gboolean
-adium_request_timeout_cb(AdiumMedia *gtkmedia)
-{
- PurpleAccount *account;
- PurpleBuddy *buddy;
- const gchar *alias;
- PurpleMediaSessionType type;
- gchar *message = NULL;
-
- account = purple_media_get_account(gtkmedia->priv->media);
- buddy = purple_find_buddy(account, gtkmedia->priv->screenname);
- alias = buddy ? purple_buddy_get_contact_alias(buddy) :
- gtkmedia->priv->screenname;
- type = gtkmedia->priv->request_type;
- gtkmedia->priv->timeout_id = 0;
-
- if (type & PURPLE_MEDIA_AUDIO && type & PURPLE_MEDIA_VIDEO) {
- message = g_strdup_printf(_("%s wishes to start an audio/video session with you."),
- alias);
- } else if (type & PURPLE_MEDIA_AUDIO) {
- message = g_strdup_printf(_("%s wishes to start an audio session with you."),
- alias);
- } else if (type & PURPLE_MEDIA_VIDEO) {
- message = g_strdup_printf(_("%s wishes to start a video session with you."),
- alias);
- }
-
- gtkmedia->priv->request_type = PURPLE_MEDIA_NONE;
- if (!purple_media_accepted(gtkmedia->priv->media, NULL, NULL)) {
- purple_request_accept_cancel(gtkmedia, _("Incoming Call"),
- message, NULL, PURPLE_DEFAULT_ACTION_NONE,
- (void*)account, gtkmedia->priv->screenname,
- NULL, gtkmedia->priv->media,
- adium_media_accept_cb,
- adium_media_reject_cb);
- }
- adium_media_emit_message(gtkmedia, message);
- g_free(message);
- return FALSE;
-}
-
-static void
-#if GTK_CHECK_VERSION(2,12,0)
-adium_media_input_volume_changed(GtkScaleButton *range, double value,
- PurpleMedia *media)
-{
- double val = (double)value * 100.0;
-#else
-adium_media_input_volume_changed(GtkRange *range, PurpleMedia *media)
-{
- double val = (double)gtk_range_get_value(GTK_RANGE(range));
-#endif
- purple_media_set_input_volume(media, NULL, val);
-}
-
-static void
-#if GTK_CHECK_VERSION(2,12,0)
-adium_media_output_volume_changed(GtkScaleButton *range, double value,
- PurpleMedia *media)
-{
- double val = (double)value * 100.0;
-#else
-adium_media_output_volume_changed(GtkRange *range, PurpleMedia *media)
-{
- double val = (double)gtk_range_get_value(GTK_RANGE(range));
-#endif
- purple_media_set_output_volume(media, NULL, NULL, val);
-}
-
static GtkWidget *
adium_media_add_audio_widget(AdiumMedia *gtkmedia,
PurpleMediaSessionType type)
@@ -594,12 +345,7 @@
gtkmedia->priv->button_widget = button_widget;
if (purple_media_is_initiator(media, sid, NULL) == FALSE) {
- if (gtkmedia->priv->timeout_id != 0)
- g_source_remove(gtkmedia->priv->timeout_id);
- gtkmedia->priv->request_type |= type;
- gtkmedia->priv->timeout_id = g_timeout_add(500,
- (GSourceFunc)adium_request_timeout_cb,
- gtkmedia);
+#error XXX Add something to accept or reject this media
}
/* set the window icon according to the type */
@@ -743,7 +489,7 @@
AIMedia *adiumMedia = [adium.mediaController mediaWithContact:contact onAccount:adiumAccount];
- adiumMedia.protocolInfo = media;
+ adiumMedia.protocolInfo = (id)media;
if (purple_media_is_initiator(media, NULL, NULL) == TRUE) {
[adium.mediaController showMedia:adiumMedia];
@@ -855,8 +601,7 @@
}
return sink;
}
-#endif /* USE_VV */
-
+
void
adium_medias_init(void)
{
@@ -906,9 +651,9 @@
PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION |
PURPLE_MEDIA_CAPS_AUDIO_VIDEO);
- purple_debug_info("gtkmedia", "Registering media element types\n");
+ AILog(@"Registering media element types");
purple_media_manager_set_active_element(manager, default_video_src);
purple_media_manager_set_active_element(manager, default_video_sink);
purple_media_manager_set_active_element(manager, default_audio_src);
purple_media_manager_set_active_element(manager, default_audio_sink);
-}
\ No newline at end of file
+}
More information about the commits
mailing list