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