自己动手为gaim写个闪屏插件

0 篇文章 0 订阅

目标:
在聊天窗口的toolbar里添加一个按钮,点击发送闪屏消息给对方。

软件版本:
gaim-2.0.0beta6( http://gaim.sourceforge.net/)

主要思想:
一.确定闪屏的协议:
  这个简单,让同事发个闪屏消息给我,用wireshark抓包就能得到了,最终得到闪屏的消息为:

MSG username@hotmail.com /342/225/254nickname 69/r/n
MIME-Version: 1.0/r/n
Content-Type: text/x-msnmsgr-datacast/r/n
/r/n
ID: 1/r/n
/r/n

二.采用插件形式,新建nudge.c。
这个主要参考gtk/plugins已有的插件来了解如何写插件。
主要实现:
1.填充GaimPluginInfo结构(参见libgaim/plugin.h);
这个结构指定了插件的id,name,版本,描述等信息。
主要需要指定插件加载的函数入口地址,当加载插件时会调用此方法,我这里指定为plugin_load。

另外GaimPluginType选择GAIM_PLUGIN_STANDARD,这样可以在Tools/plugins里看到你写的插件来手工加载卸载插件。

2.实现plugin_load.
为了在打开对话窗口时,添加一个button到toolbar,需要

gaim_signal_connect(handle,"conversation-created",plugin, GAIM_CALLBACK(nudge), NULL);

GAIM_CALLBACK(nudge)为回调,主要实现添加按钮到toolbar。

另外,这里需要注册一个nudge信号,并为该信号指定回调do_nudge,当激发nudge信号,就会调用回调函数do_nudge实现发送闪屏的消息。

gaim_signal_register(handle,"nudge",gaim_marshal_VOID__POINTER,NULL,1,                                                                                                                            gaim_value_new(GAIM_TYPE_SUBTYPE,                                                                                                               GAIM_SUBTYPE_CONVERSATION));
gaim_signal_connect(handle,"nudge",plugin, GAIM_CALLBACK(do_nudge), NULL);

3.实现向toolbar添加按钮的函数nudge.
toolbar为GtkIMHtmlToolbar(gtk/gtkimhtmltoolbar.h),可以从GaimGtkConversation(gtk/gtkconv.h)获得,而GaimGtkConversation可以从GaimConversation(libgaim/ conversation.h)获得。
主要步骤:

gtkconv = GAIM_GTK_CONVERSATION(c);
toolbar = gtkconv->toolbar;
hbox = GTK_WIDGET(toolbar);
button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(send_nudge_cb),c );

当点按钮会调用send_nudge_cb方法,这个函数主要激发nudge信号,调用do_nudge函数来实现发送闪屏消息。

gaim_signal_emit(gaim_conversations_get_handle(),"nudge", conv, conv->name);

4.实现发送闪屏消息do_nudge。
闪屏的消息,msn的协议插件已经封装,通过msn_message_new_nudge()(libgaim/protocols/msn/msg.h)得到,只要发送即可,msn协议插件里也有类似的函数libgaim/protocols/msn/msn.c里的msn_cmd_nudge。

5.注意本插件需要利用msn的协议插件来发送消息,所以需要依赖prpl-msn插件,这可以通过设置GaimPlugin里的GList *dependencies来实现。
可以在init_plugin(GaimPlugin *plugin)里指定,具体方法如下:

 GList *dep_list = NULL;
 dep_list = g_list_append(dep_list,"prpl-msn");
 plugin->info->dependencies = dep_list;

注意prpl-msn为msn协议插件的id.


6.修改Makefile.am,Makefile.in添加nudge.c的相关定义,需要注意插件需要连接libmsn.so的库。

重新编译,安装好后,在Tools/plugins里选中Nudge插件,然后就可以给好友发送闪屏消息了!

附:nudge.c




 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值