# HG changeset patch # User Mike Ruprecht # Date 1216437000 0 # Node ID eb8c8a926589928242225ae3057bc16ff970e102 # Parent 23a156abcb2a0c688f6c390fe25e92ebd8a24e39 Convert serv_* media functions to purple_prpl_* functions. diff -r 23a156abcb2a -r eb8c8a926589 finch/gntmedia.c --- a/finch/gntmedia.c Thu Jul 17 23:09:58 2008 +0000 +++ b/finch/gntmedia.c Sat Jul 19 03:10:00 2008 +0000 @@ -433,10 +433,10 @@ call_cmd_cb(PurpleConversation *conv, const char *cmd, char **args, char **eror, gpointer data) { - PurpleConnection *gc = purple_conversation_get_gc(conv); + PurpleAccount *account = purple_conversation_get_account(conv); PurpleMedia *media = - serv_initiate_media(gc, + purple_prpl_initiate_media(account, purple_conversation_get_name(conv), PURPLE_MEDIA_RECV_AUDIO & PURPLE_MEDIA_SEND_AUDIO); diff -r 23a156abcb2a -r eb8c8a926589 libpurple/media.h --- a/libpurple/media.h Thu Jul 17 23:09:58 2008 +0000 +++ b/libpurple/media.h Sat Jul 19 03:10:00 2008 +0000 @@ -50,6 +50,12 @@ typedef struct _PurpleMediaPrivate PurpleMediaPrivate; typedef struct _PurpleMediaSession PurpleMediaSession; +#else + +typedef void PurpleMedia; + +#endif /* USE_VV */ + typedef enum { PURPLE_MEDIA_NONE = 0, PURPLE_MEDIA_RECV_AUDIO = 1 << 0, @@ -60,6 +66,8 @@ PURPLE_MEDIA_VIDEO = PURPLE_MEDIA_RECV_VIDEO | PURPLE_MEDIA_SEND_VIDEO } PurpleMediaStreamType; +#ifdef USE_VV + struct _PurpleMediaClass { GObjectClass parent_class; diff -r 23a156abcb2a -r eb8c8a926589 libpurple/prpl.c --- a/libpurple/prpl.c Thu Jul 17 23:09:58 2008 +0000 +++ b/libpurple/prpl.c Sat Jul 19 03:10:00 2008 +0000 @@ -411,3 +411,61 @@ return NULL; } + + + +PurpleMedia * +purple_prpl_initiate_media(PurpleAccount *account, + const char *who, + PurpleMediaStreamType type) +{ +#ifdef USE_VV + PurpleConnection *gc = NULL; + PurplePlugin *prpl = NULL; + PurplePluginProtocolInfo *prpl_info = NULL; + + 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 (prpl_info && prpl_info->initiate_media) { + /* should check that the protocol supports this media type here? */ + return prpl_info->initiate_media(gc, who, type); + } else { + return NULL; + } +#else + return NULL; +#endif +} + +gboolean +purple_prpl_can_do_media(PurpleAccount *account, + const char *who, + PurpleMediaStreamType type) +{ +#ifdef USE_VV + PurpleConnection *gc = NULL; + PurplePlugin *prpl = NULL; + PurplePluginProtocolInfo *prpl_info = NULL; + + 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 (prpl_info && prpl_info->can_do_media) { + return prpl_info->can_do_media(gc, who, type); + } else { + return FALSE; + } +#else + return FALSE; +#endif +} + diff -r 23a156abcb2a -r eb8c8a926589 libpurple/prpl.h --- a/libpurple/prpl.h Thu Jul 17 23:09:58 2008 +0000 +++ b/libpurple/prpl.h Sat Jul 19 03:10:00 2008 +0000 @@ -442,23 +442,10 @@ */ GHashTable *(*get_account_text_table)(PurpleAccount *account); -#ifdef USE_VV /** Initiate media with the given buddy */ PurpleMedia *(*initiate_media)(PurpleConnection *conn, const char *who, PurpleMediaStreamType type); gboolean (*can_do_media)(PurpleConnection *conn, const char *who, PurpleMediaStreamType type); - - /* - gboolean (*can_receive_video)(PurpleConnection *conn, const char *who); - gboolean (*can_send_video)(PurpleConnection *conn, const char *who); - gboolean (*can_receive_audio)(PurpleConnection *conn, const char *who); - gboolean (*can_send_audio)(PurpleConnection *conn, const char *who); - */ - -#else - void (*initiate_media)(void); - void (*can_do_media)(void); -#endif }; #define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \ @@ -712,6 +699,32 @@ */ GList *purple_prpl_get_statuses(PurpleAccount *account, PurplePresence *presence); +/** + * Determines if the contact supports the given media session type. + * + * @param account The account the user is on. + * @param who The name of the contact to check capabilities for. + * @param type The type of media session to check for. + * + * @return @c TRUE if the contact supports the session type, else @c FALSE. + */ +gboolean purple_prpl_can_do_media(PurpleAccount *account, + const char *who, + PurpleMediaStreamType type); + +/** + * Initiates a media session with the given contact. + * + * @param account The account the user is on. + * @param who The name of the contact to start a session with. + * @param type The type of media session to start. + * + * @return The newly created session object. + */ +PurpleMedia *purple_prpl_initiate_media(PurpleAccount *account, + const char *who, + PurpleMediaStreamType type); + /*@}*/ /**************************************************************************/ diff -r 23a156abcb2a -r eb8c8a926589 libpurple/server.c --- a/libpurple/server.c Thu Jul 17 23:09:58 2008 +0000 +++ b/libpurple/server.c Sat Jul 19 03:10:00 2008 +0000 @@ -1057,57 +1057,3 @@ } } -#ifdef USE_VV -PurpleMedia *serv_initiate_media(PurpleConnection *gc, const char *who, - PurpleMediaStreamType type) -{ - PurplePlugin *prpl = NULL; - PurplePluginProtocolInfo *prpl_info = NULL; - - if (gc) - prpl = purple_connection_get_prpl(gc); - if (prpl) - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); - - if (prpl_info && prpl_info->initiate_media) { - /* should check that the protol supports this media type here.... */ - return prpl_info->initiate_media(gc, who, type); - } else { - return NULL; - } -} - -gboolean -serv_can_do_media(PurpleConnection *gc, const char *who, - PurpleMediaStreamType type) -{ - PurplePlugin *prpl = NULL; - PurplePluginProtocolInfo *prpl_info = NULL; - - if (gc) - prpl = purple_connection_get_prpl(gc); - if (prpl) - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); - - if (prpl_info && prpl_info->can_do_media) { - /* should check that the protol supports this media type here.... */ - return prpl_info->can_do_media(gc, who, type); - } else { - return FALSE; - } -} -#else -void * -serv_initiate_media(void *gc, void *who, void *type) -{ - purple_debug_info("serv", "Blank serv_initiate_media called\n"); - return NULL; -} - -void * -serv_can_do_media(void *gc, void *who, void *type) -{ - purple_debug_info("serv", "Blank serv_can_do_media called\n"); - return NULL; -} -#endif /* USE_VV */ diff -r 23a156abcb2a -r eb8c8a926589 libpurple/server.h --- a/libpurple/server.h Thu Jul 17 23:09:58 2008 +0000 +++ b/libpurple/server.h Sat Jul 19 03:10:00 2008 +0000 @@ -183,17 +183,6 @@ PurpleMessageFlags flags, const char *message, time_t mtime); void serv_send_file(PurpleConnection *gc, const char *who, const char *file); -#ifdef USE_VV -PurpleMedia *serv_initiate_media(PurpleConnection *gc, const char *who, - PurpleMediaStreamType type); -gboolean serv_can_do_media(PurpleConnection *gc, const char *who, - PurpleMediaStreamType type); -#else -/* hmm, is this really nice? */ -void *serv_initiate_media(void*, void*, void*); -void *serv_can_do_media(void *, void *, void *); -#endif - #ifdef __cplusplus } #endif diff -r 23a156abcb2a -r eb8c8a926589 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Thu Jul 17 23:09:58 2008 +0000 +++ b/pidgin/gtkconv.c Sat Jul 19 03:10:00 2008 +0000 @@ -6380,13 +6380,17 @@ #ifdef USE_VV /* check if account support voice calls, and if the current buddy supports it */ - if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { - gboolean audio = serv_can_do_media(gc, purple_conversation_get_name(conv), - PURPLE_MEDIA_AUDIO); - gboolean video = serv_can_do_media(gc, purple_conversation_get_name(conv), - PURPLE_MEDIA_VIDEO); - gboolean av = serv_can_do_media(gc, purple_conversation_get_name(conv), - PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO); + if (account != NULL && purple_conversation_get_type(conv) + == PURPLE_CONV_TYPE_IM) { + gboolean audio = purple_prpl_can_do_media(account, + purple_conversation_get_name(conv), + PURPLE_MEDIA_AUDIO); + gboolean video = purple_prpl_can_do_media(account, + purple_conversation_get_name(conv), + PURPLE_MEDIA_VIDEO); + gboolean av = purple_prpl_can_do_media(account, + purple_conversation_get_name(conv), + PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO); gtk_widget_set_sensitive(win->menu.audio_call, audio ? TRUE : FALSE); gtk_widget_set_sensitive(win->menu.video_call, video ? TRUE : FALSE); @@ -7684,12 +7688,12 @@ { PidginWindow *win = (PidginWindow *)data; PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); - PurpleConnection *gc = purple_conversation_get_gc(conv); + PurpleAccount *account = purple_conversation_get_account(conv); PurpleMedia *media = - serv_initiate_media(gc, - purple_conversation_get_name(conv), - PURPLE_MEDIA_AUDIO); + purple_prpl_initiate_media(account, + purple_conversation_get_name(conv), + PURPLE_MEDIA_AUDIO); if (media) purple_media_wait(media); @@ -7700,12 +7704,12 @@ { PidginWindow *win = (PidginWindow *)data; PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); - PurpleConnection *gc = purple_conversation_get_gc(conv); + PurpleAccount *account = purple_conversation_get_account(conv); PurpleMedia *media = - serv_initiate_media(gc, - purple_conversation_get_name(conv), - PURPLE_MEDIA_VIDEO); + purple_prpl_initiate_media(account, + purple_conversation_get_name(conv), + PURPLE_MEDIA_VIDEO); if (media) purple_media_wait(media); @@ -7716,12 +7720,12 @@ { PidginWindow *win = (PidginWindow *)data; PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); - PurpleConnection *gc = purple_conversation_get_gc(conv); + PurpleAccount *account = purple_conversation_get_account(conv); PurpleMedia *media = - serv_initiate_media(gc, - purple_conversation_get_name(conv), - PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO); + purple_prpl_initiate_media(account, + purple_conversation_get_name(conv), + PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO); if (media) purple_media_wait(media);