这几天一直在折腾im, 今天终于搞定了adium svn + libpurple with msnp14, 大致过程如下
1. 下载pidgin的source
题外话: 现在的版本控制工具真是让人眼花缭乱, 在学校的时候用cvs, 上班了由于项目需要又在用perforce, 后来东京公司这边还有google code, sf等等都流行svn, 然后折腾pidgin的时候用msn-pecan插件, 是用的git. 再到后来下pidgin的代码, 又冒出个monotone...
像上面写的, 下pidgin的source需要用到monotone, 所以需要先到官方下个monotone来.
参考pidgin的wiki下载pidgin的代码, 但是需要把最后一句
mtn -d $DATABASE co -b im.pidgin.pidgin $WORKINGDIR
改为
mtn -d $DATABASE co -b im.pidgin.pidgin.next.minor $WORKINGDIR
2. export PIDGIN_SOURCE=$WORKINGDIR
3. 下载adium source
svn co svn://svn.adiumx.com/adium/trunk
4. cd trunk/Utilities/dep-build-scripts
python download.py `cat urls.txt` (仅限10.5或者python不低于2.5.1的时候, 其他情况需要用wget)
./general_dependencies_make.sh
./purple_dependencies_make.sh
修改purple_make.sh, 在139行--disable-dbus 之后加入 --enable-msnp14
./purple_make.sh
./universalize.sh (可以不用理会cp命令的错误)
./make_po_files.sh
./copy_frameworks.sh
5. 用xcode打开Adium.xcodeproj, build
6. 遇到的问题:
注: 可能会根据pidgin源码的更新而不同, 编译或运行时出错请参照:
1) msn_got_photo重复定义.
其实是msn_got_photo函数的定义和声明不一样
cd $WORKINGDIR/libpurple/protocols/msn
编辑msn.c, 找到1741行
static void msn_got_photo(PurpleUtilFetchUrlData *url_data, gpointer data,
const gchar *url_text, size_t len, const gchar *error_message);
修改len的类型为gsize
static void msn_got_photo(PurpleUtilFetchUrlData *url_data, gpointer data,
const gchar *url_text, gsize len, const gchar *error_message);
2) adium连接msn, 停在Authentication (75%)
貌似msn的连接服务器有所变动, 而libpurple对返回的redirectUrl的soap消息处理有问题, 懒得修代码了, 直接改:
修改nexus.h
找到30行, 修改
#define MSN_TWN_SERVER "login.live.com"
为
#define MSN_TWN_SERVER "msnia.login.live.com"
35行
#define TWN_POST_URL "/RST.srf"
为
#define TWN_POST_URL "/pp550/RST.srf"
尽管这样可以连到服务器, 但是在接受下一个服务器消息的时候会出错, 所以还需要另一个patch, 详细可以看pidgin的trac
7. 至于为什么费老劲了去上msnp14, 主要是支持个性签名 #$"&$'"#$#! , 据说也可以支持离线消息了, 不过还没试过
嗯...下一步干什么呢, 有空写个msn-pecan的adium插件吧, 大致看了一下代码, 因为是libpurple的插件, 所以接口都和pidgin的msn protocol的plugin差不多, 照着msn的adium插件写应该不是难事吧. 不过奇怪为什么这么就了还没有人写一个出来, 莫非大家都不屑于? 其实个人觉得msn-pecan要比pidgin目前维护的msnp14好
顺便, 实在懒得自己动手的, 可以点这里下载: