Ubuntu

Merge lp:~logan/ubuntu/quantal/pytone/new-upstream into lp:ubuntu/quantal/pytone

Proposed by Logan Rosen on 2012-07-23
Status: Merged
Merged at revision: 11
Proposed branch: lp:~logan/ubuntu/quantal/pytone/new-upstream
Merge into: lp:ubuntu/quantal/pytone
Diff against target: 6474 lines (+2169/-1790) 42 files modified
To merge this branch: bzr merge lp:~logan/ubuntu/quantal/pytone/new-upstream
Reviewer Review Type Date Requested Status
Barry Warsaw Approve on 2012-08-14
Ubuntu branches 2012-07-23 Pending
Review via email: mp+116204@code.launchpad.net
To post a comment you must log in.
Barry Warsaw (barry) wrote :

Thanks for your contribution to Ubuntu! I'm going to go ahead and upload this for you, but I have a few comments.

First, there is a bug in the upstream version. If you have no ~/.pytone directory, one gets created for you, but the script will crash when it tries to log this information:

# pytone
Traceback (most recent call last):
  File "/usr/bin/pytone", line 54, in <module>
    log.info(_("created PyTone directory ~/.pytone"))
NameError: name 'log' is not defined

Subsequent runs of /usr/bin/pytone succeed as normal. Would you please report this bug upstream and/or put together a fix for this problem?

Also, please consider submitting a bug in Debian for the new version. It's ultimately best if Ubuntu stays in sync with Debian, so submitting this bug will mean we'll need to resync to Debian when/if it gets updated there. If you do submit a bug in Debian for the update, please also submit one in Launchpad on the Ubuntu package and link the two together. That will make it easier to resync the packages later.

review: Approve
Barry Warsaw (barry) wrote :

Never mind about submitting a bug in Debian for the new version. One already exists here: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=660292

Preview Diff

1=== added file '._AUTHORS'
2Binary files ._AUTHORS 1970-01-01 00:00:00 +0000 and ._AUTHORS 2012-07-23 07:16:20 +0000 differ
3=== added file '._COPYING'
4Binary files ._COPYING 1970-01-01 00:00:00 +0000 and ._COPYING 2012-07-23 07:16:20 +0000 differ
5=== added file '._THANKS'
6Binary files ._THANKS 1970-01-01 00:00:00 +0000 and ._THANKS 2012-07-23 07:16:20 +0000 differ
7=== added file '._TODO'
8Binary files ._TODO 1970-01-01 00:00:00 +0000 and ._TODO 2012-07-23 07:16:20 +0000 differ
9=== added file '._pytone'
10Binary files ._pytone 1970-01-01 00:00:00 +0000 and ._pytone 2012-07-23 07:16:20 +0000 differ
11=== added file '._pytonectl'
12Binary files ._pytonectl 1970-01-01 00:00:00 +0000 and ._pytonectl 2012-07-23 07:16:20 +0000 differ
13=== added file '._setup.py'
14Binary files ._setup.py 1970-01-01 00:00:00 +0000 and ._setup.py 2012-07-23 07:16:20 +0000 differ
15=== modified file 'ChangeLog'
16--- ChangeLog 2007-08-06 07:12:52 +0000
17+++ ChangeLog 2012-07-23 07:16:20 +0000
18@@ -1,5 +1,174 @@
19+2010-06-16 Jörg Lehmann <joerg@luga.de>
20+
21+ * Version 3.0.3 released.
22+
23+
24+2010-02-27 Jörg Lehmann <joerg@luga.de>
25+
26+ * Do not hide windows in focuschanged events in order to not trigger
27+ further focuschanged events.
28+
29+
30+2009-10-11 Jörg Lehmann <joerg@luga.de>
31+
32+ * Internal mixer implemented.
33+
34+
35+2009-09-15 Jörg Lehmann <joerg@luga.de>
36+
37+ * services/songdbs/sqlite.py: Delete song from database when querying
38+ it and it is no longer present on disk.
39+
40+
41+2009-08-23 Jörg Lehmann <joerg@luga.de>
42+
43+ * conf/pytonerc: Add notify-send as an example for the song change
44+ command which seems to be much more common nowadays (thanks to Michael
45+ Hartmann <michael at speicherleck dot de> for pointing this out).
46+
47+
48+2009-08-23 Jörg Lehmann <joerg@luga.de>
49+
50+ * mixerwin.py: Encode unicode string (thanks to Michael Hartmann
51+ <michael at speicherleck dot de> for reporting this issue).
52+
53+
54+2009-08-22 Jörg Lehmann <joerg@luga.de>
55+
56+ * Create .pytone directory earlier in the initilization phase (thanks to
57+ Jean Jordaan <jean dot jordaan at gmail dot com> for pointing this out).
58+
59+
60+2009-08-12 Jörg Lehmann <joerg@luga.de>
61+
62+ * filelist.py: Use updatedir() instead of readdir() when deleting songs
63+ to prevent that the current selection gets lost.
64+
65+ * playerwin.py: Fix error when trying to rate the currently playing
66+ * song while there is no such one.
67+
68+
69+2009-05-31 Jörg Lehmann <joerg@luga.de>
70+
71+ * Version 3.0.2 released.
72+
73+
74+2009-03-04 Jörg Lehmann <joerg@luga.de>
75+
76+ * services/songdbs/sqlite.py: Do not force metadata reread when
77+ querying songs (as suggested by Tom Diedrich <tom at diedrich2 dot de>).
78+
79+ * services/songdbs/sqlite.py: Raise DenyRequest in
80+ autoregisterer_queryregistersong method if request is not addressed
81+ at this database (thanks to Tom Diedrich <tom at diedrich2 dot de>
82+ for the patch).
83+
84+
85+2008-12-13 Jörg Lehmann <joerg@luga.de>
86+
87+ * eventy.py: Fix a couple of __repr__ methods (fixing the skip song
88+ functionality).
89+
90+ * config.py, pytone.py: Make switching on of mouse support a config
91+ option (as suggested by Dominik Bruhn <dominik at dbruhn dot de>).
92+
93+
94+2008-11-27 Jörg Lehmann <joerg@luga.de>
95+
96+ * pytonectl.py: Encode output (Thanks to Dominik Bruhn <dominik at
97+ dbruhn dot de> for the patch).
98+
99+
100+2008-08-16 Jörg Lehmann <joerg@luga.de>
101+
102+ * services/player.py, services/players/*.py, services/playlist.py:
103+ Make sending of song_played and song_skipped events more local.
104+
105+ * statswin.py: Encode output.
106+
107+ * Use %r in __repr__ and replace __str__ by __repr__ at various places
108+ fixing an error with Python 2.5 and above, reported by Eliot
109+ Blennerhassett <eliot at blennerhassett dot gen dot nz>.
110+
111+
112+2008-08-07 Jörg Lehmann <joerg@luga.de>
113+
114+ * config.py: Also allow "alsa05" driver.
115+
116+ * bufferedao.c: Adapt to PEP 353 (Thanks to Philipp Jocham <philipp dot
117+ jocham at gmx dot net> for the patch).
118+
119+ * services/players/mpg123.py: Make player working again after previous
120+ internal API changes (Thanks to Philipp Jocham <philipp dot jocham at
121+ gmx dot net> for the patch).
122+
123+
124+2008-07-16 Jörg Lehmann <joerg@luga.de>
125+
126+ * config.py: Allow "pulse" in driver arguments for players (Thanks to
127+ Eliot Blennerhassett <eliot atblennerhassett dot gen dot nz>).
128+
129+
130+2008-02-18 Jörg Lehmann <joerg@luga.de>
131+
132+ * src/encoding.py: Add missing import (Thanks
133+ to Philipp Jocham <philipp dot jocham at gmx dot net> for the patch).
134+
135+
136+2008-02-18 Jörg Lehmann <joerg@luga.de>
137+
138+ * services/songdbs/sqlite.py: Fix a bug in the _song_update function (Thanks
139+ to Philipp Jocham <philipp dot jocham at gmx dot net> for the patch).
140+
141+ * log.py: Open debug file in utf-8 encoding (Thanks
142+ to Philipp Jocham <philipp dot jocham at gmx dot net> for the patch).
143+
144+
145+2008-01-26 Jörg Lehmann <joerg@luga.de>
146+
147+ * metadata.py: Fix a bug in the Ogg Vorbis replaygain handling (Thanks
148+ to Philipp Jocham <philipp dot jocham at gmx dot net> for the patch).
149+
150+
151+2007-08-15 Jörg Lehmann <joerg@luga.de>
152+
153+ * services/songdb.py: Request songs from database with id == "main"
154+ instead of None to prevent a lockup (thanks to Kurt Gysin <pytoner_ml
155+ at oberon dot on-the-web dot ch> for reporting this problem).
156+
157+
158+2007-08-14 Jörg Lehmann <joerg@luga.de>
159+
160+ * Version 3.0.1 released.
161+
162+ * mainscreen.py: Reenable lyrics display.
163+
164+
165+2007-08-13 Jörg Lehmann <joerg@luga.de>
166+
167+ * item.py: Implement played songs filter, which shows a virtual directory
168+ of all songs which have been played at least once.
169+
170+ * filelistwin.py, filelist.py, item.py, config.py: Implement focus on
171+ search string, which displays a virtual directory of entries matching
172+ the given search string (i.e., artist/album/title being similar to
173+ this searchs string)
174+
175+
176+2007-08-12 Jörg Lehmann <joerg@luga.de>
177+
178+ * services/songdbs/sqlite.py: Implement clearstats.
179+
180+
181+2007-08-02 Jörg Lehmann <joerg@luga.de>
182+
183+ * item.py: Fix tag filtering.
184+
185+
186 2007-08-01 Jörg Lehmann <joerg@luga.de>
187
188+ * Version 3.0.0 released.
189+
190 * network.py, pytonectl.py, item.py: Make pytonectl work again, in particular
191 update allowed modules for unpickling and prevent metadata fetches during
192 unpickling.
193@@ -33,27 +202,27 @@
194
195 2006-09-04 Jörg Lehmann <joerg@luga.de>
196
197- * Use platform byte order for ao devices.
198+ * Use platform byte order for ao devices.
199
200
201 2006-08-28 Jörg Lehmann <joerg@luga.de>
202
203- * Merge changes from Rothsee version:
204- - Set correct version for new databases
205- - Output correct versions during db upgrade
206+ * Merge changes from Rothsee version:
207+ - Set correct version for new databases
208+ - Output correct versions during db upgrade
209
210
211 2006-08-20 Jörg Lehmann <joerg@luga.de>
212
213- * Database version 6: Store bitrate, samplerate, vbr, size, tracknumber, trackcount,
214- disknumber, diskccount, and replaygain information in database.
215-
216- * item.py: Display song information as suggested by Dag Wieers
217- <dag at wieers dot com>.
218-
219- * metadata.py: Add replaygain support to eyeD3 decoder
220-
221- * services/players/internal.py: Take disk number into account.
222+ * Database version 6: Store bitrate, samplerate, vbr, size, tracknumber, trackcount,
223+ disknumber, diskccount, and replaygain information in database.
224+
225+ * item.py: Display song information as suggested by Dag Wieers
226+ <dag at wieers dot com>.
227+
228+ * metadata.py: Add replaygain support to eyeD3 decoder
229+
230+ * services/players/internal.py: Take disk number into account.
231
232
233 2006-08-15 Jörg Lehmann <joerg@luga.de>
234@@ -77,2323 +246,2323 @@
235
236 2006-08-08 Jörg Lehmann <joerg@luga.de>
237
238- * Make keybindings for rating of currently playing songs configurable
239- via playerratecurrentsong1, ... playerratecurrentsong5 in the
240- keybindings.general section of the pytonerc file (thanks to Alexander
241- Wirt <formorer at formorer dot de> for suggesting this).
242+ * Make keybindings for rating of currently playing songs configurable
243+ via playerratecurrentsong1, ... playerratecurrentsong5 in the
244+ keybindings.general section of the pytonerc file (thanks to Alexander
245+ Wirt <formorer at formorer dot de> for suggesting this).
246
247
248 2005-12-05 Jörg Lehmann <joerg@luga.de>
249
250- * services/player.py: Start player only after the playlist service has
251- been started since playlist requests may already be issued during the
252- player startup. This fixes an long-standing problem reported by several
253- people on the mailing list.
254+ * services/player.py: Start player only after the playlist service has
255+ been started since playlist requests may already be issued during the
256+ player startup. This fixes an long-standing problem reported by several
257+ people on the mailing list.
258
259
260 2005-11-07 Jörg Lehmann <joerg@luga.de>
261
262- * filelist.py: Update top after changing back into a directory as the
263- window size may have changed in the meantime (thanks to Martin Fenelon
264- <fenm at freeuk dot com> for reporting this problem).
265+ * filelist.py: Update top after changing back into a directory as the
266+ window size may have changed in the meantime (thanks to Martin Fenelon
267+ <fenm at freeuk dot com> for reporting this problem).
268
269
270 2005-09-19 Jörg Lehmann <joerg@luga.de>
271
272- * mainscreen.py: Call correct getmaxyx method fixing problem with
273- small terminals during startup (thanks to Dag Wieers
274- <dag at wieers dot com> for reporting this problem).
275+ * mainscreen.py: Call correct getmaxyx method fixing problem with
276+ small terminals during startup (thanks to Dag Wieers
277+ <dag at wieers dot com> for reporting this problem).
278
279- * services/player.py: Move closing of audiodevice right before
280- blocking process() call (hopefully fixing a problem reported
281- by Dag Wieers <dag at wieers dot com>).
282+ * services/player.py: Move closing of audiodevice right before
283+ blocking process() call (hopefully fixing a problem reported
284+ by Dag Wieers <dag at wieers dot com>).
285
286
287 2005-09-13 Jörg Lehmann <joerg@luga.de>
288
289- * Version 2.3.0 released.
290+ * Version 2.3.0 released.
291
292
293 2005-09-11 Jörg Lehmann <joerg@luga.de>
294
295- * plugings/osdtitle.py, plugins/termtitle.py: Apply
296- patch by Dag Wieers <dag at wieers dot com> which adds
297- checking for no song being played.
298+ * plugings/osdtitle.py, plugins/termtitle.py: Apply
299+ patch by Dag Wieers <dag at wieers dot com> which adds
300+ checking for no song being played.
301
302
303 2005-09-08 Jörg Lehmann <joerg@luga.de>
304
305- * services/songdbs/local.py: Rewrite db upgrade code to allow
306- non-atomic upgrade, as well. Prompt the user before an upgrade to
307- ask whether a non-atomic or atomic upgrade has to be performed.
308+ * services/songdbs/local.py: Rewrite db upgrade code to allow
309+ non-atomic upgrade, as well. Prompt the user before an upgrade to
310+ ask whether a non-atomic or atomic upgrade has to be performed.
311
312
313 2005-08-24 Jörg Lehmann <joerg@luga.de>
314
315- * Check earlier for dbfile != "db".
316+ * Check earlier for dbfile != "db".
317
318- * item.py: Fix filters handling in songs class.
319+ * item.py: Fix filters handling in songs class.
320
321
322 2005-08-23 Jörg Lehmann <joerg@luga.de>
323
324- * Add error reporting to bufferedao extension module.
325+ * Add error reporting to bufferedao extension module.
326
327
328 2005-08-22 Jörg Lehmann <joerg@luga.de>
329
330- * Disabled automatic closing of help window by default.
331+ * Disabled automatic closing of help window by default.
332
333- * Added changeable play speed support (many thanks to Richard A. Smith
334- <smithbone at gmail dot com> for providing the patch).
335+ * Added changeable play speed support (many thanks to Richard A. Smith
336+ <smithbone at gmail dot com> for providing the patch).
337
338
339 2005-08-21 Jörg Lehmann <joerg@luga.de>
340
341- * Merged item-rework branch, which contains a new filter code.
342- The new code makes the unfiltered case a special case of the filtered
343- one. As a result, more than one filter can be applied, e.g., filtering
344- for all songs in a certain genre of a given decade and with a given
345- rating is now possible. Furthermore, every index now contains a
346- (nearly) full directory hierarchy, thus allowing things like showing
347- the top-played songs of a certain genre.
348+ * Merged item-rework branch, which contains a new filter code.
349+ The new code makes the unfiltered case a special case of the filtered
350+ one. As a result, more than one filter can be applied, e.g., filtering
351+ for all songs in a certain genre of a given decade and with a given
352+ rating is now possible. Furthermore, every index now contains a
353+ (nearly) full directory hierarchy, thus allowing things like showing
354+ the top-played songs of a certain genre.
355
356
357 2005-08-19 Jörg Lehmann <joerg@luga.de>
358
359- * Get rid of multi-file database layout:
360- - convert old layout automatically
361- - leave configuration file switches basename and dbfile intact but
362- warn the user when they are non-empty
363- - in a next step, we will set the default value of the basename
364- switch to an empty value (when presumably all databases have been
365- converted)
366- - finally as a final step, we remove the switches and require
367- that the users change their config files
368+ * Get rid of multi-file database layout:
369+ - convert old layout automatically
370+ - leave configuration file switches basename and dbfile intact but
371+ warn the user when they are non-empty
372+ - in a next step, we will set the default value of the basename
373+ switch to an empty value (when presumably all databases have been
374+ converted)
375+ - finally as a final step, we remove the switches and require
376+ that the users change their config files
377
378- * Database version 5: do not longer index by years but by decades
379- which removes many special code paths at various places in the db
380- code.
381+ * Database version 5: do not longer index by years but by decades
382+ which removes many special code paths at various places in the db
383+ code.
384
385
386 2005-08-11 Jörg Lehmann <joerg@luga.de>
387
388- * bufferedao.c: New C extension module corresponding to
389- services/players/interal/buffereddevice with an ao device. The
390- advantage of the C module is that it does not have to rely on holding
391- the GIL when doing the output, which should help preventing sound
392- dropouts.
393+ * bufferedao.c: New C extension module corresponding to
394+ services/players/interal/buffereddevice with an ao device. The
395+ advantage of the C module is that it does not have to rely on holding
396+ the GIL when doing the output, which should help preventing sound
397+ dropouts.
398
399- * services/players/internal.py: Make use of new extension module
400- bufferedao.
401+ * services/players/internal.py: Make use of new extension module
402+ bufferedao.
403
404
405 2005-08-10 Jörg Lehmann <joerg@luga.de>
406
407- * services/songdbs/internal.py: Checkpoint database regularly during
408- registering of songs to prevent oversized transaction logs.
409-
410- * services/songdbs/internal.py: Replace quadratic in number of songs
411- algorithm by a linear in time version to avoid huge system loads
412- at the end of the song registering process.
413-
414- * services/players/internal.py: Do not open audiodevice without need.
415+ * services/songdbs/internal.py: Checkpoint database regularly during
416+ registering of songs to prevent oversized transaction logs.
417+
418+ * services/songdbs/internal.py: Replace quadratic in number of songs
419+ algorithm by a linear in time version to avoid huge system loads
420+ at the end of the song registering process.
421+
422+ * services/players/internal.py: Do not open audiodevice without need.
423
424
425 2005-08-09 Jörg Lehmann <joerg@luga.de>
426
427- * help.py, helpwin.py, statusbar.py: Introduced getkeyname function
428- which has a fallback solution for unnamed keys (thanks to Troels
429- Vognsen <bashfalcon at gmail dot com> for reporting this problem).
430+ * help.py, helpwin.py, statusbar.py: Introduced getkeyname function
431+ which has a fallback solution for unnamed keys (thanks to Troels
432+ Vognsen <bashfalcon at gmail dot com> for reporting this problem).
433
434
435 2005-08-03 Jörg Lehmann <joerg@luga.de>
436
437- * Normalize all paths in config files.
438+ * Normalize all paths in config files.
439
440- * Rework dbstats system.
441+ * Rework dbstats system.
442
443
444 2005-08-02 Jörg Lehmann <joerg@luga.de>
445
446- * services/songdb.py. Measure cache size not by number
447- of stored requests but by the number of objects the requests
448- refer to.
449-
450- * services/songdb.py: rename resultcache -> requestcache.
451-
452- * conf/pytonerc, config.py, services/songdb.py: Add new section
453- database with currently only one option requestcachesize, which
454- allows one to configure the maximal number of objects contained
455- in the cache.
456-
457- * item.py: Create genres/ratings/etc. instances only once to
458- permit the caching of the requests involving them.
459-
460- * statswin.py, config.py, conf/pytonerc: New window for
461- statistical information about databases and the request cache
462- (accessible via "%").
463-
464- * Various updates in German PyTone.po.
465-
466-
467-2005-07-16 Jörg Lehmann <joerg@luga.de>
468-
469- * plugin.py: Use thread-local channel in threadedplugin to make it
470- actually a threaded plugin.
471-
472- * log.py: Add time and current thread to debugging output and prune
473- common path from module name.
474-
475-
476-2005-07-16 Jörg Lehmann <joerg@luga.de>
477-
478- * filelist.py. Update window contents in filelistjumptosong().
479-
480- * plugin.py. Daemonize threaded plugins, in order to prevent a blocking of misbehaved plugins
481- on shutdown.
482-
483- * Initial checkin into Subversion repository.
484+ * services/songdb.py. Measure cache size not by number
485+ of stored requests but by the number of objects the requests
486+ refer to.
487+
488+ * services/songdb.py: rename resultcache -> requestcache.
489+
490+ * conf/pytonerc, config.py, services/songdb.py: Add new section
491+ database with currently only one option requestcachesize, which
492+ allows one to configure the maximal number of objects contained
493+ in the cache.
494+
495+ * item.py: Create genres/ratings/etc. instances only once to
496+ permit the caching of the requests involving them.
497+
498+ * statswin.py, config.py, conf/pytonerc: New window for
499+ statistical information about databases and the request cache
500+ (accessible via "%").
501+
502+ * Various updates in German PyTone.po.
503+
504+
505+2005-07-16 Jörg Lehmann <joerg@luga.de>
506+
507+ * plugin.py: Use thread-local channel in threadedplugin to make it
508+ actually a threaded plugin.
509+
510+ * log.py: Add time and current thread to debugging output and prune
511+ common path from module name.
512+
513+
514+2005-07-16 Jörg Lehmann <joerg@luga.de>
515+
516+ * filelist.py. Update window contents in filelistjumptosong().
517+
518+ * plugin.py. Daemonize threaded plugins, in order to prevent a blocking of misbehaved plugins
519+ on shutdown.
520+
521+ * Initial checkin into Subversion repository.
522
523
524 2005-06-30 Jörg Lehmann <joerg@luga.de>
525
526- * plugin.py: Use init() method instead of start(), which has a
527- different meaning for threads. The plugins currently distributed
528- with PyTone have been changed in this regard.
529+ * plugin.py: Use init() method instead of start(), which has a
530+ different meaning for threads. The plugins currently distributed
531+ with PyTone have been changed in this regard.
532
533- * plugins/audioscrobbler/scrobbler.py: Fix typos in backlog code.
534+ * plugins/audioscrobbler/scrobbler.py: Fix typos in backlog code.
535
536
537 2005-06-28 Jörg Lehmann <joerg@luga.de>
538
539- * config.py: Be more liberal concerning the accepted section names
540- (patch by Dag Wieers <dag at wieers dot com>).
541+ * config.py: Be more liberal concerning the accepted section names
542+ (patch by Dag Wieers <dag at wieers dot com>).
543
544
545 2005-06-20 Jörg Lehmann <joerg@luga.de>
546
547- * Version 2.2.4 released.
548-
549- * window.py: Include a workaround by Dag Wieers <dag at wieers dot com>
550- which prevents flickering when switching between the filelist and database
551- windows.
552-
553- * plugins: Include audioscrobbler plugin contributed by Nicolas
554- Évrard <nicoe at altern dot org>).
555-
556- * config.py: Rename listen to bind in network section.
557+ * Version 2.2.4 released.
558+
559+ * window.py: Include a workaround by Dag Wieers <dag at wieers dot com>
560+ which prevents flickering when switching between the filelist and database
561+ windows.
562+
563+ * plugins: Include audioscrobbler plugin contributed by Nicolas
564+ Évrard <nicoe at altern dot org>).
565+
566+ * config.py: Rename listen to bind in network section.
567
568
569 2005-06-06 Jörg Lehmann <joerg@luga.de>
570
571- * Rewrite plugin loader to use imp module: Use imp module to specify
572- plugin search path and log errors instead of aborting
573+ * Rewrite plugin loader to use imp module: Use imp module to specify
574+ plugin search path and log errors instead of aborting
575
576- * mainscreen.py: Use getmaxyx() code provided by Dag Wieers <dag at
577- wieers dot com>.
578+ * mainscreen.py: Use getmaxyx() code provided by Dag Wieers <dag at
579+ wieers dot com>.
580
581
582 2005-06-04 Jörg Lehmann <joerg@luga.de>
583
584- * events.py: Renamed attribute songs -> items in playlistchanged
585- event.
586+ * events.py: Renamed attribute songs -> items in playlistchanged
587+ event.
588
589
590 2005-05-28 Jörg Lehmann <joerg@luga.de>
591
592- * item.py: Import _genrandomchoice function needed for random
593- selections of filesystem directories from services.songdb, where
594- it was moved to some time ago (thanks to Dag Wieers <dag at wieers
595- dot com> for reporting this issue).
596+ * item.py: Import _genrandomchoice function needed for random
597+ selections of filesystem directories from services.songdb, where
598+ it was moved to some time ago (thanks to Dag Wieers <dag at wieers
599+ dot com> for reporting this issue).
600
601
602 2005-05-22 Jörg Lehmann <joerg@luga.de>
603
604- * mainscreen.py: Force minimal height and width of window.
605+ * mainscreen.py: Force minimal height and width of window.
606
607
608 2005-05-18 Jörg Lehmann <joerg@luga.de>
609
610- * iteminfowin.py: Fix some small bugs in the songchanged event
611- handler.
612-
613- * iteminfowin.py: Allow toggeling between different states: show
614- information about either the currently selected song or the song
615- being played on the configured players.
616-
617- * config.py: Add new option toggleiteminfowindow in
618- keybindings.general section.
619-
620-
621+ * iteminfowin.py: Fix some small bugs in the songchanged event
622+ handler.
623+
624+ * iteminfowin.py: Allow toggeling between different states: show
625+ information about either the currently selected song or the song
626+ being played on the configured players.
627+
628+ * config.py: Add new option toggleiteminfowindow in
629+ keybindings.general section.
630+
631+
632 2005-05-17 Jörg Lehmann <joerg@luga.de>
633
634- * requests.py, services/songdb.py: Handle getlastplayedsongs as
635- other requests by just supplying another wrapper function.
636-
637- * playerwin.py: Do not close playerinfo file every time (thanks
638- to Dag Wieers <dag at wieers dot com> for the patch).
639-
640- * item.py: Zero-pad seconds (thanks to Dag Wieers <dag at wieers
641- dot com> for the patch).
642-
643- * Add xterm plugin contributed by <dag at wieers dot com>, which
644- sets the title of an xterm window according to the currently
645- playing song.
646+ * requests.py, services/songdb.py: Handle getlastplayedsongs as
647+ other requests by just supplying another wrapper function.
648+
649+ * playerwin.py: Do not close playerinfo file every time (thanks
650+ to Dag Wieers <dag at wieers dot com> for the patch).
651+
652+ * item.py: Zero-pad seconds (thanks to Dag Wieers <dag at wieers
653+ dot com> for the patch).
654+
655+ * Add xterm plugin contributed by <dag at wieers dot com>, which
656+ sets the title of an xterm window according to the currently
657+ playing song.
658
659
660 2005-05-11 Jörg Lehmann <joerg@luga.de>
661
662- * playlistwin.py: Check for playstarttime not being None before
663- referencing it (thanks to Stefan Wimmer <swimmer at xs4all dot nl>
664- for reporting this problem).
665+ * playlistwin.py: Check for playstarttime not being None before
666+ referencing it (thanks to Stefan Wimmer <swimmer at xs4all dot nl>
667+ for reporting this problem).
668
669- * services/playlist.py: Make immediate play of song working again
670- (thanks to Dag Wieers <dag at wieers dot com> for reporting this
671- problem).
672+ * services/playlist.py: Make immediate play of song working again
673+ (thanks to Dag Wieers <dag at wieers dot com> for reporting this
674+ problem).
675
676
677 2005-05-10 Jörg Lehmann <joerg@luga.de>
678
679- * config.py: replace all occurrences of server/port by networklocation
680-
681- * Make remote databases work again.
682-
683- * Remote players should at least partially work again.
684+ * config.py: replace all occurrences of server/port by networklocation
685+
686+ * Make remote databases work again.
687+
688+ * Remote players should at least partially work again.
689
690
691 2005-04-27 Jörg Lehmann <joerg@luga.de>
692
693- * Version 2.2.3 released.
694+ * Version 2.2.3 released.
695
696
697 2005-04-26 Jörg Lehmann <joerg@luga.de>
698
699- * Deactivate playlist window before initializing the playlist to
700- prevent issuing a wrong selectionchanged event (fixing a problem
701- reported by Stuart Pook <Stuart dot Pook at infres dot enst dot fr>).
702+ * Deactivate playlist window before initializing the playlist to
703+ prevent issuing a wrong selectionchanged event (fixing a problem
704+ reported by Stuart Pook <Stuart dot Pook at infres dot enst dot fr>).
705
706
707 2005-04-25 Jörg Lehmann <joerg@luga.de>
708
709- * services/players/internal.py: Prevent sound device from being
710- reopened when an already stopped player is being stopped again
711- (thanks to Stuart Pook <Stuart dot Pook at infres dot enst dot fr>
712- for pointing out this problem).
713+ * services/players/internal.py: Prevent sound device from being
714+ reopened when an already stopped player is being stopped again
715+ (thanks to Stuart Pook <Stuart dot Pook at infres dot enst dot fr>
716+ for pointing out this problem).
717
718- * services/players/internal.py: Daemonize bufferedaudiodevice
719- again.
720-
721+ * services/players/internal.py: Daemonize bufferedaudiodevice
722+ again.
723+
724
725 2005-04-21 Jörg Lehmann <joerg@luga.de>
726
727- * network.py: Ignore empty lines in _receiveobject instead of
728- reporting an error.
729+ * network.py: Ignore empty lines in _receiveobject instead of
730+ reporting an error.
731
732- * services/playlist.py: Make going back to previous song work
733- again (thanks to Johannes Segitz <johannes at segitz dot de> for
734- reporting this bug).
735+ * services/playlist.py: Make going back to previous song work
736+ again (thanks to Johannes Segitz <johannes at segitz dot de> for
737+ reporting this bug).
738
739
740 2005-04-20 Jörg Lehmann <joerg@luga.de>
741
742- * Ignore invalid database definitions unless there is at least one
743- valid database.
744+ * Ignore invalid database definitions unless there is at least one
745+ valid database.
746
747
748 2005-03-30 Jörg Lehmann <joerg@luga.de>
749
750- * iteminfowin.py: Fix secondary player for songs in the playlist
751- window (thanks to Stefan Wimmer <swimmer at xs4all dot nl> for
752- reporting this problem).
753+ * iteminfowin.py: Fix secondary player for songs in the playlist
754+ window (thanks to Stefan Wimmer <swimmer at xs4all dot nl> for
755+ reporting this problem).
756
757
758 2005-03-23 Jörg Lehmann <joerg@luga.de>
759
760- * iteminfowin.py, item.py: Fix wrong window size of item info window.
761+ * iteminfowin.py, item.py: Fix wrong window size of item info window.
762
763- * slist.py: Fix crash occuring when deleting the contents of the
764- playlist (thanks to Stefan Wimmer <swimmer at xs4all dot nl> for
765- reporting this problem).
766-
767+ * slist.py: Fix crash occuring when deleting the contents of the
768+ playlist (thanks to Stefan Wimmer <swimmer at xs4all dot nl> for
769+ reporting this problem).
770+
771
772 2005-03-16 Jörg Lehmann <joerg@luga.de>
773
774- * Version 2.2.2 released.
775+ * Version 2.2.2 released.
776
777
778 2005-03-12 Jörg Lehmann <joerg@luga.de>
779
780- * services/players/mpg123.py: Implement seeking.
781+ * services/players/mpg123.py: Implement seeking.
782
783
784 2005-03-08 Jörg Lehmann <joerg@luga.de>
785
786- * events.py: Make checkpointdb a dbevent in order to let the
787- songdbmanager pass it to the databases (many thanks to Tomas Menzl
788- <xmenzl at aldebaran dot feld dot cvut dot cz> for pointing out
789- this problem).
790-
791- * services/songdbs/local.py: Send sendeventin event to global hub
792- instead of to songdbhub to make it actually work. Use repeat
793- interval instead of sending every time a new sendeventin event.
794-
795- * item.py: Add new item method getid, which returns a unique
796- id for the item in the current context (used in slist.set method)
797-
798- * services/playlist.py: Add getid method to playlistitem (for
799- use in slist.set method).
800-
801- * slist.py: Use getid method to identify the previously selected
802- item in set method.
803-
804- * services/playlist.py: Cleanup variable names: song -> item.
805+ * events.py: Make checkpointdb a dbevent in order to let the
806+ songdbmanager pass it to the databases (many thanks to Tomas Menzl
807+ <xmenzl at aldebaran dot feld dot cvut dot cz> for pointing out
808+ this problem).
809+
810+ * services/songdbs/local.py: Send sendeventin event to global hub
811+ instead of to songdbhub to make it actually work. Use repeat
812+ interval instead of sending every time a new sendeventin event.
813+
814+ * item.py: Add new item method getid, which returns a unique
815+ id for the item in the current context (used in slist.set method)
816+
817+ * services/playlist.py: Add getid method to playlistitem (for
818+ use in slist.set method).
819+
820+ * slist.py: Use getid method to identify the previously selected
821+ item in set method.
822+
823+ * services/playlist.py: Cleanup variable names: song -> item.
824
825
826 2005-03-07 Jörg Lehmann <joerg@luga.de>
827
828- * services/player.py: Process incoming events twice to be able
829- to rely on block argument of channel. Also block when waiting
830- for a new song to appear in the playlist, since any arbitrary
831- events unblocks the player.
832-
833- * services/songdbs/local.py: Use active transaction as an indication
834- for a busy db.
835-
836- * filelist.py: Also react on new playlists.
837+ * services/player.py: Process incoming events twice to be able
838+ to rely on block argument of channel. Also block when waiting
839+ for a new song to appear in the playlist, since any arbitrary
840+ events unblocks the player.
841+
842+ * services/songdbs/local.py: Use active transaction as an indication
843+ for a busy db.
844+
845+ * filelist.py: Also react on new playlists.
846
847
848 2005-03-06 Jörg Lehmann <joerg@luga.de>
849
850- * services/songdbs/local.py: Delete log files when checkpointing
851- dbenv preventing huge disk space usage during song registering
852- (Ochsenschlegel bugfix).
853+ * services/songdbs/local.py: Delete log files when checkpointing
854+ dbenv preventing huge disk space usage during song registering
855+ (Ochsenschlegel bugfix).
856
857
858 2005-03-03 Jörg Lehmann <joerg@luga.de>
859
860- * services/players/internal.py. Also request new song when not
861- crossfading to make autoplay == False work in this case
862- (thanks to Tomas Menzl <xmenzl at aldebaran dot feld dot cvut dot
863- cz> for providing a patch).
864-
865- * events, services/playlist.py: New event playlistplaysong which
866- allows one to tell the playlist to immediately play a specific song.
867-
868- * playlist.py: Use playlistplaysong instead of playlistaddsongstop
869- when the user requests the immediate playback of a song in the
870- playlist (as suggested by Tomas Menzl <xmenzl at aldebaran dot
871- feld dot cvut dot cz>), leading to a more mainstream behaviour of
872- PyTone in that regard. ;-)
873-
874- * playlist.py: playlistaddsongstop now correctly updates the information
875- about the currently playing song.
876-
877- * playlist.py: Keep information about played songs after
878- restarting PyTone.
879-
880- * helper.py: Write exception to stdout since we have closed stderr.
881-
882- * services/timer.py: Do not daemonize and switch to new timeout option
883- of channel.process.
884-
885- * services/players/internal.py: Do not daemonize bufferedaudiodev buf
886- shut it down properly.
887+ * services/players/internal.py. Also request new song when not
888+ crossfading to make autoplay == False work in this case
889+ (thanks to Tomas Menzl <xmenzl at aldebaran dot feld dot cvut dot
890+ cz> for providing a patch).
891+
892+ * events, services/playlist.py: New event playlistplaysong which
893+ allows one to tell the playlist to immediately play a specific song.
894+
895+ * playlist.py: Use playlistplaysong instead of playlistaddsongstop
896+ when the user requests the immediate playback of a song in the
897+ playlist (as suggested by Tomas Menzl <xmenzl at aldebaran dot
898+ feld dot cvut dot cz>), leading to a more mainstream behaviour of
899+ PyTone in that regard. ;-)
900+
901+ * playlist.py: playlistaddsongstop now correctly updates the information
902+ about the currently playing song.
903+
904+ * playlist.py: Keep information about played songs after
905+ restarting PyTone.
906+
907+ * helper.py: Write exception to stdout since we have closed stderr.
908+
909+ * services/timer.py: Do not daemonize and switch to new timeout option
910+ of channel.process.
911+
912+ * services/players/internal.py: Do not daemonize bufferedaudiodev buf
913+ shut it down properly.
914
915
916 2005-03-01 Jörg Lehmann <joerg@luga.de>
917
918- * hub.py: Add optional timeout to process method of channel.
919-
920- * services/player.py: Make use of new timeout option.
921-
922- * event.py: Renamed playerforward -> playernext
923-
924- * decoder.py, services/player.py, services/players/internal.py:
925- Enable seeking in songs (many thanks to Tomas Menzl <xmenzl at
926- aldebaran dot feld dot cvut dot cz> for providing a patch).
927-
928- * requests.py: Add sort member variable to getsongsinplaylists
929- request, fixing a crash when rescanning, querying a random
930- selection, etc. of all songs in playlists (thanks to Tomas Menzl
931- <xmenzl at aldebaran dot feld dot cvut dot cz> for reporting this
932- problem).
933+ * hub.py: Add optional timeout to process method of channel.
934+
935+ * services/player.py: Make use of new timeout option.
936+
937+ * event.py: Renamed playerforward -> playernext
938+
939+ * decoder.py, services/player.py, services/players/internal.py:
940+ Enable seeking in songs (many thanks to Tomas Menzl <xmenzl at
941+ aldebaran dot feld dot cvut dot cz> for providing a patch).
942+
943+ * requests.py: Add sort member variable to getsongsinplaylists
944+ request, fixing a crash when rescanning, querying a random
945+ selection, etc. of all songs in playlists (thanks to Tomas Menzl
946+ <xmenzl at aldebaran dot feld dot cvut dot cz> for reporting this
947+ problem).
948
949
950 2005-02-27 Jörg Lehmann <joerg@luga.de>
951
952- * filelist.py: Some cleanups.
953-
954- * playlist.py: Ditto.
955-
956- * events.py: New event filelistjumptosong, which directs the filelist
957- to jump to a given song in the directory hierarchy.
958-
959- * config.py. New keybinding "filelistjumptoselectedsong" for
960- playlistwindow (by default KEY_RIGHT is used).
961-
962- * config.py: New option "skipsinglealbums" in filelistwindow
963- section, which when turned on, tells PyTone to skip the album and
964- go directly to the songs when there is only one album of a given
965- artist.
966+ * filelist.py: Some cleanups.
967+
968+ * playlist.py: Ditto.
969+
970+ * events.py: New event filelistjumptosong, which directs the filelist
971+ to jump to a given song in the directory hierarchy.
972+
973+ * config.py. New keybinding "filelistjumptoselectedsong" for
974+ playlistwindow (by default KEY_RIGHT is used).
975+
976+ * config.py: New option "skipsinglealbums" in filelistwindow
977+ section, which when turned on, tells PyTone to skip the album and
978+ go directly to the songs when there is only one album of a given
979+ artist.
980
981
982 2005-02-26 Jörg Lehmann <joerg@luga.de>
983
984- * dbitem.py: Remove __class__ comparison from __cmp__ method of dbitem
985- class
986+ * dbitem.py: Remove __class__ comparison from __cmp__ method of dbitem
987+ class
988
989- * services/songdb.py: Avoid repeated songs when randomly selecting
990- songs out of a short list.
991+ * services/songdb.py: Avoid repeated songs when randomly selecting
992+ songs out of a short list.
993
994
995 2005-02-12 Jörg Lehmann <joerg@luga.de>
996
997- * services/playlist.py: Cleanup and fix some minor bugs.
998+ * services/playlist.py: Cleanup and fix some minor bugs.
999
1000
1001 2005-02-09 Jörg Lehmann <joerg@luga.de>
1002
1003- * setup.py: (Ab-)use scripts directive for installing pytone
1004- and pytonectl shell scripts.
1005-
1006- * log.py: Make debugfile initialization manual to allow the use of
1007- the log module in the config module (thanks to Brian Lenihan
1008- <brian_l at mac dot com> for proposing this).
1009-
1010- * config.py: Fix --rebuild command line switch.
1011-
1012- * services/players/mpg123.py: Be more relaxed when initializing
1013- the player and when parsing the "@F" lines to make mpg123 work
1014- again (thanks to Brian Lenihan <brian_l at mac dot com> for
1015- providing a patch).
1016-
1017- * conf/pytonerc: Add sample command line for mpg123 player.
1018-
1019- * dbitem.py: Do not assume that all exceptions derive from the
1020- Exception base class (fixing the scanning problems reported by
1021- Alexander Wirt <formorer at formorer dot de> and Jack Bakeman
1022- <jbakeman at indra dot com>).
1023+ * setup.py: (Ab-)use scripts directive for installing pytone
1024+ and pytonectl shell scripts.
1025+
1026+ * log.py: Make debugfile initialization manual to allow the use of
1027+ the log module in the config module (thanks to Brian Lenihan
1028+ <brian_l at mac dot com> for proposing this).
1029+
1030+ * config.py: Fix --rebuild command line switch.
1031+
1032+ * services/players/mpg123.py: Be more relaxed when initializing
1033+ the player and when parsing the "@F" lines to make mpg123 work
1034+ again (thanks to Brian Lenihan <brian_l at mac dot com> for
1035+ providing a patch).
1036+
1037+ * conf/pytonerc: Add sample command line for mpg123 player.
1038+
1039+ * dbitem.py: Do not assume that all exceptions derive from the
1040+ Exception base class (fixing the scanning problems reported by
1041+ Alexander Wirt <formorer at formorer dot de> and Jack Bakeman
1042+ <jbakeman at indra dot com>).
1043
1044
1045 2005-02-08 Jörg Lehmann <joerg@luga.de>
1046
1047- * config.py: Use correct copyright date when printing usage
1048- summary.
1049+ * config.py: Use correct copyright date when printing usage
1050+ summary.
1051
1052
1053 2005-02-07 Jörg Lehmann <joerg@luga.de>
1054
1055- * Version 2.2.1 released.
1056-
1057- * services/playlist.py: Also notify database of not fully
1058- played song when stopping the player manually.
1059-
1060- * services/songdb.py: Improve random choice logic.
1061-
1062- * services/songdb.py: Store copy of request and not request
1063- itself in cache.
1064-
1065- * config.py: Add more checks for database options: prevent
1066- sharing of basenames or dbenvdirs of several databases.
1067+ * Version 2.2.1 released.
1068+
1069+ * services/playlist.py: Also notify database of not fully
1070+ played song when stopping the player manually.
1071+
1072+ * services/songdb.py: Improve random choice logic.
1073+
1074+ * services/songdb.py: Store copy of request and not request
1075+ itself in cache.
1076+
1077+ * config.py: Add more checks for database options: prevent
1078+ sharing of basenames or dbenvdirs of several databases.
1079
1080
1081 2005-02-06 Jörg Lehmann <joerg@luga.de>
1082
1083- * log.py: New function debug_traceback which records a traceback
1084- when in debugging mode.
1085-
1086- * dbitem.py: Ignore (but report when in debugging mode) errors
1087- when parsing the song metadata (thanks to Jack Bakeman <jbakeman
1088- at indra dot com>, Sascha <spx at gmx dot net>, and Alexander Wirt
1089- <formorer at formorer dot de> for reporting that problem).
1090-
1091- * metadata.py: fix fallback code for length calculation.
1092+ * log.py: New function debug_traceback which records a traceback
1093+ when in debugging mode.
1094+
1095+ * dbitem.py: Ignore (but report when in debugging mode) errors
1096+ when parsing the song metadata (thanks to Jack Bakeman <jbakeman
1097+ at indra dot com>, Sascha <spx at gmx dot net>, and Alexander Wirt
1098+ <formorer at formorer dot de> for reporting that problem).
1099+
1100+ * metadata.py: fix fallback code for length calculation.
1101
1102
1103 2005-02-03 Jörg Lehmann <joerg@luga.de>
1104
1105- * service.py: New module containing a base class for
1106- services which contains a main loop doing exception handling
1107- and error reporting.
1108-
1109- * plugin.py: Use new service class.
1110-
1111- * services/songdb.py: Use new service class.
1112-
1113- * services/songdbs/local.py: Use new service class.
1114-
1115- * services/player.py: Use new service class.
1116-
1117- * services/playlist.py: Use new service class.
1118+ * service.py: New module containing a base class for
1119+ services which contains a main loop doing exception handling
1120+ and error reporting.
1121+
1122+ * plugin.py: Use new service class.
1123+
1124+ * services/songdb.py: Use new service class.
1125+
1126+ * services/songdbs/local.py: Use new service class.
1127+
1128+ * services/player.py: Use new service class.
1129+
1130+ * services/playlist.py: Use new service class.
1131
1132
1133 2005-02-01 Jörg Lehmann <joerg@luga.de>
1134
1135- * Version 2.2.0 released.
1136+ * Version 2.2.0 released.
1137
1138
1139 2005-01-25 Jörg Lehmann <joerg@luga.de>
1140
1141- * filelistwin.py: Clear searchstring when search has been aborted
1142- by pressing ESC.
1143+ * filelistwin.py: Clear searchstring when search has been aborted
1144+ by pressing ESC.
1145
1146
1147 2005-01-24 Jörg Lehmann <joerg@luga.de>
1148
1149- * metadata.py: Also import MP3Info module when using the eyeD3
1150- module, since one helper function is also needed when using the
1151- latter module.
1152+ * metadata.py: Also import MP3Info module when using the eyeD3
1153+ module, since one helper function is also needed when using the
1154+ latter module.
1155
1156 2005-01-23 Jörg Lehmann <joerg@luga.de>
1157
1158- * services/songdb.py: Do not sort the intermediate results when
1159- querying multiple databases. While this yields an improved caching
1160- behaviour, we are not allowed to do that, because the caller
1161- supplied compare function cannot be used for unwrapped items.
1162+ * services/songdb.py: Do not sort the intermediate results when
1163+ querying multiple databases. While this yields an improved caching
1164+ behaviour, we are not allowed to do that, because the caller
1165+ supplied compare function cannot be used for unwrapped items.
1166
1167- * pytone.py: Redirect stdout to /dev/null in order to prevent ALSA
1168- buffer underrun messages from spoiling the user interface.
1169+ * pytone.py: Redirect stdout to /dev/null in order to prevent ALSA
1170+ buffer underrun messages from spoiling the user interface.
1171
1172
1173 2005-01-22 Jörg Lehmann <joerg@luga.de>
1174
1175- * item.py: Remove bogus cmpitem method of rating class.
1176-
1177- * metadata.py: New module containing the song metadata interfaces.
1178-
1179- * Add _some_ initial support for FLAC files via pyflac (not stable
1180- yet and thus currently unsupported!)
1181+ * item.py: Remove bogus cmpitem method of rating class.
1182+
1183+ * metadata.py: New module containing the song metadata interfaces.
1184+
1185+ * Add _some_ initial support for FLAC files via pyflac (not stable
1186+ yet and thus currently unsupported!)
1187
1188
1189 2005-01-17 Jörg Lehmann <joerg@luga.de>
1190
1191- * pcm/pcm.c: add new function upsample which allows to create
1192- a pseudo-stereo stream from a mono stream
1193-
1194- * decoder.py: Handle mono ogg files correctly (fixing an error
1195- reported by Uwe Bielz <u.bielz at wad dot org>).
1196-
1197- * item.py: Be more robust when displaying playing time of song.
1198+ * pcm/pcm.c: add new function upsample which allows to create
1199+ a pseudo-stereo stream from a mono stream
1200+
1201+ * decoder.py: Handle mono ogg files correctly (fixing an error
1202+ reported by Uwe Bielz <u.bielz at wad dot org>).
1203+
1204+ * item.py: Be more robust when displaying playing time of song.
1205
1206
1207 2005-01-16 Jörg Lehmann <joerg@luga.de>
1208
1209- * events.py: registerplaylists now expects lists of playlists
1210- instead of list of paths (analogous to registersongs).
1211-
1212- * events.py, services/songdbs/local.py. new events delplaylist and updateplaylist
1213- for deletion and update of playlists
1214-
1215- * services/songdbs/local.py: Also update (and delete non longer
1216- existing) playlists when reregistering all songs (as suggested by
1217- Stefan Wimmer <swimmer at xs4all dot nl>).
1218+ * events.py: registerplaylists now expects lists of playlists
1219+ instead of list of paths (analogous to registersongs).
1220+
1221+ * events.py, services/songdbs/local.py. new events delplaylist and updateplaylist
1222+ for deletion and update of playlists
1223+
1224+ * services/songdbs/local.py: Also update (and delete non longer
1225+ existing) playlists when reregistering all songs (as suggested by
1226+ Stefan Wimmer <swimmer at xs4all dot nl>).
1227
1228
1229 2005-01-09 Jörg Lehmann <joerg@luga.de>
1230
1231- * Plugin architecture (based upon the prototype by Nicolas Évrard
1232- <nicoe at altern dot org>).
1233+ * Plugin architecture (based upon the prototype by Nicolas Évrard
1234+ <nicoe at altern dot org>).
1235
1236
1237 2004-12-31 Jörg Lehmann <joerg@luga.de>
1238
1239- * item.py: Case-insensitive sort in filelist window.
1240+ * item.py: Case-insensitive sort in filelist window.
1241
1242 2004-12-19 Jörg Lehmann <joerg@luga.de>
1243
1244- * Include path of song in detailed information about currently selected
1245- item.
1246+ * Include path of song in detailed information about currently selected
1247+ item.
1248
1249- * services/players/internal.py: Flush song queue and audio device
1250- when a new song is requested while the player is paused.
1251+ * services/players/internal.py: Flush song queue and audio device
1252+ when a new song is requested while the player is paused.
1253
1254
1255 2004-12-12 Jörg Lehmann <joerg@luga.de>
1256
1257- * config.py: Add support for config subsection templates. It is now possible
1258- to define an arbitrary number of databases.
1259+ * config.py: Add support for config subsection templates. It is now possible
1260+ to define an arbitrary number of databases.
1261
1262
1263 2004-11-29 Jörg Lehmann <joerg@luga.de>
1264
1265- * Version 2.1.3 released.
1266-
1267- * item.py: Replace superfluous database requests, which led to an
1268- unnecessarily sluggish UI during the database rebuild.
1269-
1270- * filelist.py: Ensure that only dbitem.song and not item.song instances
1271- are sent to the database when rescanning songs. Also send songs to
1272- the correct database (if the selected directory contains songs from
1273- various databases).
1274+ * Version 2.1.3 released.
1275+
1276+ * item.py: Replace superfluous database requests, which led to an
1277+ unnecessarily sluggish UI during the database rebuild.
1278+
1279+ * filelist.py: Ensure that only dbitem.song and not item.song instances
1280+ are sent to the database when rescanning songs. Also send songs to
1281+ the correct database (if the selected directory contains songs from
1282+ various databases).
1283
1284
1285 2004-11-27 Jörg Lehmann <joerg@luga.de>
1286
1287- * Add French translation (many thanks to Nicolas Évrard
1288- <nicoe at altern dot org>).
1289-
1290- * services/playlist.py: Convert songs to playlistitems, when
1291- loading a playlist. Fix appending of these items, as well. (Thanks
1292- to Stefan Wimmer <swimmer at xs4all dot nl> for reporting this
1293- bug).
1294-
1295- * change all helper.debug calls to log.debug and move the corresponding
1296- debug file code into the log module.
1297+ * Add French translation (many thanks to Nicolas Évrard
1298+ <nicoe at altern dot org>).
1299+
1300+ * services/playlist.py: Convert songs to playlistitems, when
1301+ loading a playlist. Fix appending of these items, as well. (Thanks
1302+ to Stefan Wimmer <swimmer at xs4all dot nl> for reporting this
1303+ bug).
1304+
1305+ * change all helper.debug calls to log.debug and move the corresponding
1306+ debug file code into the log module.
1307
1308
1309 2004-11-24 Jörg Lehmann <joerg@luga.de>
1310
1311- * item.py: Reduce precision for longer last played times.
1312+ * item.py: Reduce precision for longer last played times.
1313
1314
1315 2004-11-20 Jörg Lehmann <joerg@luga.de>
1316
1317- * hub.py: renamed hub-> _defaulthub, _hub -> hub.
1318-
1319- * hub.py: Add module level functions notify, request and
1320- newchannel to provide easy access to the default hub.
1321-
1322- * Replace all calls of hub methods with new hub module
1323- functions making the code more readable.
1324+ * hub.py: renamed hub-> _defaulthub, _hub -> hub.
1325+
1326+ * hub.py: Add module level functions notify, request and
1327+ newchannel to provide easy access to the default hub.
1328+
1329+ * Replace all calls of hub methods with new hub module
1330+ functions making the code more readable.
1331
1332
1333 2004-11-18 Jörg Lehmann <joerg@luga.de>
1334
1335- * services/songdbs/local.py: Make playlists work again (thanks to
1336- Maurizio Panniello <maurizio at iac dot es> for reporting and
1337- locating this problem).
1338+ * services/songdbs/local.py: Make playlists work again (thanks to
1339+ Maurizio Panniello <maurizio at iac dot es> for reporting and
1340+ locating this problem).
1341
1342
1343 2004-11-15 Jörg Lehmann <joerg@luga.de>
1344
1345- * Renamed services/players/xmms.py in services/players/xmmsplayer.py to
1346- prevent a name conflict with the pyxmms module.
1347-
1348- * services/players/xmmsplayer.py: Replace xmms by xmms.control to
1349- make this module work with the latest versions of pyxmms (thanks
1350- to Mario Rodríguez <mrodriguezc at gmail dot com> for reporting
1351- this problem).
1352-
1353- * services/songdbs/local.py: When reregistering a song which is
1354- already in the database, do not replace it completely (thereby
1355- deleting its rating, etc.) but only update the song metadata.
1356- (closing Debian bug #269711).
1357+ * Renamed services/players/xmms.py in services/players/xmmsplayer.py to
1358+ prevent a name conflict with the pyxmms module.
1359+
1360+ * services/players/xmmsplayer.py: Replace xmms by xmms.control to
1361+ make this module work with the latest versions of pyxmms (thanks
1362+ to Mario Rodríguez <mrodriguezc at gmail dot com> for reporting
1363+ this problem).
1364+
1365+ * services/songdbs/local.py: When reregistering a song which is
1366+ already in the database, do not replace it completely (thereby
1367+ deleting its rating, etc.) but only update the song metadata.
1368+ (closing Debian bug #269711).
1369
1370
1371 2004-11-08 Jörg Lehmann <joerg@luga.de>
1372
1373- * Version 2.1.2 released.
1374-
1375- * pytonerc: Fix typo in addsongtoplaylist and showiteminfolong options
1376- (thanks to Toma¸ Ficko <tomaz at gmx dot net> for reporting these bugs).
1377-
1378- * services/songdbs/local.py: Fix error occuring when requesting
1379- artists, albums or songs with unknown decade (thanks to Toma¸
1380- Ficko <tomaz at gmx dot net> for sending a patch).
1381-
1382- * services/songdbs/local.py: Manually remove unneeded log files
1383- because automatic removal is only supported by the newest bsddb
1384- versions, fixing Debian bug #273370 (thanks to Toma¸ Ficko <tomaz
1385- at gmx dot net> for sending a patch).
1386+ * Version 2.1.2 released.
1387+
1388+ * pytonerc: Fix typo in addsongtoplaylist and showiteminfolong options
1389+ (thanks to Toma¸ Ficko <tomaz at gmx dot net> for reporting these bugs).
1390+
1391+ * services/songdbs/local.py: Fix error occuring when requesting
1392+ artists, albums or songs with unknown decade (thanks to Toma¸
1393+ Ficko <tomaz at gmx dot net> for sending a patch).
1394+
1395+ * services/songdbs/local.py: Manually remove unneeded log files
1396+ because automatic removal is only supported by the newest bsddb
1397+ versions, fixing Debian bug #273370 (thanks to Toma¸ Ficko <tomaz
1398+ at gmx dot net> for sending a patch).
1399
1400
1401 2004-11-07 Jörg Lehmann <joerg@luga.de>
1402
1403- * Version 2.1.1 released.
1404-
1405- * services/songdbs/local.py: Enable the songautoregisterer to
1406- do the rescanning of songs by itself in order to take load
1407- of the database thread.
1408-
1409- * services/songdbs/local.py: When registering songs, also update
1410- information of song which have alread been in database. In
1411- particular, delete songs which are no longer existent
1412- (Implementing a suggestion by some anonymous user).
1413-
1414- * filelist.py: Call the song registerer when updating the songs in
1415- the basedir of a database to prevent blocking of the UI thread.
1416+ * Version 2.1.1 released.
1417+
1418+ * services/songdbs/local.py: Enable the songautoregisterer to
1419+ do the rescanning of songs by itself in order to take load
1420+ of the database thread.
1421+
1422+ * services/songdbs/local.py: When registering songs, also update
1423+ information of song which have alread been in database. In
1424+ particular, delete songs which are no longer existent
1425+ (Implementing a suggestion by some anonymous user).
1426+
1427+ * filelist.py: Call the song registerer when updating the songs in
1428+ the basedir of a database to prevent blocking of the UI thread.
1429
1430
1431 2004-09-25 Jörg Lehmann <joerg@luga.de>
1432
1433- * item.py: Fix calculating of hours and minutes of last played
1434- time (thanks to Zoltan Szalontai <szazol at e98 dothu> for finding
1435- this bug).
1436+ * item.py: Fix calculating of hours and minutes of last played
1437+ time (thanks to Zoltan Szalontai <szazol at e98 dothu> for finding
1438+ this bug).
1439
1440
1441 2004-09-12 Jörg Lehmann <joerg@luga.de>
1442
1443- * dbitem.py: Update path information when rescanning song. When
1444- updating the songs in a database, a relocation in a different
1445- musicbasedir is now taken into amount correctly.
1446+ * dbitem.py: Update path information when rescanning song. When
1447+ updating the songs in a database, a relocation in a different
1448+ musicbasedir is now taken into amount correctly.
1449
1450
1451 2004-08-20 Jörg Lehmann <joerg@luga.de>
1452
1453- * Never issue a requestnextsong request for second player. (Fixing
1454- a problem occured during the last Rothsee-Party).
1455-
1456- * Associate a playlist (or explicitly none) to every player.
1457-
1458- * requests.py: requestnextsong now requires a playlistid instead of
1459- a playerid.
1460-
1461- * services/songdbs/local.py: Checkpoint database after each
1462- database update step to prevent even more oversized log files.
1463-
1464- * dbitem.py: Only store last 10 playing times.
1465+ * Never issue a requestnextsong request for second player. (Fixing
1466+ a problem occured during the last Rothsee-Party).
1467+
1468+ * Associate a playlist (or explicitly none) to every player.
1469+
1470+ * requests.py: requestnextsong now requires a playlistid instead of
1471+ a playerid.
1472+
1473+ * services/songdbs/local.py: Checkpoint database after each
1474+ database update step to prevent even more oversized log files.
1475+
1476+ * dbitem.py: Only store last 10 playing times.
1477
1478
1479 2004-08-16 Jörg Lehmann <joerg@luga.de>
1480
1481- * services/songdbs/local.py: Treat case of musicbasedir ending
1482- with a slash correctly (fixing a problem reported by Alexander
1483- Wirt <formorer at formorer dot de>).
1484+ * services/songdbs/local.py: Treat case of musicbasedir ending
1485+ with a slash correctly (fixing a problem reported by Alexander
1486+ Wirt <formorer at formorer dot de>).
1487
1488
1489 2004-08-11 Jörg Lehmann <joerg@luga.de>
1490
1491- * services/playlist.py: Fix wrong playlistitem constructor
1492- signature in playlistaddsongtop (thanks to Andreas Poisel
1493- <a.poisel at acat dot cc> for reporting this bug).
1494+ * services/playlist.py: Fix wrong playlistitem constructor
1495+ signature in playlistaddsongtop (thanks to Andreas Poisel
1496+ <a.poisel at acat dot cc> for reporting this bug).
1497
1498
1499 2004-08-09 Jörg Lehmann <joerg@luga.de>
1500
1501- * Also accept "MP3" etc. as extension of MP3 files.
1502+ * Also accept "MP3" etc. as extension of MP3 files.
1503
1504- * New window which show more detailed information about currently
1505- selected item.
1506+ * New window which show more detailed information about currently
1507+ selected item.
1508
1509
1510 2004-08-03 Jörg Lehmann <joerg@luga.de>
1511
1512- * Version 2.1.0 released.
1513-
1514- * dbitem.py: Really use length of MP3 file if no ID3 tag
1515- is present (when using eyeD3 module).
1516-
1517- * services/playlist.py: Reset playingsong to None only using
1518- the playbackinfochanged event.
1519-
1520- * services/playlist.py: React on changes in the song database.
1521+ * Version 2.1.0 released.
1522+
1523+ * dbitem.py: Really use length of MP3 file if no ID3 tag
1524+ is present (when using eyeD3 module).
1525+
1526+ * services/playlist.py: Reset playingsong to None only using
1527+ the playbackinfochanged event.
1528+
1529+ * services/playlist.py: React on changes in the song database.
1530
1531
1532 2004-08-02 Jörg Lehmann <joerg@luga.de>
1533
1534- * dbitem.py: Try harder to get reasonable length information
1535- for MP3 file.
1536-
1537- * dbitem.py: Add adddict and safe options to format method of
1538- song.
1539-
1540- * dbitem.py: Store list of last played times.
1541-
1542- * Consider song as not having been played if it has been aborted
1543- very early (currently during the first 10 seconds) (closing Debian
1544- bug #218283).
1545-
1546- * playlist.py: Do not set playingsong by using the playbackinfochanged
1547- event of the player since this leads to race conditions.
1548+ * dbitem.py: Try harder to get reasonable length information
1549+ for MP3 file.
1550+
1551+ * dbitem.py: Add adddict and safe options to format method of
1552+ song.
1553+
1554+ * dbitem.py: Store list of last played times.
1555+
1556+ * Consider song as not having been played if it has been aborted
1557+ very early (currently during the first 10 seconds) (closing Debian
1558+ bug #218283).
1559+
1560+ * playlist.py: Do not set playingsong by using the playbackinfochanged
1561+ event of the player since this leads to race conditions.
1562
1563
1564 2004-07-27 Jörg Lehmann <joerg@luga.de>
1565
1566- * item.py : Show songs in filtered artist.
1567-
1568- * filelistwin.py: Implement incremental searching (as suggested by
1569- Stuart Pook <Stuart dot Pook at infres dot enst dot fr>).
1570-
1571- * config.py: New key binding "repeatsearch" in filelist window
1572- which allows the user to specify a key for the repetition of the
1573- last search (as suggested by Falko Rütten <falko.ruetten at
1574- cmdline dot net>).
1575-
1576- * config.py: New option songchangecommand in general section which allows
1577- to specify a command executed when the playback of a new song starts.
1578+ * item.py : Show songs in filtered artist.
1579+
1580+ * filelistwin.py: Implement incremental searching (as suggested by
1581+ Stuart Pook <Stuart dot Pook at infres dot enst dot fr>).
1582+
1583+ * config.py: New key binding "repeatsearch" in filelist window
1584+ which allows the user to specify a key for the repetition of the
1585+ last search (as suggested by Falko Rütten <falko.ruetten at
1586+ cmdline dot net>).
1587+
1588+ * config.py: New option songchangecommand in general section which allows
1589+ to specify a command executed when the playback of a new song starts.
1590
1591
1592 2004-07-26 Jörg Lehmann <joerg@luga.de>
1593
1594- * New configuration options in database sections which allow the user
1595- to turn on and off various tag transformation and to specify the
1596- regular expression used for obtaining track nr and title from the song
1597- filename.
1598+ * New configuration options in database sections which allow the user
1599+ to turn on and off various tag transformation and to specify the
1600+ regular expression used for obtaining track nr and title from the song
1601+ filename.
1602
1603- * services/songdbs/local.py: Even further simplify artist and
1604- album index machinery now that ratings are no longer stored
1605- directly in this items but only in songs.
1606+ * services/songdbs/local.py: Even further simplify artist and
1607+ album index machinery now that ratings are no longer stored
1608+ directly in this items but only in songs.
1609
1610
1611 2004-07-25 Jörg Lehmann <joerg@luga.de>
1612
1613- * Implemented play previous song (as requested by Sebastian
1614- Schwerdhoefer and Han Boetes, George J. De Bruin, and Sam Rowe)
1615-
1616- * pytonerc: New config option stepsize in mixer section, which
1617- allows the user to change the step size (in percent) of the mixer
1618- (requested by Krzysztof Zych <kzych at manta dot univ dot gda dot
1619- pl>).
1620-
1621- * mixerwin.py: Make volume bar as wide as possible when
1622- type=statusbar (requested by Krzysztof Zych <kzych at manta dot
1623- univ dot gda dot pl>).
1624+ * Implemented play previous song (as requested by Sebastian
1625+ Schwerdhoefer and Han Boetes, George J. De Bruin, and Sam Rowe)
1626+
1627+ * pytonerc: New config option stepsize in mixer section, which
1628+ allows the user to change the step size (in percent) of the mixer
1629+ (requested by Krzysztof Zych <kzych at manta dot univ dot gda dot
1630+ pl>).
1631+
1632+ * mixerwin.py: Make volume bar as wide as possible when
1633+ type=statusbar (requested by Krzysztof Zych <kzych at manta dot
1634+ univ dot gda dot pl>).
1635
1636
1637 2004-07-24 Jörg Lehmann <joerg@luga.de>
1638
1639- * dbitem.py: Remove genres and years attributes of artist and album.
1640-
1641- * dbitem.py: New index rating.
1642-
1643- * services/songdbs/local.py: Generalize index machinery to enable
1644- simplified addition of new index.
1645-
1646- * item.py: Generalize filtereditem for a simplified addition of
1647- a new index.
1648-
1649- * Do no longer store artist and album rating but instead a rating
1650- source in the song.
1651-
1652- * Allow the user to filter songs by their rating (as suggested by
1653- Thomas Klein-Hitpass <thomas at projekt-barrierefrei dot de>).
1654-
1655- * Database version 4.
1656+ * dbitem.py: Remove genres and years attributes of artist and album.
1657+
1658+ * dbitem.py: New index rating.
1659+
1660+ * services/songdbs/local.py: Generalize index machinery to enable
1661+ simplified addition of new index.
1662+
1663+ * item.py: Generalize filtereditem for a simplified addition of
1664+ a new index.
1665+
1666+ * Do no longer store artist and album rating but instead a rating
1667+ source in the song.
1668+
1669+ * Allow the user to filter songs by their rating (as suggested by
1670+ Thomas Klein-Hitpass <thomas at projekt-barrierefrei dot de>).
1671+
1672+ * Database version 4.
1673
1674
1675 2004-07-22 Jörg Lehmann <joerg@luga.de>
1676
1677- * Version 2.0.14 released.
1678+ * Version 2.0.14 released.
1679
1680- * Make player progress bar more readable on mono devices (thanks
1681- to Krzysztof Zych <kzych at manta dot univ dot gda dot pl>).
1682+ * Make player progress bar more readable on mono devices (thanks
1683+ to Krzysztof Zych <kzych at manta dot univ dot gda dot pl>).
1684
1685
1686 2004-07-19 Jörg Lehmann <joerg@luga.de>
1687
1688- * Replace "PyX" by "PyTone" in license headers (thanks to
1689- Krzysztof Zych <kzych at manta dot univ dot gda dot pl> for
1690- pointing this out).
1691-
1692- * Add polish translation (many thanks to Krzysztof Zych <kzych at
1693- manta dot univ dot gda dot pl>).
1694-
1695- * dbitem.py: Update eyeD3 integration based on contributions by
1696- Krzysztof Zych <kzych at manta dot univ dot gda dot pl>.
1697-
1698- * item.py: Make last played song list sorted again.
1699-
1700- * services/songdbs/locale.py: Some fixes in database upgrade code.
1701+ * Replace "PyX" by "PyTone" in license headers (thanks to
1702+ Krzysztof Zych <kzych at manta dot univ dot gda dot pl> for
1703+ pointing this out).
1704+
1705+ * Add polish translation (many thanks to Krzysztof Zych <kzych at
1706+ manta dot univ dot gda dot pl>).
1707+
1708+ * dbitem.py: Update eyeD3 integration based on contributions by
1709+ Krzysztof Zych <kzych at manta dot univ dot gda dot pl>.
1710+
1711+ * item.py: Make last played song list sorted again.
1712+
1713+ * services/songdbs/locale.py: Some fixes in database upgrade code.
1714
1715
1716 2004-07-18 Jörg Lehmann <joerg@luga.de>
1717
1718- * services/songdbs/locale.py: Really make use of transactional
1719- subsystem.
1720-
1721- * services/songdbs/locale.py: Move dbitem.song creation to
1722- songautoregisterer thread to greatly improve the usability during
1723- the song registering process.
1724-
1725- * dbitem.py: Added support for the eyeD3 module, which parses MP3
1726- files much faster as the current version of the MP3Info module.
1727+ * services/songdbs/locale.py: Really make use of transactional
1728+ subsystem.
1729+
1730+ * services/songdbs/locale.py: Move dbitem.song creation to
1731+ songautoregisterer thread to greatly improve the usability during
1732+ the song registering process.
1733+
1734+ * dbitem.py: Added support for the eyeD3 module, which parses MP3
1735+ files much faster as the current version of the MP3Info module.
1736
1737
1738 2004-07-15 Jörg Lehmann <joerg@luga.de>
1739
1740- * Handle SIGTERM gracefully by sending a quit signal to all
1741- running threads.
1742+ * Handle SIGTERM gracefully by sending a quit signal to all
1743+ running threads.
1744
1745
1746 2004-07-13 Jörg Lehmann <joerg@luga.de>
1747
1748- * hub.py: Explicitly use list as underlying queue to make the
1749- PriorityQueue class work with Python 2.4 (thanks to Krzysztof Zych
1750- <kzych at manta dot univ dot gda dot pl> for reporting this
1751- problem).
1752+ * hub.py: Explicitly use list as underlying queue to make the
1753+ PriorityQueue class work with Python 2.4 (thanks to Krzysztof Zych
1754+ <kzych at manta dot univ dot gda dot pl> for reporting this
1755+ problem).
1756
1757
1758 2004-07-08 Jörg Lehmann <joerg@luga.de>
1759
1760- * pytone.py: Catch errors during service creation to be able to shut down
1761- all already running services
1762-
1763- * services/playlist.py: Be careful when loading a dumped playlist which
1764- has ids incompatible with the global _counter variable.
1765-
1766- * playlist.py: Issue selectionchanged event in _recenter and in
1767- playlistchanged method if necessary. This should fix a longstanding bug where
1768- the item info window showed the wrong playlist item.
1769+ * pytone.py: Catch errors during service creation to be able to shut down
1770+ all already running services
1771+
1772+ * services/playlist.py: Be careful when loading a dumped playlist which
1773+ has ids incompatible with the global _counter variable.
1774+
1775+ * playlist.py: Issue selectionchanged event in _recenter and in
1776+ playlistchanged method if necessary. This should fix a longstanding bug where
1777+ the item info window showed the wrong playlist item.
1778
1779
1780 2004-07-07 Jörg Lehmann <joerg@luga.de>
1781
1782- * Allow only songs located under basedir in databases.
1783-
1784- * Do not delete currently playing song when backspace is pressed.
1785-
1786- * decoder.py: Replace samplerate by outrate in calculation of
1787- playing time since the data has already been resampled to outrate.
1788+ * Allow only songs located under basedir in databases.
1789+
1790+ * Do not delete currently playing song when backspace is pressed.
1791+
1792+ * decoder.py: Replace samplerate by outrate in calculation of
1793+ playing time since the data has already been resampled to outrate.
1794
1795
1796 2004-07-06 Jörg Lehmann <joerg@luga.de>
1797
1798- * Removed some unnecessary selectionchanged notifications.
1799-
1800- * dbitem.py: Finally switched from path as id to relative path as
1801- id. This should facilitate moving songs from one base directory to
1802- the other.
1803-
1804- * Database version 3.
1805-
1806- * Use artist and album from relative path as fallback if no id3
1807- information is present and the relative path (with respect to
1808- the musicbasedir) consists of exactly two directories.
1809+ * Removed some unnecessary selectionchanged notifications.
1810+
1811+ * dbitem.py: Finally switched from path as id to relative path as
1812+ id. This should facilitate moving songs from one base directory to
1813+ the other.
1814+
1815+ * Database version 3.
1816+
1817+ * Use artist and album from relative path as fallback if no id3
1818+ information is present and the relative path (with respect to
1819+ the musicbasedir) consists of exactly two directories.
1820
1821
1822 2004-07-01 Jörg Lehmann <joerg@luga.de>
1823
1824- * services/songdbs/local.py: Don't index song in
1825- _queryregistersong, if it is already registered in database.
1826-
1827- * services/songdbs/local.py: Use transaction system when writing
1828- to the database (addressing the problems of Debian bug #245503).
1829-
1830- * pytone.py: Set locale to setting defined by the user's environment
1831- variables.
1832-
1833- * inputwin.py: Allow the user to input all printable characters
1834- according to the locale set (as suggested by Stuart Pook <Stuart
1835- dot Pook at infres dot enst dot fr>).
1836-
1837- * filelistwin.py: Empty search string repeats last search (as
1838- suggested by Stuart Pook <Stuart dot Pook at infres dot enst dot
1839- fr>).
1840-
1841- * slist.py: New method for regular expression search.
1842-
1843- * filelistwin.py: Search strings are now interpreted as regular
1844- expressions.
1845+ * services/songdbs/local.py: Don't index song in
1846+ _queryregistersong, if it is already registered in database.
1847+
1848+ * services/songdbs/local.py: Use transaction system when writing
1849+ to the database (addressing the problems of Debian bug #245503).
1850+
1851+ * pytone.py: Set locale to setting defined by the user's environment
1852+ variables.
1853+
1854+ * inputwin.py: Allow the user to input all printable characters
1855+ according to the locale set (as suggested by Stuart Pook <Stuart
1856+ dot Pook at infres dot enst dot fr>).
1857+
1858+ * filelistwin.py: Empty search string repeats last search (as
1859+ suggested by Stuart Pook <Stuart dot Pook at infres dot enst dot
1860+ fr>).
1861+
1862+ * slist.py: New method for regular expression search.
1863+
1864+ * filelistwin.py: Search strings are now interpreted as regular
1865+ expressions.
1866
1867
1868 2004-06-29 Jörg Lehmann <joerg@luga.de>
1869
1870- * Make timer a service, which runs in an independent thread
1871+ * Make timer a service, which runs in an independent thread
1872
1873- * services/songdbs/local.py: Turn on transaction and log subsystem
1874- and checkpoint log regularly.
1875+ * services/songdbs/local.py: Turn on transaction and log subsystem
1876+ and checkpoint log regularly.
1877
1878
1879 2004-06-25 Jörg Lehmann <joerg@luga.de>
1880
1881- * mixerwin.py: Do not fail if neither ossaudiodev nor oss module
1882- is present (thanks to Linus Sjöberg <lsjoberg at aland dot net>)
1883+ * mixerwin.py: Do not fail if neither ossaudiodev nor oss module
1884+ is present (thanks to Linus Sjöberg <lsjoberg at aland dot net>)
1885
1886
1887 2004-06-21 Jörg Lehmann <joerg@luga.de>
1888
1889- * dbitem.py: Catch error when no id3 tag is present in an MP3
1890- file (fix contributed by Toma¸ Ficko <tomaz at gmx dot net>).
1891+ * dbitem.py: Catch error when no id3 tag is present in an MP3
1892+ file (fix contributed by Toma¸ Ficko <tomaz at gmx dot net>).
1893
1894- * MP3Info.py: New version (thanks to Toma¸ Ficko <tomaz at gmx dot
1895- net> for providing me with the update). Included is a patch which
1896- should fix the length detection for VBR MP3 files (hopefully
1897- fixing a problem reported some time ago by George J. De Bruin
1898- <SoundChaser at myrealbox dot com>).
1899+ * MP3Info.py: New version (thanks to Toma¸ Ficko <tomaz at gmx dot
1900+ net> for providing me with the update). Included is a patch which
1901+ should fix the length detection for VBR MP3 files (hopefully
1902+ fixing a problem reported some time ago by George J. De Bruin
1903+ <SoundChaser at myrealbox dot com>).
1904
1905
1906 2004-06-13 Jörg Lehmann <joerg@luga.de>
1907
1908- * Version 2.0.13 released.
1909+ * Version 2.0.13 released.
1910
1911
1912 2004-06-10 Jörg Lehmann <joerg@luga.de>
1913
1914- * conf/pytonerc: Update description of autoregisterer option
1915- in the database sections (fixing Debian bug #245528).
1916-
1917- * conf/pytonerc: New option dbfile in database sections which allows
1918- to store the database in one single file (instead of multiple ones,
1919- when using the old basename option)
1920-
1921- * services/songdbs/local.py: support storing of databases in a
1922- single file.
1923+ * conf/pytonerc: Update description of autoregisterer option
1924+ in the database sections (fixing Debian bug #245528).
1925+
1926+ * conf/pytonerc: New option dbfile in database sections which allows
1927+ to store the database in one single file (instead of multiple ones,
1928+ when using the old basename option)
1929+
1930+ * services/songdbs/local.py: support storing of databases in a
1931+ single file.
1932
1933
1934 2004-04-22 Jörg Lehmann <joerg@luga.de>
1935
1936- * Do not process global keybindings when input window is active
1937- (thanks to Andreas Poisel <a.poisel at acat dot cc> for reporting
1938- this problem).
1939-
1940- * pytonectl.py: Rewrite to allow for requests and not only events.
1941-
1942- * pytonectl.py: Add getplayerinfo function, which prints a string
1943- with information about the currently playing song (as suggested by
1944- Alexander Wirt <formorer at formorer dot de>).
1945+ * Do not process global keybindings when input window is active
1946+ (thanks to Andreas Poisel <a.poisel at acat dot cc> for reporting
1947+ this problem).
1948+
1949+ * pytonectl.py: Rewrite to allow for requests and not only events.
1950+
1951+ * pytonectl.py: Add getplayerinfo function, which prints a string
1952+ with information about the currently playing song (as suggested by
1953+ Alexander Wirt <formorer at formorer dot de>).
1954
1955
1956 2004-04-21 Jörg Lehmann <joerg@luga.de>
1957
1958- * pytonectl: Print error message instead of traceback when
1959- connection to server fails (as suggested by Alexander Wirt
1960- <formorer at formorer dot de>).
1961+ * pytonectl: Print error message instead of traceback when
1962+ connection to server fails (as suggested by Alexander Wirt
1963+ <formorer at formorer dot de>).
1964
1965
1966 2004-04-17 Jörg Lehmann <joerg@luga.de>
1967
1968- * Version 2.0.12 released.
1969+ * Version 2.0.12 released.
1970
1971- * Fixed selection by mouse in playlist window.
1972+ * Fixed selection by mouse in playlist window.
1973
1974
1975 2004-04-12 Jörg Lehmann <joerg@luga.de>
1976
1977- * When dumpfile is set, we use it to store the playlist state not
1978- only when a crash occurs but also on PyTone's exit.
1979+ * When dumpfile is set, we use it to store the playlist state not
1980+ only when a crash occurs but also on PyTone's exit.
1981
1982- * pytonerc: Added option songformat to playerwindow and
1983- playlistwindow sections of config file which allow the user to
1984- specify an arbitrary format strings for title of player window and
1985- entries in playlist window.
1986+ * pytonerc: Added option songformat to playerwindow and
1987+ playlistwindow sections of config file which allow the user to
1988+ specify an arbitrary format strings for title of player window and
1989+ entries in playlist window.
1990
1991
1992 2004-04-11 Jörg Lehmann <joerg@luga.de>
1993
1994- * Added new layout which consists only of one column.
1995-
1996- * pytonerc: New option togglelayout in keybindings.general
1997- section.
1998-
1999- * Added example configuration files for different layouts.
2000-
2001- * pytonerc: New option layout in general section, new option
2002- activetitle in filelistwindow and playlistwindow sections.
2003-
2004- * services/players/internal.py: Fix problem preventing
2005- automatic crossfading.
2006+ * Added new layout which consists only of one column.
2007+
2008+ * pytonerc: New option togglelayout in keybindings.general
2009+ section.
2010+
2011+ * Added example configuration files for different layouts.
2012+
2013+ * pytonerc: New option layout in general section, new option
2014+ activetitle in filelistwindow and playlistwindow sections.
2015+
2016+ * services/players/internal.py: Fix problem preventing
2017+ automatic crossfading.
2018
2019
2020 2004-04-09 Jörg Lehmann <joerg@luga.de>
2021
2022- * decoder.py: Use length information of mad decoder instead
2023- of the one stored in the database to further improve
2024- the behaviour when using VBR files.
2025-
2026- * Window borders are know configurable.
2027-
2028- * pytonerc: new option border in filelistwindow, playlistwindow,
2029- iteminfowindow, and playerwindow sections.
2030+ * decoder.py: Use length information of mad decoder instead
2031+ of the one stored in the database to further improve
2032+ the behaviour when using VBR files.
2033+
2034+ * Window borders are know configurable.
2035+
2036+ * pytonerc: new option border in filelistwindow, playlistwindow,
2037+ iteminfowindow, and playerwindow sections.
2038
2039
2040 2004-04-05 Jörg Lehmann <joerg@luga.de>
2041
2042- * dbitem.py: Use the TLEN id3 tag when existent for the length of an
2043- MP3 file. Hopefully, this improves the behaviour when using
2044- VBR files.
2045+ * dbitem.py: Use the TLEN id3 tag when existent for the length of an
2046+ MP3 file. Hopefully, this improves the behaviour when using
2047+ VBR files.
2048
2049- * pytonerc: Added vi-like navigation keys to standard config (as
2050- suggested by Andreas Poisel <a.poisel at acat dot cc>).
2051+ * pytonerc: Added vi-like navigation keys to standard config (as
2052+ suggested by Andreas Poisel <a.poisel at acat dot cc>).
2053
2054
2055 2004-04-04 Jörg Lehmann <joerg@luga.de>
2056
2057- * Version 2.0.11 released.
2058+ * Version 2.0.11 released.
2059
2060
2061 2004-04-03 Jörg Lehmann <joerg@luga.de>
2062
2063- * config.py: Add aooptions configuration option string that allows
2064- the user to change all options provided by the ao library
2065- (as suggested by Stuart Pook <Stuart dot Pook at infres dot enst
2066- dot fr>).
2067+ * config.py: Add aooptions configuration option string that allows
2068+ the user to change all options provided by the ao library
2069+ (as suggested by Stuart Pook <Stuart dot Pook at infres dot enst
2070+ dot fr>).
2071
2072
2073 2003-03-28 Jörg Lehmann <joerg@luga.de>
2074
2075- * services/songdbs/local.py: automatically update to new
2076- database version if necessary.
2077-
2078- * Close audio device when no songs are left in playlist
2079- (fixing a bug reported by Stuart Pook <Stuart dot Pook at infres
2080- dot enst dot fr>).
2081-
2082- * Remove alsa_buf_size option again as it was not working
2083- as expected.
2084+ * services/songdbs/local.py: automatically update to new
2085+ database version if necessary.
2086+
2087+ * Close audio device when no songs are left in playlist
2088+ (fixing a bug reported by Stuart Pook <Stuart dot Pook at infres
2089+ dot enst dot fr>).
2090+
2091+ * Remove alsa_buf_size option again as it was not working
2092+ as expected.
2093
2094
2095 2003-03-22 Jörg Lehmann <joerg@luga.de>
2096
2097- * services/songdbs/local.py: store version number of database
2098- schema in database.
2099+ * services/songdbs/local.py: store version number of database
2100+ schema in database.
2101
2102- * Do no longer identify albums by artist+album but only by album
2103- name (as suggested by Stuart Pook <Stuart dot Pook at infres dot
2104- enst dot fr>). Albums with the same name thus get automatically
2105- merged in the albums list.
2106+ * Do no longer identify albums by artist+album but only by album
2107+ name (as suggested by Stuart Pook <Stuart dot Pook at infres dot
2108+ enst dot fr>). Albums with the same name thus get automatically
2109+ merged in the albums list.
2110
2111
2112 2003-03-18 Jörg Lehmann <joerg@luga.de>
2113
2114- * Prevent race condition by starting song auto registerer
2115- only after the database thread has been started.
2116+ * Prevent race condition by starting song auto registerer
2117+ only after the database thread has been started.
2118
2119
2120 2003-03-17 Jörg Lehmann <joerg@luga.de>
2121
2122- * Version 2.0.10 released.
2123-
2124- * Added alsa_buf_size option to player sections of config file,
2125- which allows one to specify the internal buffer size of the alsa
2126- device (partly implementing a suggestion by Stuart Pook <Stuart
2127- dot Pook at infres dot enst dot fr>).
2128-
2129- * Added sections logwindow and colors.logwindow to config file.
2130-
2131- * Mark song as unplayed again when it is stopped (as suggested by
2132- George J. De Bruin <SoundChaser at myrealbox dot com>).
2133+ * Version 2.0.10 released.
2134+
2135+ * Added alsa_buf_size option to player sections of config file,
2136+ which allows one to specify the internal buffer size of the alsa
2137+ device (partly implementing a suggestion by Stuart Pook <Stuart
2138+ dot Pook at infres dot enst dot fr>).
2139+
2140+ * Added sections logwindow and colors.logwindow to config file.
2141+
2142+ * Mark song as unplayed again when it is stopped (as suggested by
2143+ George J. De Bruin <SoundChaser at myrealbox dot com>).
2144
2145
2146 2003-03-15 Jörg Lehmann <joerg@luga.de>
2147
2148- * Keep audio device only open, when it is really needed, i.e.,
2149- close it when the player is stopped or paused (as suggested by
2150- <Stuart dot Pook at infres dot enst dot fr>).
2151+ * Keep audio device only open, when it is really needed, i.e.,
2152+ close it when the player is stopped or paused (as suggested by
2153+ <Stuart dot Pook at infres dot enst dot fr>).
2154
2155- * Log problems during audio device initialisation to message log.
2156+ * Log problems during audio device initialisation to message log.
2157
2158
2159 2003-03-14 Jörg Lehmann <joerg@luga.de>
2160
2161- * Disable mixer functionality when an error occured during mixer
2162- initialisation.
2163-
2164- * Add message log functionality.
2165-
2166- * Do not use "=" for the top border of an active windows anymore.
2167+ * Disable mixer functionality when an error occured during mixer
2168+ initialisation.
2169+
2170+ * Add message log functionality.
2171+
2172+ * Do not use "=" for the top border of an active windows anymore.
2173
2174
2175 2003-03-13 Jörg Lehmann <joerg@luga.de>
2176
2177- * pytone.py: Initialize players after databases to prevent a race
2178- condition when autoplaymode=random (thanks to Niels Drost
2179- <ndrost@cs dot vu dot nl> for reporting this bug).
2180-
2181- * Handle virtual directories at top of filelist window correctly
2182- when inserting new artists in the database (fixing a bug reported
2183- by Niels Drost <ndrost@cs dot vu dot nl>).
2184-
2185- * config.py: Fix wrong behaviour with foreground colour black
2186- (thanks to Stuart Pook <Stuart.Pook@infres.enst.fr> for
2187- reporting this problem).
2188-
2189-
2190-2003-02-18 Jörg Lehmann <joerg@luga.de>
2191-
2192- * Check for old database type did require Python 2.2 and above.
2193-
2194- * Include cursext extension module in distribution.
2195-
2196- * Check path names in m3u files for zero-bytes to handle a (very
2197- rare) corner case (reported by Douglas Bagnall <douglas at
2198- paradise dot net dot nz>.
2199-
2200-
2201-2003-02-18 Jörg Lehmann <joerg@luga.de>
2202-
2203- * Include po files in distribution.
2204+ * pytone.py: Initialize players after databases to prevent a race
2205+ condition when autoplaymode=random (thanks to Niels Drost
2206+ <ndrost@cs dot vu dot nl> for reporting this bug).
2207+
2208+ * Handle virtual directories at top of filelist window correctly
2209+ when inserting new artists in the database (fixing a bug reported
2210+ by Niels Drost <ndrost@cs dot vu dot nl>).
2211+
2212+ * config.py: Fix wrong behaviour with foreground colour black
2213+ (thanks to Stuart Pook <Stuart.Pook@infres.enst.fr> for
2214+ reporting this problem).
2215+
2216+
2217+2003-02-18 Jörg Lehmann <joerg@luga.de>
2218+
2219+ * Check for old database type did require Python 2.2 and above.
2220+
2221+ * Include cursext extension module in distribution.
2222+
2223+ * Check path names in m3u files for zero-bytes to handle a (very
2224+ rare) corner case (reported by Douglas Bagnall <douglas at
2225+ paradise dot net dot nz>.
2226+
2227+
2228+2003-02-18 Jörg Lehmann <joerg@luga.de>
2229+
2230+ * Include po files in distribution.
2231
2232
2233 2003-02-15 Jörg Lehmann <joerg@luga.de>
2234
2235- * Version 2.0.9 released.
2236-
2237- * filelistwin.py and playlistwin.py: Move cursor to the right
2238- position in order to make it more easy for users of Braille
2239- displays to track the current position/selection (thanks to
2240- Stéphane Doyon <s.doyon at videotron dot ca>).
2241-
2242- * config.py and services/players/internal.py: New config option
2243- crossfading in [players.*] sections, which allows the user to turn
2244- off the crossfading of songs (suggested by Niels Drost <ndrost@cs
2245- dot vu dot nl>).
2246-
2247- * services/songdbs/local.py: Store playing time with each song
2248- in lastplayed list to later on permit merging of lists coming
2249- from different databases. Upon upgrade, the last played song
2250- list will be deleted!
2251+ * Version 2.0.9 released.
2252+
2253+ * filelistwin.py and playlistwin.py: Move cursor to the right
2254+ position in order to make it more easy for users of Braille
2255+ displays to track the current position/selection (thanks to
2256+ Stéphane Doyon <s.doyon at videotron dot ca>).
2257+
2258+ * config.py and services/players/internal.py: New config option
2259+ crossfading in [players.*] sections, which allows the user to turn
2260+ off the crossfading of songs (suggested by Niels Drost <ndrost@cs
2261+ dot vu dot nl>).
2262+
2263+ * services/songdbs/local.py: Store playing time with each song
2264+ in lastplayed list to later on permit merging of lists coming
2265+ from different databases. Upon upgrade, the last played song
2266+ list will be deleted!
2267
2268
2269 2003-02-14 Jörg Lehmann <joerg@luga.de>
2270
2271- * services/playlist.py: Upon deletion of played songs, the played and total
2272- times info of the playlist have not been adapted.
2273-
2274- * playlistwin.py: When given the focus to the playlist window, we
2275- now recenter the displayed list and select the currently playing
2276- song.
2277-
2278- * Disable logging functionality of bsddb.
2279-
2280- * When updating the song database, we delete songs which are no longer
2281- accesible.
2282-
2283- * services/songdbs/local.py: Be more aggresive, when scanning for
2284- new songs.
2285+ * services/playlist.py: Upon deletion of played songs, the played and total
2286+ times info of the playlist have not been adapted.
2287+
2288+ * playlistwin.py: When given the focus to the playlist window, we
2289+ now recenter the displayed list and select the currently playing
2290+ song.
2291+
2292+ * Disable logging functionality of bsddb.
2293+
2294+ * When updating the song database, we delete songs which are no longer
2295+ accesible.
2296+
2297+ * services/songdbs/local.py: Be more aggresive, when scanning for
2298+ new songs.
2299
2300
2301 2003-02-12 Jörg Lehmann <joerg@luga.de>
2302
2303- * dbitem.py: Try to determine the "correct" character set for the reencoding
2304- of the unicode strings contained in the tags of Ogg Vorbis files
2305- (thanks to Michal Cihar <michal at cihar dot com> for the patch).
2306+ * dbitem.py: Try to determine the "correct" character set for the reencoding
2307+ of the unicode strings contained in the tags of Ogg Vorbis files
2308+ (thanks to Michal Cihar <michal at cihar dot com> for the patch).
2309
2310
2311 2003-02-08 Jörg Lehmann <joerg@luga.de>
2312
2313- * Better curses initialisation (thanks to Johannes Mockenhaupt <jmockenhaupt
2314- at gmx dot net>)
2315-
2316- * Add an extension module which provides support for transparent
2317- terminals also for "older" Python versions (thanks to Johannes Mockenhaupt
2318- <jmockenhaupt at gmx dot net>).
2319-
2320- * pytone.py: Initialize players before everything else to prevent a hang of
2321- PyTone when a problem occured at this stage.
2322-
2323- * services/player.py: Be more verbose on player initialization problems.
2324+ * Better curses initialisation (thanks to Johannes Mockenhaupt <jmockenhaupt
2325+ at gmx dot net>)
2326+
2327+ * Add an extension module which provides support for transparent
2328+ terminals also for "older" Python versions (thanks to Johannes Mockenhaupt
2329+ <jmockenhaupt at gmx dot net>).
2330+
2331+ * pytone.py: Initialize players before everything else to prevent a hang of
2332+ PyTone when a problem occured at this stage.
2333+
2334+ * services/player.py: Be more verbose on player initialization problems.
2335
2336
2337 2003-02-07 Jörg Lehmann <joerg@luga.de>
2338
2339- * services/playlist.py: Remove extraneous _checksong call in _addsongs method.
2340-
2341- * services/playlist.py: Check whether song is already contained in a local
2342- database. If yes, do not create a new entry in the primary database.
2343- The disadvantage of this behaviour is that the playing information is
2344- no longer collected centrally.
2345-
2346- * Rescanning songs proceeds now in a separate thread.
2347+ * services/playlist.py: Remove extraneous _checksong call in _addsongs method.
2348+
2349+ * services/playlist.py: Check whether song is already contained in a local
2350+ database. If yes, do not create a new entry in the primary database.
2351+ The disadvantage of this behaviour is that the playing information is
2352+ no longer collected centrally.
2353+
2354+ * Rescanning songs proceeds now in a separate thread.
2355
2356
2357 2003-01-31 Jörg Lehmann <joerg@luga.de>
2358
2359- * services/players/internal.py: Check for endianness of platform to set
2360- correct output format when using the ossaudiodev module, fixing the
2361- internal player on PowerPC (thanks to Peter Poeml <poeml at suse
2362- dot de> for the patch).
2363+ * services/players/internal.py: Check for endianness of platform to set
2364+ correct output format when using the ossaudiodev module, fixing the
2365+ internal player on PowerPC (thanks to Peter Poeml <poeml at suse
2366+ dot de> for the patch).
2367
2368- * setup.py: install italian message catalog
2369+ * setup.py: install italian message catalog
2370
2371
2372 2003-01-18 Jörg Lehmann <joerg@luga.de>
2373
2374- * Version 2.0.8 released.
2375+ * Version 2.0.8 released.
2376
2377- * Include Italian localization (many thanks to Davide Alessio
2378- <dalessio at softhome dot net>).
2379+ * Include Italian localization (many thanks to Davide Alessio
2380+ <dalessio at softhome dot net>).
2381
2382
2383 2003-01-11 Jörg Lehmann <joerg@luga.de>
2384
2385- * network.py: Do not bail out when pytonectl socket does not exist
2386- (thanks to Alexander Wirt <formorer at formorer dot de> for
2387- reporting this problem).
2388+ * network.py: Do not bail out when pytonectl socket does not exist
2389+ (thanks to Alexander Wirt <formorer at formorer dot de> for
2390+ reporting this problem).
2391
2392
2393 2003-01-06 Jörg Lehmann <joerg@luga.de>
2394
2395- * playlist.py: Fix bug occuring when rating a song and no song is
2396- selected in playlist. Furthermore, the song info window was not
2397- updated.
2398+ * playlist.py: Fix bug occuring when rating a song and no song is
2399+ selected in playlist. Furthermore, the song info window was not
2400+ updated.
2401
2402- * Added new command rescan in filelist and playlist mode, which allows
2403- the user to rescan/update the id3 information of the selected song(s).
2404+ * Added new command rescan in filelist and playlist mode, which allows
2405+ the user to rescan/update the id3 information of the selected song(s).
2406
2407
2408 2003-01-05 Jörg Lehmann <joerg@luga.de>
2409
2410- * Version 2.0.7 released.
2411+ * Version 2.0.7 released.
2412
2413- * Fix incorrect title and sort order when displaying genre and
2414- decade filtered items.
2415+ * Fix incorrect title and sort order when displaying genre and
2416+ decade filtered items.
2417
2418
2419 2003-01-04 Jörg Lehmann <joerg@luga.de>
2420
2421- * MP3Info.py: use new version of Vivake Gupta.
2422-
2423- * dbitem.py: adapt to new version of MP3Info module.
2424-
2425- * dbitem.py: Extract track number from file names like
2426- "03 Songtitle.mp3".
2427+ * MP3Info.py: use new version of Vivake Gupta.
2428+
2429+ * dbitem.py: adapt to new version of MP3Info module.
2430+
2431+ * dbitem.py: Extract track number from file names like
2432+ "03 Songtitle.mp3".
2433
2434
2435 2003-01-03 Jörg Lehmann <joerg@luga.de>
2436
2437- * config.py: Added new option cachesize in [database.*] sections,
2438- which allows to specify the cache size used for the database
2439- when using Python 2.3 and above.
2440-
2441- * services/songdbs/songdb.py: Renamed in services/songdbs/local.py
2442- to prevent collision with global bsddb.py module.
2443-
2444- * services/songdbs/local.py: Enable use of new bsddb module
2445- from Python 2.3 and above.
2446+ * config.py: Added new option cachesize in [database.*] sections,
2447+ which allows to specify the cache size used for the database
2448+ when using Python 2.3 and above.
2449+
2450+ * services/songdbs/songdb.py: Renamed in services/songdbs/local.py
2451+ to prevent collision with global bsddb.py module.
2452+
2453+ * services/songdbs/local.py: Enable use of new bsddb module
2454+ from Python 2.3 and above.
2455
2456
2457 2003-12-13 Jörg Lehmann <joerg@luga.de>
2458
2459- * config.py: Do not process command line and reading of
2460- configuration file at module initialisation time, in order to be
2461- usable for pytonectl as well (fixing a problem reported by Han
2462- Boetes <han at mijncomputer dot nl>).
2463-
2464- * services/player.py: autoplay now also works after having
2465- stopped and restarted the player manually (thanks to Han Boetes
2466- for pointing me to this long standing annoyance).
2467-
2468- * events.py: New event playertogglepause which allows to pause the
2469- player, if it is playing, or start playing, if it is paused.
2470-
2471- * pytonectl.py: Add support for the playertogglepause function (as
2472- suggested by Han Boetes <han at mijncomputer dot nl>).
2473+ * config.py: Do not process command line and reading of
2474+ configuration file at module initialisation time, in order to be
2475+ usable for pytonectl as well (fixing a problem reported by Han
2476+ Boetes <han at mijncomputer dot nl>).
2477+
2478+ * services/player.py: autoplay now also works after having
2479+ stopped and restarted the player manually (thanks to Han Boetes
2480+ for pointing me to this long standing annoyance).
2481+
2482+ * events.py: New event playertogglepause which allows to pause the
2483+ player, if it is playing, or start playing, if it is paused.
2484+
2485+ * pytonectl.py: Add support for the playertogglepause function (as
2486+ suggested by Han Boetes <han at mijncomputer dot nl>).
2487
2488
2489 2003-12-12 Jörg Lehmann <joerg@luga.de>
2490
2491- * Version 2.0.6 released.
2492+ * Version 2.0.6 released.
2493
2494- * event.py, player.py: Add new event playerratecurrentsong:
2495- rating of the song currently being played on the player.
2496+ * event.py, player.py: Add new event playerratecurrentsong:
2497+ rating of the song currently being played on the player.
2498
2499
2500 2003-12-11 Jörg Lehmann <joerg@luga.de>
2501
2502- * pytonectl.py: Add support for song addition and immediate song
2503- play.
2504+ * pytonectl.py: Add support for song addition and immediate song
2505+ play.
2506
2507- * config.py: New option playerinfofile in the general section,
2508- which allows to specify a file where the song currently being
2509- played on the main player will be written (as suggested by Han
2510- Boetes <han at mijncomputer dot nl>).
2511+ * config.py: New option playerinfofile in the general section,
2512+ which allows to specify a file where the song currently being
2513+ played on the main player will be written (as suggested by Han
2514+ Boetes <han at mijncomputer dot nl>).
2515
2516
2517 2003-12-09 Jörg Lehmann <joerg@luga.de>
2518
2519- * config.py: Prune removed -n switch from usage/help output.
2520-
2521- * pytonectl.py: New script for the remote control of PyTone (as
2522- suggested by Han Boetes <han at mijncomputer dot nl>).
2523-
2524- * config.py: New option in the network section: socketfile.
2525- Specifies the name of a UNIX domain socket for the remote control
2526- of PyTone, if set to a non-empty value.
2527-
2528-
2529-2003-11-25 Jörg Lehmann <joerg@luga.de>
2530-
2531- * Version 2.0.5 released.
2532-
2533- * Added missing help texts for functions introduced in version
2534- 2.0.4 (fixing a bug spotted by Han Boetes <han at mijncomputer dot
2535- nl>).
2536-
2537- * Fix a small bug in services.players (thanks to Andreas Poisel <a
2538- dot poisel at acat dot cc> for the patch).
2539-
2540- * services/playlist.py: Notify upon playlist changes due to a song being
2541- played.
2542-
2543- * Cleanup README file: purge news section.
2544-
2545-
2546-2003-11-25 Jörg Lehmann <joerg@luga.de>
2547-
2548- * Version 2.0.4 released.
2549+ * config.py: Prune removed -n switch from usage/help output.
2550+
2551+ * pytonectl.py: New script for the remote control of PyTone (as
2552+ suggested by Han Boetes <han at mijncomputer dot nl>).
2553+
2554+ * config.py: New option in the network section: socketfile.
2555+ Specifies the name of a UNIX domain socket for the remote control
2556+ of PyTone, if set to a non-empty value.
2557+
2558+
2559+2003-11-25 Jörg Lehmann <joerg@luga.de>
2560+
2561+ * Version 2.0.5 released.
2562+
2563+ * Added missing help texts for functions introduced in version
2564+ 2.0.4 (fixing a bug spotted by Han Boetes <han at mijncomputer dot
2565+ nl>).
2566+
2567+ * Fix a small bug in services.players (thanks to Andreas Poisel <a
2568+ dot poisel at acat dot cc> for the patch).
2569+
2570+ * services/playlist.py: Notify upon playlist changes due to a song being
2571+ played.
2572+
2573+ * Cleanup README file: purge news section.
2574+
2575+
2576+2003-11-25 Jörg Lehmann <joerg@luga.de>
2577+
2578+ * Version 2.0.4 released.
2579
2580
2581 2003-11-24 Jörg Lehmann <joerg@luga.de>
2582
2583- * Added repeat function for playlist.
2584+ * Added repeat function for playlist.
2585
2586- * The playlist mode can now be set initially with the variable
2587- initialplaylistmode in the [general] section (instead of
2588- autorandomplay) and toggled during runtime by pressing CTRL-T.
2589+ * The playlist mode can now be set initially with the variable
2590+ initialplaylistmode in the [general] section (instead of
2591+ autorandomplay) and toggled during runtime by pressing CTRL-T.
2592
2593
2594 2003-11-23 Jörg Lehmann <joerg@luga.de>
2595
2596- * More safety checks with respect to Ogg Vorbis support.
2597-
2598- * Do not show Ogg Vorbis files in filesystem directory view, if no
2599- Ogg Vorbis support is present.
2600-
2601- * Move update of song played information to services/player.py to
2602- be consistent with song.unplay, which will be introduced later.
2603-
2604- * Rename _nextsong->_playsong in player modules.
2605+ * More safety checks with respect to Ogg Vorbis support.
2606+
2607+ * Do not show Ogg Vorbis files in filesystem directory view, if no
2608+ Ogg Vorbis support is present.
2609+
2610+ * Move update of song played information to services/player.py to
2611+ be consistent with song.unplay, which will be introduced later.
2612+
2613+ * Rename _nextsong->_playsong in player modules.
2614
2615
2616 2003-11-18 Jörg Lehmann <joerg@luga.de>
2617
2618- * services/playlist.py: Replace incorrect use of dbitem.song by item.song in
2619- _checksong method.
2620-
2621- * add autorandomplay to [general] section of pytonerc, which enables
2622- choosing a random song for playing, when playlist is empty
2623-
2624- * Allow replaying of the current playlist. The corresponding key
2625- can be configured in the [keybindings] section of pytonerc via the
2626- variable general.playlistreplay (implements Debian wishlist bug
2627- #218282)
2628+ * services/playlist.py: Replace incorrect use of dbitem.song by item.song in
2629+ _checksong method.
2630+
2631+ * add autorandomplay to [general] section of pytonerc, which enables
2632+ choosing a random song for playing, when playlist is empty
2633+
2634+ * Allow replaying of the current playlist. The corresponding key
2635+ can be configured in the [keybindings] section of pytonerc via the
2636+ variable general.playlistreplay (implements Debian wishlist bug
2637+ #218282)
2638
2639
2640 2003-10-18 Jörg Lehmann <joerg@luga.de>
2641
2642- * Version 2.0.3 released.
2643-
2644- * pytone.py: Prevent mainscreen.dump from being called if the mainscreen
2645- constructor did not succeed (reported including a patch in Debian bug 216002
2646- by David Kågedal <davidk at lysator dot liu dot se>)
2647-
2648- * config.py: Remove command line option "-n/--network". Use a
2649- config file instead.
2650-
2651- * config.py: Check for empty musicbasedir in the configuration
2652-
2653- * pytonerc: Set musicbasedir to an empty value by default to remind
2654- first time users setting this option.
2655+ * Version 2.0.3 released.
2656+
2657+ * pytone.py: Prevent mainscreen.dump from being called if the mainscreen
2658+ constructor did not succeed (reported including a patch in Debian bug 216002
2659+ by David Kågedal <davidk at lysator dot liu dot se>)
2660+
2661+ * config.py: Remove command line option "-n/--network". Use a
2662+ config file instead.
2663+
2664+ * config.py: Check for empty musicbasedir in the configuration
2665+
2666+ * pytonerc: Set musicbasedir to an empty value by default to remind
2667+ first time users setting this option.
2668
2669
2670 2003-10-13 Jörg Lehmann <joerg@luga.de>
2671
2672- * item.py: Allow getcontentsrecursive (recursive insert) and implement
2673- getcontentsrecursiverandom (random insert) for filesystem directories.
2674- Thanks to Martin van Es <martin at mrvanes dot com> for reporting
2675- the previous inconsistency in PyTone's behaviour in that regard).
2676-
2677- * Merge pending fix from last Rothsee party's late night hacking
2678- session:
2679-
2680- - requestnextsong gets a playerid argument to distinguish between
2681- song requests of different players
2682+ * item.py: Allow getcontentsrecursive (recursive insert) and implement
2683+ getcontentsrecursiverandom (random insert) for filesystem directories.
2684+ Thanks to Martin van Es <martin at mrvanes dot com> for reporting
2685+ the previous inconsistency in PyTone's behaviour in that regard).
2686+
2687+ * Merge pending fix from last Rothsee party's late night hacking
2688+ session:
2689+
2690+ - requestnextsong gets a playerid argument to distinguish between
2691+ song requests of different players
2692
2693
2694 2003-08-12 Jörg Lehmann <joerg@luga.de>
2695
2696- * config.py: Fix wrong behaviour in mono mode, when no mono
2697- attribute is given in config file.
2698-
2699- * inputwin.py: Re-added curses.ascii import, which got lost.
2700-
2701- * config.py: New option "colorsupport" in section "general".
2702- This allows to enable/disable colors both manually and
2703- automatically (as before).
2704-
2705- * config.py: New option "throttleoutput" in section "general",
2706- which allows to specify the number of screen updates skipped when
2707- there is still user input.
2708+ * config.py: Fix wrong behaviour in mono mode, when no mono
2709+ attribute is given in config file.
2710+
2711+ * inputwin.py: Re-added curses.ascii import, which got lost.
2712+
2713+ * config.py: New option "colorsupport" in section "general".
2714+ This allows to enable/disable colors both manually and
2715+ automatically (as before).
2716+
2717+ * config.py: New option "throttleoutput" in section "general",
2718+ which allows to specify the number of screen updates skipped when
2719+ there is still user input.
2720
2721
2722 2003-07-27 Jörg Lehmann <joerg@luga.de>
2723
2724- * Version 2.0.2 released.
2725+ * Version 2.0.2 released.
2726
2727
2728 2003-07-26 Jörg Lehmann <joerg@luga.de>
2729
2730- * item.py: Fixed typo in decades.getcontentsrecursive()
2731-
2732- * Purged unneeded imports and local variables found by pychecker.
2733-
2734- * Streamlined playingsong handling by using playbackinfochanged
2735- instead of playlistchanged events.
2736-
2737- * Check for __setstate__ in __getattr__ to enable unpickling of
2738- certain wrapper classes for Python 2.3.
2739-
2740- * setup.py: Move everything (including pcm module) into pytone module.
2741+ * item.py: Fixed typo in decades.getcontentsrecursive()
2742+
2743+ * Purged unneeded imports and local variables found by pychecker.
2744+
2745+ * Streamlined playingsong handling by using playbackinfochanged
2746+ instead of playlistchanged events.
2747+
2748+ * Check for __setstate__ in __getattr__ to enable unpickling of
2749+ certain wrapper classes for Python 2.3.
2750+
2751+ * setup.py: Move everything (including pcm module) into pytone module.
2752
2753
2754 2003-07-25 Jörg Lehmann <joerg@luga.de>
2755
2756- * Version 2.0.1 released.
2757+ * Version 2.0.1 released.
2758
2759
2760 2003-07-24 Jörg Lehmann <joerg@luga.de>
2761
2762- * Allow batching of addition of songs to playlist.
2763-
2764- * Statusbar for help window
2765-
2766- * Command line switch for database rebuilt.
2767-
2768- * Updated THANKS file.
2769+ * Allow batching of addition of songs to playlist.
2770+
2771+ * Statusbar for help window
2772+
2773+ * Command line switch for database rebuilt.
2774+
2775+ * Updated THANKS file.
2776
2777
2778 2003-07-23 Jörg Lehmann <joerg@luga.de>
2779
2780- * Code cleanups at various places.
2781-
2782- * Outstanding issues with playlist functionality have
2783- been resolved now.
2784-
2785- * Do automatic recenter around last song of playlist if
2786- no song is being played.
2787-
2788- * Add originating module to debugging output.
2789+ * Code cleanups at various places.
2790+
2791+ * Outstanding issues with playlist functionality have
2792+ been resolved now.
2793+
2794+ * Do automatic recenter around last song of playlist if
2795+ no song is being played.
2796+
2797+ * Add originating module to debugging output.
2798
2799
2800 2003-07-20 Jörg Lehmann <joerg@luga.de>
2801
2802- * Fix load and save of playlists (thanks to Alexander Wirt
2803- <formorer at formorer.de> for spotting this bug)
2804+ * Fix load and save of playlists (thanks to Alexander Wirt
2805+ <formorer at formorer.de> for spotting this bug)
2806
2807- * Enable support for monochrome terminals again. Use
2808- curses.has_colors() to determine color capabilities, but maybe we
2809- eventually have to add a configuration variable for that.
2810+ * Enable support for monochrome terminals again. Use
2811+ curses.has_colors() to determine color capabilities, but maybe we
2812+ eventually have to add a configuration variable for that.
2813
2814
2815 2003-07-19 Jörg Lehmann <joerg@luga.de>
2816
2817- * Fix missing os.path.expanduser around config file path
2818- (thanks to David Braaten <xiticix47 at hotmail.com>)
2819+ * Fix missing os.path.expanduser around config file path
2820+ (thanks to David Braaten <xiticix47 at hotmail.com>)
2821
2822
2823 2003-07-18 Jörg Lehmann <joerg@luga.de>
2824
2825- * Version 2.0.0 finally released.
2826+ * Version 2.0.0 finally released.
2827
2828
2829 2003-06-08 Jörg Lehmann <joerg@luga.de>
2830
2831- * Move service setup from mainscreen.py to pytone.py
2832+ * Move service setup from mainscreen.py to pytone.py
2833
2834- * Resurrect playlist functionality.
2835+ * Resurrect playlist functionality.
2836
2837
2838 2003-05-25 Jörg Lehmann <joerg@luga.de>
2839
2840- * Renamed:
2841- aoplayer.py -> internal.py,
2842- mpg123player.py -> mpg123.py
2843- xmmsplayer.py -> xmms.py
2844-
2845- * First steps towards playback from remote db: try to
2846- access song locally.
2847-
2848- * Prevent too many register request from auto registerer.
2849+ * Renamed:
2850+ aoplayer.py -> internal.py,
2851+ mpg123player.py -> mpg123.py
2852+ xmmsplayer.py -> xmms.py
2853+
2854+ * First steps towards playback from remote db: try to
2855+ access song locally.
2856+
2857+ * Prevent too many register request from auto registerer.
2858
2859
2860 2003-05-24 Jörg Lehmann <joerg@luga.de>
2861
2862- * players/mpg123player.py: Fix bug spotted by
2863- John Plevyak <jplevyak at acm.org>: Adding a new song
2864- after all songs had been played, required to stop and
2865- restart the player, even though autoplay was enabled.
2866+ * players/mpg123player.py: Fix bug spotted by
2867+ John Plevyak <jplevyak at acm.org>: Adding a new song
2868+ after all songs had been played, required to stop and
2869+ restart the player, even though autoplay was enabled.
2870
2871
2872 2003-05-17 Jörg Lehmann <joerg@luga.de>
2873
2874- * Support default background color and try to use
2875- curses.use_default_colors, if present. This requires
2876- a new version of the Python curses module.
2877-
2878- * Support ossaudiodev instead of ao interface. Unfortunately,
2879- this doesn't work well with the current ossaudiodev module
2880- of Python 2.3beta1. On the other hand, I was not able
2881- to run the ao module with a debug build of current Python
2882- CVS. Probably, ao is buggy.
2883-
2884- * helpwin.py: Set self.items already in constructor, to
2885- prevent possible crash, if one presses a key during
2886- the PyTone initialization
2887-
2888- * songdb.py: Remove unused and dangerous __len__ method,
2889- which lead sometimes to a crash during the PyTone shutdown.
2890+ * Support default background color and try to use
2891+ curses.use_default_colors, if present. This requires
2892+ a new version of the Python curses module.
2893+
2894+ * Support ossaudiodev instead of ao interface. Unfortunately,
2895+ this doesn't work well with the current ossaudiodev module
2896+ of Python 2.3beta1. On the other hand, I was not able
2897+ to run the ao module with a debug build of current Python
2898+ CVS. Probably, ao is buggy.
2899+
2900+ * helpwin.py: Set self.items already in constructor, to
2901+ prevent possible crash, if one presses a key during
2902+ the PyTone initialization
2903+
2904+ * songdb.py: Remove unused and dangerous __len__ method,
2905+ which lead sometimes to a crash during the PyTone shutdown.
2906
2907
2908 2003-05-13 Jörg Lehmann <joerg@luga.de>
2909
2910- * New db index for playing statistics. Move respective
2911- code to songdb.py
2912+ * New db index for playing statistics. Move respective
2913+ code to songdb.py
2914
2915- * Show info about songs which have been added most recently
2916- to database.
2917+ * Show info about songs which have been added most recently
2918+ to database.
2919
2920
2921 2003-05-11 Jörg Lehmann <joerg@luga.de>
2922
2923- * item.py: Replaced filtereditem by two, more specialised, classes
2924- filtereddecade and filteredgenre.
2925-
2926- * iteminfowin.py, item.py: Move code for respective items into a
2927- getinfo method.
2928-
2929- * songdb.py: More index work, should be almost complete now.
2930+ * item.py: Replaced filtereditem by two, more specialised, classes
2931+ filtereddecade and filteredgenre.
2932+
2933+ * iteminfowin.py, item.py: Move code for respective items into a
2934+ getinfo method.
2935+
2936+ * songdb.py: More index work, should be almost complete now.
2937
2938
2939 2003-05-10 Jörg Lehmann <joerg@luga.de>
2940
2941- * MP3Info.py: change _strip_zero function to
2942- - use faster lstrip, if Python 2.2.2 and above
2943- - cut string after first (non-leading) \0 character,
2944- thereby fixing PyTone crashes reported by a few
2945- users.
2946+ * MP3Info.py: change _strip_zero function to
2947+ - use faster lstrip, if Python 2.2.2 and above
2948+ - cut string after first (non-leading) \0 character,
2949+ thereby fixing PyTone crashes reported by a few
2950+ users.
2951
2952- * slist.py: Fix bug in selectbysearchstring and selectbyletter,
2953- reported by John Plevyak <jplevyak at acm.org>.
2954+ * slist.py: Fix bug in selectbysearchstring and selectbyletter,
2955+ reported by John Plevyak <jplevyak at acm.org>.
2956
2957
2958 2003-05-06 Jörg Lehmann <joerg@luga.de>
2959
2960- * mainscreen.py: Catch curses.curs_set exception (reported
2961- by roland at steeltorch.com.
2962+ * mainscreen.py: Catch curses.curs_set exception (reported
2963+ by roland at steeltorch.com.
2964
2965
2966 2003-05-05 Jörg Lehmann <joerg@luga.de>
2967
2968- * More database work and tests. Genres now contain indices
2969- to albums and songs
2970-
2971- * album -> albumid at appropriate places
2972-
2973- * introduced song.id, but not yet used
2974+ * More database work and tests. Genres now contain indices
2975+ to albums and songs
2976+
2977+ * album -> albumid at appropriate places
2978+
2979+ * introduced song.id, but not yet used
2980
2981
2982 2003-05-01 Jörg Lehmann <joerg@luga.de>
2983
2984- * Integrated and polished some patches by Iñigo Serna
2985- <inigoserna at telefonica.net>: Currently playing song gets different colour and
2986- stays centred in playlist. Furthermore, some sanity checks of the id3 tags
2987- have been included. Finally, as suggested by him, a much nicer scrollbar
2988- has been implemented.
2989-
2990- * Support ossaudiodev module (and old oss module , of course) as
2991- suggested by Bill Kearney <wkearney99 at hotmail.com>.
2992-
2993- * Many fixes for bugs remaining from code restructuring.
2994+ * Integrated and polished some patches by Iñigo Serna
2995+ <inigoserna at telefonica.net>: Currently playing song gets different colour and
2996+ stays centred in playlist. Furthermore, some sanity checks of the id3 tags
2997+ have been included. Finally, as suggested by him, a much nicer scrollbar
2998+ has been implemented.
2999+
3000+ * Support ossaudiodev module (and old oss module , of course) as
3001+ suggested by Bill Kearney <wkearney99 at hotmail.com>.
3002+
3003+ * Many fixes for bugs remaining from code restructuring.
3004
3005
3006 2003-04-19 Jörg Lehmann <joerg@luga.de>
3007
3008- * New configuration system is complete now.
3009+ * New configuration system is complete now.
3010
3011
3012 2003-04-18 Jörg Lehmann <joerg@luga.de>
3013
3014- * Massive rework of configuration file handling.
3015- Now it is possible to use ini-style file configuration files.
3016- Exceptions are for the moment the key bindings.
3017+ * Massive rework of configuration file handling.
3018+ Now it is possible to use ini-style file configuration files.
3019+ Exceptions are for the moment the key bindings.
3020
3021
3022 2003-04-17 Jörg Lehmann <joerg@luga.de>
3023
3024- * Network connectivity now via TCP instead of XML-RPC.
3025+ * Network connectivity now via TCP instead of XML-RPC.
3026
3027
3028 2003-04-13 Jörg Lehmann <joerg@luga.de>
3029
3030- * Reworked config file as first step versus a
3031- new config syntax. Import of the curses module
3032- is no longer necessary (except for the check
3033- whether the user has a color or a mono terminal,
3034- which often doesn't work, so ...)
3035-
3036- * Colors now have to be specified like in mutt
3037- "color foreground background" or "mono attribute".
3038- Foreground may contain the prefix "bright".
3039-
3040- * Accept command line options for debugging output
3041- and network functionality.
3042-
3043- * Implement first rough cut of network functionality
3044- via xmlrpc. Remote access to the database is now
3045- possible.
3046+ * Reworked config file as first step versus a
3047+ new config syntax. Import of the curses module
3048+ is no longer necessary (except for the check
3049+ whether the user has a color or a mono terminal,
3050+ which often doesn't work, so ...)
3051+
3052+ * Colors now have to be specified like in mutt
3053+ "color foreground background" or "mono attribute".
3054+ Foreground may contain the prefix "bright".
3055+
3056+ * Accept command line options for debugging output
3057+ and network functionality.
3058+
3059+ * Implement first rough cut of network functionality
3060+ via xmlrpc. Remote access to the database is now
3061+ possible.
3062
3063
3064 2003-04-12 Jörg Lehmann <joerg@luga.de>
3065
3066- * Do not show playlist window of xmms (oops, forgot that).
3067-
3068- * Added list of songs for albums (and root folder)
3069-
3070- * Released 1.12.2 from the 1.12.1 codebase, fixing a Python 2.2ism.
3071+ * Do not show playlist window of xmms (oops, forgot that).
3072+
3073+ * Added list of songs for albums (and root folder)
3074+
3075+ * Released 1.12.2 from the 1.12.1 codebase, fixing a Python 2.2ism.
3076
3077
3078 2003-04-06 Jörg Lehmann <joerg@luga.de>
3079
3080- * Add immediately played to before last played item of playlist.
3081-
3082- * Version 1.12.1 released.
3083-
3084- * New module hub, the former event hub + a simple request hub.
3085-
3086- * Major rework of database interface based upon new request hub.
3087- Database now runs as separate thread.
3088-
3089- * Requests for new songs now also use new request hub.
3090+ * Add immediately played to before last played item of playlist.
3091+
3092+ * Version 1.12.1 released.
3093+
3094+ * New module hub, the former event hub + a simple request hub.
3095+
3096+ * Major rework of database interface based upon new request hub.
3097+ Database now runs as separate thread.
3098+
3099+ * Requests for new songs now also use new request hub.
3100
3101
3102 2003-04-05 Jörg Lehmann <joerg@luga.de>
3103
3104- * Some restructuring in the player code.
3105-
3106- * Implement player pause.
3107-
3108- * Flush buffers on player stop.
3109-
3110- * Immediately play selected song via ALT+Return or ALT+Enter.
3111-
3112- * Implemented shuffle function since it seemed to be very high on
3113- the PyTone user's wishlist...
3114-
3115- * Try to save state of playlist to dump file, if PyTone crashes.
3116- During the next restart, PyTone tries to reconstruct the playlist.
3117-
3118- * Be more verbose, if config.basedir and config.songddb are set
3119- to incorrect values.
3120+ * Some restructuring in the player code.
3121+
3122+ * Implement player pause.
3123+
3124+ * Flush buffers on player stop.
3125+
3126+ * Immediately play selected song via ALT+Return or ALT+Enter.
3127+
3128+ * Implemented shuffle function since it seemed to be very high on
3129+ the PyTone user's wishlist...
3130+
3131+ * Try to save state of playlist to dump file, if PyTone crashes.
3132+ During the next restart, PyTone tries to reconstruct the playlist.
3133+
3134+ * Be more verbose, if config.basedir and config.songddb are set
3135+ to incorrect values.
3136
3137
3138 2003-03-19 Jörg Lehmann <joerg@luga.de>
3139
3140- * slist.py: prevent invalid items state.
3141+ * slist.py: prevent invalid items state.
3142
3143- * disable long traceback
3144+ * disable long traceback
3145
3146
3147 2003-02-06 Jörg Lehmann <joerg@luga.de>
3148
3149- * updatedb.py script.
3150-
3151- * cleanup at various places
3152-
3153- * Version 1.12.0 released.
3154+ * updatedb.py script.
3155+
3156+ * cleanup at various places
3157+
3158+ * Version 1.12.0 released.
3159
3160
3161 2003-02-04 Jörg Lehmann <joerg@luga.de>
3162
3163- * pcm.c: Don't free memory allocated by Python!
3164+ * pcm.c: Don't free memory allocated by Python!
3165
3166
3167 2003-02-03 Jörg Lehmann <joerg@luga.de>
3168
3169- * All *.py files: specify encoding (for Python 2.3)
3170-
3171- * Remove #!/usr/bin/env python for modules
3172-
3173- * pcm.c: Don't forget to free temporary buffer.
3174+ * All *.py files: specify encoding (for Python 2.3)
3175+
3176+ * Remove #!/usr/bin/env python for modules
3177+
3178+ * pcm.c: Don't forget to free temporary buffer.
3179
3180
3181 2003-01-30 Jörg Lehmann <joerg@luga.de>
3182
3183- * playerwin.py: Allow rating of currently playing song (via
3184- alt+1, ..., alt+5 -- better suggestions are always welcome).
3185+ * playerwin.py: Allow rating of currently playing song (via
3186+ alt+1, ..., alt+5 -- better suggestions are always welcome).
3187
3188
3189 2003-01-26 Jörg Lehmann <joerg@luga.de>
3190
3191- * Incorporated patch by Byron Ellacott <bje at apnic.net>
3192- adding Ogg Vorbis support.
3193-
3194- * iteminfowin.py. Fix display of song length.
3195-
3196- * pytone.py: Work around Python 2.1 gettext problem.
3197-
3198- * THANKS: added Byron Ellacott.
3199-
3200- * window.py: Don't unnecessarily trim title.
3201-
3202- * config.py, helpwin.py, mixerwin.py: Make automatic
3203- disappearing time configurable.
3204-
3205- * inputwin.py: remove unnecessary import of oss module, which
3206- prevents PyTone from working if it is not installed.
3207-
3208- * config.py, playlist.py: Make location where playlists are stored
3209- configurable.
3210-
3211- * config.py, slist.py: Make scrolling mechanism configurable `a la
3212- Mutt. Also use page up algorithm from mutt. Adapt to window size
3213- changes, as well!
3214-
3215- * config.py, item.py: Make position of virtual directories
3216- configurable.
3217+ * Incorporated patch by Byron Ellacott <bje at apnic.net>
3218+ adding Ogg Vorbis support.
3219+
3220+ * iteminfowin.py. Fix display of song length.
3221+
3222+ * pytone.py: Work around Python 2.1 gettext problem.
3223+
3224+ * THANKS: added Byron Ellacott.
3225+
3226+ * window.py: Don't unnecessarily trim title.
3227+
3228+ * config.py, helpwin.py, mixerwin.py: Make automatic
3229+ disappearing time configurable.
3230+
3231+ * inputwin.py: remove unnecessary import of oss module, which
3232+ prevents PyTone from working if it is not installed.
3233+
3234+ * config.py, playlist.py: Make location where playlists are stored
3235+ configurable.
3236+
3237+ * config.py, slist.py: Make scrolling mechanism configurable `a la
3238+ Mutt. Also use page up algorithm from mutt. Adapt to window size
3239+ changes, as well!
3240+
3241+ * config.py, item.py: Make position of virtual directories
3242+ configurable.
3243
3244
3245 2003-01-21 Jörg Lehmann <joerg@luga.de>
3246
3247- * Version 1.11.0 released.
3248+ * Version 1.11.0 released.
3249
3250
3251 2003-01-18 Jörg Lehmann <joerg@luga.de>
3252
3253- * new class playbackinfo. All players should work again.
3254+ * new class playbackinfo. All players should work again.
3255
3256
3257 2003-01-16 Jörg Lehmann <joerg@luga.de>
3258
3259- * Indices for genres and years. This gives a huge speedup
3260- for large databases.
3261+ * Indices for genres and years. This gives a huge speedup
3262+ for large databases.
3263
3264- * item.py: new item method getname().
3265+ * item.py: new item method getname().
3266
3267
3268 2003-01-14 Jörg Lehmann <joerg@luga.de>
3269
3270- * Implement song, album and artist rating. Choose song
3271- depending on rating upon random song insertion.
3272+ * Implement song, album and artist rating. Choose song
3273+ depending on rating upon random song insertion.
3274
3275
3276 2003-01-13 Jörg Lehmann <joerg@luga.de>
3277
3278- * Implement random recursive insert. Reserve key "r" for
3279- this function, giving up the old behaviour.
3280+ * Implement random recursive insert. Reserve key "r" for
3281+ this function, giving up the old behaviour.
3282
3283
3284 2003-01-12 Jörg Lehmann <joerg@luga.de>
3285
3286- * config.py: New option autoregisterer, which allows to
3287- enable/disbale the song automatic searching for songs
3288- and playlists after the start of PyTone.
3289+ * config.py: New option autoregisterer, which allows to
3290+ enable/disbale the song automatic searching for songs
3291+ and playlists after the start of PyTone.
3292
3293- * builddb.py: Manually populate song and playlist
3294- database.
3295+ * builddb.py: Manually populate song and playlist
3296+ database.
3297
3298
3299 2003-01-09 Jörg Lehmann <joerg@luga.de>
3300
3301- * item.py: New classes decade and decades, which allow
3302- to show only songs from a specify decade.
3303+ * item.py: New classes decade and decades, which allow
3304+ to show only songs from a specify decade.
3305
3306
3307 2003-01-06 Jörg Lehmann <joerg@luga.de>
3308
3309- * Some improvements/fixes for old songdb.py. Hopefully,
3310- this version is more stable for large databases.
3311+ * Some improvements/fixes for old songdb.py. Hopefully,
3312+ this version is more stable for large databases.
3313
3314
3315 2003-01-02 Jörg Lehmann <joerg@luga.de>
3316
3317- * Implement bsddb3 version of songdb.py. Probably not
3318- yet ready for next version.
3319+ * Implement bsddb3 version of songdb.py. Probably not
3320+ yet ready for next version.
3321
3322
3323 2002-12-30 Jörg Lehmann <joerg@luga.de>
3324
3325- * players/madplayer.py: Set sample size to 4096 (instead of 4806,
3326- i.e. the size of an mp3 frame). This is much more friendlier to
3327- the sound device drivers! Thanks to Damjan Georgeivski
3328- <penguinista at mail.net.mk> for pointing this out.
3329+ * players/madplayer.py: Set sample size to 4096 (instead of 4806,
3330+ i.e. the size of an mp3 frame). This is much more friendlier to
3331+ the sound device drivers! Thanks to Damjan Georgeivski
3332+ <penguinista at mail.net.mk> for pointing this out.
3333
3334
3335 2002-12-22 Jörg Lehmann <joerg@luga.de>
3336
3337- * Use MP3Info.py from http://www.omniscia.org/~vivake/python
3338- instead of old, modified mp3info.py from
3339- http://www.dotfunk.com/projects/mp3/. As a consequence, id3v2
3340- tags are now supported.
3341+ * Use MP3Info.py from http://www.omniscia.org/~vivake/python
3342+ instead of old, modified mp3info.py from
3343+ http://www.dotfunk.com/projects/mp3/. As a consequence, id3v2
3344+ tags are now supported.
3345
3346
3347 2002-12-21 Jörg Lehmann <joerg@luga.de>
3348
3349- * Version 1.10.0 released.
3350+ * Version 1.10.0 released.
3351
3352- * madplayer.py: Manual song forward works again.
3353+ * madplayer.py: Manual song forward works again.
3354
3355
3356 2002-12-19 Jörg Lehmann <joerg@luga.de>
3357
3358- * players/madplayer.py: Do not crossfade, if two songs follow
3359- each other on an album. Kill the gap between the songs instead.
3360+ * players/madplayer.py: Do not crossfade, if two songs follow
3361+ each other on an album. Kill the gap between the songs instead.
3362
3363
3364 2002-12-15 Jörg Lehmann <joerg@luga.de>
3365
3366- * Implement genre list: New database schema, permitting efficient
3367- search for items belonging to a given genre. New items: genres,
3368- genre and filtereditem. The latter one can be used to display
3369- only a subset of the directory hierarchy.
3370+ * Implement genre list: New database schema, permitting efficient
3371+ search for items belonging to a given genre. New items: genres,
3372+ genre and filtereditem. The latter one can be used to display
3373+ only a subset of the directory hierarchy.
3374
3375
3376 2002-12-14 Jörg Lehmann <joerg@luga.de>
3377
3378- * More refactoring: merge the two filelist classes. The filesystem
3379- view is now provided by a virtual folder in item.py.
3380-
3381- * filelist.py: Implemented jump functions to the random list and
3382- the filesystem view.
3383-
3384- * filelist.py: remove generaterandomlist.
3385-
3386- * item.py: Refactoring. New method cmpitem of diritem classes.
3387- Everything should work now properly.
3388-
3389- * window.py, mainscreen.py: Reimplemented window resizing, which
3390- is now much more robust. However, there are still some crashes
3391- of xterm.
3392-
3393- * config.py: Renamed "selectedsong" -> "selected song", etc. in
3394- colors. Added new field "artist/album" and "selected
3395- artist/album".
3396-
3397- * iteminfo.py: Recognise new items.
3398+ * More refactoring: merge the two filelist classes. The filesystem
3399+ view is now provided by a virtual folder in item.py.
3400+
3401+ * filelist.py: Implemented jump functions to the random list and
3402+ the filesystem view.
3403+
3404+ * filelist.py: remove generaterandomlist.
3405+
3406+ * item.py: Refactoring. New method cmpitem of diritem classes.
3407+ Everything should work now properly.
3408+
3409+ * window.py, mainscreen.py: Reimplemented window resizing, which
3410+ is now much more robust. However, there are still some crashes
3411+ of xterm.
3412+
3413+ * config.py: Renamed "selectedsong" -> "selected song", etc. in
3414+ colors. Added new field "artist/album" and "selected
3415+ artist/album".
3416+
3417+ * iteminfo.py: Recognise new items.
3418
3419
3420 2002-12-12 Jörg Lehmann <joerg@luga.de>
3421
3422- * Refactor filelist code: remove filelistitem, move logic
3423- to item, etc.
3424+ * Refactor filelist code: remove filelistitem, move logic
3425+ to item, etc.
3426
3427- * Allow resizing of terminal (not fully complete yet).
3428+ * Allow resizing of terminal (not fully complete yet).
3429
3430
3431 2002-12-11 Jörg Lehmann <joerg@luga.de>
3432
3433- * New module purgedb.py: This module allows
3434- to delete no longer existent songs from the database.
3435+ * New module purgedb.py: This module allows
3436+ to delete no longer existent songs from the database.
3437
3438
3439 2002-12-10 Jörg Lehmann <joerg@luga.de>
3440
3441- * Better formatting of last played time.
3442-
3443- * Playlists are now also stored and displayed in
3444- database and database view, respectively.
3445-
3446- * Random songs are now also accesible via the
3447- main database view.
3448+ * Better formatting of last played time.
3449+
3450+ * Playlists are now also stored and displayed in
3451+ database and database view, respectively.
3452+
3453+ * Random songs are now also accesible via the
3454+ main database view.
3455
3456
3457 2002-12-08 Jörg Lehmann <joerg@luga.de>
3458
3459- * Fix recursive insertion of top and last played songs.
3460+ * Fix recursive insertion of top and last played songs.
3461
3462- * Directory like items now are able to return their
3463- content.
3464+ * Directory like items now are able to return their
3465+ content.
3466
3467
3468 2002-12-06 Jörg Lehmann <joerg@luga.de>
3469
3470- * Sort songs by tracknr if possible. Otherwise
3471- use name.
3472-
3473- * First implementation of top and last played lists.
3474-
3475- * Fill up caches after song auto registering.
3476+ * Sort songs by tracknr if possible. Otherwise
3477+ use name.
3478+
3479+ * First implementation of top and last played lists.
3480+
3481+ * Fill up caches after song auto registering.
3482
3483
3484 2002-11-30 Jörg Lehmann <joerg@luga.de>
3485
3486- * Version 1.9.7 released.
3487-
3488- * More color work.
3489-
3490- * Limit size of help window (therby preventing a crash occuring
3491- for small terminal sizes) and make it scrollable.
3492+ * Version 1.9.7 released.
3493+
3494+ * More color work.
3495+
3496+ * Limit size of help window (therby preventing a crash occuring
3497+ for small terminal sizes) and make it scrollable.
3498
3499
3500 2002-11-27 Jörg Lehmann <joerg@luga.de>
3501
3502- * Initial support for colors. Customizable via config.py.
3503-
3504- * Enter and insert a directory only if the click has hit the
3505- actual string. Otherwise only select the corresponding line.
3506- I hope, this is more intuitive then the old behaviour.
3507-
3508-
3509-2002-11-25 Jörg Lehmann <joerg@luga.de>
3510-
3511- * Customize appearance of mixerwin and inputwin: one
3512- can now choose between a popup and a status bar variant.
3513-
3514- * inputwin.py: popup variant adjusts statusbar.
3515-
3516- * mixerwin.py: popup variant adjusts statusbar.
3517-
3518- * pytone.py: Use pytone base dir as base dir for locales.
3519- This has to be changed, if we/someone else install the
3520- .mo files under their proper location.
3521-
3522-
3523-2002-11-25 Jörg Lehmann <joerg@luga.de>
3524-
3525- * New module inputwin for a generic input window (for search
3526- strings, filenames, etc).
3527+ * Initial support for colors. Customizable via config.py.
3528+
3529+ * Enter and insert a directory only if the click has hit the
3530+ actual string. Otherwise only select the corresponding line.
3531+ I hope, this is more intuitive then the old behaviour.
3532+
3533+
3534+2002-11-25 Jörg Lehmann <joerg@luga.de>
3535+
3536+ * Customize appearance of mixerwin and inputwin: one
3537+ can now choose between a popup and a status bar variant.
3538+
3539+ * inputwin.py: popup variant adjusts statusbar.
3540+
3541+ * mixerwin.py: popup variant adjusts statusbar.
3542+
3543+ * pytone.py: Use pytone base dir as base dir for locales.
3544+ This has to be changed, if we/someone else install the
3545+ .mo files under their proper location.
3546+
3547+
3548+2002-11-25 Jörg Lehmann <joerg@luga.de>
3549+
3550+ * New module inputwin for a generic input window (for search
3551+ strings, filenames, etc).
3552
3553
3554 2002-11-24 Jörg Lehmann <joerg@luga.de>
3555
3556- * More mouse work: Hide mixer and help win on mouse clicks.
3557-
3558- * window.py: walk through all panels in enclose() method
3559-
3560- * slist.py: Fix erroneous use of window width instead of height
3561- which prevented correct scrolling in list windows.
3562-
3563- * playlist.py: Localize load and save prompts.
3564+ * More mouse work: Hide mixer and help win on mouse clicks.
3565+
3566+ * window.py: walk through all panels in enclose() method
3567+
3568+ * slist.py: Fix erroneous use of window width instead of height
3569+ which prevented correct scrolling in list windows.
3570+
3571+ * playlist.py: Localize load and save prompts.
3572
3573
3574 2002-11-23 Jörg Lehmann <joerg@luga.de>
3575
3576- * Initial work for mouse support.
3577+ * Initial work for mouse support.
3578
3579
3580 2002-11-03 Jörg Lehmann <joerg@luga.de>
3581
3582- * slist.py: Cleanup: remove active flag; use focus of
3583- corresponding window instead.
3584-
3585- * filelistwin.py: Activate file list window upon end of search.
3586- Search should work again (Thanks to Andy Bourges for reporting
3587- this bug).
3588-
3589- * player.py: Also sleep in STOP state to prevent unnecessary CPU
3590- utilization.
3591-
3592- * Code cleanup at various places.
3593-
3594- * Added MANIFEST.in and updated setup.py: Include AUTHORS,
3595- COPYING, ChangeLOG, TODO, and *.mo files.
3596+ * slist.py: Cleanup: remove active flag; use focus of
3597+ corresponding window instead.
3598+
3599+ * filelistwin.py: Activate file list window upon end of search.
3600+ Search should work again (Thanks to Andy Bourges for reporting
3601+ this bug).
3602+
3603+ * player.py: Also sleep in STOP state to prevent unnecessary CPU
3604+ utilization.
3605+
3606+ * Code cleanup at various places.
3607+
3608+ * Added MANIFEST.in and updated setup.py: Include AUTHORS,
3609+ COPYING, ChangeLOG, TODO, and *.mo files.
3610
3611
3612 2002-11-02 Jörg Lehmann <joerg@luga.de>
3613
3614- * mixerwin.py: Localize mixer text.
3615-
3616- * iteminfowin.py: Fix small bug, occurring if no ID3 tag is
3617- present.
3618-
3619- * helper.py: New function from Python Cookbook: extended
3620- traceback.
3621-
3622- * pytone.py: Print extended traceback when an uncaught exception
3623- is raised.
3624-
3625- * iteminfowin.py: Make geometry calculations more clean. Use
3626- of spacer now dependent on window width.
3627-
3628- * pytone.py: Removed obsolete reference to hipplayer module.
3629+ * mixerwin.py: Localize mixer text.
3630+
3631+ * iteminfowin.py: Fix small bug, occurring if no ID3 tag is
3632+ present.
3633+
3634+ * helper.py: New function from Python Cookbook: extended
3635+ traceback.
3636+
3637+ * pytone.py: Print extended traceback when an uncaught exception
3638+ is raised.
3639+
3640+ * iteminfowin.py: Make geometry calculations more clean. Use
3641+ of spacer now dependent on window width.
3642+
3643+ * pytone.py: Removed obsolete reference to hipplayer module.
3644
3645
3646 2002-11-01 Jörg Lehmann <joerg@luga.de>
3647
3648- * Localization work all over the place.
3649+ * Localization work all over the place.
3650
3651- * filelist.py: Fix bug occurring when entering an empty
3652- directory (Thanks to Andy Bourges for the bug report).
3653+ * filelist.py: Fix bug occurring when entering an empty
3654+ directory (Thanks to Andy Bourges for the bug report).
3655
3656
3657 2002-10-27 Jörg Lehmann <joerg@luga.de>
3658
3659- * Version 1.9.6
3660-
3661- * New handling of window focus: New event focuschanged instead
3662- of old activewinchanged. The actual is granted to the panel
3663- which is on top of the panel stack.
3664-
3665- * Help and mixer windows now disappear upon keypress events.
3666-
3667- * Moved function descriptions from config.py to new help.py.
3668- Later on, we shall localize them via the gettext module.
3669-
3670- * timer.py: Return immediately, if no alarms are pending.
3671+ * Version 1.9.6
3672+
3673+ * New handling of window focus: New event focuschanged instead
3674+ of old activewinchanged. The actual is granted to the panel
3675+ which is on top of the panel stack.
3676+
3677+ * Help and mixer windows now disappear upon keypress events.
3678+
3679+ * Moved function descriptions from config.py to new help.py.
3680+ Later on, we shall localize them via the gettext module.
3681+
3682+ * timer.py: Return immediately, if no alarms are pending.
3683
3684
3685 2002-10-17 Jörg Lehmann <joerg@luga.de>
3686
3687- * timer.py: New timer service, which sends events at specified
3688- times.
3689-
3690- * events.py: New hidewindow event.
3691-
3692- * window.py: Allow hiding of window. Also window.top()
3693-
3694- * helpwin.py, mixerwin.py: Automatically hide after 5 seconds.
3695+ * timer.py: New timer service, which sends events at specified
3696+ times.
3697+
3698+ * events.py: New hidewindow event.
3699+
3700+ * window.py: Allow hiding of window. Also window.top()
3701+
3702+ * helpwin.py, mixerwin.py: Automatically hide after 5 seconds.
3703
3704
3705 2002-10-13 Jörg Lehmann <joerg@luga.de>
3706
3707- * songdb.py: Implemented caching of list of all artists (and
3708- already existent caching of all songs).
3709-
3710- * filelist.py: Don't store list content in shistory, anymore.
3711-
3712- * Implement context sensitivity of help window.
3713-
3714-
3715-2002-10-12 Jörg Lehmann <joerg@luga.de>
3716-
3717- * Implemented automatic adjustment of statusbar to
3718- keybinding.
3719-
3720- * Use curses.panel.
3721-
3722- * First version of help window.
3723-
3724-
3725-2002-10-12 Jörg Lehmann <joerg@luga.de>
3726-
3727- * item.py: Prevent empty artist names
3728-
3729-
3730-2002-09-20 Jörg Lehmann <joerg@luga.de>
3731-
3732- * Version 1.9.5
3733-
3734- * item.py: Try to be a little more intelligent during the
3735- capitalization of song, album and artist names. For instance, only
3736- force the first character of a word to be a capital one. Prevent
3737- empty album and artist names, as well.
3738-
3739- * filelist.py and songdb.py: Check for access permission of
3740- directories and files.
3741-
3742- * madplayer.py: Catch exception during mp3file object creation.
3743-
3744-
3745-2002-09-20 Jörg Lehmann <joerg@luga.de>
3746-
3747- * All players are now running in a separate thread.
3748-
3749- * Factored out most of player control logic to player.py.
3750+ * songdb.py: Implemented caching of list of all artists (and
3751+ already existent caching of all songs).
3752+
3753+ * filelist.py: Don't store list content in shistory, anymore.
3754+
3755+ * Implement context sensitivity of help window.
3756+
3757+
3758+2002-10-12 Jörg Lehmann <joerg@luga.de>
3759+
3760+ * Implemented automatic adjustment of statusbar to
3761+ keybinding.
3762+
3763+ * Use curses.panel.
3764+
3765+ * First version of help window.
3766+
3767+
3768+2002-10-12 Jörg Lehmann <joerg@luga.de>
3769+
3770+ * item.py: Prevent empty artist names
3771+
3772+
3773+2002-09-20 Jörg Lehmann <joerg@luga.de>
3774+
3775+ * Version 1.9.5
3776+
3777+ * item.py: Try to be a little more intelligent during the
3778+ capitalization of song, album and artist names. For instance, only
3779+ force the first character of a word to be a capital one. Prevent
3780+ empty album and artist names, as well.
3781+
3782+ * filelist.py and songdb.py: Check for access permission of
3783+ directories and files.
3784+
3785+ * madplayer.py: Catch exception during mp3file object creation.
3786+
3787+
3788+2002-09-20 Jörg Lehmann <joerg@luga.de>
3789+
3790+ * All players are now running in a separate thread.
3791+
3792+ * Factored out most of player control logic to player.py.
3793
3794
3795 2002-09-10 Jörg Lehmann <joerg@luga.de>
3796
3797- * Implement write lock for song database.
3798-
3799- * Automatic registering of songs proceeds now in separate thread.
3800-
3801- * slist.py: Fix incorrect insertion of new items leading to
3802- unsorted lists.
3803-
3804- * Remove timer events, leading to notable decrease of idle CPU
3805- usage.
3806-
3807- * Add ALT+RightArrow to default key bindings for recursive
3808- insertion of songs.
3809+ * Implement write lock for song database.
3810+
3811+ * Automatic registering of songs proceeds now in separate thread.
3812+
3813+ * slist.py: Fix incorrect insertion of new items leading to
3814+ unsorted lists.
3815+
3816+ * Remove timer events, leading to notable decrease of idle CPU
3817+ usage.
3818+
3819+ * Add ALT+RightArrow to default key bindings for recursive
3820+ insertion of songs.
3821
3822
3823 2002-09-08 Jörg Lehmann <joerg@luga.de>
3824
3825- * New event handling: Queue generated events and process them not
3826- until an explicit call of a new process method. This makes event
3827- handling in a multithreaded environment much simpler. The new
3828- class eventhub collects the eventchannels from the different
3829- threads.
3830-
3831- * madplayer.py: Integrate madplayer class into player class, which
3832- is made possible owing to new event handling.
3833-
3834- * madplayer.py: Generate playbackinfochaned events only if there
3835- was really a change.
3836+ * New event handling: Queue generated events and process them not
3837+ until an explicit call of a new process method. This makes event
3838+ handling in a multithreaded environment much simpler. The new
3839+ class eventhub collects the eventchannels from the different
3840+ threads.
3841+
3842+ * madplayer.py: Integrate madplayer class into player class, which
3843+ is made possible owing to new event handling.
3844+
3845+ * madplayer.py: Generate playbackinfochaned events only if there
3846+ was really a change.
3847
3848
3849 2002-09-05 Jörg Lehmann <joerg@luga.de>
3850
3851- * Version 1.9.4
3852+ * Version 1.9.4
3853
3854- * Stopping works again in autoplay mode.
3855+ * Stopping works again in autoplay mode.
3856
3857
3858 2002-08-31 Jörg Lehmann <joerg@luga.de>
3859
3860- * filelistwin.py: Corrected quick search key logic.
3861-
3862- * Moved handling of global key bindings to pytone.py. Introduced
3863- new events to signalize playlist changes.
3864-
3865- * playlist.py: Don't save playlist, if name is empty.
3866-
3867- * Implemented autoplay player option permitting automatic start of
3868- playing, if playlist is not empty.
3869-
3870- * More comments in config.db.
3871-
3872- * players/mpg123player.py: Now also works with Python 2.1. Also
3873- fixed error, where playback info was not displayed correctly.
3874-
3875- * helper.py: Q&D solution to make debug output configurable.
3876+ * filelistwin.py: Corrected quick search key logic.
3877+
3878+ * Moved handling of global key bindings to pytone.py. Introduced
3879+ new events to signalize playlist changes.
3880+
3881+ * playlist.py: Don't save playlist, if name is empty.
3882+
3883+ * Implemented autoplay player option permitting automatic start of
3884+ playing, if playlist is not empty.
3885+
3886+ * More comments in config.db.
3887+
3888+ * players/mpg123player.py: Now also works with Python 2.1. Also
3889+ fixed error, where playback info was not displayed correctly.
3890+
3891+ * helper.py: Q&D solution to make debug output configurable.
3892
3893
3894 2002-08-30 Jörg Lehmann <joerg@luga.de>
3895
3896- * Made key bindings configurable wherever possible.
3897-
3898- * Added python modules to setup.py to ease creation of
3899- distribution.
3900-
3901- * pcm.c: Pad with zeros for crossfading of two buffers with
3902- unequal lengths.
3903-
3904- * players/madplayer.py: Adapted crossfading logic to change in
3905- pcm.c.
3906-
3907- * playerwin.py: Corrected minor error, where title of song was
3908- show although playing has already finished.
3909+ * Made key bindings configurable wherever possible.
3910+
3911+ * Added python modules to setup.py to ease creation of
3912+ distribution.
3913+
3914+ * pcm.c: Pad with zeros for crossfading of two buffers with
3915+ unequal lengths.
3916+
3917+ * players/madplayer.py: Adapted crossfading logic to change in
3918+ pcm.c.
3919+
3920+ * playerwin.py: Corrected minor error, where title of song was
3921+ show although playing has already finished.
3922
3923
3924 2002-08-29 Jörg Lehmann <joerg@luga.de>
3925
3926- * Fixed the specification of the libao device. It is now also
3927- possible to specify arbitrary options. Added aRts based player
3928- sample config to config.py.
3929-
3930- * Added setup.py for building of pcm extension module.
3931-
3932- * RightArrow in playlist window now also moves to database window.
3933+ * Fixed the specification of the libao device. It is now also
3934+ possible to specify arbitrary options. Added aRts based player
3935+ sample config to config.py.
3936+
3937+ * Added setup.py for building of pcm extension module.
3938+
3939+ * RightArrow in playlist window now also moves to database window.
3940
3941
3942 2002-08-28 Jörg Lehmann <joerg@luga.de>
3943
3944- * Version 1.9.3, aka ready for release
3945-
3946- * Added license headers to all python files except config.py
3947-
3948- * Renamed PyJuke -> PyTone following a suggestion by
3949- Harald Görl (goerl at luga.de)
3950+ * Version 1.9.3, aka ready for release
3951+
3952+ * Added license headers to all python files except config.py
3953+
3954+ * Renamed PyJuke -> PyTone following a suggestion by
3955+ Harald Görl (goerl at luga.de)
3956
3957
3958 2002-08-25 Jörg Lehmann <joerg@luga.de>
3959
3960- * Version 1.9.2
3961-
3962- * Added scrollbars and allow to turn them on/off via config.py
3963-
3964- * Corrected error in madplayer.py, where too many new songs
3965- were requested
3966-
3967- * madplayer.py: return artist + song title as window title
3968-
3969- * madplayer.py: indicate crossfading in title
3970-
3971- * madplayer.py: made use of sound device configurable. Still need
3972- to abstract device options!
3973-
3974- * Minor fixes to documentation in index.html
3975-
3976- * Added simple style.css for index.html
3977+ * Version 1.9.2
3978+
3979+ * Added scrollbars and allow to turn them on/off via config.py
3980+
3981+ * Corrected error in madplayer.py, where too many new songs
3982+ were requested
3983+
3984+ * madplayer.py: return artist + song title as window title
3985+
3986+ * madplayer.py: indicate crossfading in title
3987+
3988+ * madplayer.py: made use of sound device configurable. Still need
3989+ to abstract device options!
3990+
3991+ * Minor fixes to documentation in index.html
3992+
3993+ * Added simple style.css for index.html
3994
3995
3996 2002-08-22 Jörg Lehmann <joerg@luga.de>
3997
3998- * Version 1.9
3999-
4000- * Crossfading for internal libmad based player now
4001- works
4002-
4003- * Restructured and documented config.py
4004-
4005- * Added README with documentation
4006-
4007- * Added ChangeLog, AUTHORS and COPYING
4008-
4009- * Added some licence headers
4010+ * Version 1.9
4011+
4012+ * Crossfading for internal libmad based player now
4013+ works
4014+
4015+ * Restructured and documented config.py
4016+
4017+ * Added README with documentation
4018+
4019+ * Added ChangeLog, AUTHORS and COPYING
4020+
4021+ * Added some licence headers
4022
4023
4024 2002-08-08 Jörg Lehmann <joerg@luga.de>
4025
4026- * Released 1.0 for Rothsee party
4027+ * Released 1.0 for Rothsee party
4028
4029=== modified file 'PKG-INFO'
4030--- PKG-INFO 2007-08-06 07:12:52 +0000
4031+++ PKG-INFO 2012-07-23 07:16:20 +0000
4032@@ -1,6 +1,6 @@
4033 Metadata-Version: 1.0
4034 Name: PyTone
4035-Version: 3.0.0
4036+Version: 3.0.3
4037 Summary: Powerful music jukebox with a curses based GUI.
4038 Home-page: http://www.luga.de/pytone/
4039 Author: Jörg Lehmann
4040
4041=== modified file 'README'
4042--- README 2007-08-06 07:12:52 +0000
4043+++ README 2012-07-23 07:16:20 +0000
4044@@ -165,9 +165,11 @@
4045 song/directory
4046 ALT+Enter immediately play song
4047 TAB switch to playlist window
4048- ALT+<character> Quicksearch: jump to next entry that begins
4049+ ALT+<character> Quicksearch: jump to next entry that begins
4050 with character
4051 CTRL-S// Search in list
4052+ f Focus on songs matching approximately a search
4053+ string
4054
4055 In playlist window (lower right quarter half of screen)
4056
4057@@ -208,6 +210,7 @@
4058 ! show message log
4059 % show statistical information about database(s)
4060 = show information about selected item
4061+ L show lyrics of selected song
4062 CTRL-V toggle information shown in item info window
4063 F10 toggle UI layout (one/two column)
4064 CTRL-X CTRL-X exit program (the keypresses have to be
4065
4066=== modified file 'THANKS'
4067--- THANKS 2005-12-20 15:09:56 +0000
4068+++ THANKS 2012-07-23 07:16:20 +0000
4069@@ -6,6 +6,8 @@
4070 for translating the PyTone user interface into Italian
4071 Jack Bakeman <jbakeman@indra.com>
4072 for his patient testing
4073+Dominik Bruhn <dominik@dbruhn.de>
4074+ for feedback and patches
4075 Han Boetes <han@mijncomputer.nl>
4076 for providing Mandrake RPMs of PyTone
4077 Andreas Bourges <andreas.bourges@web.de>
4078@@ -14,6 +16,8 @@
4079 for contributing a small fix
4080 Michal Cihar <michal@cihar.com>
4081 for improving the unicode decoding in the tags of Ogg Vorbis files
4082+Tom Diedrich <tom@diedrich24.de>
4083+ for very constructive feedback
4084 Stéphane Doyon <s.doyon@videotron.ca>
4085 for improving the behaviour of PyTone when using Braille displays
4086 Byron Ellacott <bje@apnic.net>
4087@@ -29,6 +33,10 @@
4088 for locating a bug that I was not able to find
4089 Harald Görl <goerl@luga.de>
4090 for suggesting the name PyTone
4091+Philipp Jocham <philipp.jocham@gmx.net>
4092+ for a small fix in the Ogg Vorbis metadata handling and a patch for
4093+ a nasty bug in the song update function ... and various other
4094+ patches here and there
4095 David Kågedal <davidk@lysator.liu.se>
4096 for a suggesting a simple workaround I could not come up with
4097 Bill Kearney <wkearney99@hotmail.com>
4098
4099=== modified file 'TODO'
4100--- TODO 2007-08-06 07:12:52 +0000
4101+++ TODO 2012-07-23 07:16:20 +0000
4102@@ -2,12 +2,11 @@
4103 - check David Bowie Let's Dance
4104 - make removeaccents work again: howto use unicode.translate
4105 - allow tagging of no artists dir
4106+- check collation (Á vs A, etc.)
4107+- check XMMS and remote player (do they still work?)
4108
4109 TOCHECK:
4110 - what happens to mpg123 when pytone crashes
4111-- song is not registered as currently being played, when its playback
4112- is resumed after a restart of PyTone (in particular, player window
4113- titlebar is wrong)
4114 - update playingtime when updating song!
4115 - secondary player doesn't seem to work with bufferedao module.
4116 The version Rothsee-2006/PyTone-2.4.0-Rothsee/src/services/players/internal.py
4117@@ -27,6 +26,8 @@
4118 - enhance crossfading such that pauses between songs can be inserted
4119 (Rene Maurer <rm@cumparsita.ch>)
4120 - put number of artists in title (Dag Wieers)
4121+- use mutagen also for Ogg Vorbis (David E. Thiel)
4122+
4123
4124 - General:
4125 o timer interface
4126
4127=== added file 'conf/._layout.compact'
4128Binary files conf/._layout.compact 1970-01-01 00:00:00 +0000 and conf/._layout.compact 2012-07-23 07:16:20 +0000 differ
4129=== added file 'conf/._layout.ultracompact'
4130Binary files conf/._layout.ultracompact 1970-01-01 00:00:00 +0000 and conf/._layout.ultracompact 2012-07-23 07:16:20 +0000 differ
4131=== modified file 'conf/pytonerc'
4132--- conf/pytonerc 2007-08-06 07:12:52 +0000
4133+++ conf/pytonerc 2012-07-23 07:16:20 +0000
4134@@ -25,6 +25,8 @@
4135 # playstarthours & Co cannot be used here) is performed.
4136 songchangecommand =
4137
4138+# use the following (or a variant thereof) if you have installed the notiy-send binary
4139+# songchangecommand = notify-send PyTone "%(artist)s - %(title)s (%(length)s)"
4140 # use the following (or a variant thereof) if you have installed the osd_cat binary
4141 # songchangecommand = echo "%(artist)s - %(title)s (%(length)s)" | osd_cat -p middle -A center -f "-adobe-helvetica-bold-r-normal-*-*-320-*-*-p-*-iso8859-1" -l 1 -
4142
4143@@ -56,6 +58,11 @@
4144 # which not always works reliably.
4145 colorsupport = auto
4146
4147+# mousesupport: either on or off
4148+#
4149+# Enable mouse support (if available in terminal).
4150+mousesupport = on
4151+
4152 # layout: onecolumn or twocolumn
4153 #
4154 # Layout of main PyTone windows
4155@@ -217,8 +224,8 @@
4156 # type = internal: internal player (output with libao)
4157 #
4158 # options:
4159-# driver: "alsa", "alsa09", "arts", "esd", "oss", or "sun"
4160-# device: path of dsp used for output (for oss, sun and alsa09 driver)
4161+# driver: "alsa", "alsa09", "alsa05", "arts", "esd", "oss", "sun", "macosx", "macosxau" or "pulse"
4162+# device: path of dsp used for output (for oss, sun and alsa drivers)
4163 # bufsize: size of audio buffer used by PyTone itself in kBytes
4164 # Note: A large buffer may prevent clicking but
4165 # leads to a delayed response for instance to play next
4166@@ -669,6 +676,7 @@
4167 toggledelete = D
4168 search = / ctrl-s
4169 repeatsearch = ctrl-g
4170+focus = f
4171
4172 [keybindings.playlistwindow]
4173 # additional keybindings when playlist window is active
4174
4175=== modified file 'debian/changelog'
4176--- debian/changelog 2010-12-08 15:09:46 +0000
4177+++ debian/changelog 2012-07-23 07:16:20 +0000
4178@@ -1,3 +1,12 @@
4179+pytone (3.0.3-0ubuntu1) quantal; urgency=low
4180+
4181+ * New upstream release.
4182+ * Bump Standards-Version to 3.9.3.
4183+ * Add ${misc:Depends} to the binary.
4184+ * Update build structure in debian/rules to satisfy Lintian.
4185+
4186+ -- Logan Rosen <logatronico@gmail.com> Mon, 23 Jul 2012 03:08:29 -0400
4187+
4188 pytone (3.0.0-1build4) natty; urgency=low
4189
4190 * Rebuild with python 2.7 as the python default.
4191
4192=== modified file 'debian/control'
4193--- debian/control 2009-03-13 15:49:04 +0000
4194+++ debian/control 2012-07-23 07:16:20 +0000
4195@@ -4,11 +4,11 @@
4196 Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
4197 XSBC-Original-Maintainer: Alexander Wirt <formorer@debian.org>
4198 Build-Depends: debhelper (>= 4.0.0), python-dev, dpatch, libao-dev, python-support (>= 0.4)
4199-Standards-Version: 3.7.2
4200+Standards-Version: 3.9.3
4201
4202 Package: pytone
4203 Architecture: any
4204-Depends: ${shlibs:Depends}, ${python:Depends}, python-pymad, python-pyao (>= 0.82), python-eyed3, python-pysqlite2
4205+Depends: ${shlibs:Depends}, ${python:Depends}, python-pymad, python-pyao (>= 0.82), python-eyed3, python-pysqlite2, ${misc:Depends}
4206 Recommends: python-pyvorbis
4207 Suggests: python-xmms, mpg321
4208 Description: Music jukebox with advanced features for DJs and a text-mode user interface
4209
4210=== modified file 'debian/rules'
4211--- debian/rules 2006-09-06 06:55:48 +0000
4212+++ debian/rules 2012-07-23 07:16:20 +0000
4213@@ -22,7 +22,9 @@
4214 endif
4215
4216
4217-build: build-stamp
4218+build: build-arch build-indep
4219+build-arch: build-stamp
4220+build-indep: build-stamp
4221
4222 build-stamp: patch-stamp
4223 dh_testdir
4224
4225=== added file 'locale/._PyTone.pot'
4226Binary files locale/._PyTone.pot 1970-01-01 00:00:00 +0000 and locale/._PyTone.pot 2012-07-23 07:16:20 +0000 differ
4227=== added file 'locale/de/LC_MESSAGES/._PyTone.mo'
4228Binary files locale/de/LC_MESSAGES/._PyTone.mo 1970-01-01 00:00:00 +0000 and locale/de/LC_MESSAGES/._PyTone.mo 2012-07-23 07:16:20 +0000 differ
4229=== added file 'locale/de/LC_MESSAGES/._PyTone.po'
4230Binary files locale/de/LC_MESSAGES/._PyTone.po 1970-01-01 00:00:00 +0000 and locale/de/LC_MESSAGES/._PyTone.po 2012-07-23 07:16:20 +0000 differ
4231=== modified file 'locale/de/LC_MESSAGES/PyTone.mo'
4232Binary files locale/de/LC_MESSAGES/PyTone.mo 2007-08-06 07:12:52 +0000 and locale/de/LC_MESSAGES/PyTone.mo 2012-07-23 07:16:20 +0000 differ
4233=== added file 'locale/fr/LC_MESSAGES/._PyTone.mo'
4234Binary files locale/fr/LC_MESSAGES/._PyTone.mo 1970-01-01 00:00:00 +0000 and locale/fr/LC_MESSAGES/._PyTone.mo 2012-07-23 07:16:20 +0000 differ
4235=== added file 'locale/fr/LC_MESSAGES/._PyTone.po'
4236Binary files locale/fr/LC_MESSAGES/._PyTone.po 1970-01-01 00:00:00 +0000 and locale/fr/LC_MESSAGES/._PyTone.po 2012-07-23 07:16:20 +0000 differ
4237=== modified file 'locale/fr/LC_MESSAGES/PyTone.mo'
4238Binary files locale/fr/LC_MESSAGES/PyTone.mo 2007-08-06 07:12:52 +0000 and locale/fr/LC_MESSAGES/PyTone.mo 2012-07-23 07:16:20 +0000 differ
4239=== added file 'locale/it/LC_MESSAGES/._PyTone.mo'
4240Binary files locale/it/LC_MESSAGES/._PyTone.mo 1970-01-01 00:00:00 +0000 and locale/it/LC_MESSAGES/._PyTone.mo 2012-07-23 07:16:20 +0000 differ
4241=== added file 'locale/it/LC_MESSAGES/._PyTone.po'
4242Binary files locale/it/LC_MESSAGES/._PyTone.po 1970-01-01 00:00:00 +0000 and locale/it/LC_MESSAGES/._PyTone.po 2012-07-23 07:16:20 +0000 differ
4243=== modified file 'locale/it/LC_MESSAGES/PyTone.mo'
4244Binary files locale/it/LC_MESSAGES/PyTone.mo 2007-08-06 07:12:52 +0000 and locale/it/LC_MESSAGES/PyTone.mo 2012-07-23 07:16:20 +0000 differ
4245=== added file 'locale/pl/LC_MESSAGES/._PyTone.mo'
4246Binary files locale/pl/LC_MESSAGES/._PyTone.mo 1970-01-01 00:00:00 +0000 and locale/pl/LC_MESSAGES/._PyTone.mo 2012-07-23 07:16:20 +0000 differ
4247=== added file 'locale/pl/LC_MESSAGES/._PyTone.po'
4248Binary files locale/pl/LC_MESSAGES/._PyTone.po 1970-01-01 00:00:00 +0000 and locale/pl/LC_MESSAGES/._PyTone.po 2012-07-23 07:16:20 +0000 differ
4249=== modified file 'locale/pl/LC_MESSAGES/PyTone.mo'
4250Binary files locale/pl/LC_MESSAGES/PyTone.mo 2007-08-06 07:12:52 +0000 and locale/pl/LC_MESSAGES/PyTone.mo 2012-07-23 07:16:20 +0000 differ
4251=== modified file 'pytone'
4252--- pytone 2007-08-06 07:12:52 +0000
4253+++ pytone 2012-07-23 07:16:20 +0000
4254@@ -1,2 +1,2 @@
4255 #!/bin/sh
4256-python2.4 src/pytone.py "$@"
4257+python src/pytone.py "$@"
4258
4259=== added file 'src/.___init__.py'
4260Binary files src/.___init__.py 1970-01-01 00:00:00 +0000 and src/.___init__.py 2012-07-23 07:16:20 +0000 differ
4261=== added file 'src/._bufferedao.c'
4262Binary files src/._bufferedao.c 1970-01-01 00:00:00 +0000 and src/._bufferedao.c 2012-07-23 07:16:20 +0000 differ
4263=== added file 'src/._decoder.py'
4264Binary files src/._decoder.py 1970-01-01 00:00:00 +0000 and src/._decoder.py 2012-07-23 07:16:20 +0000 differ
4265=== added file 'src/._encoding.py'
4266Binary files src/._encoding.py 1970-01-01 00:00:00 +0000 and src/._encoding.py 2012-07-23 07:16:20 +0000 differ
4267=== added file 'src/._errors.py'
4268Binary files src/._errors.py 1970-01-01 00:00:00 +0000 and src/._errors.py 2012-07-23 07:16:20 +0000 differ
4269=== added file 'src/._filelistwin.py'
4270Binary files src/._filelistwin.py 1970-01-01 00:00:00 +0000 and src/._filelistwin.py 2012-07-23 07:16:20 +0000 differ
4271=== added file 'src/._help.py'
4272Binary files src/._help.py 1970-01-01 00:00:00 +0000 and src/._help.py 2012-07-23 07:16:20 +0000 differ
4273=== added file 'src/._helper.py'
4274Binary files src/._helper.py 1970-01-01 00:00:00 +0000 and src/._helper.py 2012-07-23 07:16:20 +0000 differ
4275=== added file 'src/._helpwin.py'
4276Binary files src/._helpwin.py 1970-01-01 00:00:00 +0000 and src/._helpwin.py 2012-07-23 07:16:20 +0000 differ
4277=== added file 'src/._hub.py'
4278Binary files src/._hub.py 1970-01-01 00:00:00 +0000 and src/._hub.py 2012-07-23 07:16:20 +0000 differ
4279=== added file 'src/._item.py'
4280Binary files src/._item.py 1970-01-01 00:00:00 +0000 and src/._item.py 2012-07-23 07:16:20 +0000 differ
4281=== added file 'src/._iteminfowin.py'
4282Binary files src/._iteminfowin.py 1970-01-01 00:00:00 +0000 and src/._iteminfowin.py 2012-07-23 07:16:20 +0000 differ
4283=== added file 'src/._log.py'
4284Binary files src/._log.py 1970-01-01 00:00:00 +0000 and src/._log.py 2012-07-23 07:16:20 +0000 differ
4285=== added file 'src/._logwin.py'
4286Binary files src/._logwin.py 1970-01-01 00:00:00 +0000 and src/._logwin.py 2012-07-23 07:16:20 +0000 differ
4287=== added file 'src/._lyricswin.py'
4288Binary files src/._lyricswin.py 1970-01-01 00:00:00 +0000 and src/._lyricswin.py 2012-07-23 07:16:20 +0000 differ
4289=== added file 'src/._mainscreen.py'
4290Binary files src/._mainscreen.py 1970-01-01 00:00:00 +0000 and src/._mainscreen.py 2012-07-23 07:16:20 +0000 differ
4291=== added file 'src/._network.py'
4292Binary files src/._network.py 1970-01-01 00:00:00 +0000 and src/._network.py 2012-07-23 07:16:20 +0000 differ
4293=== added file 'src/._playlist.py'
4294Binary files src/._playlist.py 1970-01-01 00:00:00 +0000 and src/._playlist.py 2012-07-23 07:16:20 +0000 differ
4295=== added file 'src/._playlistwin.py'
4296Binary files src/._playlistwin.py 1970-01-01 00:00:00 +0000 and src/._playlistwin.py 2012-07-23 07:16:20 +0000 differ
4297=== added file 'src/._plugin.py'
4298Binary files src/._plugin.py 1970-01-01 00:00:00 +0000 and src/._plugin.py 2012-07-23 07:16:20 +0000 differ
4299=== added file 'src/._profile.py'
4300Binary files src/._profile.py 1970-01-01 00:00:00 +0000 and src/._profile.py 2012-07-23 07:16:20 +0000 differ
4301=== added file 'src/._pytonectl.py'
4302Binary files src/._pytonectl.py 1970-01-01 00:00:00 +0000 and src/._pytonectl.py 2012-07-23 07:16:20 +0000 differ
4303=== added file 'src/._requests.py'
4304Binary files src/._requests.py 1970-01-01 00:00:00 +0000 and src/._requests.py 2012-07-23 07:16:20 +0000 differ
4305=== added file 'src/._service.py'
4306Binary files src/._service.py 1970-01-01 00:00:00 +0000 and src/._service.py 2012-07-23 07:16:20 +0000 differ
4307=== added file 'src/._slist.py'
4308Binary files src/._slist.py 1970-01-01 00:00:00 +0000 and src/._slist.py 2012-07-23 07:16:20 +0000 differ
4309=== added file 'src/._statswin.py'
4310Binary files src/._statswin.py 1970-01-01 00:00:00 +0000 and src/._statswin.py 2012-07-23 07:16:20 +0000 differ
4311=== added file 'src/._statusbar.py'
4312Binary files src/._statusbar.py 1970-01-01 00:00:00 +0000 and src/._statusbar.py 2012-07-23 07:16:20 +0000 differ
4313=== modified file 'src/bufferedao.c'
4314--- src/bufferedao.c 2007-08-06 07:12:52 +0000
4315+++ src/bufferedao.c 2012-07-23 07:16:20 +0000
4316@@ -26,6 +26,12 @@
4317 #include <errno.h>
4318 #include <assert.h>
4319
4320+#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
4321+typedef int Py_ssize_t;
4322+#define PY_SSIZE_T_MAX INT_MAX
4323+#define PY_SSIZE_T_MIN INT_MIN
4324+#endif
4325+
4326 #define NRITEMS() ((self->in >= self->out) ? self->in-self->out : self->in+self->buffersize-self->out)
4327
4328 /* debug and error log functions */
4329@@ -72,7 +78,7 @@
4330 static ao_option *
4331 py_options_to_ao_options(PyObject *py_options)
4332 {
4333- int pos = 0;
4334+ Py_ssize_t pos = 0;
4335 PyObject *key, *val;
4336 ao_option *head = NULL;
4337 int ret;
4338@@ -82,7 +88,7 @@
4339 return NULL;
4340 }
4341
4342- while ( PyDict_Next(py_options, &pos, &key, &val) > 0 ) {
4343+ while ( PyDict_Next(py_options, &pos, &key, &val) ) {
4344 if (!PyString_Check(key) || !PyString_Check(val)) {
4345 PyErr_SetString(PyExc_TypeError, "keys in options may only be strings");
4346 ao_free_options(head);
4347@@ -166,7 +172,7 @@
4348
4349 /* ... and possibly contained options */
4350 self->options = NULL;
4351- if (py_options && PyDict_Size(py_options) > 0) {
4352+ if (py_options && PyDict_Size(py_options) ) {
4353 /* In the case of an empty dictionary, py_options_to_ao_options would return NULL.
4354 * Thus, we should (and need) not call it in this case */
4355
4356
4357=== modified file 'src/config.py'
4358--- src/config.py 2007-08-06 07:12:52 +0000
4359+++ src/config.py 2012-07-23 07:16:20 +0000
4360@@ -1,6 +1,6 @@
4361 # -*- coding: ISO-8859-1 -*-
4362
4363-# Copyright (C) 2003 Jörg Lehmann <joerg@luga.de>
4364+# Copyright (C) 2003, 2007 Jörg Lehmann <joerg@luga.de>
4365 #
4366 # This file is part of PyTone (http://www.luga.de/pytone/)
4367 #
4368@@ -377,6 +377,7 @@
4369 debugfile = configpath("")
4370 randominsertlength = configfloat("3600")
4371 colorsupport = configalternatives("auto", ["auto", "on", "off"])
4372+ mousesupport = configboolean("on")
4373 layout = configalternatives("twocolumn", ["onecolumn", "twocolumn"])
4374 throttleoutput = configint("0")
4375 autoplaymode = configalternatives("off", ["off", "repeat", "random"])
4376@@ -402,6 +403,7 @@
4377
4378
4379 class mixer(configsection):
4380+ type = configalternatives("external", ["external", "internal", "off"])
4381 device = configpath("/dev/mixer")
4382 channel = configstring("SOUND_MIXER_PCM")
4383 stepsize = configint("5")
4384@@ -418,7 +420,7 @@
4385 autoplay = configboolean("true")
4386
4387 # only for internal player
4388- driver = configalternatives("oss", ["alsa", "alsa09", "arts", "esd", "oss", "sun", "macosx"])
4389+ driver = configalternatives("oss", ["alsa", "alsa09", "alsa05", "arts", "esd", "oss", "sun", "macosx", "macosxau", "pulse"])
4390 device = configstring("/dev/dsp")
4391 bufsize = configint(100)
4392 crossfading = configboolean("true")
4393@@ -441,7 +443,7 @@
4394 autoplay = configboolean("true")
4395
4396 # only for internal player
4397- driver = configalternatives("oss", ["alsa", "alsa09", "arts", "esd", "oss", "sun", "macosx"])
4398+ driver = configalternatives("oss", ["alsa", "alsa09", "alsa05", "arts", "esd", "oss", "sun", "macosx", "pulse"])
4399 device = configstring("/dev/dsp1")
4400 bufsize = configint(100)
4401 crossfading = configboolean("true")
4402@@ -678,6 +680,7 @@
4403 toggledelete = configkeys("D")
4404 search = configkeys("/ ctrl-s")
4405 repeatsearch = configkeys("ctrl-g")
4406+ focus = configkeys("f")
4407
4408 class playlistwindow(configsection):
4409 selectnext = configkeys("KEY_DOWN j")
4410@@ -903,7 +906,7 @@
4411 songdb = database[databasename]
4412
4413 if songdb.type == "local" and songdb.musicbasedir == "":
4414- print ( "Please set musicbasedir in the [database.%s] section of the config file pytonerc\n"
4415+ print ( "Please set musicbasedir in the [database.%s] section of the config file ~/.pytone/pytonerc\n"
4416 "to the location of your MP3/Ogg Vorbis files." % databasename )
4417 sys.exit(2)
4418
4419@@ -913,16 +916,6 @@
4420 sys.exit(2)
4421 dbfiles.append(songdb.dbfile)
4422
4423- # check whether oss module is present
4424- try:
4425- import ossaudiodev
4426- except:
4427- try:
4428- import oss
4429- except:
4430- mixer.device = ""
4431- log.warning("disabling mixer since neither ossaudiodev nor oss module is installed")
4432-
4433 # check ao options
4434 for aooption in player.main.aooptions.split() + player.secondary.aooptions.split():
4435 if aooption.count("=")!=1:
4436
4437=== added file 'src/cursext/._cursextmodule.c'
4438Binary files src/cursext/._cursextmodule.c 1970-01-01 00:00:00 +0000 and src/cursext/._cursextmodule.c 2012-07-23 07:16:20 +0000 differ
4439=== modified file 'src/decoder.py'
4440--- src/decoder.py 2007-08-06 07:12:52 +0000
4441+++ src/decoder.py 2012-07-23 07:16:20 +0000
4442@@ -228,8 +228,8 @@
4443 try:
4444 decoder = getdecoder(song.type)
4445 except:
4446- log.error("No decoder for song type '%s' registered "% song.type)
4447- raise RuntimeError("No decoder for song type '%s' registered "% song.type)
4448+ log.error("No decoder for song type '%r' registered "% song.type)
4449+ raise RuntimeError("No decoder for song type '%r' registered "% song.type)
4450
4451 url = encoding.encode_path(song.url)
4452 if url.startswith("file://"):
4453
4454=== modified file 'src/encoding.py'
4455--- src/encoding.py 2007-08-06 07:12:52 +0000
4456+++ src/encoding.py 2012-07-23 07:16:20 +0000
4457@@ -1,4 +1,5 @@
4458 import sys
4459+import locale
4460
4461 _fallbacklocalecharset = "iso-8859-1"
4462
4463
4464=== modified file 'src/events.py'
4465--- src/events.py 2007-08-06 07:12:52 +0000
4466+++ src/events.py 2012-07-23 07:16:20 +0000
4467@@ -1,6 +1,6 @@
4468 ## -*- coding: ISO-8859-1 -*-
4469
4470-# Copyright (C) 2002, 2003, 2004 Jörg Lehmann <joerg@luga.de>
4471+# Copyright (C) 2002, 2003, 2004, 2007 Jörg Lehmann <joerg@luga.de>
4472 #
4473 # This file is part of PyTone (http://www.luga.de/pytone/)
4474 #
4475@@ -18,7 +18,7 @@
4476 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
4477
4478 class event:
4479- def __str__(self):
4480+ def __repr__(self):
4481 return self.__class__.__name__
4482
4483
4484@@ -29,8 +29,8 @@
4485 def __init__(self, songdbid):
4486 self.songdbid = songdbid
4487
4488- def __str__(self):
4489- return "%s(%s)" % (self.__class__.__name__, self.songdbid)
4490+ def __repr__(self):
4491+ return "%r(%r)" % (self.__class__.__name__, self.songdbid)
4492
4493
4494 class quit(event):
4495@@ -42,16 +42,16 @@
4496 def __init__(self, key):
4497 self.key = key
4498
4499- def __str__(self):
4500- return "%s(%d)" % (self.__class__.__name__, self.key)
4501+ def __repr__(self):
4502+ return "%r(%d)" % (self.__class__.__name__, self.key)
4503
4504
4505 class mouseevent(event):
4506 def __init__(self, y, x, state):
4507 self.y, self.x, self.state = y, x, state
4508
4509- def __str__(self):
4510- return "%s(%d, %d, %d)" % (self.__class__.__name__,
4511+ def __repr__(self):
4512+ return "%r(%d, %d, %d)" % (self.__class__.__name__,
4513 self.y, self.x, self.state)
4514
4515
4516@@ -59,8 +59,8 @@
4517 def __init__(self, item):
4518 self.item = item
4519
4520- def __str__(self):
4521- return "%s(%s)" % (self.__class__.__name__, repr(self.item))
4522+ def __repr__(self):
4523+ return "%r(%r)" % (self.__class__.__name__, self.item)
4524
4525
4526 class focuschanged(event):
4527@@ -86,8 +86,8 @@
4528 self.repeat = repeat
4529 self.replace = replace
4530
4531- def __str__(self):
4532- return "%s(%s, %s, %s)" % (self.__class__.__name__, self.event, self.alarmtime, self.repeat, self.replace)
4533+ def __repr__(self):
4534+ return "%r(%r, %r, %r, %r)" % (self.__class__.__name__, self.event, self.alarmtime, self.repeat, self.replace)
4535
4536
4537 class sendeventin(event):
4538@@ -101,8 +101,8 @@
4539 self.repeat = repeat
4540 self.replace = replace
4541
4542- def __str__(self):
4543- return "%s(%s, %s, %s, %s)" % (self.__class__.__name__, self.event, self.alarmtimediff, self.repeat, self.replace)
4544+ def __repr__(self):
4545+ return "%r(%r, %r, %r, %r)" % (self.__class__.__name__, self.event, self.alarmtimediff, self.repeat, self.replace)
4546
4547
4548 class checkpointdb(dbevent):
4549@@ -116,8 +116,8 @@
4550 self.songdbid = songdbid
4551 self.song = song
4552
4553- def __str__(self):
4554- return "%s(%s)->%s" % (self.__class__.__name__, self.song, self.songdbid)
4555+ def __repr__(self):
4556+ return "%r(%r)->%r" % (self.__class__.__name__, self.song, self.songdbid)
4557
4558
4559 class update_song(dbevent):
4560@@ -127,8 +127,8 @@
4561 self.songdbid = songdbid
4562 self.song = song
4563
4564- def __str__(self):
4565- return "%s(%s)->%s" % (self.__class__.__name__, self.song, self.songdbid)
4566+ def __repr__(self):
4567+ return "%r(%r)->%r" % (self.__class__.__name__, self.song, self.songdbid)
4568
4569
4570 class song_played(dbevent):
4571@@ -139,8 +139,8 @@
4572 self.song = song
4573 self.date_played = date_played
4574
4575- def __str__(self):
4576- return "%s(%s, %s)->%s" % (self.__class__.__name__, self.song, self.date_played, self.songdbid)
4577+ def __repr__(self):
4578+ return "%r(%r, %r)->%r" % (self.__class__.__name__, self.song, self.date_played, self.songdbid)
4579
4580
4581 class song_skipped(dbevent):
4582@@ -150,8 +150,8 @@
4583 self.songdbid = songdbid
4584 self.song = song
4585
4586- def __str__(self):
4587- return "%s(%s, %s)->%s" % (self.__class__.__name__, self.song, self.songdbid)
4588+ def __repr__(self):
4589+ return "%r(%r)->%r" % (self.__class__.__name__, self.song, self.songdbid)
4590
4591
4592 class delete_song(dbevent):
4593@@ -160,8 +160,8 @@
4594 self.songdbid = songdbid
4595 self.song = song
4596
4597- def __str__(self):
4598- return "%s(%s)->%s" % (self.__class__.__name__, self.song, self.songdbid)
4599+ def __repr__(self):
4600+ return "%r(%r)->%r" % (self.__class__.__name__, self.song, self.songdbid)
4601
4602
4603 class add_playlist(dbevent):
4604@@ -171,8 +171,8 @@
4605 self.name = name
4606 self.songs = songs
4607
4608- def __str__(self):
4609- return "%s(%s)->%s" % (self.__class__.__name__, self.name, self.songs, self.songdbid)
4610+ def __repr__(self):
4611+ return "%r(%r,%r)->%r" % (self.__class__.__name__, self.name, self.songs, self.songdbid)
4612
4613
4614 class update_playlist(dbevent):
4615@@ -183,8 +183,8 @@
4616 self.name = name
4617 self.songs = songs
4618
4619- def __str__(self):
4620- return "%s(%s)->%s" % (self.__class__.__name__, self.name, self.songs, self.songdbid)
4621+ def __repr__(self):
4622+ return "%r(%r)->%r" % (self.__class__.__name__, self.name, self.songs, self.songdbid)
4623
4624
4625 class delete_playlist(dbevent):
4626@@ -194,8 +194,8 @@
4627 self.songdbid = songdbid
4628 self.name = name
4629
4630- def __str__(self):
4631- return "%s(%s)->%s" % (self.__class__.__name__, self.name, self.songdbid)
4632+ def __repr__(self):
4633+ return "%r(%r)->%r" % (self.__class__.__name__, self.name, self.songdbid)
4634
4635
4636
4637@@ -209,8 +209,8 @@
4638 self.songdbid = songdbid
4639 self.force = force
4640
4641- def __str__(self):
4642- return "%s(%s)->%s" % (self.__class__.__name__, self.force, self.songdbid)
4643+ def __repr__(self):
4644+ return "%r(%r)->%r" % (self.__class__.__name__, self.force, self.songdbid)
4645
4646
4647 class autoregisterer_rescansongs(dbevent):
4648@@ -223,8 +223,8 @@
4649 self.songs = songs
4650 self.force = force
4651
4652- def __str__(self):
4653- return "%s(%s, %s)->%s" % (self.__class__.__name__, self.songs, self.force, self.songdbid)
4654+ def __repr__(self):
4655+ return "%r(%r, %r)->%r" % (self.__class__.__name__, self.songs, self.force, self.songdbid)
4656
4657
4658 class clearstats(dbevent):
4659@@ -233,8 +233,8 @@
4660 def __init__(self, songdbid):
4661 self.songdbid = songdbid
4662
4663- def __str__(self):
4664- return "%s->%s" % (self.__class__.__name__, self.songdbid)
4665+ def __repr__(self):
4666+ return "%r->%r" % (self.__class__.__name__, self.songdbid)
4667
4668
4669 class songchanged(event):
4670@@ -243,8 +243,8 @@
4671 self.songdbid = songdbid
4672 self.song = song
4673
4674- def __str__(self):
4675- return "%s(%s)->%s" % (self.__class__.__name__, self.song, self.songdbid)
4676+ def __repr__(self):
4677+ return "%r(%r)->%r" % (self.__class__.__name__, self.song, self.songdbid)
4678
4679
4680 class songschanged(event):
4681@@ -252,16 +252,16 @@
4682 def __init__(self, songdbid):
4683 self.songdbid = songdbid
4684
4685- def __str__(self):
4686- return "%s->%s" % (self.__class__.__name__, self.songdbid)
4687+ def __repr__(self):
4688+ return "%r->%r" % (self.__class__.__name__, self.songdbid)
4689
4690 class artistschanged(event):
4691 "list of artists in database changed"
4692 def __init__(self, songdbid):
4693 self.songdbid = songdbid
4694
4695- def __str__(self):
4696- return "%s->%s" % (self.__class__.__name__, self.songdbid)
4697+ def __repr__(self):
4698+ return "%r->%r" % (self.__class__.__name__, self.songdbid)
4699
4700
4701 class albumschanged(event):
4702@@ -269,8 +269,8 @@
4703 def __init__(self, songdbid):
4704 self.songdbid = songdbid
4705
4706- def __str__(self):
4707- return "%s->%s" % (self.__class__.__name__, self.songdbid)
4708+ def __repr__(self):
4709+ return "%r->%r" % (self.__class__.__name__, self.songdbid)
4710
4711
4712 class tagschanged(event):
4713@@ -278,8 +278,8 @@
4714 def __init__(self, songdbid):
4715 self.songdbid = songdbid
4716
4717- def __str__(self):
4718- return "%s->%s" % (self.__class__.__name__, self.songdbid)
4719+ def __repr__(self):
4720+ return "%r->%r" % (self.__class__.__name__, self.songdbid)
4721
4722
4723 class dbplaylistchanged(event):
4724@@ -287,8 +287,8 @@
4725 self.songdbid = songdbid
4726 self.playlist = playlist
4727
4728- def __str__(self):
4729- return "%s(%s)->%s" % (self.__class__.__name__, self.playlist, self.songdbid)
4730+ def __repr__(self):
4731+ return "%r(%r)->%r" % (self.__class__.__name__, self.playlist, self.songdbid)
4732
4733
4734 class playerevent(event):
4735@@ -297,8 +297,8 @@
4736 def __init__(self, playerid):
4737 self.playerid = playerid
4738
4739- def __str__(self):
4740- return "%s(%s)" % (self.__class__.__name__, self.playerid)
4741+ def __repr__(self):
4742+ return "%r(%r)" % (self.__class__.__name__, self.playerid)
4743
4744
4745 class playerstart(playerevent):
4746@@ -333,9 +333,15 @@
4747 self.playerid = playerid
4748 self.seconds = seconds
4749
4750- def __str__(self):
4751- return "%s(%f->%s)" % (self.__class__.__name__, self.seconds, self.playerid)
4752-
4753+ def __repr__(self):
4754+ return "%r(%f->%r)" % (self.__class__.__name__, self.seconds, self.playerid)
4755+
4756+class player_change_volume_relative(playerevent):
4757+ """ change volume of internal player by volume_adj percent"""
4758+
4759+ def __init__(self, playerid, volume_adj):
4760+ self.playerid = playerid
4761+ self.volume_adj = volume_adj
4762
4763 class playerplayfaster(playerevent):
4764 """ increase play speed of song on player"""
4765@@ -369,8 +375,8 @@
4766 self.playerid = playerid
4767 self.playlistitemorsong = playlistitemorsong
4768
4769- def __str__(self):
4770- return "%s(%s->%s)" % (self.__class__.__name__, self.playlistitemorsong, self.playerid)
4771+ def __repr__(self):
4772+ return "%r(%r->%r)" % (self.__class__.__name__, self.playlistitemorsong, self.playerid)
4773
4774
4775 class playerratecurrentsong(playerevent):
4776@@ -379,16 +385,25 @@
4777 playerevent.__init__(self, playerid)
4778 self.rating = rating
4779
4780- def __str__(self):
4781- return "%s(%s,%d)" % (self.__class__.__name__, self.playerid, self.rating)
4782+ def __repr__(self):
4783+ return "%r(%r,%d)" % (self.__class__.__name__, self.playerid, self.rating)
4784
4785
4786 class playbackinfochanged(event):
4787 def __init__(self, playbackinfo):
4788 self.playbackinfo = playbackinfo
4789
4790- def __str__(self):
4791- return "%s(%s)" % (self.__class__.__name__, self.playbackinfo)
4792+ def __repr__(self):
4793+ return "%r(%r)" % (self.__class__.__name__, self.playbackinfo)
4794+
4795+class player_volume_changed(event):
4796+ """ volume of player has been changed """
4797+ def __init__(self, playerid, volume):
4798+ self.playerid = playerid
4799+ self.volume = volume
4800+
4801+ def __repr__(self):
4802+ return "%r(%r,%r)" % (self.__class__.__name__, self.playerid, self.volume)
4803
4804
4805 class statusbar_update(event):
4806@@ -403,8 +418,8 @@
4807 self.pos = pos
4808 self.content = content
4809
4810- def __str__(self):
4811- return "%s(%s, %s)" % (self.__class__.__name__, self.pos, self.content)
4812+ def __repr__(self):
4813+ return "%r(%r, %r)" % (self.__class__.__name__, self.pos, self.content)
4814
4815
4816 class statusbar_showmessage(event):
4817@@ -413,8 +428,8 @@
4818 def __init__(self, message):
4819 self.message = message
4820
4821- def __str__(self):
4822- return "%r(%r)" % (self.__class__.__name__, self.content)
4823+ def __repr__(self):
4824+ return "%r(%r)" % (self.__class__.__name__, self.message)
4825
4826
4827
4828@@ -424,8 +439,8 @@
4829 self.prompt = prompt
4830 self.handler = handler
4831
4832- def __str__(self):
4833- return "%s(%s,%s,%s)" % (self.__class__.__name__,
4834+ def __repr__(self):
4835+ return "%r(%r,%r,%r)" % (self.__class__.__name__,
4836 self.title, self.prompt, self.handler)
4837
4838
4839@@ -438,8 +453,8 @@
4840 def __init__(self, songs):
4841 self.songs = songs
4842
4843- def __str__(self):
4844- return "%s(%s)" % (self.__class__.__name__, self.songs)
4845+ def __repr__(self):
4846+ return "%r(%r)" % (self.__class__.__name__, self.songs)
4847
4848
4849 class playlistaddsongtop(playlistevent):
4850@@ -447,32 +462,32 @@
4851 def __init__(self, song):
4852 self.song = song
4853
4854- def __str__(self):
4855- return "%s(%s)" % (self.__class__.__name__, self.song)
4856+ def __repr__(self):
4857+ return "%r(%r)" % (self.__class__.__name__, self.song)
4858
4859
4860 class playlistdeletesong(playlistevent):
4861 def __init__(self, id):
4862 self.id = id
4863
4864- def __str__(self):
4865- return "%s(%s)" % (self.__class__.__name__, self.id)
4866+ def __repr__(self):
4867+ return "%r(%r)" % (self.__class__.__name__, self.id)
4868
4869
4870 class playlistmovesongup(playlistevent):
4871 def __init__(self, id):
4872 self.id = id
4873
4874- def __str__(self):
4875- return "%s(%s)" % (self.__class__.__name__, self.id)
4876+ def __repr__(self):
4877+ return "%r(%r)" % (self.__class__.__name__, self.id)
4878
4879
4880 class playlistmovesongdown(playlistevent):
4881 def __init__(self, id):
4882 self.id = id
4883
4884- def __str__(self):
4885- return "%s(%s)" % (self.__class__.__name__, self.id)
4886+ def __repr__(self):
4887+ return "%r(%r)" % (self.__class__.__name__, self.id)
4888
4889
4890 class playlistsave(playlistevent):
4891@@ -505,8 +520,8 @@
4892 def __init__(self, id):
4893 self.id = id
4894
4895- def __str__(self):
4896- return "%s(%s)" % (self.__class__.__name__, self.id)
4897+ def __repr__(self):
4898+ return "%r(%r)" % (self.__class__.__name__, self.id)
4899
4900
4901 class playlistchanged(event):
4902@@ -517,8 +532,8 @@
4903 self.autoplaymode = autoplaymode
4904 self.playingitem = playingitem
4905
4906- def __str__(self):
4907- return "%s(%s,%s/%s,%s,%s)" % (self.__class__.__name__,
4908+ def __repr__(self):
4909+ return "%r(%r,%r/%r,%r,%r)" % (self.__class__.__name__,
4910 self.items, self.ptime, self.ttime, self.autoplaymode,
4911 self.playingitem)
4912
4913@@ -527,12 +542,12 @@
4914 def __init__(self, song):
4915 self.song = song
4916
4917- def __str__(self):
4918- return "%s(%s)" % (self.__class__.__name__, self.song)
4919+ def __repr__(self):
4920+ return "%r(%r)" % (self.__class__.__name__, self.song)
4921
4922 class hidewindow(event):
4923 def __init__(self, window):
4924 self.window = window
4925
4926- def __str__(self):
4927- return "%s(%s)" % (self.__class__.__name__, self.window)
4928+ def __repr__(self):
4929+ return "%r(%r)" % (self.__class__.__name__, self.window)
4930
4931=== modified file 'src/filelist.py'
4932--- src/filelist.py 2007-08-06 07:12:52 +0000
4933+++ src/filelist.py 2012-07-23 07:16:20 +0000
4934@@ -1,6 +1,6 @@
4935 # -*- coding: ISO-8859-1 -*-
4936
4937-# Copyright (C) 2002, 2003 Jörg Lehmann <joerg@luga.de>
4938+# Copyright (C) 2002, 2003, 2007 Jörg Lehmann <joerg@luga.de>
4939 #
4940 # This file is part of PyTone (http://www.luga.de/pytone/)
4941 #
4942@@ -80,6 +80,20 @@
4943 self._updatetop()
4944 self._notifyselectionchanged()
4945
4946+ def focus_on(self, searchstring):
4947+ # remove any previous focus
4948+ if isinstance(self.dir[-1], item.focus_on):
4949+ self.dirup()
4950+ self.shistory.append((self.dir, self.selected, self.top))
4951+ songdbid = self.dir[-1].songdbid
4952+ # if filters apply, use them
4953+ try:
4954+ filters = self.dir[-1].filters
4955+ except AttributeError:
4956+ filters = None
4957+ self.dir = self.dir + [item.focus_on(songdbid, searchstring, filters)]
4958+ self.readdir()
4959+
4960 def selectionpath(self):
4961 return self.dir[-1].getheader(self.getselected())
4962
4963@@ -150,7 +164,7 @@
4964 songs = [self.getselected()]
4965 for song in songs:
4966 song.toggledelete()
4967- self.readdir()
4968+ self.updatedir()
4969 return True
4970
4971 def rescanselection(self, force):
4972
4973=== modified file 'src/filelistwin.py'
4974--- src/filelistwin.py 2007-08-06 07:12:52 +0000
4975+++ src/filelistwin.py 2012-07-23 07:16:20 +0000
4976@@ -1,6 +1,6 @@
4977 # -*- coding: ISO-8859-1 -*-
4978
4979-# Copyright (C) 2002 Jörg Lehmann <joerg@luga.de>
4980+# Copyright (C) 2002, 2007 Jörg Lehmann <joerg@luga.de>
4981 #
4982 # This file is part of PyTone (http://www.luga.de/pytone/)
4983 #
4984@@ -106,6 +106,10 @@
4985 hub.notify(events.selectionchanged(self.items.getselected()))
4986 self.update()
4987
4988+ def focus_on_handler(self, searchstring, key):
4989+ if key == ord("\n") and searchstring:
4990+ self.items.focus_on(searchstring)
4991+
4992 def isclickonstring(self, y, x):
4993 """ check whether a click was on a string or not """
4994 while x < self.ix+self.iw:
4995@@ -163,13 +167,17 @@
4996 hub.notify(events.activateplaylist())
4997 elif key in self.keybindings["insertrandomlist"] and self.items.isdirselected():
4998 self.items.randominsertrecursiveselection()
4999+ elif key in self.keybindings["repeatsearch"]:
5000+ if self.searchstring:
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: