kernelhcy / gtkqq Goto Github PK
View Code? Open in Web Editor NEWa qq client based on gtk+ uses webqq protocol
Home Page: http://code.google.com/p/gtk-qq/
License: GNU General Public License v3.0
a qq client based on gtk+ uses webqq protocol
Home Page: http://code.google.com/p/gtk-qq/
License: GNU General Public License v3.0
GtkQQ is a QQ client. It is written using gtk and based on the webqq protocol. The webqq protocol is based on the HTTP. Visit http://web.qq.com to see it. Maybe GtkQQ is a browser, whick can only visit http://web.qq.com. I think there is no copyright problem, because I just write a highly custommed broswer. src-| |--comm some common codes, such as log |--libqq the core library |--gui the gui version |--cli the command line version |--misc some resource files. such as pictures. |--tool some tool used to develop |--test the test codes.
ubuntu下使用 --enable-unity 编译,输入框太大,导致信息显示框比较小。即使用户自行调整,效果仍然不明显。建议把 --enable-unity 编译时文字输入框的高度适当调低
`$ gtkqq
** ERROR **: Create config dir /root/.gtkqq/ error!(gqqconfig.c, 246)
zsh: trace trap gtkqq
`
Why don't use g_get_home_dir()
?
gqqconfig.c: 在函数‘gqq_config_init’中:
gqqconfig.c:245:42: 错误:expected ‘)’ before ‘{’ token
gqqconfig.c:250:5: 错误:expected expression before ‘GString’
gqqconfig.c:253:22: 错误:‘facedir’未声明(在此函数内第一次使用)
gqqconfig.c:253:22: 附注:每个未声明的标识符在其出现的函数内只报告一次
make[4]: *** [gqqconfig.o] 错误 1
if(!g_file_test(cfgdir->str, G_FILE_TEST_EXISTS
&& -1 == g_mkdir(cfgdir->str, 0777)){ // a ")" is left out
g_error("Create config dir %s error!(%s, %d)"
, cfgdir->str, __FILE__, __LINE__);
})
有人说 ./autogen.sh 就发生错误,./autogen.sh: 行 4: aclocal: 未找到命令,其实是没安装执行 aclocal 所必需的软件包。
作者把需要安装的工具包列一列吧!要别人一个一个地去尝试会很痛苦的
RT,debian 是testing,桌面是xfce4。
[debian:gui]$./gtkqq
Last datebase version is 1002. (dao.c, 84)
(lt-gtkqq:30817): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(lt-gtkqq:30817): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(lt-gtkqq:30817): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(lt-gtkqq:30817): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(lt-gtkqq:30817): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(lt-gtkqq:30817): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(lt-gtkqq:30817): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_width: assertion `GDK_IS_PIXBUF (pixbuf)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_height: assertion `GDK_IS_PIXBUF (pixbuf)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_width: assertion `GDK_IS_PIXBUF (pixbuf)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_height: assertion `GDK_IS_PIXBUF (pixbuf)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_width: assertion `GDK_IS_PIXBUF (pixbuf)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_height: assertion `GDK_IS_PIXBUF (pixbuf)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_pixels: assertion `GDK_IS_PIXBUF (pixbuf)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_rowstride: assertion `GDK_IS_PIXBUF (pixbuf)' failed
(lt-gtkqq:30817): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_n_channels: assertion `GDK_IS_PIXBUF (pixbuf)' failed
段错误
[debian:gui]$
当鼠标悬停在托盘上,并出现tooltip时,终端会出现以下4个警告:
(gtkqq:11026): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
(gtkqq:11026): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
(gtkqq:11026): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
(gtkqq:11026): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
DEBUG : Get face image of 3265364823!(qqimg.c, 45)
DEBUG : Content-Length: 4854.(url.c, 326)
DEBUG : Content-Length: 12053.(url.c, 326)
段错误
DEBUG : GQQConfig getter: mute (gqqconfig.c, 115)
DEBUG : poll.(qqpoll.c, 305)
(gtkqq:17971): GLib-GObject-WARNING **: instance of invalid non-instantiatable type `(null)'
段错误
来自部分网友测试的结果
没有版权限制,而且还有开发人员写的文档,真的应该仔细研究研究!
可以和webqq用户互聊,也可以接受来自windows上的QQ用户的信息,但是向windows的qq发送信息时,对方收不到。
可以用 debug 调试吗?该看哪部分信息?
@wxjeacen , facepopupwindow, 他的parent是GtkTextView, 这个widget的继承关系是 GtkWidget-》GtkContainer-》GtkTextView, 其中并没有GtkWindow, 但是init函数把它当GtkWindow操作, GTK2只给了一个warning, 但是gtk3 就直接crash了,请问这是为什么啊
The size of array params is too small and overwriting it may smash the stack of function get_ptcz_skey().
I modify 300 to 500 to sovle the problem.
$ gtkqq
DEBUG : Open db connection to /home/guten/.gtkqq/gtkqq.db (dao.c, 81)
DEBUG : GQQConfig setter: info (gqqconfig.c, 146)
DEBUG : Start Send main loop...(msgloop.c, 36)
DEBUG : DEBUG : Start Get Number and face images main loop...(msgloop.c, 36)Start Get informain main loop...(msgloop.c, 36)
DEBUG : Start login... qqnum: [email protected], status: online (loginpanel.c, 314)
DEBUG : Run login state machine...(loginpanel.c, 317)
DEBUG : GQQConfig setter: qqnum (gqqconfig.c, 146)
DEBUG : GQQConfig setter: passwd (gqqconfig.c, 146)
DEBUG : GQQConfig setter: status (gqqconfig.c, 146)
DEBUG : Check veriry code...(qqlogin.c, 45)
DEBUG : check vc return: ptui_checkVC('0','!0GB');(qqlogin.c, 95)
DEBUG : Verify code : !0GB (qqlogin.c, 112)
DEBUG : Cookie ptvfsession=bfea698262ae42180d36810cbff2140a48146358080548f6e59301a94ca371c8007518a4e7122701abcb800a0b3e7eea (qqlogin.c, 32)
DEBUG : Get version...(qqlogin.c, 620)
DEBUG : Content-Length: 20.(url.c, 318)
DEBUG : Version: 1111141030(qqlogin.c, 264)
DEBUG : Login...(qqlogin.c, 634)
DEBUG : Get ptcz and skey...(qqlogin.c, 637)
DEBUG : Success.(qqlogin.c, 376)
DEBUG : Cookie ptcz=1d9b1e37157935df2681d141085f62988f5b6c3b7441111221d02ec22a1032b9 (qqlogin.c, 32)
DEBUG : Cookie skey=@FJrp2hy5m (qqlogin.c, 32)
DEBUG : Cookie ptwebqq=5e999da7c5ee9faab7d04b5f4bbe3d149e7b122a8b5c028c15543acd50bda7fb (qqlogin.c, 32)
DEBUG : Cookie ptuserinfo=477574656e205965 (qqlogin.c, 32)
DEBUG : Cookie uin=o0993829730 (qqlogin.c, 32)
DEBUG : Cookie ptisp=ctc (qqlogin.c, 32)
DEBUG : Cookie pt2gguin=o0993829730 (qqlogin.c, 32)
*** stack smashing detected ***: gtkqq terminated
======= Backtrace: =========
/lib/libc.so.6(__fortify_fail+0x37)[0x7f8939739cf7]
/lib/libc.so.6(__fortify_fail+0x0)[0x7f8939739cc0]
/usr/lib/libwebqq.so.0(+0xb751)[0x7f893a196751]
/usr/lib/libwebqq.so.0(qq_login+0x287)[0x7f893a196ef7]
gtkqq[0x413abf]
gtkqq[0x408a4e]
/usr/lib/libglib-2.0.so.0(g_main_context_dispatch+0x1dd)[0x7f8939eda84d]
/usr/lib/libglib-2.0.so.0(+0x45048)[0x7f8939edb048]
/usr/lib/libglib-2.0.so.0(g_main_loop_run+0x162)[0x7f8939edb582]
gtkqq[0x408acb]
/usr/lib/libglib-2.0.so.0(+0x6a076)[0x7f8939f00076]
/lib/libpthread.so.0(+0x7df0)[0x7f89399dedf0]
/lib/libc.so.6(clone+0x6d)[0x7f893972439d]
======= Memory map: ========
00400000-0041f000 r-xp 00000000 08:04 10786395 /usr/bin/gtkqq
0061e000-0061f000 r--p 0001e000 08:04 10786395 /usr/bin/gtkqq
0061f000-00620000 rw-p 0001f000 08:04 10786395 /usr/bin/gtkqq
01589000-0178b000 rw-p 00000000 00:00 0 [heap]
7f892c000000-7f892c024000 rw-p 00000000 00:00 0
7f892c024000-7f8930000000 ---p 00000000 00:00 0
7f8931333000-7f8931348000 r-xp 00000000 08:04 10768539 /usr/lib/libgcc_s.so.1
7f8931348000-7f8931548000 ---p 00015000 08:04 10768539 /usr/lib/libgcc_s.so.1
7f8931548000-7f8931549000 rw-p 00015000 08:04 10768539 /usr/lib/libgcc_s.so.1
7f8931549000-7f893154e000 r-xp 00000000 08:04 4587537 /lib/libnss_dns-2.14.1.so
7f893154e000-7f893174d000 ---p 00005000 08:04 4587537 /lib/libnss_dns-2.14.1.so
7f893174d000-7f893174e000 r--p 00004000 08:04 4587537 /lib/libnss_dns-2.14.1.so
7f893174e000-7f893174f000 rw-p 00005000 08:04 4587537 /lib/libnss_dns-2.14.1.so
7f893174f000-7f89317af000 rw-s 00000000 00:04 1638414 /SYSV00000000 (deleted)
7f89317af000-7f89317b0000 ---p 00000000 00:00 0
7f89317b0000-7f8931fb0000 rw-p 00000000 00:00 0
7f8931fb0000-7f8931ff3000 r-xp 00000000 08:04 10783124 /usr/lib/libibus-1.0.so.0.400.0
7f8931ff3000-7f89321f2000 ---p 00043000 08:04 10783124 /usr/lib/libibus-1.0.so.0.400.0
7f89321f2000-7f89321f4000 r--p 00042000 08:04 10783124 /usr/lib/libibus-1.0.so.0.400.0
7f89321f4000-7f89321f5000 rw-p 00044000 08:04 10783124 /usr/lib/libibus-1.0.so.0.400.0
7f89321f5000-7f89321f6000 rw-p 00000000 00:00 0
7f89321f6000-7f8932239000 r-xp 00000000 08:04 10753836 /usr/lib/libdbus-1.so.3.5.8
7f8932239000-7f8932438000 ---p 00043000 08:04 10753836 /usr/lib/libdbus-1.so.3.5.8
7f8932438000-7f8932439000 r--p 00042000 08:04 10753836 /usr/lib/libdbus-1.so.3.5.8
7f8932439000-7f893243a000 rw-p 00043000 08:04 10753836 /usr/lib/libdbus-1.so.3.5.8
7f893243a000-7f8932440000 r-xp 00000000 08:04 11670568 /usr/lib/gtk-2.0/2.10.0/immodules/im-ibus.so
7f8932440000-7f893263f000 ---p 00006000 08:04 11670568 /usr/lib/gtk-2.0/2.10.0/immodules/im-ibus.so
7f893263f000-7f8932640000 r--p 00005000 08:04 11670568 /usr/lib/gtk-2.0/2.10.0/immodules/im-ibus.so
7f8932640000-7f8932641000 rw-p 00006000 08:04 11670568 /usr/lib/gtk-2.0/2.10.0/immodules/im-ibus.so
7f8932641000-7f8933048000 r--p 00000000 08:04 4080845 /home/guten/.fonts/simsun.ttc
7f8933048000-7f8933049000 ---p 00000000 00:00 0
7f8933049000-7f8933849000 rw-p 00000000 00:00 0
7f8933849000-7f893384a000 ---p 00000000 00:00 0
7f893384a000-7f893404a000 rw-p 00000000 00:00 0
7f893404a000-7f893404b000 ---p 00000000 00:00 0
7f893404b000-7f893484b000 rw-p 00000000 00:00 0
7f893484b000-7f8934856000 r-xp 00000000 08:04 4591704 /lib/libnss_files-2.14.1.so
7f8934856000-7f8934a56000 ---p 0000b000 08:04 4591704 /lib/libnss_files-2.14.1.so
7f8934a56000-7f8934a57000 r--p 0000b000 08:04 4591704 /lib/libnss_files-2.14.1.so
7f8934a57000-7f8934a58000 rw-p 0000c000 08:04 4591704 /lib/libnss_files-2.14.1.so
7f8934a58000-7f8934c1d000 r--p 00000000 08:04 10754518 /usr/lib/locale/locale-archive
7f8934c1d000-7f8934c22000 r-xp 00000000 08:04 10761882 /usr/lib/libXdmcp.so.6.0.0
7f8934c22000-7f8934e21000 ---p 00005000 08:04 10761882 /usr/lib/libXdmcp.so.6.0.0
7f8934e21000-7f8934e22000 rw-p 00004000 08:04 10761882 /usr/lib/libXdmcp.so.6.0.0
7f8934e22000-7f8934e24000 r-xp 00000000 08:04 10762043 /usr/lib/libXau.so.6.0.0
7f8934e24000-7f8935023000 ---p 00002000 08:04 10762043 /usr/lib/libXau.so.6.0.0
7f8935023000-7f8935024000 rw-p 00001000 08:04 10762043 /usr/lib/libXau.so.6.0.0
7f8935024000-7f8935033000 r-xp 00000000 08:04 4591784 /lib/libbz2.so.1.0.6
7f8935033000-7f8935232000 ---p 0000f000 08:04 4591784 /lib/libbz2.so.1.0.6
7f8935232000-7f8935234000 rw-p 0000e000 08:04 4591784 /lib/libbz2.so.1.0.6
7f8935234000-7f893525b000 r-xp 00000000 08:04 10753817 /usr/lib/libexpat.so.1.5.2
7f893525b000-7f893545b000 ---p 00027000 08:04 10753817 /usr/lib/libexpat.so.1.5.2
7f893545b000-7f893545d000 r--p 00027000 08:04 10753817 /usr/lib/libexpat.so.1.5.2
7f893545d000-7f893545e000 rw-p 00029000 08:04 10753817 /usr/lib/libexpat.so.1.5.2
7f893545e000-7f8935471000 r-xp 00000000 08:04 4587534 /lib/libresolv-2.14.1.so
7f8935471000-7f8935671000 ---p 00013000 08:04 4587534 /lib/libresolv-2.14.1.so
7f8935671000-7f8935672000 r--p 00013000 08:04 4587534 /lib[1] 19186 abort gtkqq
myplatform is Arch Linux.
我已经port出一个能编译能用的GTK3版本,希望作者能给我们这些GTK3的用户行个方便
^[[34m^[[1mDEBUG : ^[[0mOpen db connection to /home/pcusername/.gtkqq/gtkqq.db (dao.c, 81)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mGQQConfig setter: info (gqqconfig.c, 151)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mStart Get informain main loop...(msgloop.c, 36)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mStart Get Number and face images main loop...(msgloop.c, 36)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mStart Send main loop...(msgloop.c, 36)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mStart login... qqnum: qq数字账号, status: hidden (loginpanel.c, 319)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mRun login state machine...(loginpanel.c, 322)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mGQQConfig setter: qqnum (gqqconfig.c, 151)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mGQQConfig setter: passwd (gqqconfig.c, 151)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mGQQConfig setter: status (gqqconfig.c, 151)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mGQQConfig setter: rempw (gqqconfig.c, 151)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCheck veriry code...(qqlogin.c, 45)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mresolving host by name: ptlogin2.qq.com
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mresolved: ptlogin2.qq.com (119.147.74.122)
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mconnecting to 119.147.74.122:80
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mDid not using proxy bypass ...(qqproxy.c,752)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mcheck vc return: ptui_checkVC('0','!16J');(qqlogin.c, 101)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mVerify code : !16J (qqlogin.c, 118)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCookie ptvfsession=00822f5a5ac9d1af4829e6b053ee6df9e72ef3ea9f8653081b9cc53aa3e0230c6fe617decb24dcd0b8e471d6c638f42e (qqlogin.c, 32)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mGet version...(qqlogin.c, 643)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mresolving host by name: ui.ptlogin2.qq.com
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mresolved: ui.ptlogin2.qq.com (121.14.95.108)
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mconnecting to 121.14.95.108:80
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mDid not using proxy bypass ...(qqproxy.c,752)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mContent-Length: 20.(url.c, 320)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mVersion: 2011120110(qqlogin.c, 275)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mLogin...(qqlogin.c, 657)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mGet ptcz and skey...(qqlogin.c, 660)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mresolving host by name: ptlogin2.qq.com
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mresolved: ptlogin2.qq.com (183.60.3.162)
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mconnecting to 183.60.3.162:80
^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mDid not using proxy bypass ...(qqproxy.c,752)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mSuccess.(qqlogin.c, 393)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCookie ptcz=290be0e9d154bdd21165ab2320abe95df939288a9a46392ecbd357edc2340f01 (qqlogin.c, 32)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCookie skey=@ZSBtBW0tZ (qqlogin.c, 32)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCookie ptwebqq=dc6355fcdd5575cb63ef4989080071a7ac3ea64371af89a98be34ae28d8fe42f (qqlogin.c, 32)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCookie ptuserinfo=e59ab4e58189e88faf (qqlogin.c, 32)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCookie uin=o0qq数字账号 (qqlogin.c, 32)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCookie ptisp=ctc (qqlogin.c, 32)^[[0m
^[[0m^[[34m^[[1mDEBUG : ^[[0mCookie pt2gguin=o0qq数字账号 (qqlogin.c, 32)^[[0m
^[[0m
Same with issue #20/21,#21 seems to fix the compile failure, but I think that ')' should be right after 'G_FILE_TEST_EXISTS' to close the 'g_file_test' function.
diff --git a/src/gui/gqqconfig.c b/src/gui/gqqconfig.c
index 7796514..ea56614 100644
--- a/src/gui/gqqconfig.c
+++ b/src/gui/gqqconfig.c
@@ -241,8 +241,8 @@ static void gqq_config_init(GQQConfig *self)
{
GString *cfgdir = g_string_new (g_get_home_dir ());
g_string_append (cfgdir, "/.gtkqq");
&& -1 == g_mkdir(cfgdir->str, 0777))){
&& -1 == g_mkdir(cfgdir->str, 0777)){
g_error("Create config dir %s error!(%s, %d)"
, cfgdir->str, **FILE**, **LINE**);
Block contacts or groups and receive images just like official QQ client.
啊,我60多个群,一打开这软件,就吵死。。。完全没法用了,一直一直在叫。。。。
我在自己电脑上编译了deb包,没有问题。然后使用 launchpad 上的ppa编译了deb包,运行出问题了:
DEBUG : Open db connection to /home/buildd/.gtkqq/gtkqq.db (dao.c, 81)
** ERROR **: Open database error. unable to open database file (dao.c, 89)
跟踪/断点陷阱
额,我的电脑上并没有 /home/buildd 这种目录啊!看了下 dao.c 80~82 行:
g_debug("Open db connection to "CONFIGDIR"gtkqq.db (%s, %d)"
, __FILE__, __LINE__);
gint retcode = sqlite3_open(CONFIGDIR"gtkqq.db", &db);
这个 CONFIGDIR 变量是否有点问题?我觉得应该取用户的家目录,而不能取编译目录。事实上,/home/buildd 这个目录是我在launchpad虚拟平台上编译时的目录,编译完了是要给其它人使用的
bug 重现方法:打开聊天窗口,开启中文输入法,随便输入几个英文,比如 GTKQQ,再按下回车键,按道理 GTKQQ 这几个字符就应该进入文本框(这应该是99%的中文输入法都能提供的功能)。但是怎么按回车键都没反应。
在其他地方输入没问题,在 openfetion、网页版qq都没问题。
我使用的是 fcitx 输入法,请使用其他输入法的人帮忙测试
有意思的是,pywebqq下按一次回车键会相当于两次,现在 gtkqq 这儿按回车键却没反应了
与好友聊天之后,好友离线,但是状态列表里却一直显示是在线的。这样子就容易误导了。有没有办法对方下线之后我这里就立即显示离线?
具体重现方法是这样:
先用帐号 A 登陆,不保存密码。然后退出
再用帐号B登陆,也不保存密码。然后退出
第三次,可以从下拉列表里面选择帐号A或B了,但这时密码会自动填充进去(太智能了)。这样,“不保存密码”那个选项就形同虚设了。
我今天编译时发现它不认 --enable-debug 选项了。在 configure.ac 文件里面也没有找到 --enable-debug 选项,最后编译出来的程序也没有 debug 功能。
因为这里不能发图片,请看链接 http://forum.ubuntu.org.cn/viewtopic.php?f=73&t=358133&start=75 第83楼截图,第86楼有对应的调试信息,
看那个截图也不是丢失了一个分组,而是错了一个分组,“My Friends”出现了两次。相当诡异的现象
我新开了个分支, 往GTK3 上 Port
基本能跑了,还有些小问题
qqtypes.c: In function 'qq_info_new':
qqtypes.c:26:5: error: 'g_mutex_new' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:271) [-Werror=deprecated-declarations]
qqtypes.c: In function 'qq_info_free':
qqtypes.c:95:5: error: 'g_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:273) [-Werror=deprecated-declarations]
cc1: all warnings being treated as errors
和 #39 是一个情况
UBUNTU 11.10环境下编译不能通过,提示错误如下:
testhttp.c
testhttp.c: 在函数‘main’中:
testhttp.c:44:2: 错误: 格式字符串不是一个字面字符串而且没有待格式化的实参 [-Werror=format-security]
cc1:所有的警告都被当作是错误
make[3]: *** [testhttp.o] 错误 1
make[3]:正在离开目录 /home/chenyj/Downloads/gtkqq/src/test' make[2]: *** [all-recursive] 错误 1 make[2]:正在离开目录
/home/chenyj/Downloads/gtkqq/src'
make[1]: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/home/chenyj/Downloads/gtkqq'
make: *** [all] 错误 2
我在ubuntu11.10和11.04上都编译成功了,但是在ubuntu11.10发现有一下问题,单人聊天没有问题,但是在群里面,群友无法显示,总是在刷(在ubuntu11.04上很正常显示),还有一个让我无语的问题就是,在ubuntu11.10上使用gtkqq两次ip都被学校拉入黑名单无法上网了,不知道怎么搞的,弄得我现在ubuntu11.10上都不敢用gtkqq了,请高手们帮忙看看怎么回事儿,我很有压力啊
群聊天时应该显示成员的昵称或备注,但据有人测试显示:现在显示的是一个陌生的号码,而且所有人显示的都是同一个陌生的号码。这个 bug 比较纠结,建议早点修复。
截图可见 http://forum.ubuntu.org.cn/viewtopic.php?f=73&t=358133 第22楼
--- gtkqq-0+gitf39d6202.orig/src/libqq/url.c 2011-11-25 18:17:35.537317364 +0800
+++ gtkqq-0+gitf39d6202/src/libqq/url.c 2011-11-25 18:19:26.869320170 +0800
@@ -387,7 +387,7 @@
}
}else{
g_debug("More chunks... Begin %d len %d %s(%s, %d)"
, chunkbegin, data -> len
, chunkbegin, (int)data -> len
, data -> str + chunkbegin
, **FILE**, **LINE**);
break;
作者们好,今天试用了gtkqq,还可以,就一点建议,状态栏的效果不是太好,而且在Unity里已经禁用托盘图标,而是把通讯工具全都放在“消息”那个图标下,用的indicator机制,作者可以考虑下这种方案,并不是很复杂。
第一个:
编译出来两个可执行文件,一个gtkqq,一个qq,那个qq不知道是干啥的,用不了。
信息好像发送不出去。有WARNING:
** WARNING ** : Unknown message type: 0 (qqsendmsg.c, 211)
** WARNING ** : Send message error!! (groupchatwindow.c, 314)
有时候会崩溃:
** WARNING ** : Read data ERROR!! code:8 msg:Connection reset by peer(url.c, 292)
[1] 3293 segmentation fault gtkqq
我没编译test部分的代码,没啥影响吧?
在 Ubuntu 12.04 上编译时发生错误:
qqtypes.c: In function 'qq_info_new':
qqtypes.c:26:5: error: 'g_mutex_new' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:271) [-Werror=deprecated-declarations]
qqtypes.c: In function 'qq_info_free':
qqtypes.c:94:5: error: 'g_mutex_free' is deprecated (declared at /usr/include/glib-2.0/glib/deprecated/gthread.h:273) [-Werror=deprecated-declarations]
cc1: all warnings being treated as errors
大概原因:g_mutex_new()函数在新版系统中已被废弃
http://developer.gnome.org/glib/2.31/glib-Deprecated-Thread-APIs.html
请换成别的吧,离Ubuntu12.04发布也不到五个月时间了~
鉴于把 gtkqq port 到老版本的呼声极高,我自己在 ubuntu 10.04 上试了一下,首先把 configure.ac 里面的 PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.24] 改成 PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.20], 然后在 configure 时出错了,(已经安装 zlib1g-dev,版本是1.2.3.3)
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for ZLIB... configure: error: Package requirements (zlib >= 1.2) were not met:
No package 'zlib' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables ZLIB_CFLAGS
and ZLIB_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
看了一下,Ubuntu 10.04 的安装位置是:
/.
/usr
/usr/include
/usr/include/zconf.h
/usr/include/zlib.h
/usr/include/zlibdefs.h
/usr/lib
/usr/lib/libz.a
/usr/lib/libz.so
而 Ubuntu 11.10 的安装位置却是:
/.
/usr
/usr/include
/usr/include/zconf.h
/usr/include/zlib.h
/usr/include/zlibdefs.h
/usr/lib
/usr/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu/libz.a
/usr/lib/i386-linux-gnu/libz.so
/usr/lib/i386-linux-gnu/pkgconfig
/usr/lib/i386-linux-gnu/pkgconfig/zlib.pc
后者能编译,前者就不行
Why don't remove -Werror flag?
PS: too many warnings! please fix them!
Then,
$ gtkqq
** ERROR **: Open database error. unable to open database file (dao.c, 89)
zsh: trace trap gtkqq
It's so short that I can't understand what happened.
PS: GTK3 is more beatiful than GTK2.
如此可以很容易的实现主题功能。
其实我并没有运行成功(已通过编译,但无法运行),所以尚且不知道是否有消息通知功能。但看到 todo 文件里面 done 和 todo 列表里都没有列出来。这个功能应该也不难实现,随便参考某个IM的代码,把系统内置的消息通知功能带出来就OK了。基本上,todo里面的功能再加上该功能,这个QQ就很完美了。
ZLIB,' ./configure: line 10956:
PKG_CHECK_MODULES(ZLIB, zlib >= 1.2,'can't use input method.
GTK2 app is ugly in GNOME3. Please use GTK3 instead.
Platform: Arch Linux x86_64
DE: GNOME 3.2
编译时提示无m4目录,需要手动创建m4目录来进行编译
如题,我使用的是https://www.runoz.us VPN,每次登录的时候都会要求输入验证码,但还是不能登录
wind@wind-netbook:~/workspace/gtkqq$ /usr/bin/gtkqq
DEBUG : Open db connection to /home/wind/.gtkqq/gtkqq.db (dao.c, 168)
DEBUG : Create all tables (dao.c, 147)
Last datebase version is -1. (dao.c, 84)
Update datebase from version 1001 to version 1002 (dao.c, 39)
DEBUG : GQQConfig setter: info (gqqconfig.c, 156)
DEBUG : Start Send main loop...(msgloop.c, 36)
DEBUG : Start Get informain main loop...(msgloop.c, 36)
DEBUG : Start Get Number and face images main loop...(msgloop.c, 36)
DEBUG : Start login... qqnum: 331843672, status: online (loginpanel.c, 344)
DEBUG : Run login state machine...(loginpanel.c, 347)
DEBUG : Check veriry code...(qqlogin.c, 45)
DEBUG : GQQConfig setter: qqnum (gqqconfig.c, 156)
DEBUG : GQQConfig setter: passwd (gqqconfig.c, 156)
DEBUG : GQQConfig setter: status (gqqconfig.c, 156)
DEBUG : GQQConfig setter: rempw (gqqconfig.c, 156)
DEBUG : The message body is chunked.(url.c, 337)
DEBUG : check vc return: ptui_checkVC('1','434c340aa13a36fd843ab9cf2f5fb967699de5178fa0a2c3');(qqlogin.c, 109)
DEBUG : We need verify code image! vc_type: 434c340aa13a36fd843ab9cf2f5fb967699de5178fa0a2c3 (qqlogin.c, 145)
DEBUG : Get verify code image...(qqlogin.c, 876)
DEBUG : Content-Length: 2803.(url.c, 326)
DEBUG : vc content type: image/jpeg(qqlogin.c, 218)
DEBUG : Verify code image file type: jpeg len 2803 (qqlogin.c, 230)
DEBUG : Create image file : /home/wind/.gtkqq/verifycode.jpeg (qqutils.c, 33)
DEBUG : Get version...(qqlogin.c, 671)
DEBUG : Content-Length: 22.(url.c, 326)
DEBUG : Version: 201112282038(qqlogin.c, 293)
DEBUG : Login...(qqlogin.c, 685)
DEBUG : Get ptcz and skey...(qqlogin.c, 688)
DEBUG : The message body is chunked.(url.c, 337)
** WARNING ** : Wrong input!(qqlogin.c, 450)
** WARNING ** : Login error! Error occured! Please try again. (loginpanel.c, 122)
DEBUG : Login error... (loginpanel.c, 236)
DEBUG : Show login panel.(loginpanel.c, 239)
运行 ./autogen.sh,前面基本正常,最后报错信息:
configure: creating ./config.status
config.status: error: cannot find input file: `Makefile.in'
怎么解决?
编译成功,运行 gtkqq,出现登陆界面,输入用户名、密码,保存,登陆,崩溃退出
$ gtkqq
*** stack smashing detected ***: gtkqq terminated
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x45)[0xb6ec58d5]
/lib/i386-linux-gnu/libc.so.6(+0xe7887)[0xb6ec5887]
/usr/lib/libwebqq.so.0(+0x17491)[0xb702e491]
/usr/lib/libwebqq.so.0(+0xad65)[0xb7021d65]
/usr/lib/libwebqq.so.0(qq_login+0x338)[0xb7022658]
gtkqq[0x805b27a]
gtkqq[0x804e697]
/lib/i386-linux-gnu/libglib-2.0.so.0(+0x3f110)[0xb7077110]
/lib/i386-linux-gnu/libglib-2.0.so.0(g_main_context_dispatch+0x1df)[0xb707b25f]
/lib/i386-linux-gnu/libglib-2.0.so.0(+0x43990)[0xb707b990]
/lib/i386-linux-gnu/libglib-2.0.so.0(g_main_loop_run+0x14b)[0xb707bf9b]
gtkqq[0x804e72d]
/lib/i386-linux-gnu/libglib-2.0.so.0(+0x6a5f4)[0xb70a25f4]
/lib/i386-linux-gnu/libpthread.so.0(+0x6d31)[0xb6f60d31]
/lib/i386-linux-gnu/libc.so.6(clone+0x5e)[0xb6eb00ce]
======= Memory map: ========
08048000-08067000 r-xp 00000000 08:05 526765 /usr/local/bin/gtkqq
08067000-08068000 r--p 0001e000 08:05 526765 /usr/local/bin/gtkqq
08068000-08069000 rw-p 0001f000 08:05 526765 /usr/local/bin/gtkqq
0987b000-09a3e000 rw-p 00000000 00:00 0 [heap]
b31e3000-b31ff000 r-xp 00000000 08:05 916667 /lib/i386-linux-gnu/libgcc_s.so.1
b31ff000-b3200000 r--p 0001b000 08:05 916667 /lib/i386-linux-gnu/libgcc_s.so.1
b3200000-b3201000 rw-p 0001c000 08:05 916667 /lib/i386-linux-gnu/libgcc_s.so.1
b3201000-b3206000 r-xp 00000000 08:05 916685 /lib/i386-linux-gnu/libnss_dns-2.13.so
b3206000-b3207000 r--p 00004000 08:05 916685 /lib/i386-linux-gnu/libnss_dns-2.13.so
b3207000-b3208000 rw-p 00005000 08:05 916685 /lib/i386-linux-gnu/libnss_dns-2.13.so
b3208000-b320a000 r-xp 00000000 08:05 915779 /lib/libnss_mdns4_minimal.so.2
b320a000-b320b000 r--p 00001000 08:05 915779 /lib/libnss_mdns4_minimal.so.2
b320b000-b320c000 rw-p 00002000 08:05 915779 /lib/libnss_mdns4_minimal.so.2
b320c000-b326c000 rw-s 00000000 00:04 7864333 /SYSV00000000 (deleted)
b326c000-b32b3000 r-xp 00000000 08:05 916656 /lib/i386-linux-gnu/libdbus-1.so.3.5.7
b32b3000-b32b4000 r--p 00046000 08:05 916656 /lib/i386-linux-gnu/libdbus-1.so.3.5.7
b32b4000-b32b5000 rw-p 00047000 08:05 916656 /lib/i386-linux-gnu/libdbus-1.so.3.5.7
b32b5000-b32b8000 r-xp 00000000 08:05 402663 /usr/lib/libfcitx-utils.so.0.1.0
b32b8000-b32b9000 r--p 00002000 08:05 402663 /usr/lib/libfcitx-utils.so.0.1.0
b32b9000-b32ba000 rw-p 00003000 08:05 402663 /usr/lib/libfcitx-utils.so.0.1.0
b32ba000-b32dd000 r-xp 00000000 08:05 397778 /usr/lib/i386-linux-gnu/libdbus-glib-1.so.2.2.0
b32dd000-b32de000 r--p 00022000 08:05 397778 /usr/lib/i386-linux-gnu/libdbus-glib-1.so.2.2.0
b32de000-b32df000 rw-p 00023000 08:05 397778 /usr/lib/i386-linux-gnu/libdbus-glib-1.so.2.2.0
b32f7000-b32fd000 r-xp 00000000 08:05 402726 /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules/im-fcitx.so
b32fd000-b32fe000 r--p 00005000 08:05 402726 /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules/im-fcitx.so
b32fe000-b32ff000 rw-p 00006000 08:05 402726 /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules/im-fcitx.so
b32ff000-b335f000 rw-s 00000000 00:04 7831562 /SYSV00000000 (deleted)
b335f000-b3364000 r--p 00000000 08:05 801897 /usr/share/locale-langpack/zh_CN/LC_MESSAGES/gdk-pixbuf.mo
b3364000-b3368000 r-xp 00000000 08:05 398302 /usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.so
b3368000-b3369000 r--p 00003000 08:05 398302 /usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.so
b3369000-b336a000 rw-p 00004000 08:05 398302 /usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.so
b336a000-b3387000 r--s 00000000 08:05 661345 /usr/share/mime/mime.cache
b3387000-b3389000 r--s 00000000 08:08 2490442 /home/bill/.local/share/mime/mime.cache
b3389000-b33b9000 rw-p 00000000 00:00 0
b33b9000-b38aa000 r--p 00000000 08:05 1178854 /usr/share/fonts/truetype/wqy/wqy-microhei.ttc
b38aa000-b395a000 r--p 00000000 08:05 1178795 /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf
b395a000-b395c000 r-xp 00000000 08:05 398401 /usr/lib/i386-linux-gnu/pango/1.6.0/modules/pango-basic-fc.so
b395c000-b395d000 r--p 00001000 08:05 398401 /usr/lib/i386-linux-gnu/pango/1.6.0/modules/pango-basic-fc.so
b395d000-b395e000 rw-p 00002000 08:05 398401 /usr/lib/i386-linux-gnu/pango/1.6.0/modules/pango-basic-fc.so
b395e000-b395f000 r--s 00000000 08:05 666820 /var/cache/fontconfig/c05880de57d1f5e948fdfacc138775d9-le32d4.cache-3
b395f000-b3965000 r--s 00000000 08:05 666817 /var/cache/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-le32d4.cache-3
b3965000-b3967000 r--s 00000000 08:05 666818 /var/cache/fontconfig/99e8ed0e538f840c565b6ed5dad60d56-le32d4.cache-3
b3967000-b396a000 r--s 00000000 08:05 666828 /var/cache/fontconfig/e383d7ea5fbe662a33d9b44caf393297-le32d4.cache-3
b396a000-b396e000 r--s 00000000 08:05 666819 /var/cache/fontconfig/a755afe4a08bf5b97852ceb7400b47bc-le32d4.cache-3
b396e000-b3972000 r--s 00000000 08:05 674693 /var/cache/fontconfig/515ca1ebc4b18308bea979be5704f9db-le32d4.cache-3
b3972000-b3979000 r--s 00000000 08:05 673763 /var/cache/fontconfig/6d41288fd70b0be22e8c3a91e032eec0-le32d4.cache-3
b3979000-b3984000 r--s 00000000 08:05 666803 /var/cache/fontconfig/0f34bcd4b6ee430af32735b75db7f02b-le32d4.cache-3
b3984000-b39a6000 r--s 00000000 08:05 674696 /var/cache/fontconfig/365b55f210c0a22e9a19e35191240f32-le32d4.cache-3
b39a6000-b39b3000 r--s 00000000 08:05 666824 /var/cache/fontconfig/d52a8644073d54c13679302ca1180695-le32d4.cache-3
b39b3000-b39b9000 r--s 00000000 08:05 674692 /var/cache/fontconfig/153bb866d4d26e7cd19eee2129f8d8d2-le32d4.cache-3
b39b9000-b39ba000 ---p 00000000 00:00 0
b39ba000-b41ba000 rw-p 00000000 00:00 0
b41ba000-b41bb000 ---p 00000000 00:00 0
b41bb000-b49bb000 rw-p 00000000 00:00 0
b49bb000-b49d3000 r-xp 00000000 08:05 395340 /usr/lib/libdbusmenu-glib.so.4.0.5
b49d3000-b49d4000 r--p 00017000 08:05 395340 /usr/lib/libdbusmenu-glib.so.4.0.5
b49d4000-b49d5000 rw-p 00018000 08:05 395340 /usr/lib/libdbusmenu-glib.so.4.0.5
b49d5000-b49e5000 r-xp 00000000 08:05 395342 /usr/lib/libdbusmenu-gtk.so.4.0.5
b49e5000-b49e6000 ---p 00010000 08:05 395342 /usr/lib/libdbusmenu-gtk.so.4.0.5
b49e6000-b49e7000 r--p 00010000 08:05 395342 /usr/lib/libdbusmenu-gtk.so.4.0.5
b49e7000-b49e8000 rw-p 00011000 08:05 395342 /usr/lib/libdbusmenu-gtk.so.4.0.5
b49e9000-b49ec000 r--s 00000000 08:05 666805 /var/cache/fontconfig/2cd17615ca594fa2959ae173292e504c-le32d4.cache-3
b49ec000-b49ed000 r--s 00000000 08:05 666829 /var/cache/fontconfig/e7071f4a29fa870f4323321c154eba04-le32d4.cache-3
b49ed000-b4a00000 r--p 00000000 08:05 801799 /usr/share/locale-langpack/zh_CN/LC_MESSAGES/glib20.mo
b4a00000-b4a2a000 rw-p 00000000 00:00 0
b4a2a000-b4b00000 ---p 00000000 00:00 0
b4b00000-b4b04000 r--s 00000000 08:05 666814 /var/cache/fontconfig/6eb3985aa4124903f6ff08ba781cd364-le32d4.cache-3已放弃
订阅有两种办法:
1、登录 https://groups.google.com/group/gtkqq-dev ,然后,点击加入或退出就可以订阅或退出该列表了。
2、如果上不来上面的网站,可以邮件订阅的。
订阅:发邮件到 :[email protected]
退订:发邮件到:[email protected]
3、欢迎所有支持、对gtkqq的用户加入,尤其是该项目维护者!~~
感谢 windwhinny 的 commit,现在在 Ubuntu 上输入区已经正常,不使用 --enable-unity 选项也可以了
gtkqq 现在已经相对稳定了, 但是我不确定还有没有其他的问题, 欢迎大家使用然后提供 bug信息, 如果有懂gdb的朋友, crash 的时候可以把 core文件发过来.
现在正在考虑其他功能的问题, 文件传输等等.
diff --git a/src/gui/tray.c b/src/gui/tray.c
index dff1ea1..e7bf08e 100644
--- a/src/gui/tray.c
+++ b/src/gui/tray.c
@@ -89,8 +89,10 @@ static void qq_tray_popup_menu(GtkStatusIcon *tray, guint but
{
QQTrayPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE(tray, qq_tray_get_type()
, QQTrayPriv);
- gtk_menu_popup(GTK_MENU(priv -> popupmenu), NULL, NULL, NULL
- , NULL, button, active_time);
+ gtk_menu_popup(GTK_MENU(priv -> popupmenu),
+ NULL, NULL,
+ gtk_status_icon_position_menu, tray,
+ button, active_time);
}
在gnome-shell中,没有增加gtk_status_icon_position_menu这个函数方法,弹出的菜单会位于状态栏的下面。最后两个菜单非常不容易点到。。
I think a QQ client under Linux with the capability of "send file/send offline file" would be possibly one of most desirable feature for Linux users' desperate requirement.
The old crap "linuxqq" or "libqq2010" which still developing either lacks this feature. I really hope "gtkqq" can accomplish the magnificent feat.
@wxjeacen , facepopupwindow, 他的parent是GtkTextView, 这个widget的继承关系是 GtkWidget-》GtkContainer-》GtkTextView, 其中并没有GtkWindow, 但是init函数把它当GtkWindow操作, GTK2只给了一个warning, 但是gtk3 就直接crash了,请问这是为什么啊
好友上线时,头像会由暗变亮;好友离线时,头像却还是亮的,没有变暗。估计是代码里面什么地方有问题吧。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.