clementine-player / clementine Goto Github PK
View Code? Open in Web Editor NEW:tangerine: Clementine Music Player
Home Page: https://www.clementine-player.org/
License: GNU General Public License v3.0
:tangerine: Clementine Music Player
Home Page: https://www.clementine-player.org/
License: GNU General Public License v3.0
From ceceron on February 27, 2010 15:39:35
As I see, there will be covers supported in 0.2. It would nice if the
notification could contain a cover of a current track and something like a
empty cd-case in other case :)
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=39
From Grinder13 on February 23, 2010 20:53:11
Is it possible to add global shortcuts for mute, play/pause, etc. as in
Amarok? Thank you...
George
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=6
From davidsansome on February 25, 2010 15:40:13
If you've added a sequence of untagged tracks to the playlist you should be
able to select them all, right click on them, and assign track numbers in
order.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=25
From davidsansome on February 25, 2010 15:38:26
These should behave as in Amarok 1.4, and make the selected items play
before others.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=24
From TimonTheMeerkat on March 01, 2010 21:58:33
What steps will reproduce the problem? 1. Add track to the playlist
2. Click play
3. Wait till end of the track What is the expected output? What do you see instead? Clementine start to play track, but skip/cut one-two first seconds of the
track. At end of the track he display "0:-1" on the right time counter
(time till end of the track) and crash (segmantation fault) with this
backtrace:
(gdb) backtrace
#0 0x362b4c92 in ?? () from /lib/libc.so.7
#1 0x3c405600 in ?? ()
#2 0x3cb062c0 in JCR_LIST () from /usr/local/lib/
libpulsecommon-0.9.21.so
#3 0xbf2f7d98 in ?? ()
#4 0x3cadd943 in pa_run_once (control=0x3b367000, func=0x3b3b5698
<JCR_LIST+4>) at pulsecore/once.c:91
#5 0x362b5cca in free () from /lib/libc.so.7
#6 0x08109b6e in scope_dispose (this=0x3c6222c0) at xine-scope.c:116
#7 0x0810996d in scope_port_close (port_gen=0x3d3fcca0,
stream=0x3d44e200) at xine-scope.c:62
#8 0x41bfac76 in mad_dispose (this_gen=0xa5a5a5a5) at
xine_mad_decoder.c:338
#9 0x33f198f2 in _x_free_audio_decoder (stream=0x3d44e200, ad=0x3b731000)
at load_plugins.c:2060
#10 0x33f1e978 in audio_decoder_loop (stream_gen=0x3d44e200) at
audio_decoder.c:94
#11 0x3623228f in ?? () from /lib/libthr.so.3
#12 0x3d44e200 in ?? ()
#13 0x00000000 in ?? () What version of the product are you using? On what operating system? r296 on FreeBSD 9-CURRENT, KDE 4.3.5 Please provide any additional information below. Version 0.1 don't have this error and work perfectly
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=47
From [email protected] on March 02, 2010 08:34:14
What steps will reproduce the problem? 1. Build clementine. What is the expected output? What do you see instead? I expect it can build without liblastfm.
I see it can not =( What version of the product are you using? On what operating system? Version last, from SVN. Both, Linux & Windows. Please provide any additional information below. I wrote about this on qt-apps, and repeat here.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=49
From okeeblow on February 25, 2010 22:49:35
The media player remote interface specification is a cross-player
specification for a DBUS interface: http://wiki.xmms2.xmms.se/wiki/MPRIS Adding support will allow interoperability with MPRIS-supporting software
such as Pidgin MusicTracker, AMSN Music Plugin, Panflute, mpris-remote, and
CoverGloobus.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=29
From danovskyjan on February 27, 2010 22:44:12
Please add widget with lyrics.wikia.com support
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=41
From singalen on February 24, 2010 10:23:46
Version:
0.1 on Windows XP SP3 ENG
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=15
From theangeltabris on February 26, 2010 04:32:55
I think that Amarok2 uses DBus for this.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=30
From simon.hearne on February 23, 2010 21:08:26
What steps will reproduce the problem? 1. Start playing any file
2. Try to skip by clicking on the progress slider What is the expected output? What do you see instead? Expect the slider to skip to the cursor at least make a jump of 30secs for
example. Instead, slider does not move, or flicks back to original position. What version of the product are you using? On what operating system? 0.1 under Win 7
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=9
From digital.stream.of.mind on February 27, 2010 04:23:38
cl: error D8021: invalid numeric argument '/Werror=non-virtual-dtor'
trunk version
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=36
From [email protected] on February 22, 2010 22:57:45
Can you offer people the chance to enter any host name they wish for
scrobbling? So, if people wish to use turtle.libre.fm instead of
post.audioscrobbler.com they can?
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=1
From Grinder13 on February 23, 2010 22:26:00
Adding support for Amarok 1.4/2.x scripts and plugins would enhace
clementine's functionality...
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=12
From simon.hearne on February 23, 2010 20:55:21
What steps will reproduce the problem? 1. Running Clementine for Windows
2. Change volume. What is the expected output? What do you see instead? The notification should fade out after the time set in the global settings,
but it will not disappear until explicitly closed. What version of the product are you using? On what operating system? Using 0.1 on Win 7 and XP
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=7
From Grinder13 on February 23, 2010 22:18:36
Is it possible to add OSD functionality as in Amarok? Thanx in advance...
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=11
From Askel.RU on February 27, 2010 00:50:27
Please add DAAP/iTunes support
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=34
From silverwraithii on March 01, 2010 20:00:46
Dependency versions:
qt 4.6.2
xine-lib 1.1.18 (Also tested with 1.1.17)
liblastfm 0.3.0
taglib 1.6.1
cairo 1.8.8
libnotify 0.4.5
Compiled on x86-64 Arch Linux with gcc 4.4.3 and boost 1.41.0.
During playback of any format, Clementine uses an entire CPU core. Amarok
1.4 doesn't suffer from this issue with the same Xine version.
Output from playing and stopping a track:
void OSD::SongChanged(const Song&)
Before xine_open() *****
After xine_open() *****
Metadata received.
Stopping
Anecdotal, but potentially of use: Approximately a second after starting
playback, there's a momentary playback pause. Dragging the time indicator
will usually hang Clementine.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=46
From Grinder13 on February 23, 2010 22:17:17
Currently, there is no "add stream" and "add media" functionality. Only
from the library and radio tabs is possible to add new items to the playlist.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=10
From john.maguire on March 01, 2010 13:47:51
Add support for loading a local or remote XSPF file. Should be pretty easy
as we already do this for last.fm.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=42
From non7top on February 26, 2010 20:16:20
please add widget with information on currently playing sonf, similar to
the one from amarok 1.4.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=32
From wulfsolter on February 27, 2010 05:36:57
What steps will reproduce the problem? 1. Dark QT4/GTK Themes with white text on dark windows etc What is the expected output? What do you see instead? Visible playlist. Instead uses QT4/GTK text colour, white background, and
playlist appears as white-on-white. What version of the product are you using? On what operating system? Latest build, Archlinux. Reproducable on Ubuntu/Gentoo Please provide any additional information below. Maybe easy fix would be for playlist 'textbox' to use GTK/QT4 background
colour?
Attached screenshot shows a full playlist, only the selected track is
visible, rest are white-on-white
Attachment: Clementine - Theme Issue Screenshot.png
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=37
From shugod on February 27, 2010 07:59:26
Add proxy support to play Last.fm radio.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=38
From john.maguire on February 24, 2010 15:43:28
Show album covers grabbed from last.fm
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=17
From Alx.66q on March 03, 2010 01:30:33
version: clementine_0.1-6_i386.deb, Linux Mint 8, Gnome: 2.28.1, Qt: 4.5.2
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=50
From sanjay.mortimer on February 24, 2010 00:26:01
Biggest feature holding me back from switching to this awesome QT4 app is
the lack of the search/filter bar.
Other than that, this thing is awesome and i look forward to seeing it
mature into what i hoped Amarok2 would be.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=13
From john.maguire on February 25, 2010 11:30:31
Store passwords securely.
Mac: Keychain
Linux: Gnome-keyring & KWallet
Win32: Use Chrome's implementation
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=19
From ceceron on February 26, 2010 20:15:46
When I turn the volume up, Clementine notifes me about all changes, let me
explain:
when changing from 100% to 50%, I receive first notification Volume 99%,
next 98%, next 97%... etc. Sometimes it jumps over 3% or 5% percent at once ;)
KDE 4.4
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=31
From davidsansome on February 25, 2010 19:46:16
It would be nice if you could select some tracks in Clementine and burn them
to a CD using K3b or the windows burning framework.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=27
From ceceron on February 25, 2010 12:47:53
There should big a nice button for changing play mode from simple to repeat
playlist/repeat album/random track/random track from album.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=20
From davidsansome on February 24, 2010 12:48:23
Clementine doesn't support .oga, ape, or ac3 formats on Windows, but WMP
does.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=16
From okeeblow on February 25, 2010 22:32:08
A native implementation for reading ReplayGain tags is preferable to an
Amarok 1.4-style script because it eliminates the lag between a track
playing and the volume adjusting.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=28
From john.maguire on February 25, 2010 19:08:49
Support parsing files & URLs from an m3u file.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=26
From langos.p on March 01, 2010 14:44:50
Please add podcast support and it will be fantastic player and very good
looking too.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=44
From aladaris on February 24, 2010 03:31:51
Can't play some files (i think that it can be related with the special
characters). They are mp3 files.
An Error message pop up:"Can't find the specified module (0x8007007e)" or
in my spanish Windows: "No se puede encontrar el módulo especificado
(0x8007007e)"
Clementine 0.1-6 on Windows 7 Ultimate.
Thanks for this great player :)
Attachment: Error_Clementine.png
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=14
From gatraun on February 23, 2010 14:38:58
What steps will reproduce the problem? 1. Start clementine.
2. Play (flac) file
What do you see instead?
In htop I see, how clementine process starts to consume memory from approx
48M to infinity. Memory consumption was raising while playing, and
continued after player stopped (I had 1 track in playlist). I closed
program when it used 140M. What version of the product are you using? On what operating system? 0.1.
Gentoo linux, kernel 2.6.32-gentoo- r3 , Qt 4.6.2, KDE SC4.4. Please provide any additional information below.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=5
From alexchang42 on March 02, 2010 02:27:17
What steps will reproduce the problem? 1. Add music to library
2. Play music
3. Get error What is the expected output? What do you see instead? "Pins cannont connect due to not supporting the same transport." What version of the product are you using? On what operating system? 0.1 Windows Please provide any additional information below.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=48
From thegodlikehobo on February 23, 2010 03:40:46
What steps will reproduce the problem? 1. Set a unicode tag (e.g. ID3, AAC metadata)
2. See set info turn into craziness
For example, when I attempt to set 絢香 as tag for a file, Clementine
writes 絢� What version of the product are you using? On what operating system? Clementine 0.1-1 (via clementine_0.1-1_amd64.deb)
Linux
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=4
From oreolek on February 27, 2010 02:55:23
Please add 'Play random' button instead of 'Shuffle playlist'
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=35
From k0009000 on March 01, 2010 13:53:52
I miss that Amarok button =)
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=43
From davidsansome on February 24, 2010 19:35:37
Clementine should properly group various artist albums together. Amarok 1.4
did this well - maybe steal its code.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=18
From silverwraithii on March 01, 2010 19:40:04
I haven't looked at the code, but it appears that a full library scan is
done every startup.
This behaviour doesn't seem scalable; with 40000 audio files in my library
directories, it results in Clementine saturating a CPU core for
approximately 5 minutes.
I think the ideal approach is to store mtime in the database, only
descending into a directory if its mtime is newer than what's stored.
Tangentially, it'd be nice to have the ability to start or pause a scan at
will via a menu option.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=45
From non7top on February 26, 2010 20:19:13
Please add tabbed playlist support as seen in foobar of falf. Juk also has
an implementation of this, but slightly different. Please add any of this.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=33
From judge.mentok.the.mindtaker on February 23, 2010 02:07:12
What steps will reproduce the problem? 1. try to launch clementine on snow leopard 2. 3. What is the expected output? What do you see instead? Expected app to run, instead we get the crash info window (see below) What version of the product are you using? On what operating system? Using latest .dmg (1.1-3) on OSX 10.6.2 Please provide any additional information below. when running the binary directly from the commandline, I get:
$ ./clementine
'Bringing joy to small mexican gerbils, a few weeks at a time.'
Bus error
Process: clementine [6500]
Path: /Applications/clementine.app/Contents/MacOS/./clementine
Identifier: com.davidsansome.clementine
Version: 0.1 (???)
Code Type: X86 (Native)
Parent Process: bash [4148]
Date/Time: 2010-02-22 17:04:44.361 -0800
OS Version: Mac OS X 10.6.2 (10C540)
Report Version: 6
Interval Since Last Report: 4772427 sec
Crashes Since Last Report: 44
Per-App Interval Since Last Report: 13 sec
Per-App Crashes Since Last Report: 4
Anonymous UUID: 549F0888-7813-413E-B3E5-
50CDFE1A9280
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x000000000000001d
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 com.davidsansome.clementine 0x0005825d
SimpleTreeModel::ItemToIndex(RadioItem_) const + 13
1 com.davidsansome.clementine 0x00059c16
SimpleTreeModel::index(int, int, QModelIndex const&) const +
102
2 QtGui 0x009b4117 QTreeView::isRowHidden(int,
QModelIndex const&) const + 71
3 libqtaccessiblewidgets.dylib 0x1729dde7 qt_plugin_instance +
63303
4 QtGui 0x00411b8a
QAccessible::updateAccessibility(QObject_, int, QAccessible::Event) + 458
5 QtGui 0x0047b6fa QWidgetPrivate::show_helper() +
330
6 QtGui 0x0047bd73 QWidget::setVisible(bool) + 1139
7 QtGui 0x0047b558
QWidgetPrivate::showChildren(bool) + 328
8 QtGui 0x0047b60f QWidgetPrivate::show_helper() + 95
9 QtGui 0x0047bd73 QWidget::setVisible(bool) + 1139
10 QtGui 0x0047b558
QWidgetPrivate::showChildren(bool) + 328
11 QtGui 0x0047b60f QWidgetPrivate::show_helper() + 95
12 QtGui 0x0047b578
QWidgetPrivate::showChildren(bool) + 360
13 QtGui 0x0047b60f QWidgetPrivate::show_helper() + 95
14 QtGui 0x0047b578
QWidgetPrivate::showChildren(bool) + 360
15 QtGui 0x0047b60f QWidgetPrivate::show_helper() + 95
16 QtGui 0x0047bd73 QWidget::setVisible(bool) + 1139
17 com.davidsansome.clementine 0x0000bb88 void*
qMetaTypeConstructHelper<QList >(QList const*) + 14968
18 com.davidsansome.clementine 0x000072b6 0x1000 + 25270
19 com.davidsansome.clementine 0x0000699b 0x1000 + 22939
20 com.davidsansome.clementine 0x000068c9 0x1000 + 22729
Thread 1: Dispatch queue: com.apple.libdispatch-manager
0 libSystem.B.dylib 0x953f20ea kevent + 10
1 libSystem.B.dylib 0x953f2804 _dispatch_mgr_invoke + 215
2 libSystem.B.dylib 0x953f1cc3 _dispatch_queue_invoke + 163
3 libSystem.B.dylib 0x953f1a68 _dispatch_worker_thread2 +
234
4 libSystem.B.dylib 0x953f14f1 _pthread_wqthread + 390
5 libSystem.B.dylib 0x953f1336 start_wqthread + 30
Thread 2:
0 libSystem.B.dylib 0x953f1182 __workq_kernreturn + 10
1 libSystem.B.dylib 0x953f1718 _pthread_wqthread + 941
2 libSystem.B.dylib 0x953f1336 start_wqthread + 30
Thread 3:
0 libSystem.B.dylib 0x953ea856 select$DARWIN_EXTSN + 10
1 com.apple.CoreFoundation 0x950a9ddd __CFSocketManager +
1085
2 libSystem.B.dylib 0x953f8fbd _pthread_start + 345
3 libSystem.B.dylib 0x953f8e42 thread_start + 34
Thread 4:
0 libSystem.B.dylib 0x953cb922 semaphore_wait_signal_trap +
10
1 libSystem.B.dylib 0x953f945c _pthread_cond_wait + 1089
2 libSystem.B.dylib 0x95442503 pthread_cond_wait + 48
3 QtCore 0x00fce606 QWaitCondition::wait(QMutex*,
unsigned long) + 278
4 QtGui 0x009542ec
QFileSystemModel::setRootPath(QString const&) + 32780
5 QtCore 0x01031f9b
QThread::setTerminationEnabled(bool) + 267
6 libSystem.B.dylib 0x953f8fbd _pthread_start + 345
7 libSystem.B.dylib 0x953f8e42 thread_start + 34
Thread 5:
0 libSystem.B.dylib 0x953f20ea kevent + 10
1 QtCore 0x010dae35 QFSFileEngine::drives() + 44021
2 QtCore 0x01031f9b
QThread::setTerminationEnabled(bool) + 267
3 libSystem.B.dylib 0x953f8fbd _pthread_start + 345
4 libSystem.B.dylib 0x953f8e42 thread_start + 34
Thread 6:
0 libxine.1.dylib 0x0020e5af xine_list_push_front + 363
Thread 0 crashed with X86 Thread State (32-bit):
eax: 0x01350030 ebx: 0x1729d8b4 ecx: 0x00000001 edx: 0xbfffefec
edi: 0xffffffff esi: 0xbfffefec ebp: 0xbfffef78 esp: 0xbfffef78
ss: 0x0000001f efl: 0x00010202 eip: 0x0005825d cs: 0x00000017
ds: 0x0000001f es: 0x0000001f fs: 0x00000000 gs: 0x00000037
cr2: 0x0000001d
...
too long for comment
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=3
From B.Helyer on February 22, 2010 23:39:05
What steps will reproduce the problem?
What is the expected output?
No output, adding a path to watch when configuring the settings should work.
What do you see instead?
Multiple dialogue boxes with the following message:
LibraryBackend: Driver not loaded Driver not loaded
and on the command line, the following output is produced:
QSqlDatabase: QSQLITE driver not loaded QSqlDatabase: available drivers: QMYSQL3 QMYSQL QSqlDatabase: QSQLITE driver not loaded QSqlDatabase: available drivers: QMYSQL3 QMYSQL QSqlQuery::exec: database not open QSqlError(-1, "Driver not loaded", "Driver not loaded") QSqlDatabase: QSQLITE driver not loaded QSqlDatabase: available drivers: QMYSQL3 QMYSQL QSqlDatabasePrivate::removeDatabase: connection 'thread_145361128' is still in use, all queries will cease to work. QSqlDatabasePrivate::addDatabase: duplicate connection name 'thread_145361128', old connection removed. QSqlQuery::exec: database not open QSqlError(-1, "Driver not loaded", "Driver not loaded")
What version of the product are you using? On what operating system?
0.1 on x86 Ubuntu 9.10.
Please provide any additional information below.
Installing package 'libqt4-sql-sqlite' fixes the problem.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=2
From k0009000 on February 27, 2010 17:20:44
It does remember the slider position, but it doesn't SET the volume, really.
So, how to reproduce:
I'm running the latest .deb from here on Ubuntu (Gnome, not Kubuntu) Lucid
Alpha 3.
And yes, I can help with the russian translation. Email me if you need
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=40
From davidsansome on February 25, 2010 14:12:30
On Windows the "native notifications" radio button is selected by default,
but it is disabled.
On OSX, native and system tray options do the same thing (growl), so the
system tray one should be disabled.
On Linux when compiling without libnotify support the option for native
notifications is still enabled.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=22
From ceceron on February 25, 2010 15:21:02
When user changes size of the window, columns size stays without changes,
leaving too many space not used or even not fitting in. Can't it change
proportional with parent window size?
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=23
From simon.hearne on February 23, 2010 21:05:43
What steps will reproduce the problem? 1. Run clementine for Windows
2. Adjust volume between 0% and 50% What is the expected output? What do you see instead? Volume control should be logarithmic to give a smooth volume level change,
instead volume changes at 0% to 50% make little difference while changes
after 50% are too coarse. What version of the product are you using? On what operating system? 0.1 on Windows (seen on Win 7 and XP)
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=8
From ceceron on February 25, 2010 12:50:18
We can shuffle playlist, but there is no option to sort it after. Remove
dup entries should be also useful.
Original issue: http://code.google.com/p/clementine-player/issues/detail?id=21
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.