adium 3045:96c2441aa3a3: Remove a whole bunch of GTK stuff, fill...
commits at adium.im
commits at adium.im
Thu Dec 10 16:49:17 UTC 2009
details: http://hg.adium.im/adium/rev/96c2441aa3a3
revision: 3045:96c2441aa3a3
author: Zachary West <zacw at adium.im>
date: Thu Dec 10 11:49:08 2009 -0500
Remove a whole bunch of GTK stuff, filling it with absolutely nothing useful.
diffs (583 lines):
diff -r f134ec38f60b -r 96c2441aa3a3 Frameworks/Adium Framework/Source/AIAccount.h
--- a/Frameworks/Adium Framework/Source/AIAccount.h Thu Dec 10 02:32:25 2009 -0500
+++ b/Frameworks/Adium Framework/Source/AIAccount.h Thu Dec 10 11:49:08 2009 -0500
@@ -144,6 +144,15 @@
- (void)closeMedia:(AIMedia *)media;
/*!
+ * @brief Destroy a media
+ *
+ * @param media The media to be destroyed
+ *
+ * Gives the account an opportunity to teardown.
+ */
+- (void)destroyMedia:(AIMedia *)media;
+
+/*!
* @brief Accept a pending media
*/
- (void)incomingMedia:(AIMedia *)media acceptPendingRequest:(BOOL)accept;
diff -r f134ec38f60b -r 96c2441aa3a3 Frameworks/Adium Framework/Source/AIMedia.h
--- a/Frameworks/Adium Framework/Source/AIMedia.h Thu Dec 10 02:32:25 2009 -0500
+++ b/Frameworks/Adium Framework/Source/AIMedia.h Thu Dec 10 11:49:08 2009 -0500
@@ -8,16 +8,17 @@
#import <Adium/AIMediaControllerProtocol.h>
+ at protocol AIAccount_Media;
@class AIListContact, AIAccount;
@interface AIMedia : NSObject {
- AIAccount *account;
- AIListContact *listContact;
- id protocolInfo;
+ AIAccount <AIAccount_Media> *account;
+ AIListContact *listContact;
+ id protocolInfo;
CGFloat sendProgress;
CGFloat receiveProgress;
-
+
AIMediaType mediaType;
AIMediaState mediaState;
}
@@ -28,12 +29,11 @@
@property (readwrite, nonatomic) AIMediaState mediaState;
@property (readwrite, nonatomic) CGFloat sendProgress;
@property (readwrite, nonatomic) CGFloat receiveProgress;
- at property (readwrite, retain, nonatomic) AIAccount *account;
+
+ at property (readwrite, retain, nonatomic) AIAccount <AIAccount_Media> *account;
@property (readwrite, retain, nonatomic) AIListContact *listContact;
+ (AIMedia *)mediaWithContact:(AIListContact *)inListContact
onAccount:(AIAccount *)inAccount;
-- (void)show;
-
@end
diff -r f134ec38f60b -r 96c2441aa3a3 Frameworks/Adium Framework/Source/AIMedia.m
--- a/Frameworks/Adium Framework/Source/AIMedia.m Thu Dec 10 02:32:25 2009 -0500
+++ b/Frameworks/Adium Framework/Source/AIMedia.m Thu Dec 10 11:49:08 2009 -0500
@@ -12,13 +12,13 @@
@interface AIMedia()
- (id)initWithContact:(AIListContact *)inListContact
- onAccount:(AIAccount *)inAccount;
+ onAccount:(AIAccount <AIAccount_Media> *)inAccount;
@end
@implementation AIMedia
+ (AIMedia *)mediaWithContact:(AIListContact *)inListContact
- onAccount:(AIAccount *)inAccount
+ onAccount:(AIAccount <AIAccount_Media> *)inAccount
{
return [[[self alloc] initWithContact:inListContact
onAccount:inAccount] autorelease];
@@ -40,8 +40,10 @@
- (void)dealloc
{
- [account release];
- [listContact release];
+ [account destroyMedia:self];
+
+ self.account = nil;
+ self.listContact = nil;
[super dealloc];
}
@@ -53,9 +55,4 @@
[adium.mediaController media:self didSetState:inMediaState];
}
-- (void)show
-{
-
-}
-
@end
diff -r f134ec38f60b -r 96c2441aa3a3 Frameworks/Adium Framework/Source/AIMediaControllerProtocol.h
--- a/Frameworks/Adium Framework/Source/AIMediaControllerProtocol.h Thu Dec 10 02:32:25 2009 -0500
+++ b/Frameworks/Adium Framework/Source/AIMediaControllerProtocol.h Thu Dec 10 11:49:08 2009 -0500
@@ -20,6 +20,11 @@
AIMediaStateRejected, /* Rejected call */
} AIMediaState;
+ at protocol AIMediaWindowController
+ at property (readwrite, retain) NSView *outgoingVideo;
+ at property (readwrite, retain) NSView *incomingVideo;
+ at end
+
@class AIMedia, AIListContact, AIAccount;
@protocol AIMediaController <AIController>
@@ -29,6 +34,8 @@
- (AIMedia *)existingMediaWithContact:(AIListContact *)contact
onAccount:(AIAccount *)account;
+- (NSWindowController <AIMediaWindowController> *)windowControllerForMedia:(AIMedia *)media;
+
- (void)showMedia:(AIMedia *)media;
- (void)media:(AIMedia *)media didSetState:(AIMediaState)state;
diff -r f134ec38f60b -r 96c2441aa3a3 Plugins/Purple Service/CBPurpleAccount.h
--- a/Plugins/Purple Service/CBPurpleAccount.h Thu Dec 10 02:32:25 2009 -0500
+++ b/Plugins/Purple Service/CBPurpleAccount.h Thu Dec 10 11:49:08 2009 -0500
@@ -77,6 +77,7 @@
- (void)media:(AIMedia *)media setInputVolume:(CGFloat)inputVolume;
- (void)media:(AIMedia *)media setOutputVolume:(CGFloat)outputVolume;
- (void)closeMedia:(AIMedia *)media;
+- (void)destroyMedia:(AIMedia *)media;
- (void)incomingMedia:(AIMedia *)media acceptPendingRequest:(BOOL)accept;
#pragma mark -
diff -r f134ec38f60b -r 96c2441aa3a3 Plugins/Purple Service/CBPurpleAccount.m
--- a/Plugins/Purple Service/CBPurpleAccount.m Thu Dec 10 02:32:25 2009 -0500
+++ b/Plugins/Purple Service/CBPurpleAccount.m Thu Dec 10 11:49:08 2009 -0500
@@ -64,6 +64,7 @@
#import "ESiTunesPlugin.h"
#import "AMPurpleTuneTooltip.h"
#import "adiumPurpleRequest.h"
+#import "adiumPurpleMedia.h"
#import "AIDualWindowInterfacePlugin.h"
#ifdef HAVE_CDSA
@@ -1832,6 +1833,18 @@
}
/*!
+ * @brief Destroy a media
+ *
+ * @param media The media to be destroyed
+ *
+ * Gives the account an opportunity to teardown.
+ */
+- (void)destroyMedia:(AIMedia *)media
+{
+ adium_media_remove(media);
+}
+
+/*!
* @brief Accept a pending media
*/
- (void)incomingMedia:(AIMedia *)media acceptPendingRequest:(BOOL)accept
diff -r f134ec38f60b -r 96c2441aa3a3 Plugins/Purple Service/adiumPurpleMedia.h
--- a/Plugins/Purple Service/adiumPurpleMedia.h Thu Dec 10 02:32:25 2009 -0500
+++ b/Plugins/Purple Service/adiumPurpleMedia.h Thu Dec 10 11:49:08 2009 -0500
@@ -15,3 +15,4 @@
*/
void adiumPurpleMedia_init(void);
+void adium_media_remove(AIMedia *adiumMedia);
diff -r f134ec38f60b -r 96c2441aa3a3 Plugins/Purple Service/adiumPurpleMedia.m
--- a/Plugins/Purple Service/adiumPurpleMedia.m Thu Dec 10 02:32:25 2009 -0500
+++ b/Plugins/Purple Service/adiumPurpleMedia.m Thu Dec 10 11:49:08 2009 -0500
@@ -38,72 +38,20 @@
}
}
-#error Must be called when destroying AIMedia
static void
-adium_media_disconnect_levels(PurpleMedia *media, AIMedia *adiumMedia)
+adium_media_emit_message(AIMedia *adiumMedia, const char *message)
{
- PurpleMediaManager *manager = purple_media_get_manager(media);
- GstElement *element = purple_media_manager_get_pipeline(manager);
- gulong handler_id = g_signal_handler_find(G_OBJECT(gst_pipeline_get_bus(GST_PIPELINE(element))),
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0,
- NULL, G_CALLBACK(level_message_cb), adiumMedia);
- if (handler_id)
- g_signal_handler_disconnect(G_OBJECT(gst_pipeline_get_bus(GST_PIPELINE(element))),
- handler_id);
-}
-
-typedef struct
-{
- AIMedia *adiumMedia;
- gchar *session_id;
- gchar *participant;
-} AdiumMediaRealizeData;
-
-static gboolean
-realize_cb_cb(AdiumMediaRealizeData *data)
-{
- AdiumMediaPrivate *priv = data->gtkmedia->priv;
- gulong window_id;
-
-#ifdef _WIN32
- if (data->participant == NULL)
- window_id = GDK_WINDOW_HWND(priv->local_video->window);
- else
- window_id = GDK_WINDOW_HWND(priv->remote_video->window);
-#elif defined(HAVE_X11)
- if (data->participant == NULL)
- window_id = GDK_WINDOW_XWINDOW(priv->local_video->window);
- else
- window_id = GDK_WINDOW_XWINDOW(priv->remote_video->window);
-#else
-# error "Unsupported windowing system"
-#endif
-
- purple_media_set_output_window(priv->media, data->session_id,
- data->participant, window_id);
-
- g_free(data->session_id);
- g_free(data->participant);
- g_free(data);
- return FALSE;
+#warning emit message
+
+ NSLog(@"Media emit message: %s", message);
}
static void
-realize_cb(GtkWidget *widget, AdiumMediaRealizeData *data)
+adium_media_error_cb(AIMedia *adiumMdia, const char *message)
{
- g_timeout_add(0, (GSourceFunc)realize_cb_cb, data);
-}
-
-static void
-adium_media_emit_message(PurpleMedia *media, const char *message, AIMedia *adiumMedia)
-{
-#error emit message
-}
-
-static void
-adium_media_error_cb(PurpleMedia *media, const char *error, AIMedia *adiumMedia)
-{
-#error error message
+#warning error message
+
+ NSLog(@"Media error message: %s", message);
}
static void
@@ -112,106 +60,34 @@
PurpleMediaSessionType type = purple_media_get_session_type(media, sid);
if (type & PURPLE_MEDIA_RECV_VIDEO) {
- AdiumMediaRealizeData *data;
- GtkWidget *aspect;
- GtkWidget *remote_video;
- GdkColor color = {0, 0, 0, 0};
-
- aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE);
- gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
- gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0);
-
- data = g_new0(AdiumMediaRealizeData, 1);
- data->gtkmedia = gtkmedia;
- data->session_id = g_strdup(sid);
- data->participant = g_strdup(gtkmedia->priv->screenname);
-
- remote_video = gtk_drawing_area_new();
- gtk_widget_modify_bg(remote_video, GTK_STATE_NORMAL, &color);
- g_signal_connect(G_OBJECT(remote_video), "realize",
- G_CALLBACK(realize_cb), data);
- gtk_container_add(GTK_CONTAINER(aspect), remote_video);
- gtk_widget_set_size_request (GTK_WIDGET(remote_video), 320, 240);
- gtk_widget_show(remote_video);
- gtk_widget_show(aspect);
-
- gtkmedia->priv->remote_video = remote_video;
+ // Setup receiving video view
+#warning Set up receiving video view
}
if (type & PURPLE_MEDIA_SEND_VIDEO) {
- AdiumMediaRealizeData *data;
- GtkWidget *aspect;
- GtkWidget *local_video;
- GdkColor color = {0, 0, 0, 0};
-
- aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE);
- gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
- gtk_box_pack_start(GTK_BOX(send_widget), aspect, TRUE, TRUE, 0);
-
- data = g_new0(AdiumMediaRealizeData, 1);
- data->gtkmedia = gtkmedia;
- data->session_id = g_strdup(sid);
- data->participant = NULL;
-
- local_video = gtk_drawing_area_new();
- gtk_widget_modify_bg(local_video, GTK_STATE_NORMAL, &color);
- g_signal_connect(G_OBJECT(local_video), "realize",
- G_CALLBACK(realize_cb), data);
- gtk_container_add(GTK_CONTAINER(aspect), local_video);
- gtk_widget_set_size_request (GTK_WIDGET(local_video), 160, 120);
-
- gtk_widget_show(local_video);
- gtk_widget_show(aspect);
-
- gtkmedia->priv->pause =
- gtk_toggle_button_new_with_mnemonic(_("_Pause"));
- g_signal_connect(gtkmedia->priv->pause, "toggled",
- G_CALLBACK(adium_media_pause_toggled),
- gtkmedia);
- gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->pause,
- FALSE, FALSE, 0);
- gtk_widget_show(gtkmedia->priv->pause);
-
- gtkmedia->priv->local_video = local_video;
+ // Set up sending video view
+#warning Set up sending video view
}
if (type & PURPLE_MEDIA_RECV_AUDIO) {
- gtk_box_pack_end(GTK_BOX(recv_widget),
- adium_media_add_audio_widget(gtkmedia,
- PURPLE_MEDIA_RECV_AUDIO), FALSE, FALSE, 0);
+ // Set up receiving audio
+#warning Set up receiving audio
}
+
if (type & PURPLE_MEDIA_SEND_AUDIO) {
- gtkmedia->priv->mute =
- gtk_toggle_button_new_with_mnemonic("_Mute");
- g_signal_connect(gtkmedia->priv->mute, "toggled",
- G_CALLBACK(adium_media_mute_toggled),
- gtkmedia);
- gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute,
- FALSE, FALSE, 0);
- gtk_widget_show(gtkmedia->priv->mute);
-
- gtk_box_pack_end(GTK_BOX(send_widget),
- adium_media_add_audio_widget(gtkmedia,
- PURPLE_MEDIA_SEND_AUDIO), FALSE, FALSE, 0);
- }
-
-
- if (type & PURPLE_MEDIA_AUDIO &&
- gtkmedia->priv->level_handler_id == 0) {
- gtkmedia->priv->level_handler_id = g_signal_connect(
- media, "level", G_CALLBACK(level_message_cb),
- gtkmedia);
+ // Set up sending audio
+#warning Set up sending audio
}
if (purple_media_is_initiator(media, sid, NULL) == FALSE) {
-#error XXX Add something to accept or reject this media
+#warning Add something to accept or reject this media
}
/* set the window icon according to the type */
if (type & PURPLE_MEDIA_VIDEO) {
- adiumMedia.mediaType = AIMediaTypeVideo;
+ adiumMedia.mediaType |= AIMediaTypeVideo;
} else if (type & PURPLE_MEDIA_AUDIO) {
- adiumMedia.mediaType = AIMediaTypeAudio;
+ adiumMedia.mediaType |= AIMediaTypeAudio;
}
}
@@ -220,9 +96,11 @@
{
AILog(@"state: %d sid: %s name: %s\n", state, sid ? sid : "(null)", name ? name : "(null)");
+ adiumMedia.mediaState = state;
+
if (sid == NULL && name == NULL) {
if (state == PURPLE_MEDIA_STATE_END) {
-#error adium_media_emit_message(adiumMedia, _("The call has been terminated."));
+ adium_media_emit_message(adiumMedia, _("The call has been terminated."));
}
} else if (state == PURPLE_MEDIA_STATE_NEW && sid != NULL && name != NULL) {
adium_media_ready_cb(media, adiumMedia, sid);
@@ -233,12 +111,12 @@
adium_media_stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type, gchar *sid, gchar *name, gboolean local, AIMedia *adiumMedia)
{
if (type == PURPLE_MEDIA_INFO_REJECT) {
-#warning adium_media_emit_message(gtkmedia, _("You have rejected the call."));
+ adium_media_emit_message(adiumMedia, _("You have rejected the call."));
} else if (type == PURPLE_MEDIA_INFO_ACCEPT) {
#warning Check for pending accept/deny
adiumMedia.mediaState = AIMediaStateAccepted;
-#error adium_media_emit_message(gtkmedia, _("Call in progress."));
+ adium_media_emit_message(adiumMedia, _("Call in progress."));
}
}
@@ -254,7 +132,7 @@
adiumMedia.protocolInfo = (id)media;
if (purple_media_is_initiator(media, NULL, NULL) == TRUE) {
- [adiumMedia show];
+ [adium.mediaController showMedia:adiumMedia];
adiumMedia.mediaState = AIMediaStateWaiting;
} else {
@@ -267,10 +145,28 @@
G_CALLBACK(adium_media_state_changed_cb), adiumMedia);
g_signal_connect(G_OBJECT(media), "stream-info",
G_CALLBACK(adium_media_stream_info_cb), adiumMedia);
+ g_signal_connect(G_OBJECT(media), "level",
+ G_CALLBACK(level_message_cb), adiumMedia);
return TRUE;
}
+void adium_media_remove(AIMedia *adiumMedia)
+{
+ PurpleMedia *media = (PurpleMedia *)adiumMedia.protocolInfo;
+
+ purple_media_remove_output_windows(media);
+
+ PurpleMediaManager *manager = purple_media_get_manager(media);
+ GstElement *element = purple_media_manager_get_pipeline(manager);
+ gulong handler_id = g_signal_handler_find(G_OBJECT(gst_pipeline_get_bus(GST_PIPELINE(element))),
+ G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0,
+ NULL, G_CALLBACK(level_message_cb), adiumMedia);
+ if (handler_id) {
+ g_signal_handler_disconnect(G_OBJECT(gst_pipeline_get_bus(GST_PIPELINE(element))), handler_id);
+ }
+}
+
static GstElement *
create_default_video_src(PurpleMedia *media,
const gchar *session_id, const gchar *participant)
@@ -280,25 +176,10 @@
GstPad *ghost;
GstCaps *caps;
-#ifdef _WIN32
- /* autovideosrc doesn't pick ksvideosrc for some reason */
- src = gst_element_factory_make("ksvideosrc", NULL);
- if (src == NULL)
- src = gst_element_factory_make("dshowvideosrc", NULL);
- if (src == NULL)
- src = gst_element_factory_make("autovideosrc", NULL);
-#else
- src = gst_element_factory_make("gconfvideosrc", NULL);
- if (src == NULL)
- src = gst_element_factory_make("autovideosrc", NULL);
- if (src == NULL)
- src = gst_element_factory_make("v4l2src", NULL);
- if (src == NULL)
- src = gst_element_factory_make("v4lsrc", NULL);
-#endif
+ src = gst_element_factory_make("osxvideosrc", NULL);
+
if (src == NULL) {
- purple_debug_error("gtkmedia", "Unable to find a suitable "
- "element for the default video source.\n");
+ NSLog(@"Unable to find suitable element for default video source.");
return NULL;
}
@@ -307,12 +188,10 @@
capsfilter = gst_element_factory_make("capsfilter", NULL);
/* It was recommended to set the size <= 352x288 and framerate <= 20 */
- caps = gst_caps_from_string("video/x-raw-yuv , width=[250,352] , "
- "height=[200,288] , framerate=[1/1,20/1]");
+ caps = gst_caps_from_string("video/x-raw-yuv , width=[250,352] , height=[200,288] , framerate=[1/1,20/1]");
g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL);
- gst_bin_add_many(GST_BIN(sendbin), src,
- videoscale, capsfilter, NULL);
+ gst_bin_add_many(GST_BIN(sendbin), src, videoscale, capsfilter, NULL);
gst_element_link_many(src, videoscale, capsfilter, NULL);
pad = gst_element_get_static_pad(capsfilter, "src");
@@ -324,15 +203,14 @@
}
static GstElement *
-create_default_video_sink(PurpleMedia *media,
- const gchar *session_id, const gchar *participant)
+create_default_video_sink(PurpleMedia *media, const gchar *session_id, const gchar *participant)
{
- GstElement *sink = gst_element_factory_make("gconfvideosink", NULL);
- if (sink == NULL)
- sink = gst_element_factory_make("autovideosink", NULL);
- if (sink == NULL)
- purple_debug_error("gtkmedia", "Unable to find a suitable "
- "element for the default video sink.\n");
+ GstElement *sink = gst_element_factory_make("osxvideosink", NULL);
+
+ if (sink == NULL) {
+ NSLog(@"Unable to find suitable element for default video sink.");
+ }
+
return sink;
}
@@ -341,20 +219,13 @@
const gchar *session_id, const gchar *participant)
{
GstElement *src;
- src = gst_element_factory_make("gconfaudiosrc", NULL);
- if (src == NULL)
- src = gst_element_factory_make("autoaudiosrc", NULL);
- if (src == NULL)
- src = gst_element_factory_make("alsasrc", NULL);
- if (src == NULL)
- src = gst_element_factory_make("osssrc", NULL);
- if (src == NULL)
- src = gst_element_factory_make("dshowaudiosrc", NULL);
+ src = gst_element_factory_make("osxaudiosrc", NULL);
+
if (src == NULL) {
- purple_debug_error("gtkmedia", "Unable to find a suitable "
- "element for the default audio source.\n");
+ NSLog(@"Unable to find suitable element for default audio source.");
return NULL;
}
+
gst_element_set_name(src, "adiumdefaultaudiosrc");
return src;
}
@@ -364,19 +235,18 @@
const gchar *session_id, const gchar *participant)
{
GstElement *sink;
- sink = gst_element_factory_make("gconfaudiosink", NULL);
- if (sink == NULL)
- sink = gst_element_factory_make("autoaudiosink",NULL);
+ sink = gst_element_factory_make("osxaudiosink", NULL);
+
if (sink == NULL) {
- purple_debug_error("gtkmedia", "Unable to find a suitable "
- "element for the default audio sink.\n");
+ NSLog(@"Unable to find suitable element for default audio sink.");
return NULL;
}
+
return sink;
}
void
-adium_medias_init(void)
+adiumPurpleMedia_init(void)
{
PurpleMediaManager *manager = purple_media_manager_get();
PurpleMediaElementInfo *default_video_src =
diff -r f134ec38f60b -r 96c2441aa3a3 Source/AIMediaController.m
--- a/Source/AIMediaController.m Thu Dec 10 02:32:25 2009 -0500
+++ b/Source/AIMediaController.m Thu Dec 10 11:49:08 2009 -0500
@@ -43,9 +43,19 @@
return nil;
}
+- (NSWindowController <AIMediaWindowController> *)windowControllerForMedia:(AIMedia *)media
+{
+ return nil;
+}
+
- (void)media:(AIMedia *)media didSetState:(AIMediaState)state
{
}
+- (void)showMedia:(AIMedia *)media
+{
+
+}
+
@end
More information about the commits
mailing list