Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > a5098438868a388bef895823c7047e12 > files > 129

pytone-3.0.1-4mdv2010.0.i586.rpm

2007-08-14 Jörg Lehmann  <joerg@luga.de>

        * Version 3.0.1 released.

        * mainscreen.py: Reenable lyrics display.


2007-08-13 Jörg Lehmann  <joerg@luga.de>

        * item.py: Implement played songs filter, which shows a virtual directory
        of all songs which have been played at least once.

        * filelistwin.py, filelist.py, item.py, config.py: Implement focus on
        search string, which displays a virtual directory of entries matching
        the given search string (i.e., artist/album/title being similar to
        this searchs string)


2007-08-12 Jörg Lehmann  <joerg@luga.de>

        * services/songdbs/sqlite.py: Implement clearstats.


2007-08-02 Jörg Lehmann  <joerg@luga.de>

        * item.py: Fix tag filtering.


2007-08-01 Jörg Lehmann  <joerg@luga.de>

        * Version 3.0.0 released.

        * network.py, pytonectl.py, item.py: Make pytonectl work again, in particular
        update allowed modules for unpickling and prevent metadata fetches during
        unpickling.

        * item.py: Implement podcast and deleted songs filtering

        * config.py: New keybindings for (un)deletion of songs


2007-03-11 Jörg Lehmann  <joerg@luga.de>

        * services/songdb.py: Introduce upper cutoff for automatic rating according
        to times played minus skipped.


2007-03-10 Jörg Lehmann  <joerg@luga.de>

        * config.py: Remove tags_* options and replace them by postprocessors
        lists

        * metadata.py: Add postprocessors for metadata (including registry to
        allow plugins to register their own postprocessors) and move old tags_*
        code and decade adding code to the new system


2007-01-21 Jörg Lehmann  <joerg@luga.de>

        * config.py: Fix check for local song databases (thanks to Alexander
        Wirt <formorer at formorer dot de> for reporting this bug).


2006-09-04 Jörg Lehmann  <joerg@luga.de>

	* Use platform byte order for ao devices.


2006-08-28 Jörg Lehmann  <joerg@luga.de>

	* Merge changes from Rothsee version: 
	- Set correct version for new databases
	- Output correct versions during db upgrade


2006-08-20 Jörg Lehmann  <joerg@luga.de>

	* Database version 6: Store bitrate, samplerate, vbr, size, tracknumber, trackcount,
	disknumber, diskccount, and replaygain information in database.

	* item.py: Display song information as suggested by Dag Wieers
	<dag at wieers dot com>.

	* metadata.py: Add replaygain support to eyeD3 decoder

	* services/players/internal.py: Take disk number into account.


2006-08-15 Jörg Lehmann  <joerg@luga.de>

        * metadata.py: Use mutagen as default ID3 reader from MP3 files.

        * metadata.py, dbitem.py: Store replaygain information and calculate
        replaygain scale factor.

        * pcm.c: Add function which allows scaling of the buffer by a factor.

        * decoder.py: Store replaygain scale factor

        * services/players/internal.py: Use track gain for replaygain information.


2006-08-12 Jörg Lehmann  <joerg@luga.de>

        * Version 2.3.1 released.


2006-08-08 Jörg Lehmann  <joerg@luga.de>

	* Make keybindings for rating of currently playing songs configurable
	via playerratecurrentsong1, ... playerratecurrentsong5 in the
	keybindings.general section of the pytonerc file (thanks to Alexander
	Wirt <formorer at formorer dot de> for suggesting this).


2005-12-05 Jörg Lehmann  <joerg@luga.de>

	* services/player.py: Start player only after the playlist service has
	been started since playlist requests may already be issued during the
	player startup. This fixes an long-standing problem reported by several
	people on the mailing list.


2005-11-07 Jörg Lehmann  <joerg@luga.de>

	* filelist.py: Update top after changing back into a directory as the 
	window size may have changed in the meantime (thanks to Martin Fenelon
	<fenm at freeuk dot com> for reporting this problem).


2005-09-19 Jörg Lehmann  <joerg@luga.de>

	* mainscreen.py: Call correct getmaxyx method fixing problem with
	small terminals during startup (thanks to Dag Wieers
	<dag at wieers dot com> for reporting this problem).

	* services/player.py: Move closing of audiodevice right before
	blocking process() call (hopefully fixing a problem reported
	by Dag Wieers <dag at wieers dot com>).


2005-09-13 Jörg Lehmann  <joerg@luga.de>

	* Version 2.3.0 released.


2005-09-11 Jörg Lehmann  <joerg@luga.de>

	* plugings/osdtitle.py, plugins/termtitle.py: Apply
	patch by Dag Wieers <dag at wieers dot com> which adds
	checking for no song being played.


2005-09-08 Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/local.py: Rewrite db upgrade code to allow
	non-atomic upgrade, as well. Prompt the user before an upgrade to
	ask whether a non-atomic or atomic upgrade has to be performed.


2005-08-24 Jörg Lehmann  <joerg@luga.de>

	* Check earlier for dbfile != "db".

	* item.py: Fix filters handling in songs class.


2005-08-23 Jörg Lehmann  <joerg@luga.de>

	* Add error reporting to bufferedao extension module.


2005-08-22 Jörg Lehmann  <joerg@luga.de>

	* Disabled automatic closing of help window by default.

	* Added changeable play speed support (many thanks to Richard A. Smith
	<smithbone at gmail dot com> for providing the patch).


2005-08-21 Jörg Lehmann  <joerg@luga.de>

	* Merged item-rework branch, which contains a new filter code.
	The new code makes the unfiltered case a special case of the filtered
	one. As a result, more than one filter can be applied, e.g., filtering
	for all songs in a certain genre of a given decade and with a given
	rating is now possible. Furthermore, every index now contains a
	(nearly) full directory hierarchy, thus allowing things like showing
	the top-played songs of a certain genre.


2005-08-19 Jörg Lehmann  <joerg@luga.de>

	* Get rid of multi-file database layout:
	   - convert old layout automatically
	   - leave configuration file switches basename and dbfile intact but
	     warn the user when they are non-empty
	   - in a next step, we will set the default value of the basename
	     switch to an empty value (when presumably all databases have been
	     converted)
	   - finally as a final step, we remove the switches and require
	     that the users change their config files

	* Database version 5: do not longer index by years but by decades
	which removes many special code paths at various places in the db
	code.


2005-08-11 Jörg Lehmann  <joerg@luga.de>

	* bufferedao.c: New C extension module corresponding to
	services/players/interal/buffereddevice with an ao device. The
	advantage of the C module is that it does not have to rely on holding
	the GIL when doing the output, which should help preventing sound
	dropouts.

	* services/players/internal.py: Make use of new extension module
	bufferedao.


2005-08-10 Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/internal.py: Checkpoint database regularly during
	registering of songs to prevent oversized transaction logs.

	* services/songdbs/internal.py: Replace quadratic in number of songs
	algorithm by a linear in time version to avoid huge system loads
	at the end of the song registering process.

	* services/players/internal.py: Do not open audiodevice without need.


2005-08-09 Jörg Lehmann  <joerg@luga.de>

	* help.py, helpwin.py, statusbar.py: Introduced getkeyname function
	which has a fallback solution for unnamed keys (thanks to Troels
	Vognsen <bashfalcon at gmail dot com> for reporting this problem).


2005-08-03 Jörg Lehmann  <joerg@luga.de>

	* Normalize all paths in config files.

	* Rework dbstats system.


2005-08-02 Jörg Lehmann  <joerg@luga.de>

	* services/songdb.py. Measure cache size not by number
	of stored requests but by the number of objects the requests
	refer to.

	* services/songdb.py: rename resultcache -> requestcache.

	* conf/pytonerc, config.py, services/songdb.py: Add new section
	database with currently only one option requestcachesize, which
	allows one to configure the maximal number of objects contained
	in the cache.

	* item.py: Create genres/ratings/etc. instances only once to
	permit the caching of the requests involving them.

	* statswin.py, config.py, conf/pytonerc: New window for
	statistical information about databases and the request cache
	(accessible via "%").

	* Various updates in German PyTone.po.


2005-07-16 Jörg Lehmann  <joerg@luga.de>

	* plugin.py: Use thread-local channel in threadedplugin to make it
	actually a threaded plugin.

	* log.py: Add time and current thread to debugging output and prune
	common path from module name.


2005-07-16 Jörg Lehmann  <joerg@luga.de>

	* filelist.py. Update window contents in filelistjumptosong().

	* plugin.py. Daemonize threaded plugins, in order to prevent a blocking of misbehaved plugins 
	on shutdown.

	* Initial checkin into Subversion repository.


2005-06-30 Jörg Lehmann  <joerg@luga.de>

	* plugin.py: Use init() method instead of start(), which has a
	different meaning for threads. The plugins currently distributed
	with PyTone have been changed in this regard.

	* plugins/audioscrobbler/scrobbler.py: Fix typos in backlog code.


2005-06-28 Jörg Lehmann  <joerg@luga.de>

	* config.py: Be more liberal concerning the accepted section names
	(patch by Dag Wieers <dag at wieers dot com>).


2005-06-20 Jörg Lehmann  <joerg@luga.de>

	* Version 2.2.4 released.

	* window.py: Include a workaround by Dag Wieers <dag at wieers dot com>
	which prevents flickering when switching between the filelist and database
	windows.

	* plugins: Include audioscrobbler plugin contributed by Nicolas
	Évrard <nicoe at altern dot org>).

	* config.py: Rename listen to bind in network section.


2005-06-06 Jörg Lehmann  <joerg@luga.de>

	* Rewrite plugin loader to use imp module: Use imp module to specify
	plugin search path and log errors instead of aborting

	* mainscreen.py: Use getmaxyx() code provided by Dag Wieers <dag at
	wieers dot com>.


2005-06-04 Jörg Lehmann  <joerg@luga.de>

	* events.py: Renamed attribute songs -> items in playlistchanged
	event.


2005-05-28 Jörg Lehmann  <joerg@luga.de>

	* item.py: Import _genrandomchoice function needed for random
	selections of filesystem directories from services.songdb, where
	it was moved to some time ago (thanks to Dag Wieers <dag at wieers
	dot com> for reporting this issue).


2005-05-22 Jörg Lehmann  <joerg@luga.de>

	* mainscreen.py: Force minimal height and width of window.


2005-05-18 Jörg Lehmann  <joerg@luga.de>

	* iteminfowin.py: Fix some small bugs in the songchanged event
	handler.
	
	* iteminfowin.py: Allow toggeling between different states: show
	information about either the currently selected song or the song
	being played on the configured players. 

	* config.py: Add new option toggleiteminfowindow in
	keybindings.general section.

	
2005-05-17 Jörg Lehmann  <joerg@luga.de>

	* requests.py, services/songdb.py: Handle getlastplayedsongs as
	other requests by just supplying another wrapper function.

	* playerwin.py: Do not close playerinfo file every time (thanks
	to Dag Wieers <dag at wieers dot com> for the patch).

	* item.py: Zero-pad seconds (thanks to Dag Wieers <dag at wieers
	dot com> for the patch).

	* Add xterm plugin contributed by <dag at wieers dot com>, which
	sets the title of an xterm window according to the currently
	playing song.


2005-05-11 Jörg Lehmann  <joerg@luga.de>

	* playlistwin.py: Check for playstarttime not being None before
	referencing it (thanks to Stefan Wimmer <swimmer at xs4all dot nl>
	for reporting this problem).

	* services/playlist.py: Make immediate play of song working again
	(thanks to Dag Wieers <dag at wieers dot com> for reporting this
	problem).


2005-05-10 Jörg Lehmann  <joerg@luga.de>

	* config.py: replace all occurrences of server/port by networklocation

	* Make remote databases work again.

	* Remote players should at least partially work again.


2005-04-27 Jörg Lehmann  <joerg@luga.de>

	* Version 2.2.3 released.


2005-04-26 Jörg Lehmann  <joerg@luga.de>

	* Deactivate playlist window before initializing the playlist to
	prevent issuing a wrong selectionchanged event (fixing a problem
	reported by Stuart Pook <Stuart dot Pook at infres dot enst dot fr>).


2005-04-25 Jörg Lehmann  <joerg@luga.de>

	* services/players/internal.py: Prevent sound device from being
	reopened when an already stopped player is being stopped again
	(thanks to Stuart Pook <Stuart dot Pook at infres dot enst dot fr>
	for pointing out this problem).

	* services/players/internal.py: Daemonize bufferedaudiodevice
	again.
	

2005-04-21 Jörg Lehmann  <joerg@luga.de>

	* network.py: Ignore empty lines in _receiveobject instead of
	reporting an error.

	* services/playlist.py: Make going back to previous song work
	again (thanks to Johannes Segitz <johannes at segitz dot de> for
	reporting this bug).


2005-04-20 Jörg Lehmann  <joerg@luga.de>

	* Ignore invalid database definitions unless there is at least one
	valid database.


2005-03-30 Jörg Lehmann  <joerg@luga.de>

	* iteminfowin.py: Fix secondary player for songs in the playlist
	window (thanks to Stefan Wimmer <swimmer at xs4all dot nl> for
	reporting this problem).


2005-03-23 Jörg Lehmann  <joerg@luga.de>

	* iteminfowin.py, item.py: Fix wrong window size of item info window.

	* slist.py: Fix crash occuring when deleting the contents of the
	playlist (thanks to Stefan Wimmer <swimmer at xs4all dot nl> for
	reporting this problem).
	

2005-03-16 Jörg Lehmann  <joerg@luga.de>

	* Version 2.2.2 released.


2005-03-12 Jörg Lehmann  <joerg@luga.de>

	* services/players/mpg123.py: Implement seeking.


2005-03-08 Jörg Lehmann  <joerg@luga.de>

	* events.py: Make checkpointdb a dbevent in order to let the
	songdbmanager pass it to the databases (many thanks to Tomas Menzl
	<xmenzl at aldebaran dot feld dot cvut dot cz> for pointing out
	this problem).

	* services/songdbs/local.py: Send sendeventin event to global hub
	instead of to songdbhub to make it actually work. Use repeat
	interval instead of sending every time a new sendeventin event.

	* item.py: Add new item method getid, which returns a unique
	id for the item in the current context (used in slist.set method)

	* services/playlist.py: Add getid method to playlistitem (for
	use in slist.set method).

	* slist.py: Use getid method to identify the previously selected
	item in set method.

	* services/playlist.py: Cleanup variable names: song -> item.


2005-03-07 Jörg Lehmann  <joerg@luga.de>

	* services/player.py: Process incoming events twice to be able
	to rely on block argument of channel. Also block when waiting
	for a new song to appear in the playlist, since any arbitrary
	events unblocks the player.

	* services/songdbs/local.py: Use active transaction as an indication
	for a busy db.

	* filelist.py: Also react on new playlists.


2005-03-06 Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/local.py: Delete log files when checkpointing
	dbenv preventing huge disk space usage during song registering
	(Ochsenschlegel bugfix).


2005-03-03 Jörg Lehmann  <joerg@luga.de>

	* services/players/internal.py. Also request new song when not
	crossfading to make autoplay == False work in this case
	(thanks to Tomas Menzl <xmenzl at aldebaran dot feld dot cvut dot
	cz> for providing a patch).

	* events, services/playlist.py: New event playlistplaysong which
	allows one to tell the playlist to immediately play a specific song.

	* playlist.py: Use playlistplaysong instead of playlistaddsongstop
	when the user requests the immediate playback of a song in the
	playlist (as suggested by Tomas Menzl <xmenzl at aldebaran dot
	feld dot cvut dot cz>), leading to a more mainstream behaviour of
	PyTone in that regard. ;-)

	* playlist.py: playlistaddsongstop now correctly updates the information
	about the currently playing song.

	* playlist.py: Keep information about played songs after
	restarting PyTone.

	* helper.py: Write exception to stdout since we have closed stderr.

	* services/timer.py: Do not daemonize and switch to new timeout option
	of channel.process.

	* services/players/internal.py: Do not daemonize bufferedaudiodev buf
	shut it down properly.


2005-03-01 Jörg Lehmann  <joerg@luga.de>

	* hub.py: Add optional timeout to process method of channel.

	* services/player.py: Make use of new timeout option.

	* event.py: Renamed playerforward -> playernext

	* decoder.py, services/player.py, services/players/internal.py:
	Enable seeking in songs (many thanks to Tomas Menzl <xmenzl at
	aldebaran dot feld dot cvut dot cz> for providing a patch).

	* requests.py: Add sort member variable to getsongsinplaylists
	request, fixing a crash when rescanning, querying a random
	selection, etc. of all songs in playlists (thanks to Tomas Menzl
	<xmenzl at aldebaran dot feld dot cvut dot cz> for reporting this
	problem).


2005-02-27 Jörg Lehmann  <joerg@luga.de>

	* filelist.py: Some cleanups.

	* playlist.py: Ditto.

	* events.py: New event filelistjumptosong, which directs the filelist
	to jump to a given song in the directory hierarchy.

	* config.py. New keybinding "filelistjumptoselectedsong" for
	playlistwindow (by default KEY_RIGHT is used).

	* config.py: New option "skipsinglealbums" in filelistwindow
	section, which when turned on, tells PyTone to skip the album and
	go directly to the songs when there is only one album of a given
	artist.


2005-02-26 Jörg Lehmann  <joerg@luga.de>

	* dbitem.py: Remove __class__ comparison from __cmp__ method of dbitem
	class

	* services/songdb.py: Avoid repeated songs when randomly selecting
	songs out of a short list.


2005-02-12 Jörg Lehmann  <joerg@luga.de>

	* services/playlist.py: Cleanup and fix some minor bugs.


2005-02-09 Jörg Lehmann  <joerg@luga.de>

	* setup.py: (Ab-)use scripts directive for installing pytone
	and pytonectl shell scripts.

	* log.py: Make debugfile initialization manual to allow the use of
	the log module in the config module (thanks to Brian Lenihan
	<brian_l at mac dot com> for proposing this).

	* config.py: Fix --rebuild command line switch.

	* services/players/mpg123.py: Be more relaxed when initializing
	the player and when parsing the "@F" lines to make mpg123 work
	again (thanks to Brian Lenihan <brian_l at mac dot com> for
	providing a patch).

	* conf/pytonerc: Add sample command line for mpg123 player.

	* dbitem.py: Do not assume that all exceptions derive from the
	Exception base class (fixing the scanning problems reported by
	Alexander Wirt <formorer at formorer dot de> and Jack Bakeman
	<jbakeman at indra dot com>).


2005-02-08 Jörg Lehmann  <joerg@luga.de>

	* config.py: Use correct copyright date when printing usage
	summary.


2005-02-07 Jörg Lehmann  <joerg@luga.de>

	* Version 2.2.1 released.

	* services/playlist.py: Also notify database of not fully
	played song when stopping the player manually.

	* services/songdb.py: Improve random choice logic.

	* services/songdb.py: Store copy of request and not request
	itself in cache.

	* config.py: Add more checks for database options: prevent
	sharing of basenames or dbenvdirs of several databases.


2005-02-06 Jörg Lehmann  <joerg@luga.de>

	* log.py: New function debug_traceback which records a traceback
	when in debugging mode.

	* dbitem.py: Ignore (but report when in debugging mode) errors
	when parsing the song metadata (thanks to Jack Bakeman <jbakeman
	at indra dot com>, Sascha <spx at gmx dot net>, and Alexander Wirt
	<formorer at formorer dot de> for reporting that problem).

	* metadata.py: fix fallback code for length calculation.


2005-02-03 Jörg Lehmann  <joerg@luga.de>

	* service.py: New module containing a base class for
	services which contains a main loop doing exception handling
	and error reporting.

	* plugin.py: Use new service class.

	* services/songdb.py: Use new service class.

	* services/songdbs/local.py: Use new service class.

	* services/player.py: Use new service class.

	* services/playlist.py: Use new service class.


2005-02-01 Jörg Lehmann  <joerg@luga.de>

	* Version 2.2.0 released.


2005-01-25 Jörg Lehmann  <joerg@luga.de>

	* filelistwin.py: Clear searchstring when search has been aborted
	by pressing ESC.


2005-01-24 Jörg Lehmann  <joerg@luga.de>

	* metadata.py: Also import MP3Info module when using the eyeD3
	module, since one helper function is also needed when using the
	latter module.

2005-01-23 Jörg Lehmann  <joerg@luga.de>

	* services/songdb.py: Do not sort the intermediate results when
	querying multiple databases. While this yields an improved caching
	behaviour, we are not allowed to do that, because the caller
	supplied compare function cannot be used for unwrapped items.

	* pytone.py: Redirect stdout to /dev/null in order to prevent ALSA
	buffer underrun messages from spoiling the user interface.


2005-01-22 Jörg Lehmann  <joerg@luga.de>

	* item.py: Remove bogus cmpitem method of rating class.

	* metadata.py: New module containing the song metadata interfaces.

	* Add _some_ initial support for FLAC files via pyflac (not stable
	yet and thus currently unsupported!)


2005-01-17 Jörg Lehmann  <joerg@luga.de>

	* pcm/pcm.c: add new function upsample which allows to create
	a pseudo-stereo stream from a mono stream

	* decoder.py: Handle mono ogg files correctly (fixing an error
	reported by Uwe Bielz <u.bielz at wad dot org>).

	* item.py: Be more robust when displaying playing time of song.


2005-01-16 Jörg Lehmann  <joerg@luga.de>

	* events.py: registerplaylists now expects lists of playlists
	instead of list of paths (analogous to registersongs).

	* events.py, services/songdbs/local.py. new events delplaylist and updateplaylist
	for deletion and update of playlists

	* services/songdbs/local.py: Also update (and delete non longer
	existing) playlists when reregistering all songs (as suggested by
	Stefan Wimmer <swimmer at xs4all dot nl>).


2005-01-09 Jörg Lehmann  <joerg@luga.de>

	* Plugin architecture (based upon the prototype by Nicolas Évrard
	<nicoe at altern dot org>).


2004-12-31 Jörg Lehmann  <joerg@luga.de>

	* item.py: Case-insensitive sort in filelist window.

2004-12-19 Jörg Lehmann  <joerg@luga.de>

	* Include path of song in detailed information about currently selected
	item.

	* services/players/internal.py: Flush song queue and audio device
	when a new song is requested while the player is paused.


2004-12-12 Jörg Lehmann  <joerg@luga.de>

	* config.py: Add support for config subsection templates. It is now possible
	to define an arbitrary number of databases.


2004-11-29 Jörg Lehmann  <joerg@luga.de>

	* Version 2.1.3 released.

	* item.py: Replace superfluous database requests, which led to an
	unnecessarily sluggish UI during the database rebuild.

	* filelist.py: Ensure that only dbitem.song and not item.song instances
	are sent to the database when rescanning songs. Also send songs to
	the correct database (if the selected directory contains songs from
	various databases).


2004-11-27 Jörg Lehmann  <joerg@luga.de>

	* Add French translation (many thanks to Nicolas Évrard
	<nicoe at altern dot org>).

	* services/playlist.py: Convert songs to playlistitems, when
	loading a playlist. Fix appending of these items, as well. (Thanks
	to Stefan Wimmer <swimmer at xs4all dot nl> for reporting this
	bug).

	* change all helper.debug calls to log.debug and move the corresponding
	debug file code into the log module.


2004-11-24 Jörg Lehmann  <joerg@luga.de>

	* item.py: Reduce precision for longer last played times.


2004-11-20 Jörg Lehmann  <joerg@luga.de>

	* hub.py: renamed hub-> _defaulthub, _hub -> hub.

	* hub.py: Add module level functions notify, request and
	newchannel to provide easy access to the default hub.

	* Replace all calls of hub methods with new hub module
	functions making the code more readable.


2004-11-18 Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/local.py: Make playlists work again (thanks to
	Maurizio Panniello <maurizio at iac dot es> for reporting and
	locating this problem).


2004-11-15 Jörg Lehmann  <joerg@luga.de>

	* Renamed services/players/xmms.py in services/players/xmmsplayer.py to
	prevent a name conflict with the pyxmms module.

	* services/players/xmmsplayer.py: Replace xmms by xmms.control to
	make this module work with the latest versions of pyxmms (thanks
	to Mario Rodríguez <mrodriguezc at gmail dot com> for reporting
	this problem).

	* services/songdbs/local.py: When reregistering a song which is
	already in the database, do not replace it completely (thereby
	deleting its rating, etc.) but only update the song metadata.
	(closing Debian bug #269711).


2004-11-08 Jörg Lehmann  <joerg@luga.de>

	* Version 2.1.2 released.

	* pytonerc: Fix typo in addsongtoplaylist and showiteminfolong options
	(thanks to Toma¸ Ficko <tomaz at gmx dot net> for reporting these bugs).

	* services/songdbs/local.py: Fix error occuring when requesting
	artists, albums or songs with unknown decade (thanks to Toma¸
	Ficko <tomaz at gmx dot net> for sending a patch).

	* services/songdbs/local.py: Manually remove unneeded log files
	because automatic removal is only supported by the newest bsddb
	versions, fixing Debian bug #273370 (thanks to Toma¸ Ficko <tomaz
	at gmx dot net> for sending a patch).


2004-11-07 Jörg Lehmann  <joerg@luga.de>

	* Version 2.1.1 released.

	* services/songdbs/local.py: Enable the songautoregisterer to
	do the rescanning of songs by itself in order to take load
	of the database thread.

	* services/songdbs/local.py: When registering songs, also update
	information of song which have alread been in database.  In
	particular, delete songs which are no longer existent
	(Implementing a suggestion by some anonymous user).

	* filelist.py: Call the song registerer when updating the songs in
	the basedir of a database to prevent blocking of the UI thread.


2004-09-25 Jörg Lehmann  <joerg@luga.de>

	* item.py: Fix calculating of hours and minutes of last played
	time (thanks to Zoltan Szalontai <szazol at e98 dothu> for finding
	this bug).


2004-09-12 Jörg Lehmann  <joerg@luga.de>

	* dbitem.py: Update path information when rescanning song. When
	updating the songs in a database, a relocation in a different
	musicbasedir is now taken into amount correctly.


2004-08-20 Jörg Lehmann  <joerg@luga.de>

	* Never issue a requestnextsong request for second player. (Fixing
	a problem occured during the last Rothsee-Party).

	* Associate a playlist (or explicitly none) to every player.

	* requests.py: requestnextsong now requires a playlistid instead of
	a playerid.

	* services/songdbs/local.py: Checkpoint database after each
	database update step to prevent even more oversized log files.

	* dbitem.py: Only store last 10 playing times.


2004-08-16 Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/local.py: Treat case of musicbasedir ending
	with a slash correctly (fixing a problem reported by Alexander
	Wirt <formorer at formorer dot de>).


2004-08-11 Jörg Lehmann  <joerg@luga.de>

	* services/playlist.py: Fix wrong playlistitem constructor
	signature in playlistaddsongtop (thanks to Andreas Poisel
	<a.poisel at acat dot cc> for reporting this bug).


2004-08-09 Jörg Lehmann  <joerg@luga.de>

	* Also accept "MP3" etc. as extension of MP3 files.

	* New window which show more detailed information about currently
	selected item.


2004-08-03 Jörg Lehmann  <joerg@luga.de>

	* Version 2.1.0 released.

	* dbitem.py: Really use length of MP3 file if no ID3 tag
	is present (when using eyeD3 module).

	* services/playlist.py: Reset playingsong to None only using
	the playbackinfochanged event.

	* services/playlist.py: React on changes in the song database.


2004-08-02 Jörg Lehmann  <joerg@luga.de>

	* dbitem.py: Try harder to get reasonable length information
	for MP3 file.

	* dbitem.py: Add adddict and safe options to format method of
	song.

	* dbitem.py: Store list of last played times.

	* Consider song as not having been played if it has been aborted
	very early (currently during the first 10 seconds) (closing Debian
	bug #218283).

	* playlist.py: Do not set playingsong by using the playbackinfochanged
	event of the player since this leads to race conditions.


2004-07-27 Jörg Lehmann  <joerg@luga.de>

	* item.py : Show songs in filtered artist.

	* filelistwin.py: Implement incremental searching (as suggested by
	Stuart Pook <Stuart dot Pook at infres dot enst dot fr>).

	* config.py: New key binding "repeatsearch" in filelist window
	 which allows the user to specify a key for the repetition of the
	 last search (as suggested by Falko Rütten <falko.ruetten at
	 cmdline dot net>).

	* config.py: New option songchangecommand in general section which allows
	to specify a command executed when the playback of a new song starts.


2004-07-26 Jörg Lehmann  <joerg@luga.de>

	* New configuration options in database sections which allow the user
	to turn on and off various tag transformation and to specify the
	regular expression used for obtaining track nr and title from the song
	filename.

	* services/songdbs/local.py: Even further simplify artist and
	album index machinery now that ratings are no longer stored
	directly in this items but only in songs.


2004-07-25 Jörg Lehmann  <joerg@luga.de>

	* Implemented play previous song (as requested by Sebastian
	Schwerdhoefer and Han Boetes, George J. De Bruin, and Sam Rowe)

	* pytonerc: New config option stepsize in mixer section, which
	allows the user to change the step size (in percent) of the mixer
	(requested by Krzysztof Zych <kzych at manta dot univ dot gda dot
	pl>).

	* mixerwin.py: Make volume bar as wide as possible when
	type=statusbar (requested by Krzysztof Zych <kzych at manta dot
	univ dot gda dot pl>).


2004-07-24 Jörg Lehmann  <joerg@luga.de>

	* dbitem.py: Remove genres and years attributes of artist and album.

	* dbitem.py: New index rating.

	* services/songdbs/local.py: Generalize index machinery to enable
	simplified addition of new index.

	* item.py: Generalize filtereditem for a simplified addition of
	a new index.

	* Do no longer store artist and album rating but instead a rating
	source in the song.

	* Allow the user to filter songs by their rating (as suggested by
	Thomas Klein-Hitpass <thomas at projekt-barrierefrei dot de>).

	* Database version 4.


2004-07-22 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.14 released.

	* Make player progress bar more readable on mono devices (thanks
	to Krzysztof Zych <kzych at manta dot univ dot gda dot pl>).


2004-07-19 Jörg Lehmann  <joerg@luga.de>

	* Replace "PyX" by "PyTone" in license headers (thanks to
	Krzysztof Zych <kzych at manta dot univ dot gda dot pl> for
	pointing this out).

	* Add polish translation (many thanks to Krzysztof Zych <kzych at
	manta dot univ dot gda dot pl>).

	* dbitem.py: Update eyeD3 integration based on contributions by
	Krzysztof Zych <kzych at manta dot univ dot gda dot pl>.

	* item.py: Make last played song list sorted again.

	* services/songdbs/locale.py: Some fixes in database upgrade code.


2004-07-18 Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/locale.py: Really make use of transactional
	subsystem.

	* services/songdbs/locale.py: Move dbitem.song creation to
	songautoregisterer thread to greatly improve the usability during
	the song registering process.

	* dbitem.py: Added support for the eyeD3 module, which parses MP3
	files much faster as the current version of the MP3Info module.


2004-07-15 Jörg Lehmann  <joerg@luga.de>

	* Handle SIGTERM gracefully by sending a quit signal to all
	running threads.


2004-07-13 Jörg Lehmann  <joerg@luga.de>

	* hub.py: Explicitly use list as underlying queue to make the
	PriorityQueue class work with Python 2.4 (thanks to Krzysztof Zych
	<kzych at manta dot univ dot gda dot pl> for reporting this
	problem).


2004-07-08 Jörg Lehmann  <joerg@luga.de>

	* pytone.py: Catch errors during service creation to be able to shut down
	all already running services

	* services/playlist.py: Be careful when loading a dumped playlist which
	has ids incompatible with the global _counter variable.

	* playlist.py: Issue selectionchanged event in _recenter and in
	playlistchanged method if necessary. This should fix a longstanding bug where
	the item info window showed the wrong playlist item.


2004-07-07 Jörg Lehmann  <joerg@luga.de>

	* Allow only songs located under basedir in databases.

	* Do not delete currently playing song when backspace is pressed.

	* decoder.py: Replace samplerate by outrate in calculation of
	playing time since the data has already been resampled to outrate.


2004-07-06 Jörg Lehmann  <joerg@luga.de>

	* Removed some unnecessary selectionchanged notifications.

	* dbitem.py: Finally switched from path as id to relative path as
	id. This should facilitate moving songs from one base directory to
	the other.

	* Database version 3.

	* Use artist and album from relative path as fallback if no id3
	information is present and the relative path (with respect to
	the musicbasedir) consists of exactly two directories.


2004-07-01  Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/local.py: Don't index song in
	_queryregistersong, if it is already registered in database.

	* services/songdbs/local.py: Use transaction system when writing
	to the database (addressing the problems of Debian bug #245503).

	* pytone.py: Set locale to setting defined by the user's environment
	variables.

	* inputwin.py: Allow the user to input all printable characters
	according to the locale set (as suggested by Stuart Pook <Stuart
	dot Pook at infres dot enst dot fr>).

	* filelistwin.py: Empty search string repeats last search (as
	suggested by Stuart Pook <Stuart dot Pook at infres dot enst dot
	fr>).

	* slist.py: New method for regular expression search.

	* filelistwin.py: Search strings are now interpreted as regular
	expressions.


2004-06-29  Jörg Lehmann  <joerg@luga.de>

	* Make timer a service, which runs in an independent thread

	* services/songdbs/local.py: Turn on transaction and log subsystem
	and checkpoint log regularly.


2004-06-25  Jörg Lehmann  <joerg@luga.de>

	* mixerwin.py: Do not fail if neither ossaudiodev nor oss module
	is present (thanks to Linus Sjöberg <lsjoberg at aland dot net>)


2004-06-21  Jörg Lehmann  <joerg@luga.de>

	* dbitem.py: Catch error when no id3 tag is present in an MP3
	file (fix contributed by Toma¸ Ficko <tomaz at gmx dot net>).

	* MP3Info.py: New version (thanks to Toma¸ Ficko <tomaz at gmx dot
	net> for providing me with the update). Included is a patch which
	should fix the length detection for VBR MP3 files (hopefully
	fixing a problem reported some time ago by George J. De Bruin
	<SoundChaser at myrealbox dot com>).


2004-06-13  Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.13 released.


2004-06-10  Jörg Lehmann  <joerg@luga.de>

	* conf/pytonerc: Update description of autoregisterer option
	in the database sections (fixing Debian bug #245528).

	* conf/pytonerc: New option dbfile in database sections which allows
	to store the database in one single file (instead of multiple ones,
	when using the old basename option)

	* services/songdbs/local.py: support storing of databases in a
	single file.


2004-04-22  Jörg Lehmann  <joerg@luga.de>

	* Do not process global keybindings when input window is active
	(thanks to Andreas Poisel <a.poisel at acat dot cc> for reporting
	this problem).

	* pytonectl.py: Rewrite to allow for requests and not only events.

	* pytonectl.py: Add getplayerinfo function, which prints a string
	with information about the currently playing song (as suggested by
	Alexander Wirt <formorer at formorer dot de>).


2004-04-21  Jörg Lehmann  <joerg@luga.de>

	* pytonectl: Print error message instead of traceback when
	connection to server fails (as suggested by Alexander Wirt
	<formorer at formorer dot de>).


2004-04-17  Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.12 released.

	* Fixed selection by mouse in playlist window.


2004-04-12  Jörg Lehmann  <joerg@luga.de>

	* When dumpfile is set, we use it to store the playlist state not
	only when a crash occurs but also on PyTone's exit.

	* pytonerc: Added option songformat to playerwindow and
	playlistwindow sections of config file which allow the user to
	specify an arbitrary format strings for title of player window and
	entries in playlist window.


2004-04-11  Jörg Lehmann  <joerg@luga.de>

	* Added new layout which consists only of one column.

	* pytonerc: New option togglelayout in keybindings.general
	section.

	* Added example configuration files for different layouts.

	* pytonerc: New option layout in general section, new option
	activetitle in filelistwindow and playlistwindow sections.

	* services/players/internal.py: Fix problem preventing
	automatic crossfading.


2004-04-09  Jörg Lehmann  <joerg@luga.de>

	* decoder.py: Use length information of mad decoder instead
	of the one stored in the database to further improve
	the behaviour when using VBR files.

	* Window borders are know configurable.

	* pytonerc: new option border in filelistwindow, playlistwindow,
	iteminfowindow, and playerwindow sections.


2004-04-05  Jörg Lehmann  <joerg@luga.de>

	* dbitem.py: Use the TLEN id3 tag when existent for the length of an
	MP3 file. Hopefully, this improves the behaviour when using
	VBR files.

	* pytonerc: Added vi-like navigation keys to standard config (as
	suggested by Andreas Poisel <a.poisel at acat dot cc>).


2004-04-04  Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.11 released.


2004-04-03  Jörg Lehmann  <joerg@luga.de>

	* config.py: Add aooptions configuration option string that allows
	the user to change all options provided by the ao library
	(as suggested by Stuart Pook <Stuart dot Pook at infres dot enst
	dot fr>).


2003-03-28 Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/local.py: automatically update to new
	database version if necessary.

	* Close audio device when no songs are left in playlist
	(fixing a bug reported by Stuart Pook <Stuart dot Pook at infres
	dot enst dot fr>).

	* Remove alsa_buf_size option again as it was not working
	as expected.


2003-03-22 Jörg Lehmann  <joerg@luga.de>

	* services/songdbs/local.py: store version number of database
	schema in database.

	* Do no longer identify albums by artist+album but only by album
	name (as suggested by Stuart Pook <Stuart dot Pook at infres dot
	enst dot fr>). Albums with the same name thus get automatically
	merged in the albums list.


2003-03-18 Jörg Lehmann  <joerg@luga.de>

	* Prevent race condition by starting song auto registerer
	only after the database thread has been started.


2003-03-17 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.10 released.

	* Added alsa_buf_size option to player sections of config file,
	which allows one to specify the internal buffer size of the alsa
	device (partly implementing a suggestion by Stuart Pook <Stuart
	dot Pook at infres dot enst dot fr>).

	* Added sections logwindow and colors.logwindow to config file.

	* Mark song as unplayed again when it is stopped (as suggested by
	George J. De Bruin <SoundChaser at myrealbox dot com>).


2003-03-15 Jörg Lehmann  <joerg@luga.de>

	* Keep audio device only open, when it is really needed, i.e.,
	close it when the player is stopped or paused (as suggested by
	<Stuart dot Pook at infres dot enst dot fr>).

	* Log problems during audio device initialisation to message log.


2003-03-14 Jörg Lehmann  <joerg@luga.de>

	* Disable mixer functionality when an error occured during mixer
	initialisation.

	* Add message log functionality.

	* Do not use "=" for the top border of an active windows anymore.


2003-03-13 Jörg Lehmann  <joerg@luga.de>

	* pytone.py: Initialize players after databases to prevent a race
	condition when autoplaymode=random (thanks to Niels Drost
	<ndrost@cs dot vu dot nl> for reporting this bug).

	* Handle virtual directories at top of filelist window correctly
	when inserting new artists in the database (fixing a bug reported
	by Niels Drost <ndrost@cs dot vu dot nl>).

	* config.py: Fix wrong behaviour with foreground colour black
	(thanks to Stuart Pook <Stuart.Pook@infres.enst.fr> for
	reporting this problem).


2003-02-18 Jörg Lehmann  <joerg@luga.de>

	* Check for old database type did require Python 2.2 and above.

	* Include cursext extension module in distribution.

	* Check path names in m3u files for zero-bytes to handle a (very
	rare) corner case (reported by Douglas Bagnall <douglas at
	paradise dot net dot nz>.


2003-02-18 Jörg Lehmann  <joerg@luga.de>

	* Include po files in distribution.


2003-02-15 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.9 released.

	* filelistwin.py and playlistwin.py: Move cursor to the right
	position in order to make it more easy for users of Braille
	displays to track the current position/selection (thanks to
	Stéphane Doyon <s.doyon at videotron dot ca>).

	* config.py and services/players/internal.py: New config option
	crossfading in [players.*] sections, which allows the user to turn
	off the crossfading of songs (suggested by Niels Drost <ndrost@cs
	dot vu dot nl>).

	* services/songdbs/local.py: Store playing time with each song
	in lastplayed list to later on permit merging of lists coming
	from different databases. Upon upgrade, the last played song
	list will be deleted!


2003-02-14 Jörg Lehmann  <joerg@luga.de>

	* services/playlist.py: Upon deletion of played songs, the played and total
	times info of the playlist have not been adapted.

	* playlistwin.py: When given the focus to the playlist window, we
	now recenter the displayed list and select the currently playing
	song.

	* Disable logging functionality of bsddb.

	* When updating the song database, we delete songs which are no longer
	accesible.

	* services/songdbs/local.py: Be more aggresive, when scanning for
	new songs.


2003-02-12 Jörg Lehmann  <joerg@luga.de>

	* dbitem.py: Try to determine the "correct" character set for the reencoding
	of the unicode strings contained in the tags of Ogg Vorbis files
	(thanks to Michal Cihar <michal at cihar dot com> for the patch).


2003-02-08 Jörg Lehmann  <joerg@luga.de>

	* Better curses initialisation (thanks to Johannes Mockenhaupt <jmockenhaupt
	at gmx dot net>)

	* Add an extension module which provides support for transparent
	terminals also for "older" Python versions (thanks to Johannes Mockenhaupt
	<jmockenhaupt at gmx dot net>).

	* pytone.py: Initialize players before everything else to prevent a hang of
	PyTone when a problem occured at this stage.

	* services/player.py: Be more verbose on player initialization problems.


2003-02-07 Jörg Lehmann  <joerg@luga.de>

	* services/playlist.py: Remove extraneous _checksong call in _addsongs method.

	* services/playlist.py: Check whether song is already contained in a local
	database. If yes, do not create a new entry in the primary database.
	The disadvantage of this behaviour is that the playing information is
	no longer collected centrally.

	* Rescanning songs proceeds now in a separate thread.


2003-01-31 Jörg Lehmann  <joerg@luga.de>

	* services/players/internal.py: Check for endianness of platform to set
	correct output format when using the ossaudiodev module, fixing the
	internal player on PowerPC (thanks to Peter Poeml <poeml at suse
	dot de> for the patch).

	* setup.py: install italian message catalog


2003-01-18 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.8 released.

	* Include Italian localization (many thanks to Davide Alessio
	<dalessio at softhome dot net>).


2003-01-11 Jörg Lehmann  <joerg@luga.de>

	* network.py: Do not bail out when pytonectl socket does not exist
	(thanks to Alexander Wirt <formorer at formorer dot de> for
	reporting this problem).


2003-01-06 Jörg Lehmann  <joerg@luga.de>

	* playlist.py: Fix bug occuring when rating a song and no song is
	selected in playlist. Furthermore, the song info window was not
	updated.

	* Added new command rescan in filelist and playlist mode, which allows
	the user to rescan/update the id3 information of the selected song(s).


2003-01-05 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.7 released.

	* Fix incorrect title and sort order when displaying genre and
	decade filtered items.


2003-01-04 Jörg Lehmann  <joerg@luga.de>

	* MP3Info.py: use new version of Vivake Gupta.

	* dbitem.py: adapt to new version of MP3Info module.

	* dbitem.py: Extract track number from file names like
	"03 Songtitle.mp3".


2003-01-03 Jörg Lehmann  <joerg@luga.de>

	* config.py: Added new option cachesize in [database.*] sections,
	which allows to specify the cache size used for the database
	when using Python 2.3 and above.

	* services/songdbs/songdb.py: Renamed in services/songdbs/local.py
	to prevent collision with global bsddb.py module.

	* services/songdbs/local.py: Enable use of new bsddb module
	from Python 2.3 and above.


2003-12-13 Jörg Lehmann  <joerg@luga.de>

	* config.py: Do not process command line and reading of
	configuration file at module initialisation time, in order to be
	usable for pytonectl as well (fixing a problem reported by Han
	Boetes <han at mijncomputer dot nl>).

	* services/player.py: autoplay now also works after having
	stopped and restarted the player manually (thanks to Han Boetes
	for pointing me to this long standing annoyance).

	* events.py: New event playertogglepause which allows to pause the
	player, if it is playing, or start playing, if it is paused.

	* pytonectl.py: Add support for the playertogglepause function (as
	suggested by Han Boetes <han at mijncomputer dot nl>).


2003-12-12 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.6 released.

	* event.py, player.py: Add new event playerratecurrentsong:
	rating of the song currently being played on the player.


2003-12-11 Jörg Lehmann  <joerg@luga.de>

	* pytonectl.py: Add support for song addition and immediate song
	play.

	* config.py: New option playerinfofile in the general section,
	which allows to specify a file where the song currently being
	played on the main player will be written (as suggested by Han
	Boetes <han at mijncomputer dot nl>).


2003-12-09 Jörg Lehmann  <joerg@luga.de>

	* config.py: Prune removed -n switch from usage/help output.

	* pytonectl.py: New script for the remote control of PyTone (as
	suggested by Han Boetes <han at mijncomputer dot nl>).

	* config.py: New option in the network section: socketfile.
	Specifies the name of a UNIX domain socket for the remote control
	of PyTone, if set to a non-empty value.


2003-11-25 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.5 released.

	* Added missing help texts for functions introduced in version
	2.0.4 (fixing a bug spotted by Han Boetes <han at mijncomputer dot
	nl>).

	* Fix a small bug in services.players (thanks to Andreas Poisel <a
	dot poisel at acat dot cc> for the patch).

	* services/playlist.py: Notify upon playlist changes due to a song being
	played.

	* Cleanup README file: purge news section.


2003-11-25 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.4 released.


2003-11-24 Jörg Lehmann  <joerg@luga.de>

	* Added repeat function for playlist.

	* The playlist mode can now be set initially with the variable
	initialplaylistmode in the [general] section (instead of
	autorandomplay) and toggled during runtime by pressing CTRL-T.


2003-11-23 Jörg Lehmann  <joerg@luga.de>

	* More safety checks with respect to Ogg Vorbis support.

	* Do not show Ogg Vorbis files in filesystem directory view, if no
	Ogg Vorbis support is present.

	* Move update of song played information to services/player.py to
	be consistent with song.unplay, which will be introduced later.

	* Rename _nextsong->_playsong in player modules.


2003-11-18 Jörg Lehmann  <joerg@luga.de>

	* services/playlist.py: Replace incorrect use of dbitem.song by item.song in
	_checksong method.

	* add autorandomplay to [general] section of pytonerc, which enables
	choosing a random song for playing, when playlist is empty

	* Allow replaying of the current playlist. The corresponding key
	can be configured in the [keybindings] section of pytonerc via the
	variable general.playlistreplay (implements Debian wishlist bug
	#218282)


2003-10-18 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.3 released.

	* pytone.py: Prevent mainscreen.dump from being called if the mainscreen
	constructor did not succeed (reported including a patch in Debian bug 216002
	by David Kågedal <davidk at lysator dot liu dot se>)

	* config.py: Remove command line option "-n/--network". Use a
	config file instead.

	* config.py: Check for empty musicbasedir in the configuration

	* pytonerc: Set musicbasedir to an empty value by default to remind
	first time users setting this option.


2003-10-13 Jörg Lehmann  <joerg@luga.de>

	* item.py: Allow getcontentsrecursive (recursive insert) and implement
	getcontentsrecursiverandom (random insert) for filesystem directories.
	Thanks to Martin van Es <martin at mrvanes dot com> for reporting
	the previous inconsistency in PyTone's behaviour in that regard).

	* Merge pending fix from last Rothsee party's late night hacking
	session:

	- requestnextsong gets a playerid argument to distinguish between
	song requests of different players


2003-08-12 Jörg Lehmann  <joerg@luga.de>

	* config.py: Fix wrong behaviour in mono mode, when no mono
	attribute is given in config file.

	* inputwin.py: Re-added curses.ascii import, which got lost.

	* config.py: New option "colorsupport" in section "general".
	This allows to enable/disable colors both manually and
	automatically (as before).

	* config.py: New option "throttleoutput" in section "general",
	which allows to specify the number of screen updates skipped when
	there is still user input.


2003-07-27 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.2 released.


2003-07-26 Jörg Lehmann  <joerg@luga.de>

	* item.py: Fixed typo in decades.getcontentsrecursive()

	* Purged unneeded imports and local variables found by pychecker.

	* Streamlined playingsong handling by using playbackinfochanged
	instead of playlistchanged events.

	* Check for __setstate__ in __getattr__ to enable unpickling of
	certain wrapper classes for Python 2.3.

	* setup.py: Move everything (including pcm module) into pytone module.


2003-07-25 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.1 released.


2003-07-24 Jörg Lehmann  <joerg@luga.de>

	* Allow batching of addition of songs to playlist.

	* Statusbar for help window

	* Command line switch for database rebuilt.

	* Updated THANKS file.


2003-07-23 Jörg Lehmann  <joerg@luga.de>

	* Code cleanups at various places.

	* Outstanding issues with playlist functionality have
	been resolved now.

	* Do automatic recenter around last song of playlist if
	no song is being played.

	* Add originating module to debugging output.


2003-07-20 Jörg Lehmann  <joerg@luga.de>

	* Fix load and save of playlists (thanks to Alexander Wirt
	  <formorer at formorer.de> for spotting this bug)

	* Enable support for monochrome terminals again.  Use
	curses.has_colors() to determine color capabilities, but maybe we
	eventually have to add a configuration variable for that.


2003-07-19 Jörg Lehmann  <joerg@luga.de>

	* Fix missing os.path.expanduser around config file path
	(thanks to David Braaten <xiticix47 at hotmail.com>)


2003-07-18 Jörg Lehmann  <joerg@luga.de>

	* Version 2.0.0 finally released.


2003-06-08 Jörg Lehmann  <joerg@luga.de>

	* Move service setup from mainscreen.py to pytone.py

	* Resurrect playlist functionality.


2003-05-25 Jörg Lehmann  <joerg@luga.de>

	* Renamed:
	    aoplayer.py -> internal.py,
	    mpg123player.py -> mpg123.py
	    xmmsplayer.py -> xmms.py

	* First steps towards playback from remote db: try to
	access song locally.

	* Prevent too many register request from auto registerer.


2003-05-24 Jörg Lehmann  <joerg@luga.de>

	* players/mpg123player.py: Fix bug spotted by
	 John Plevyak <jplevyak at acm.org>: Adding a new song
	after all songs had been played, required to stop and
	restart the player, even though autoplay was enabled.


2003-05-17 Jörg Lehmann  <joerg@luga.de>

	* Support default background color and try to use
	curses.use_default_colors, if present. This requires
	a new version of the Python curses module.

	* Support ossaudiodev instead of ao interface. Unfortunately,
	this doesn't work well with the current ossaudiodev module
	of Python 2.3beta1. On the other hand, I was not able
	to run the ao module with a debug build of current Python
	CVS. Probably, ao is buggy.

	* helpwin.py: Set self.items already in constructor, to
	prevent possible crash, if one presses a key during
	the PyTone initialization

	* songdb.py: Remove unused and dangerous __len__ method,
	which lead sometimes to a crash during the PyTone shutdown.


2003-05-13 Jörg Lehmann  <joerg@luga.de>

	* New db index for playing statistics. Move respective
	code to songdb.py

	* Show info about songs which have been added most recently
	to database.


2003-05-11 Jörg Lehmann  <joerg@luga.de>

	* item.py: Replaced filtereditem by two, more specialised, classes
	filtereddecade and filteredgenre.

	* iteminfowin.py, item.py: Move code for respective items into a
	getinfo method.

	* songdb.py: More index work, should be almost complete now.


2003-05-10 Jörg Lehmann  <joerg@luga.de>

	* MP3Info.py: change _strip_zero function to
	  - use faster lstrip, if Python 2.2.2 and above
	  - cut string after first (non-leading) \0 character,
	    thereby fixing PyTone crashes reported by a few
	    users.

	* slist.py: Fix bug in selectbysearchstring and selectbyletter,
	reported by John Plevyak <jplevyak at acm.org>.


2003-05-06  Jörg Lehmann  <joerg@luga.de>

	* mainscreen.py: Catch curses.curs_set exception (reported
	by roland at steeltorch.com.


2003-05-05  Jörg Lehmann  <joerg@luga.de>

	* More database work and tests. Genres now contain indices
	to albums and songs

	* album -> albumid at appropriate places

	* introduced song.id, but not yet used


2003-05-01  Jörg Lehmann  <joerg@luga.de>

	* Integrated and polished some patches by Iñigo Serna
	<inigoserna at telefonica.net>: Currently playing song gets different colour and
	stays centred in playlist. Furthermore, some sanity checks of the id3 tags
	have been included. Finally, as suggested by him, a much nicer scrollbar
	has been implemented.

	* Support ossaudiodev module (and old oss module , of course) as
	suggested by Bill Kearney <wkearney99 at hotmail.com>.

	* Many fixes for bugs remaining from code restructuring.


2003-04-19  Jörg Lehmann  <joerg@luga.de>

	* New configuration system is complete now.


2003-04-18  Jörg Lehmann  <joerg@luga.de>

	* Massive rework of configuration file handling.
	Now it is possible to use ini-style file configuration files.
	Exceptions are for the moment the key bindings.


2003-04-17  Jörg Lehmann  <joerg@luga.de>

	* Network connectivity now via TCP instead of XML-RPC.


2003-04-13  Jörg Lehmann  <joerg@luga.de>

	* Reworked config file as first step versus a
	new config syntax. Import of the curses module
	is no longer necessary (except for the check
	whether the user has a color or a mono terminal,
	which often doesn't work, so ...)

	* Colors now have to be specified like in mutt
	"color foreground background" or "mono attribute".
	Foreground may contain the prefix "bright".

	* Accept command line options for debugging output
	and network functionality.

	* Implement first rough cut of network functionality
	via xmlrpc. Remote access to the database is now
	possible.


2003-04-12  Jörg Lehmann  <joerg@luga.de>

	* Do not show playlist window of xmms (oops, forgot that).

	* Added list of songs for albums (and root folder)

	* Released 1.12.2 from the 1.12.1 codebase, fixing a Python 2.2ism.


2003-04-06  Jörg Lehmann  <joerg@luga.de>

	* Add immediately played to before last played item of playlist.

	* Version 1.12.1 released.

	* New module hub, the former event hub + a simple request hub.

	* Major rework of database interface based upon new request hub.
	Database now runs as separate thread.

	* Requests for new songs now also use new request hub.


2003-04-05  Jörg Lehmann  <joerg@luga.de>

	* Some restructuring in the player code.

	* Implement player pause.

	* Flush buffers on player stop.

	* Immediately play selected song via ALT+Return or ALT+Enter.

	* Implemented shuffle function since it seemed to be very high on
	the PyTone user's wishlist...

	* Try to save state of playlist to dump file, if PyTone crashes.
	During the next restart, PyTone tries to reconstruct the playlist.

	* Be more verbose, if config.basedir and config.songddb are set
	to incorrect values.


2003-03-19  Jörg Lehmann  <joerg@luga.de>

	* slist.py: prevent invalid items state.

	* disable long traceback


2003-02-06  Jörg Lehmann  <joerg@luga.de>

	* updatedb.py script.

	* cleanup at various places

	* Version 1.12.0 released.


2003-02-04  Jörg Lehmann  <joerg@luga.de>

	* pcm.c: Don't free memory allocated by Python!


2003-02-03  Jörg Lehmann  <joerg@luga.de>

	* All *.py files: specify encoding (for Python 2.3)

	* Remove #!/usr/bin/env python for modules

	* pcm.c: Don't forget to free temporary buffer.


2003-01-30  Jörg Lehmann  <joerg@luga.de>

	* playerwin.py: Allow rating of currently playing song (via
	alt+1, ..., alt+5 -- better suggestions are always welcome).


2003-01-26  Jörg Lehmann  <joerg@luga.de>

	* Incorporated patch by Byron Ellacott <bje at apnic.net>
	adding Ogg Vorbis support.

	* iteminfowin.py. Fix display of song length.

	* pytone.py: Work around Python 2.1 gettext problem.

	* THANKS: added Byron Ellacott.

	* window.py: Don't unnecessarily trim title.

	* config.py, helpwin.py, mixerwin.py: Make automatic
	disappearing time configurable.

	* inputwin.py: remove unnecessary import of oss module, which
	prevents PyTone from working if it is not installed.

	* config.py, playlist.py: Make location where playlists are stored
	configurable.

	* config.py, slist.py: Make scrolling mechanism configurable `a la
	Mutt. Also use page up algorithm from mutt. Adapt to window size
	changes, as well!

	* config.py, item.py: Make position of virtual directories
	configurable.


2003-01-21  Jörg Lehmann  <joerg@luga.de>

	* Version 1.11.0 released.


2003-01-18  Jörg Lehmann  <joerg@luga.de>

	* new class playbackinfo. All players should work again.


2003-01-16  Jörg Lehmann  <joerg@luga.de>

	* Indices for genres and years. This gives a huge speedup
	for large databases.

	* item.py: new item method getname().


2003-01-14  Jörg Lehmann  <joerg@luga.de>

	* Implement song, album and artist rating. Choose song
	depending on rating upon random song insertion.


2003-01-13  Jörg Lehmann  <joerg@luga.de>

	* Implement random recursive insert. Reserve key "r" for
	this function, giving up the old behaviour.


2003-01-12  Jörg Lehmann  <joerg@luga.de>

	* config.py: New option autoregisterer, which allows to
	enable/disbale the song automatic searching for songs
	and playlists after the start of PyTone.

	* builddb.py: Manually populate song and playlist
	database.


2003-01-09  Jörg Lehmann  <joerg@luga.de>

	* item.py: New classes decade and decades, which allow
	to show only songs from a specify decade.


2003-01-06  Jörg Lehmann  <joerg@luga.de>

	* Some improvements/fixes for old songdb.py. Hopefully,
	this version is more stable for large databases.


2003-01-02  Jörg Lehmann  <joerg@luga.de>

	* Implement bsddb3 version of songdb.py. Probably not
	yet ready for next version.


2002-12-30  Jörg Lehmann  <joerg@luga.de>

	* players/madplayer.py: Set sample size to 4096 (instead of 4806,
	i.e. the size of an mp3 frame). This is much more friendlier to
	the sound device drivers! Thanks to Damjan Georgeivski
	<penguinista at mail.net.mk> for pointing this out.


2002-12-22  Jörg Lehmann  <joerg@luga.de>

	* Use MP3Info.py from http://www.omniscia.org/~vivake/python
	instead of old, modified mp3info.py from
	http://www.dotfunk.com/projects/mp3/. As a consequence, id3v2
	tags are now supported.


2002-12-21  Jörg Lehmann  <joerg@luga.de>

	* Version 1.10.0 released.

	* madplayer.py: Manual song forward works again.


2002-12-19  Jörg Lehmann  <joerg@luga.de>

	* players/madplayer.py: Do not crossfade, if two songs follow
	each other on an album. Kill the gap between the songs instead.


2002-12-15  Jörg Lehmann  <joerg@luga.de>

	* Implement genre list: New database schema, permitting efficient
	search for items belonging to a given genre. New items: genres,
	genre and filtereditem. The latter one can be used to display
	only a subset of the directory hierarchy.


2002-12-14  Jörg Lehmann  <joerg@luga.de>

	* More refactoring: merge the two filelist classes. The filesystem
	view is now provided by a virtual folder in item.py.

	* filelist.py: Implemented jump functions to the random list and
	the filesystem view.

	* filelist.py: remove generaterandomlist.

	* item.py: Refactoring. New method cmpitem of diritem classes.
	Everything should work now properly.

	* window.py, mainscreen.py: Reimplemented window resizing, which
	is now much more robust. However, there are still some crashes
	of xterm.

	* config.py: Renamed "selectedsong" -> "selected song", etc. in
	colors. Added new field "artist/album" and "selected
	artist/album".

	* iteminfo.py: Recognise new items.


2002-12-12  Jörg Lehmann  <joerg@luga.de>

	* Refactor filelist code: remove filelistitem, move logic
	to item, etc.

	* Allow resizing of terminal (not fully complete yet).


2002-12-11  Jörg Lehmann  <joerg@luga.de>

	* New module  purgedb.py: This module allows
	to delete no longer existent songs from the database.


2002-12-10  Jörg Lehmann  <joerg@luga.de>

	* Better formatting of last played time.

	* Playlists are now also stored and displayed in
	database and database view, respectively.

	* Random songs are now also accesible via the
	main database view.


2002-12-08  Jörg Lehmann  <joerg@luga.de>

	* Fix recursive insertion of top and last played songs.

	* Directory like items now are able to return their
	content.


2002-12-06  Jörg Lehmann  <joerg@luga.de>

	* Sort songs by tracknr if possible. Otherwise
	use name.

	* First implementation of top and last played lists.

	* Fill up caches after song auto registering.


2002-11-30  Jörg Lehmann  <joerg@luga.de>

	* Version 1.9.7 released.

	* More color work.

	* Limit size of help window (therby preventing a crash occuring
	for small terminal sizes) and make it scrollable.


2002-11-27  Jörg Lehmann  <joerg@luga.de>

	* Initial support for colors. Customizable via config.py.

	* Enter and insert a directory only if the click has hit the
	actual string. Otherwise only select the corresponding line.
	I hope, this is more intuitive then the old behaviour.


2002-11-25  Jörg Lehmann  <joerg@luga.de>

	* Customize appearance of mixerwin and inputwin: one
	can now choose between a popup and a status bar variant.

	* inputwin.py: popup variant adjusts statusbar.

	* mixerwin.py: popup variant adjusts statusbar.

	* pytone.py: Use pytone base dir as base dir for locales.
	This has to be changed, if we/someone else install the
	.mo files under their proper location.


2002-11-25  Jörg Lehmann  <joerg@luga.de>

	* New module inputwin for a generic input window (for search
	strings, filenames, etc).


2002-11-24  Jörg Lehmann  <joerg@luga.de>

	* More mouse work: Hide mixer and help win on mouse clicks.

	* window.py: walk through all panels in enclose() method

	* slist.py: Fix erroneous use of window width instead of height
	which prevented correct scrolling in list windows.

	* playlist.py: Localize load and save prompts.


2002-11-23  Jörg Lehmann  <joerg@luga.de>

	* Initial work for mouse support.


2002-11-03  Jörg Lehmann  <joerg@luga.de>

	* slist.py: Cleanup: remove active flag; use focus of
	corresponding window instead.

	* filelistwin.py: Activate file list window upon end of search.
	Search should work again (Thanks to Andy Bourges for reporting
	this bug).

	* player.py: Also sleep in STOP state to prevent unnecessary CPU
	utilization.

	* Code cleanup at various places.

	* Added MANIFEST.in and updated setup.py: Include AUTHORS,
	COPYING, ChangeLOG, TODO, and *.mo files.


2002-11-02  Jörg Lehmann  <joerg@luga.de>

	* mixerwin.py: Localize mixer text.

	* iteminfowin.py: Fix small bug, occurring if no ID3 tag is
	present.

	* helper.py: New function from Python Cookbook: extended
	traceback.

	* pytone.py: Print extended traceback when an uncaught exception
	is raised.

	* iteminfowin.py: Make geometry calculations more clean. Use
	of spacer now dependent on window width.

	* pytone.py: Removed obsolete reference to hipplayer module.


2002-11-01  Jörg Lehmann  <joerg@luga.de>

	* Localization work all over the place.

	* filelist.py: Fix bug occurring when entering an empty
	directory (Thanks to Andy Bourges for the bug report).


2002-10-27  Jörg Lehmann  <joerg@luga.de>

	* Version 1.9.6

	* New handling of window focus: New event focuschanged instead
	of old activewinchanged. The actual is granted to the panel
	which is on top of the panel stack.

	* Help and mixer windows now disappear upon keypress events.

	* Moved function descriptions from config.py to new help.py.
	Later on, we shall localize them via the gettext module.

	* timer.py: Return immediately, if no alarms are pending.


2002-10-17  Jörg Lehmann  <joerg@luga.de>

	* timer.py: New timer service, which sends events at specified
	times.

	* events.py: New hidewindow event.

	* window.py: Allow hiding of window. Also window.top()

	* helpwin.py, mixerwin.py: Automatically hide after 5 seconds.


2002-10-13  Jörg Lehmann  <joerg@luga.de>

	* songdb.py: Implemented caching of list of all artists (and
	already existent caching of all songs).

	* filelist.py: Don't store list content in shistory, anymore.

	* Implement context sensitivity of help window.


2002-10-12  Jörg Lehmann  <joerg@luga.de>

	* Implemented automatic adjustment of statusbar to
	keybinding.

	* Use curses.panel.

	* First version of help window.


2002-10-12  Jörg Lehmann  <joerg@luga.de>

	* item.py: Prevent empty artist names


2002-09-20  Jörg Lehmann  <joerg@luga.de>

	* Version 1.9.5

	* item.py: Try to be a little more intelligent during the
	capitalization of song, album and artist names. For instance, only
	force the first character of a word to be a capital one. Prevent
	empty album and artist names, as well.

	* filelist.py and songdb.py: Check for access permission of
	directories and files.

	* madplayer.py: Catch exception during mp3file object creation.


2002-09-20  Jörg Lehmann  <joerg@luga.de>

	* All players are now running in a separate thread.

	* Factored out most of player control logic to player.py.


2002-09-10  Jörg Lehmann  <joerg@luga.de>

	* Implement write lock for song database.

	* Automatic registering of songs proceeds now in separate thread.

	* slist.py: Fix incorrect insertion of new items leading to
	unsorted lists.

	* Remove timer events, leading to notable decrease of idle CPU
	usage.

	* Add ALT+RightArrow to default key bindings for recursive
	insertion of songs.


2002-09-08  Jörg Lehmann  <joerg@luga.de>

	* New event handling: Queue generated events and process them not
	until an explicit call of a new process method.  This makes event
	handling in a multithreaded environment much simpler. The new
	class eventhub collects the eventchannels from the different
	threads.

	* madplayer.py: Integrate madplayer class into player class, which
	is made possible owing to new event handling.

	* madplayer.py: Generate playbackinfochaned events only if there
	was really a change.


2002-09-05  Jörg Lehmann  <joerg@luga.de>

	* Version 1.9.4

	* Stopping works again in autoplay mode.


2002-08-31  Jörg Lehmann  <joerg@luga.de>

	* filelistwin.py: Corrected quick search key logic.

	* Moved handling of global key bindings to pytone.py. Introduced
	new events to signalize playlist changes.

	* playlist.py: Don't save playlist, if name is empty.

	* Implemented autoplay player option permitting automatic start of
	playing, if playlist is not empty.

	* More comments in config.db.

	* players/mpg123player.py: Now also works with Python 2.1.  Also
	fixed error, where playback info was not displayed correctly.

	* helper.py: Q&D solution to make debug output configurable.


2002-08-30  Jörg Lehmann  <joerg@luga.de>

	* Made key bindings configurable wherever possible.

	* Added python modules to setup.py to ease creation of
	distribution.

	* pcm.c: Pad with zeros for crossfading of two buffers with
	unequal lengths.

	* players/madplayer.py: Adapted crossfading logic to change in
	pcm.c.

	* playerwin.py: Corrected minor error, where title of song was
	show although playing has already finished.


2002-08-29  Jörg Lehmann  <joerg@luga.de>

	* Fixed the specification of the libao device. It is now also
	possible to specify arbitrary options. Added aRts based player
	sample config to config.py.

	* Added setup.py for building of pcm extension module.

	* RightArrow in playlist window now also moves to database window.


2002-08-28  Jörg Lehmann  <joerg@luga.de>

	* Version 1.9.3, aka ready for release

	* Added license headers to all python files except config.py

	* Renamed PyJuke -> PyTone following a suggestion by
	Harald Görl (goerl at luga.de)


2002-08-25  Jörg Lehmann  <joerg@luga.de>

	* Version 1.9.2

	* Added scrollbars and allow to turn them on/off via config.py

	* Corrected error in madplayer.py, where too many new songs
	were requested

	* madplayer.py: return artist + song title as window title

	* madplayer.py: indicate crossfading in title

	* madplayer.py: made use of sound device configurable. Still need
	to abstract device options!

	* Minor fixes to documentation in index.html

	* Added simple style.css for index.html


2002-08-22  Jörg Lehmann  <joerg@luga.de>

	* Version 1.9

	* Crossfading for internal libmad based player now
	works

	* Restructured and documented config.py

	* Added README with documentation

	* Added ChangeLog, AUTHORS and COPYING

	* Added some licence headers


2002-08-08  Jörg Lehmann  <joerg@luga.de>

	* Released 1.0 for Rothsee party