See also http://www.sacredchao.net/quodlibet/wiki/Development for various proposals/roadmaps/guides. Source Layout ------------- browsers/* - Things in the View menu formats/* - File format support library/* - Library management code qltk/* - GTK+ widget subclasses/extensions tests/* - Unit/regression tests util/* - General utility functions and setup code If you want to get a full overview of QL's code, good places to start are browsers/_base.py, formats/_audio.py, and library/_library.py. Submitting Patches ------------------ If you don't follow these guidelines, your patch will be turned down. The following will lead to an almost automatic rejection: * Mixing tabs and spaces. * Not using 4 space indents. * Lines longer than 79 characters. * Sending whole files rather than patches. Currently we are limiting the code to features in PyGTK 2.8 and Python 2.4. Please prepare your patches against the Subversion release, or the most recent release. You can update a checked-out version to the latest trunk using `svn switch' and `svn update'. Translation ----------- http://www.sacredchao.net/quodlibet/wiki/Development/Translation is a detailed guide to handling translation. Don't be afraid to ask for help on IRC or the mailing list. Unit Tests ---------- Quod Libet comes with tests. To run them, run ./_sanity.sh. Your patch can't break any unit tests, and if you change tests in a non-obvious way (e.g. a patch that removes an entry point and also removes a test for it is obvious) you should explain why. These tests are not included in released versions, since they are fairly large and have more dependencies than Quod Libet itself. Submitting ---------- If your patch fixes a known bug with a ticket, you should attach it to the ticket directly. If it is a bug fix but doesn't have a ticket, you can either make a ticket to attach it to, or send it to the mailing list, quodlibet@lists.sacredchao.net. The ticket tracker is at http://www.sacredchao.net/quodlibet/report and at http://www.sacredchao.net/quodlibet/newticket. Guidelines ---------- We prefer Python to C. We prefer ctypes to compiled C wrappers. A good way to get a new feature applied is if you include tests for it. Stock strings and string reuse are awesome, but don't make the interface awkward just to avoid a new string.