source: trunk/ChangeLog @ 562

Revision 562, 83.3 KB checked in by thomas, 19 months ago (diff)
  • morituri/test/Makefile.am:
  • morituri/test/morituri.release.3451f29c-9bb8-4cc5-bfcc-bd50104b94f8.json (added):
  • morituri/test/test_common_musicbrainzngs.py (added): Add test for previous bug of a release not having a date.
Line 
12011-10-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2
3        * morituri/test/Makefile.am:
4        * morituri/test/morituri.release.3451f29c-9bb8-4cc5-bfcc-bd50104b94f8.json (added):
5        * morituri/test/test_common_musicbrainzngs.py (added):
6          Add test for previous bug of a release not having a date.
7
82011-10-28  Thomas Vander Stichele  <thomas at apestaart dot org>
9
10        * morituri/rip/main.py:
11        * morituri/common/musicbrainzngs.py:
12        * morituri/common/program.py:
13        * morituri/rip/cd.py:
14          Add -R option to rip to record API results for debugging.
15
162011-10-28  Thomas Vander Stichele  <thomas at apestaart dot org>
17
18        * morituri/common/musicbrainzngs.py:
19          Fix case of metadata not having length.
20          Fix case of release not having a date.
21
222011-10-22  Thomas Vander Stichele  <thomas at apestaart dot org>
23
24        * morituri/common/Makefile.am:
25        * morituri/common/musicbrainzngs.py:
26        * morituri/common/program.py:
27        * morituri/extern/Makefile.am:
28          Use musicbrainz NGS for ripping.
29          Can now rip Weezer, the Blue Album, both discs.
30
312011-10-20  Thomas Vander Stichele  <thomas at apestaart dot org>
32
33        * morituri/rip/debug.py:
34        * morituri/common/musicbrainzngs.py (added):
35          Rewrite using python-musicbrainz-ngs.
36          Add rip debug musicbrainzngs command for testing,
37          seems to work on Weezer - Blue Album - disc 2
38
392011-10-19  Thomas Vander Stichele  <thomas at apestaart dot org>
40
41        * morituri/extern/Makefile.am:
42        * morituri/extern/musicbrainzngs/musicbrainz.py (svn:special):
43        * morituri/extern/musicbrainzngs/mbxml.py (svn:special):
44        * morituri/extern/musicbrainzngs (added):
45        * morituri/extern/musicbrainzngs/mbxml.py (added):
46        * morituri/extern/musicbrainzngs/__init__.py (added):
47        * morituri/extern/musicbrainzngs/musicbrainz.py (added):
48          Pull in my fork of python-musicbrainz-ngs
49
502011-10-19  Thomas Vander Stichele  <thomas at apestaart dot org>
51
52        * morituri/common/musicbrainz.py:
53        * morituri/rip/debug.py:
54          Doc/output fixes.
55
562011-10-19  Thomas Vander Stichele  <thomas at apestaart dot org>
57
58        * morituri/rip/debug.py:
59          Adapt to splitup.
60
612011-10-19  Thomas Vander Stichele  <thomas at apestaart dot org>
62
63        * morituri/rip/debug.py:
64          Add rip debug musicbrainz command to look up information on
65          disc id's.
66
672011-10-19  Thomas Vander Stichele  <thomas at apestaart dot org>
68
69        * morituri/common/Makefile.am:
70        * morituri/common/musicbrainz.py:
71        * morituri/common/program.py:
72        * morituri/test/test_common_program.py:
73        * morituri/test/Makefile.am:
74        * morituri/test/test_common_musicbrainz.py (added):
75        * morituri/common/musicbrainz.py (added):
76          Split off musicbrainz-specific code.
77
782011-10-19  Thomas Vander Stichele  <thomas at apestaart dot org>
79
80        * TODO:
81        * morituri/extern/task/task.py:
82          Instead of chaining next in multi tasks, making the call
83          chain larger (and exceed maximum depth on track 75), schedule
84          it immediately.
85
862011-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
87
88        * morituri/test/Makefile.am:
89          Include test .xml responses.
90
912011-09-18  Thomas Vander Stichele  <thomas at apestaart dot org>
92
93        * morituri/common/common.py:
94          Add shrinkPath to write shorter path names.
95        * morituri/test/test_common_common.py (added):
96          Add test.
97        * morituri/program/cdparanoia.py:
98          Catch ENAMETOOLONG and shrink path.
99        * morituri/common/program.py:
100          Update track result's filename if it was shrunk.
101        * morituri/rip/cd.py:
102          set the possibly shrunk path on the result.
103
1042011-09-18  Thomas Vander Stichele  <thomas at apestaart dot org>
105
106        * morituri/program/cdparanoia.py:
107          Log properly again.
108          Properly set exception when we can't rename the file.
109
1102011-09-15  Thomas Vander Stichele  <thomas at apestaart dot org>
111
112        * morituri/extern/task/gstreamer.py:
113          Query using time if DEFAULT fails.
114
1152011-09-15  Thomas Vander Stichele  <thomas at apestaart dot org>
116
117        * morituri/common/program.py:
118          Add Musicbrainz command.
119
1202011-09-04  Thomas Vander Stichele  <thomas at apestaart dot org>
121
122        * morituri/common/program.py:
123          If any track is missing duration, set the whole album duration
124          to 0.
125
1262011-09-04  Thomas Vander Stichele  <thomas at apestaart dot org>
127
128        * morituri/common/gstreamer.py:
129          flacparse is busted in gst-plugins-good 0.10.30 too.
130
1312011-08-14  Thomas Vander Stichele  <thomas at apestaart dot org>
132
133        * morituri/common/program.py:
134          Don't fail if there is no metadata.
135
1362011-08-14  Thomas Vander Stichele  <thomas at apestaart dot org>
137
138        * morituri/common/program.py:
139        * morituri/rip/debug.py:
140          Pychecker fixes.
141
1422011-08-14  Thomas Vander Stichele  <thomas at apestaart dot org>
143
144        * TODO:
145          Add a note about das capital disc.
146        * morituri/test/release.08397059-86c1-463b-8ed0-cd596dbd174f.xml:
147        * morituri/test/release.93a6268c-ddf1-4898-bf93-fb862b1c5c5e.xml:
148          Add musicbrainz ws1 results for Das Capital and Ladyhawke.
149        * morituri/test/test_common_program.py:
150          Fix typos.
151          Add tests for Ladyhawke and Das Capital duration and parsing.
152        * morituri/test/test_image_table.py:
153          Fix according to new algorithm.
154        * morituri/test/test_image_toc.py:
155          Get frame length for both cd's.
156        * morituri/image/table.py:
157          Add getFrameLength method.  Fix up duration.
158
1592011-08-14  Thomas Vander Stichele  <thomas at apestaart dot org>
160
161        * morituri/common/program.py:
162        * morituri/rip/cd.py:
163          Always print MusicBrainz URL.
164
1652011-08-14  Thomas Vander Stichele  <thomas at apestaart dot org>
166
167        * morituri/test/release.c7d919f4-3ea0-4c4b-a230-b3605f069440.xml:
168          Add release data for Bettie Serveert, Lamprey
169        * morituri/test/test_common_program.py:
170          Add a test for parsing and getting the whole duration.
171        * morituri/common/common.py:
172          Add a method to format time.
173        * morituri/common/program.py:
174          Add duration to tracks and release metadatas.
175          When there are multiple matches, look up the closest in duration.
176          Make sure that multiple matches closest in duration contain same
177          artist and title.
178          Complain about the other ones.
179        * morituri/image/table.py:
180          Add a method to calculate a duration from the table.
181        * morituri/test/test_image_table.py:
182          Add a test for it.
183
1842011-08-13  Thomas Vander Stichele  <thomas at apestaart dot org>
185
186        * morituri/rip/cd.py:
187          Make sure we definitely fail on failed checksum.
188
1892011-08-13  Thomas Vander Stichele  <thomas at apestaart dot org>
190
191        * doc/release:
192          Add note on actually running.
193        * morituri/common/program.py:
194          Fix when running rip cd rip --unknown
195
1962011-08-07  Thomas Vander Stichele  <thomas at apestaart dot org>
197
198        * morituri/extern/task/task.py:
199          Also stub out log calls on Runner.
200
2012011-08-07  Thomas Vander Stichele  <thomas at apestaart dot org>
202
203        * morituri/extern/task/task.py:
204          Also handle error() log calls.
205
2062011-08-07  Thomas Vander Stichele  <thomas at apestaart dot org>
207
208        * morituri/program/cdparanoia.py:
209          Make sure exceptions don't prevent the task from chaining up
210          to the parent stop() implementation, giving the runner a chance
211          to actually stop.
212
2132011-08-06  Thomas Vander Stichele  <thomas at apestaart dot org>
214
215        * morituri/rip/debug.py:
216          Add checksum task for debugging.
217
2182011-08-05  Thomas Vander Stichele  <thomas at apestaart dot org>
219
220        * morituri/common/checksum.py:
221        * morituri/common/common.py:
222        * morituri/common/encode.py:
223        * morituri/image/image.py:
224        * morituri/test/test_common_encode.py:
225          Moved quoteParse.
226
2272011-08-05  Thomas Vander Stichele  <thomas at apestaart dot org>
228
229        * morituri/common/Makefile.am:
230        * morituri/common/checksum.py:
231        * morituri/common/gstreamer.py:
232        * morituri/extern/Makefile.am:
233        * morituri/extern/task/gstreamer.py:
234        * morituri/common/gstreamer.py (added):
235          Extract function to remove audio parsers.
236          Fix up dist.
237
2382011-08-05  Thomas Vander Stichele  <thomas at apestaart dot org>
239
240        * morituri/extern/task (added):
241        * morituri/extern/task/taskgtk.py (added):
242        * morituri/extern/task/gstreamer.py (added):
243        * morituri/extern/task/task.py (added):
244        * morituri/common/taskgtk.py (deleted):
245        * morituri/common/gstreamer.py (deleted):
246        * morituri/common/task.py (deleted):
247          Move task-related modules into an extern directory so other
248          projects can use them.
249        * morituri/common/checksum.py:
250        * morituri/common/encode.py:
251        * morituri/image/image.py:
252        * morituri/program/cdparanoia.py:
253        * morituri/program/cdrdao.py:
254        * morituri/rip/cd.py:
255        * morituri/rip/debug.py:
256        * morituri/rip/image.py:
257        * morituri/rip/main.py:
258        * morituri/rip/offset.py:
259        * morituri/test/test_common_checksum.py:
260        * morituri/test/test_common_encode.py:
261        * morituri/test/test_image_image.py:
262          Adapt.  Tests work.
263
2642011-07-20  Thomas Vander Stichele  <thomas at apestaart dot org>
265
266        * morituri/program/cdrdao.py:
267          Avoid floating point error.
268
2692011-07-09  Thomas Vander Stichele  <thomas at apestaart dot org>
270
271        * morituri/common/task.py:
272          Log which task we are notifying progress on.
273        * morituri/common/program.py:
274          Solve a problem where a release does not have an .id,
275          which means it's only half in musicbrainz (artist
276          and title, but no URL to the disc)
277
2782011-07-09  Thomas Vander Stichele  <thomas at apestaart dot org>
279
280        * morituri/program/cdrdao.py:
281          Fix log output.
282          Do progress output while scanning TOC.
283
2842011-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
285
286        * configure.ac:
287        * doc/release:
288          Back to trunk.
289
290=== release 0.1.2 ===
291
2922011-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
293
294        * NEWS:
295        * README:
296        * RELEASE:
297        * configure.ac:
298        * morituri.doap:
299          Releasing 0.1.2, "VCR"
300
3012011-05-31  Thomas Vander Stichele  <thomas at apestaart dot org>
302
303        * morituri/rip/cd.py:
304          Use %default in options description.
305
3062011-05-31  Thomas Vander Stichele  <thomas at apestaart dot org>
307
308        * morituri/rip/cd.py:
309          Ouch, was using the DISC TEMPLATE for the tracks.
310
3112011-05-30  Thomas Vander Stichele  <thomas at apestaart dot org>
312
313        * morituri/test/test_common_program.py:
314          Add a test for the template in #66.
315
3162011-05-30  Thomas Vander Stichele  <thomas at apestaart dot org>
317
318        * morituri/rip/cd.py:
319          Templates should have same number of slashes.
320          This avoids #66.
321          (Possibly, it should also be the same directory, or more code
322           should be written to handle that case).
323        * morituri/rip/main.py:
324          Catch CommandError.
325
3262011-05-30  Thomas Vander Stichele  <thomas at apestaart dot org>
327
328        * morituri/rip/cd.py:
329          Create variables for default templates.
330
3312011-05-30  Thomas Vander Stichele  <thomas at apestaart dot org>
332
333        * morituri/test/test_common_program.py:
334          Add tests for naming of disc output location.
335
3362011-05-29  Thomas Vander Stichele  <thomas at apestaart dot org>
337
338        * morituri/common/gstreamer.py:
339          Actually remove it if it's good and old.
340
3412011-05-27  Thomas Vander Stichele  <thomas at apestaart dot org>
342
343        * morituri/common/gstreamer.py:
344          In -bad the plugin is called audioparsersbad.
345
3462011-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
347
348        * morituri/common/gstreamer.py:
349          Add debugging about audioparsers removal.
350
3512011-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
352
353        * morituri/common/gstreamer.py:
354          Also remove audioparsers if it's in bad.
355
3562011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
357
358        * configure.ac:
359          Time for a prerelease.
360
3612011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
362
363        * morituri/common/gstreamer.py:
364          Remove parsers for current git trunk of good too.
365
3662011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
367
368        * morituri/common/encode.py:
369          Query for duration and use it in level callback to set progress.
370          Works around F-15 bug where encode progress is not being updated.
371
3722011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
373
374        * morituri/rip/Makefile.am:
375        * morituri/rip/main.py:
376        * morituri/rip/debug.py (added):
377          Add helper command to debug tasks.
378        * morituri/common/encode.py:
379          Add debug.
380
3812011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
382
383        * morituri/test/test_common_encode.py:
384          Use pink-noise as a wave form to make sure it's long enough.
385          Fixes last tests for F-15.
386
3872011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
388
389        * morituri/common/checksum.py:
390        * morituri/common/gstreamer.py:
391          Remove audioparsers plugin if it has the known bug.
392          Fixes #64.
393
3942011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
395
396        * morituri/common/task.py:
397          Show us when we stop twice.
398        * morituri/common/gstreamer.py:
399          Stop on Exceptions.
400
4012011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
402
403        * morituri/common/common.py:
404          Add an EmptyError.
405        * morituri/common/checksum.py:
406          Set it when we don't get any frames.
407        * morituri/rip/main.py:
408          Catch it and stop ripping if this happens.
409
4102011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
411
412        * morituri/common/task.py:
413          More exception handling and debug.
414
4152011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
416
417        * morituri/common/task.py:
418          add task argument to TaskRunner.schedule so we can get exceptions.
419          Add .schedule method to Task to pass self.
420        * morituri/common/checksum.py:
421        * morituri/common/encode.py:
422        * morituri/common/gstreamer.py:
423        * morituri/program/cdparanoia.py:
424        * morituri/program/cdrdao.py:
425          Adapt.
426
4272011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
428
429        * morituri/test/test_common_encode.py:
430          Write a non-sine wave so we have an actual flac file that will
431          typefind.
432
4332011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
434
435        * morituri/image/image.py:
436          Actually set exception so MultiTask tells us what went wrong.
437
4382011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
439
440        * morituri/common/task.py:
441          Document and change name of a method.
442
4432011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
444
445        * morituri/common/gstreamer.py:
446          Add a cvar to stop going to playing.
447        * morituri/image/image.py:
448          Convert AudioLengthTask to GstPipelineTask.
449        * morituri/test/test_image_image.py:
450          Adapt to new typefind error we run in.
451
4522011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
453
454        * morituri/common/gstreamer.py:
455          Stop task when we get an exception.
456          Don't make pipeline go to PLAYING if we got an exception
457          before doing so.
458
4592011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
460
461        * morituri/common/encode.py:
462          Convert TagReadTask to gstreamer.GstPipelineTask and
463          remove lots of duplicate code.
464
4652011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
466
467        * morituri/common/checksum.py:
468        * morituri/common/encode.py:
469        * morituri/common/gstreamer.py:
470          Move play to base class of GstPipelineTask.
471
4722011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
473
474        * morituri/common/gstreamer.py:
475          Add a stop method and a stopped overridable handler.
476        * morituri/common/checksum.py:
477        * morituri/common/encode.py:
478          Adapt to using stopped.
479
4802011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
481
482        * morituri/test/test_common_encode.py:
483          Generate an actual file by spawning gst-launch; otherwise
484          with proper error handling we get an error from wavparse that
485          there is not enough data to typefind.
486        * morituri/common/gstreamer.py:
487          Move the gst import to start() and set it as a class attribute.
488          Document methods.
489        * morituri/common/encode.py:
490          Convert EncodeTask to a GstPipelineTask.
491
4922011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
493
494        * morituri/common/encode.py:
495          Add some debug.
496
4972011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
498
499        * morituri/common/program.py:
500          AccurateRip responses should be treated per track; one response set
501          isn't necessarily from the same pressing.
502          The first response set contains all the highest confidence
503          checksums, and so on in decreasing order.
504          So don't assert about one track having a checksum matching from
505          a different response set.
506          Fixes #5.
507
5082011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
509
510        based on code by: Loïc Minier <lool@dooz.org>
511
512        * morituri/rip/Makefile.am:
513        * morituri/rip/main.py:
514        * morituri/rip/accurip.py (added):
515          Add a rip accurip show command to show the accuraterip information
516          for a given URL.  See #5.
517
5182011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
519
520        * morituri/image/table.py:
521          Extract one function to write a FILE line.
522
5232011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
524
525        patch by: Ross Burton <ross@burtonini.com>
526
527        * morituri/image/table.py:
528          When writing the .cue file, only write the basename, since
529          the .cue file gets stored in the album directory.
530          Fixes #10.
531
5322011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
533
534        * morituri/rip/main.py:
535          Give a nice error message if cdrdao cannot read the disc.
536          Fixes #62.
537
5382011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
539
540        * morituri/program/cdparanoia.py:
541          Since stop can be same as start, add + 1 to progress calculation.
542          Fixes #37.
543
5442011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
545
546        * morituri/common/gstreamer.py:
547          Remove unused imports.
548        * morituri/image/image.py:
549          Remove halfbaked code.
550
5512011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
552
553        * morituri/rip/cd.py:
554          Factor out function to write .m3u lines.
555
5562011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
557
558        patch by: Loïc Minier <lool@dooz.org>
559
560        * morituri/rip/cd.py:
561          Don't strip extension of HTOA track.
562          Fixes #50.
563
5642011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
565
566        * morituri/result/logger.py:
567          Always write strftime in C locale.  Fixes second bug
568          mentioned in #49.
569
5702011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
571
572        * morituri/common/checksum.py:
573        * morituri/image/image.py:
574        * morituri/test/test_common_checksum.py:
575        * morituri/common/gstreamer.py (added):
576          Factor out GstException and GstPipelineTask.
577
5782011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
579
580        * misc/morituri-uninstalled:
581          The binary name is rip, so add an option to override.
582          Fixes #46.
583
5842011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
585
586        * morituri/rip/image.py:
587          Document image subcommand.  Fixes #61.
588
5892011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
590
591        * morituri/test/Makefile.am:
592          Package error progress output.  Fixes distcheck on slaves.
593
5942011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
595
596        * morituri/test/test_program_cdparanoia.py:
597          Update expected quality percentage.
598          Was broken since its commit in [432].
599
6002011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
601
602        * morituri/common/checksum.py:
603        * morituri/common/encode.py:
604        * morituri/image/table.py:
605        * morituri/rip/cd.py:
606        * morituri/rip/image.py:
607        * morituri/rip/offset.py:
608        * morituri/test/test_common_accurip.py:
609        * morituri/test/test_common_checksum.py:
610        * morituri/test/test_image_cue.py:
611        * morituri/test/test_image_table.py:
612          Pychecker fixes.
613
6142011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
615
616        * morituri/common/checksum.py:
617          Actually raise the exception.
618        * morituri/common/task.py:
619          Document interface more clearly.
620        * morituri/test/test_common_checksum.py:
621          Use tcommon for test.common
622
6232011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
624
625        * morituri/common/common.py:
626          Don't fail on loading pickle.
627
6282011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
629
630        * morituri/common/encode.py:
631          Alac does not have merge_tags.  Fixes #15.
632
6332011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
634
635        * morituri/program/cdparanoia.py:
636        * morituri/common/encode.py:
637        * morituri/common/program.py:
638        * morituri/rip/cd.py:
639          Add action and what args to describe task better.
640
6412011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
642
643        * morituri/common/task.py:
644          Add more debug.
645
6462011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
647
648        * morituri/rip/main.py:
649          More debug info: args, version, revision.
650
6512011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
652
653        * morituri/configure/configure.py (svn:keywords):
654          Expand revision.
655        * morituri/configure/configure.py:
656          Set it on the revision local.
657
6582011-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
659
660        * morituri/common/encode.py:
661          wavenc does not have merge_tags, it seems.
662          So don't call an element a tagger, don't merge tags if there is
663          no tagger, and complain if there is no merge_tags when we think
664          there should be.
665
6662011-03-23  Thomas Vander Stichele  <thomas at apestaart dot org>
667
668        * morituri/program/cdparanoia.py:
669          cdparanoia can hang indefinitely on scsi read errors.
670          For example, on some drives, when trying negative offsets.
671          Notice them, count them, and fail after 100.
672        * morituri/test/test_program_cdparanoia.py:
673        * morituri/test/cdparanoia.progress.error (added):
674          Add a test for this output.
675
6762011-03-22  Thomas Vander Stichele  <thomas at apestaart dot org>
677
678        * morituri/common/program.py:
679        * morituri/rip/offset.py:
680          When finding the offset, also load and possibly unmount, resolving
681          to the real path for the device.
682
6832011-03-20  Thomas Vander Stichele  <thomas at apestaart dot org>
684
685        * morituri/common/encode.py:
686          Debug failing to write tags better.  See #60.
687
6882011-03-20  Thomas Vander Stichele  <thomas at apestaart dot org>
689
690        * morituri/program/cdparanoia.py:
691          Extend FileSizeError with an extra message.
692        * morituri/rip/offset.py:
693          Print a reasonable warning when we cannot rip with a certain offset.
694          See #57.
695
6962011-03-17  Thomas Vander Stichele  <thomas at apestaart dot org>
697
698        * morituri/rip/drive.py:
699          Fix typo.  Fixes #59.
700
7012011-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
702
703        * morituri/common/checksum.py:
704          Create a GstException to wrap a Gst.GError.
705          Create a base GstPipelineTask class.
706          Use it in Checksum and TRM tasks.
707          Raise and don't proceed to call .paused() when a GstError happens.
708          Should help debug https://bugs.launchpad.net/bugs/735053
709        * morituri/test/test_common_checksum.py:
710          Adapt test.
711
7122011-01-09  Thomas Vander Stichele  <thomas at apestaart dot org>
713
714        patch by: Ross Burton
715
716        * morituri/common/program.py:
717          On compilation albums the album artist is different to the artist.
718          If this is the case, morituri should write both tags.
719          Fixes #43.
720
7212011-01-02  Thomas Vander Stichele  <thomas at apestaart dot org>
722
723        * morituri/common/program.py:
724        * morituri/image/table.py:
725        * morituri/rip/cd.py:
726          Get CDDB disc id.  Use it to print info when not found on
727          MusicBrainz.
728
7292011-01-01  Thomas Vander Stichele  <thomas at apestaart dot org>
730
731        * morituri/rip/cd.py:
732          Add -U/--unknown option to continue ripping even if the CD is
733          unknown.  Default to False.
734
7352010-12-30  Thomas Vander Stichele  <thomas at apestaart dot org>
736
737        * morituri/common/program.py:
738        * morituri/rip/cd.py:
739          Add load and eject device.  Do so before and after ripping.
740
7412010-11-14  Thomas Vander Stichele  <thomas at apestaart dot org>
742
743        patch by: Loïc Minier <lool at debian dot org>
744
745        * examples/ARcalibrate.py:
746        * examples/ARcue.py:
747        * examples/readdisc.py:
748        * morituri/rip/cd.py:
749        * morituri/rip/offset.py:
750          s/reponse/response.
751          Fixes #51.
752
7532010-11-08  Thomas Vander Stichele  <thomas at apestaart dot org>
754
755        * morituri/program/cdrdao.py:
756          Add logCategory to CDRDAO tasks.
757          Remove errors from parser, set them publically on task.
758          Properly raise exceptions on data cd's with correct stack origin.
759
7602010-07-08  Thomas Vander Stichele  <thomas at apestaart dot org>
761
762        * morituri/common/program.py:
763          Comment where we got the template variables from.
764        * morituri/rip/cd.py:
765          Document the template variables.
766
7672010-06-19  Thomas Vander Stichele  <thomas at apestaart dot org>
768
769        * morituri/program/cdparanoia.py:
770          Warn about missing cdparanoia too.
771
7722010-06-19  Thomas Vander Stichele  <thomas at apestaart dot org>
773
774        * morituri/common/common.py:
775          Add MissingDependencyException.
776        * morituri/program/cdrdao.py:
777        * morituri/rip/main.py:
778          Use it to warn about missing cdrdao.
779
7802010-06-18  Thomas Vander Stichele  <thomas at apestaart dot org>
781
782        * morituri/common/task.py:
783          Add exception traceback for easier debugging.
784
7852010-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
786
787        * morituri.spec.in:
788          Add requires for python-setuptools since we use parse_version.
789          Fixes #32.
790
7912010-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
792
793        * morituri/common/program.py:
794          Set results by default so that it is set even if we get an
795          exception getting them.
796          Fixes #35.
797
7982010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
799
800        * morituri/test/test_image_toc.py:
801          Fix distcheck by writing unicode toc filename in a temp dir.
802
8032010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
804
805        * morituri/rip/cd.py:
806          Log the version at the beginning to help in bug reports.
807
8082010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
809
810        * morituri/rip/main.py:
811          Fix another UnicodeEncodeError problem as mentioned in #25.
812
8132010-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
814
815        * morituri/test/Makefile.am:
816        * morituri/test/jose.toc (added):
817        * morituri/test/JoséGonzález.toc (deleted):
818          Rename utf-8 file to a normal file.
819        * morituri/test/common.py:
820        * morituri/test/test_common_checksum.py:
821        * morituri/test/test_common_encode.py:
822        * morituri/test/test_image_image.py:
823        * morituri/test/test_image_toc.py:
824          Copy the normal file first to the utf-8 filename, if supported.
825          Skip tests that need unicode when we are not in a utf-8 locale.
826
8272010-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
828
829        * configure.ac:
830        * doc/release:
831          Back to trunk.
832
833=== release 0.1.1 ===
834
8352010-04-16  Thomas Vander Stichele  <thomas at apestaart dot org>
836
837        * NEWS:
838        * README:
839        * RELEASE:
840        * configure.ac:
841        * doc/release:
842        * morituri.doap:
843          Releasing 0.1.1, 'Dead'
844
8452010-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
846
847        * morituri/common/encode.py:
848        * morituri/rip/image.py:
849          Provide status on the retagging.
850
8512010-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
852
853        patch by: Peter Oliver
854
855        * morituri/program/cdparanoia.py:
856          Respect umask for encoded files.  Fixes #17.
857
8582010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
859
860        * morituri/common/encode.py:
861          Before moving the newly tagged file to overwrite the original
862          one, copy over mode.
863
8642010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
865
866        * morituri/common/program.py:
867          Commit one missing line from patch in #4 for multi-artist discs.
868
8692010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
870
871        patch by: Peter Oliver
872
873        * morituri/common/program.py:
874          Handle multi-artist releases where track artist is unset.
875          Fixes #14.
876
8772010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
878
879        * morituri/rip/image.py:
880          Fix more utf-8 issues.
881
8822010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
883
884        * morituri/image/image.py:
885          Remove dead code.
886
8872010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
888
889        * morituri/common/encode.py:
890          Fix wrong code for checksum comparison.
891
8922010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
893
894        * morituri/common/program.py:
895          Rename some vars to start with mbid.  Fix pychecker issues.
896
8972010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
898
899        * morituri/common/program.py:
900          Add a retagging command.
901          Add a getMusicBrainz() method.
902          Also store musicbrainz track/album/artist ids.
903          Patch provided by Peter Oliver.  Fixes #4.
904        * morituri/rip/cd.py:
905          Use it.
906        * morituri/image/image.py:
907          Add a task to retag an image.
908        * morituri/rip/image.py:
909          Add a command to retag an image.
910
9112010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
912
913        * morituri/common/encode.py:
914          Add tasks to read, write, and safely retag flac files.
915        * morituri/test/test_common_encode.py:
916          Add tests for this.
917
9182010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
919
920        * morituri/common/checksum.py:
921          Style fixes.
922        * morituri/common/common.py:
923          Add functions to convert a gst.TagList to a dict and compare them.
924        * morituri/common/task.py:
925          Add setAndRaiseException which gives us an appropriate
926          exceptionMessage as if we raised where we called this new function.
927
9282010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
929
930        * morituri/common/encode.py:
931          pychecker fix.
932
9332010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
934
935        * morituri/common/encode.py:
936          Add a task to read tags.
937        * morituri/test/test_common_encode.py:
938          Add a test.
939
9402010-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
941
942        * morituri/common/encode.py:
943          Add a vbr profile.
944
9452010-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
946
947        * morituri/rip/image.py:
948          Don't splitext on inputdir; fixes encoding of directories like
949          Sigur Ros - Takk... (which removed a period)
950
9512010-04-09  Thomas Vander Stichele  <thomas at apestaart dot org>
952
953        * morituri/image/table.py:
954        * morituri/program/cdparanoia.py:
955          Do some 80 character cleanups.
956
9572010-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
958
959        * morituri/rip/image.py:
960          Fix problem to encode from files with unicode chars.
961
9622010-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
963
964        * morituri/program/cdparanoia.py:
965          Add some debug.
966        * morituri/common/encode.py:
967          Add more debug.
968          Handle the case where peak is full scale, and peakdB thus 0,
969          which triggered not setting self.peak.
970
9712010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
972
973        patch by: Peter Oliver
974
975        * morituri/common/program.py:
976          Allow using sortName for artist/track using %S/%s.
977          Fixes #19.
978
9792010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
980
981        * doc/release:
982          Document having clean test run.
983        * morituri/common/encode.py:
984          Catch and properly stop on gst.QueryError.
985          Don't set peak in stop if we had an error.
986        * morituri/test/test_common_encode.py:
987        * morituri/test/test_common_renamer.py:
988        * morituri/test/test_image_cue.py:
989          Clean up after tests.
990
9912010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
992
993        * morituri/common/task.py:
994        * morituri/image/cue.py:
995          Add logCategory.
996        * morituri/image/image.py:
997          If subtasks had an exception, retrigger the exception and stop.
998
9992010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1000
1001        * morituri/image/image.py:
1002          Fix AudioLengthTask for the case where we don't have the decoder,
1003          by instead of doing get_state, waiting for an ASYNC_DONE or ERROR
1004          message.  Properly raise a gst.GError in that case.
1005        * morituri/common/task.py:
1006          Add some debug.
1007        * morituri/test/test_image_image.py:
1008          After this fix, we now catch the TYPE_NOT_FOUND because of an
1009          empty stream instead of the later gst.QueryError.
1010        * morituri/test/test_common_encode.py:
1011          Let us know what it is if not a gst.QueryError.
1012
10132010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1014
1015        * doc/Makefile.am:
1016          Don't put rip.1 manpage in subdir.
1017
10182010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1019
1020        * morituri/common/common.py:
1021          add quoteParse function to quote properly for gst.parse_launch()
1022        * morituri/common/checksum.py:
1023          Fix single quote problem.
1024          use self.setException()
1025        * morituri/common/encode.py:
1026          Fix single quote problem.
1027        * morituri/image/image.py:
1028          Fix single quote problem.
1029          Reraise gst.QueryError.
1030        * morituri/test/test_common_encode.py:
1031        * morituri/test/test_common_encode.py (added):
1032          Add tests for unicode/single/double quote.
1033        * morituri/test/test_image_image.py:
1034        * morituri/test/test_common_checksum.py:
1035          Add tests for single/double quote.
1036        * morituri/test/common.py:
1037          add twisted-like failUnlessRaises to TestCase that returns
1038          the exception, so we can check wrapped exceptions in TaskException.
1039          Fixes #16.
1040
10412010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1042
1043        * morituri/common/task.py:
1044          Wrap exceptions during tasks in a TaskException, storing the
1045          message, for improved error reporting later on.
1046
10472010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1048
1049        * doc/Makefile.am:
1050        * morituri.spec.in:
1051        * morituri/extern/Makefile.am:
1052          Use help2man.py to generate manpage.
1053
10542010-04-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1055
1056        * morituri/common/encode.py:
1057        * morituri/common/program.py:
1058        * morituri/image/image.py:
1059        * morituri/program/cdparanoia.py:
1060        * morituri/rip/cd.py:
1061        * morituri/rip/image.py:
1062        * morituri/rip/offset.py:
1063          Move all gst-using imports inside functions and classes
1064          to avoid 'import gst' eating our options.
1065          Fixes #12.
1066
10672010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1068
1069        * bin/Makefile.am:
1070          Install rip as the script.
1071
10722010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1073
1074        * morituri/common/Makefile.am:
1075          Add missing result.py
1076        * morituri/test/Makefile.am:
1077        * morituri/test/test_image_toc.py:
1078        * morituri/test/JoséGonzález.toc (added):
1079        * morituri/test/José González.toc (deleted):
1080          automake doesn't handle spaces in names, so move it.
1081
10822010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1083
1084        * bin/rip.in:
1085          Add our PYTHONLIBDIR to sys.path if needed.  Should make this
1086          work when doing ./configure; sudo checkinstall make install
1087          on e.g. Ubuntu.
1088
10892010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1090
1091        * configure.ac:
1092        * bin/rip.in (added):
1093        * bin/rip (deleted):
1094          Generate bin/rip so we can do sys.path stuff.
1095
10962010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1097
1098        * morituri/rip/offset.py:
1099          Add a more complete list of offsets, obtained using misc/offsets.py
1100
11012010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1102
1103        * misc/offsets.py (added):
1104          Add a script to calculate list of offsets based on AccurateRip's
1105          online database, according to popularity.
1106
11072010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1108
1109        * morituri/common/encode.py:
1110          Handle utf-8 properly.
1111
11122010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1113
1114        * morituri/common/program.py:
1115          Fix a problem with Arid's new album of not having an id.
1116
11172010-01-31  Thomas Vander Stichele  <thomas at apestaart dot org>
1118
1119        * morituri/common/accurip.py:
1120          The AccuRip cache dir could exist without the file; handle that
1121          case.
1122
11232009-12-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1124
1125        * morituri/common/program.py:
1126          For Various Artists releases, fall back to the release artist if
1127          the track artist is None.
1128
11292009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
1130
1131        * morituri/image/image.py:
1132          Add ImageEncodeTask to encode a disk image to a different profile
1133          and directory.
1134        * morituri/common/encode.py:
1135          Add lossy encoding profiles for mp3 and vorbis.
1136          Rename muxer to tagger since that's what we use it for.
1137          Do progress probe after level to make sure we get samples for
1138          offsets.
1139        * morituri/rip/image.py:
1140          Add rip image encode command.
1141
11422009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
1143
1144        * morituri/test/José González.toc (added):
1145          Add test file for a test.
1146
11472009-10-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1148
1149        * morituri/common/task.py:
1150          Add exceptionMessage on Task to store the result of
1151          log.getExceptionMessage when the stack is still valid.
1152
11532009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1154
1155        * configure.ac:
1156          Back to TRUNK.
1157
1158=== release 0.1.0 ===
1159
11602009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1161
1162        * NEWS:
1163        * RELEASE:
1164        * configure.ac:
1165          Releasing 0.1.0, "Youngblood".
1166
11672009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1168
1169        * morituri/program/cdparanoia.py:
1170          explicitize keyword args.
1171          Break some 80+ lines.
1172
11732009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1174
1175        * morituri/rip/offset.py:
1176          Pass device parameter to ReadTrackTask.  Thanks to Alex B for
1177          spotting this on my blog.
1178
11792009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1180
1181        * morituri/program/cdparanoia.py:
1182        * morituri/rip/offset.py:
1183          Another unicode fix.
1184
11852009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1186
1187        * HACKING:
1188          More unicode notes.
1189        * morituri/common/program.py:
1190        * morituri/image/table.py:
1191        * morituri/image/toc.py:
1192        * morituri/result/result.py:
1193        * morituri/rip/cd.py:
1194        * morituri/test/test_image_toc.py:
1195          Further unicode fixes, for options, CD-Text, paths, ...
1196
11972009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1198
1199        * morituri/program/cdrdao.py:
1200          Wrap read in an exception handler.
1201        * morituri/common/task.py:
1202          Debug exceptions more.
1203
12042009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1205
1206        * HACKING:
1207          Note unicode handling.
1208        * morituri/test/test_image_image.py:
1209        * morituri/image/table.py:
1210        * morituri/program/cdparanoia.py:
1211        * morituri/common/checksum.py:
1212          Use unicode for paths.
1213          Use repr for path representation.
1214        * morituri/test/test_common_checksum.py:
1215          Add test for unicode audio file name.
1216
12172009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1218
1219        * morituri/image/cue.py:
1220        * morituri/image/toc.py:
1221        * morituri/test/test_image_cue.py:
1222        * morituri/test/test_image_toc.py:
1223          Read input file as utf-8.  Fix logging of paths.
1224        * morituri/image/image.py:
1225          Document and add asserts for unicodeness of paths.
1226          Encode path in launch lines as utf-8
1227
12282009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1229
1230        * morituri/common/task.py:
1231          Make SyncRunner wrap start() so we correctly handle any
1232          exception being thrown.
1233         
12342009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1235
1236        * morituri/common/checksum.py:
1237        * morituri/test/Makefile.am:
1238        * morituri/test/test_common_checksum.py (added):
1239          Add a check to make sure that checksumming an empty file doesn't
1240          hang.  Fix the hang.
1241
12422009-09-08  Thomas Vander Stichele  <thomas at apestaart dot org>
1243
1244        * morituri.spec.in:
1245          Add pycdio as requirement.
1246
12472009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1248
1249        * morituri/common/program.py:
1250          Fix getting AccurateRip results for albums with a HTOA.
1251        * morituri/test/Makefile.am:
1252        * morituri/test/test_common_program.py:
1253        * morituri/test/silentalarm.result.pickle (added):
1254          Add testcase for it, Bloc Party's Silent Alarm.
1255
12562009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1257
1258        * morituri.spec.in:
1259          Update requirements to work around known bugs.
1260
12612009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1262
1263        * morituri/rip/cd.py:
1264          Fix warning against rebuilt package.
1265
12662009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1267
1268        * README:
1269          Fix up dependencies.
1270        * morituri.spec.in:
1271          Fix dependencies and noarch install location.
1272        * morituri/common/Makefile.am:
1273          Add result.py to dist
1274
12752009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1276
1277        * configure.ac:
1278        * m4/Makefile.am:
1279        * m4/as-ac-expand.m4 (added):
1280          Correctly set installation dir for noarch python files so that it
1281          works on 64 bit.
1282
12832009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1284
1285        * morituri/program/cdrdao.py:
1286          Parse version number.
1287        * morituri/rip/cd.py:
1288          Warn about cdrdao versions with a bug.
1289        * morituri/test/test_program_cdrdao.py:
1290          Test that we can parse the version.
1291
12922009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
1293
1294        * morituri/program/cdrdao.py:
1295          Handle errors.  Tested by not having a CD in the drive.
1296
12972009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
1298
1299        * morituri/common/task.py:
1300          Document better.
1301          Create an ITaskListener interface where we can document.
1302          Log some more.
1303
13042009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1305
1306        * morituri/test/test_common_program.py:
1307        * morituri/common/program.py:
1308          Extract a common method to get textual representation of
1309          AccurateRip results, and test it.
1310        * morituri/rip/cd.py:
1311        * morituri/rip/image.py:
1312          Use the method.
1313
13142009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1315
1316        * morituri/image/table.py:
1317          Fix deprecationwarning for python 2.6
1318
13192009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1320
1321        * morituri/test/test_common_program.py (added):
1322        * morituri/common/program.py:
1323          Break verifyImage into two so we can test it.
1324          Test it using an AccurateRip result for Luke Haines Is Dead
1325          which had a wrongly ripped track 10.
1326
1327
13282009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1329
1330        * morituri/result/result.py:
1331          Document some more.
1332
13332009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1334
1335        * morituri/test/Makefile.am:
1336        * morituri/test/dBAR-020-002e5023-029d8e49-040eaa14.bin (added):
1337          Add AR result for Luke Haines Is Dead disc 1
1338
13392009-06-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1340
1341        * Makefile.am:
1342        * misc/pycheckerrc:
1343        * morituri/common/accurip.py:
1344        * morituri/common/checksum.py:
1345        * morituri/common/encode.py:
1346        * morituri/image/table.py:
1347        * morituri/rip/drive.py:
1348          Fix up for pychecker warnings for 2.6
1349          Fix rip drive list, which forgot some modules.
1350
13512009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1352
1353        * morituri/rip/main.py:
1354        * morituri/rip/image.py (added):
1355          Add command to verify an image.
1356        * morituri/common/program.py:
1357        * morituri/rip/cd.py:
1358          Fix AccurateRip checksum output.
1359
13602009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1361
1362        * morituri/common/drive.py:
1363          Really make pycdio and cdio optional.
1364        * morituri/rip/drive.py:
1365        * morituri/rip/offset.py:
1366          Use drive.getAllDevicePaths()
1367
13682009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1369
1370        * morituri/result/result.py:
1371          Add max confidence from database.
1372        * morituri/common/program.py:
1373        * morituri/rip/cd.py:
1374          Move AccurateRip checking to program.py
1375          Re-rip if verification failed when continuing a rip.
1376
13772009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1378
1379        * morituri/image/cue.py:
1380          Better debug.
1381
13822009-06-09  Thomas Vander Stichele  <thomas at apestaart dot org>
1383
1384        * morituri/common/program.py:
1385        * morituri/rip/cd.py:
1386          Serialize the rip result after every rip, so we can pick up
1387          where we left off with all result data.
1388
13892009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1390
1391        * morituri/common/program.py:
1392          Move getPath to Program.
1393          Remove arguments to ripTrack that can be gotten from
1394          trackResult.
1395        * morituri/rip/cd.py:
1396          Continue without musicbrainz metadata.
1397          Unify htoa and normal track ripping.
1398        * morituri/result/result.py:
1399          Add getTrackResult so it's easier to look up track results
1400          when there's a HTOA.
1401
14022009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1403
1404        * morituri/common/program.py:
1405        * morituri/rip/cd.py:
1406          Move HTOA checking to program.
1407
14082009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1409
1410        * morituri/result/logger.py:
1411          Fix for toctable->table
1412        * morituri/common/program.py:
1413        * morituri/rip/cd.py:
1414          Move lots of functionality to program module.
1415
14162009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1417
1418        * morituri/result/result.py:
1419          Change toctable to table since it's a full index table.
1420        * morituri/common/Makefile.am:
1421        * morituri/common/program.py (added):
1422          Add module and class for program state.
1423        * morituri/rip/cd.py:
1424          Use the program state to clean up the do() function.
1425
14262009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1427
1428        * morituri/rip/cd.py:
1429          Massage into 80 characters per line.
1430          Make pycdio/cdio optional.
1431
14322009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1433
1434        * morituri/rip/drive.py:
1435          Make pycdio and cdio optional.
1436
14372009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1438
1439        * morituri/image/table.py:
1440          Add getPregap() method.
1441        * morituri/rip/cd.py:
1442          Use artist.name, not getUniqueName, to avoid monstruous names for
1443          Muse.
1444          Pass mbdiscid to getPath, so Unknown Disc can be saved with it.
1445          Don't set the date if the release doesn't have one.
1446          Set pregap on trackResult using new Track.getPregap()
1447          Write all log/cue/m3u files as utf-8.
1448
14492009-06-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1450
1451        * morituri/test/cdparanoia.progress:
1452          Add a shorter test file, 23 seconds.
1453        * morituri/test/test_program_cdparanoia.py:
1454          Update the test to adapt.  Check for track quality.
1455        * morituri/program/cdparanoia.py:
1456          Add a measure of track quality based on the number of reads.
1457          Use the [wrote] output for progress updates, a bit more
1458          jittery in its output.
1459        * morituri/rip/cd.py:
1460          Set track quality on RipResult.
1461
14622009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1463
1464        * morituri/rip/cd.py:
1465          Use RipResult to store result information.
1466        * morituri/result/logger.py (added):
1467          Add a Logger to handle the RipResult, much like
1468          EAC's log file.
1469
14702009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1471
1472        * morituri/rip/cd.py:
1473          Comment out number of track setting on tag for now.
1474          MusicBrainz can give us dates in YYYY, YYYY-MM, and YYYY-MM-DD
1475          format, so convert to YYYY-MM-DD always.
1476          Unmount the data part of the CD we want to rip if it is mounted.
1477          Adapt to peak level change.
1478          Don't try to write data tracks to the m3u file.
1479          Resolve the device path to the actual device path.
1480
14812009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1482
1483        * morituri/result/result.py:
1484          Add a Logger base class.
1485
14862009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1487
1488        * configure.ac:
1489        * morituri/Makefile.am:
1490        * morituri/result (added):
1491        * morituri/result/result.py (added):
1492        * morituri/result/__init__.py (added):
1493        * morituri/result/Makefile.am (added):
1494          Add classes to store track and rip results in.
1495
14962009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1497
1498        * morituri/common/common.py:
1499          Add an argument for the delimiter in formatting.
1500        * morituri/common/encode.py:
1501          Most programs use peak volume, not power, so do this too.
1502
15032009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1504
1505        * morituri/test/common.py:
1506          Add a method for diffing multiline strings.
1507
15082009-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
1509
1510        * morituri/common/encode.py:
1511          Add a test() method to the profile so we can warn about bad
1512          flacenc versions.
1513          Encode track number and count, and release date, if possible.
1514        * morituri/rip/cd.py:
1515          Fix another off-by-one error in the tag encoding.
1516
15172009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1518
1519        * morituri/program/cdparanoia.py:
1520        * morituri/rip/cd.py:
1521          Handle another off-by-one error in the m3u handling.
1522          Add a getTagList function.
1523          Use it to encode tags.
1524
15252009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1526
1527        * morituri/common/encode.py:
1528        * morituri/program/cdparanoia.py:
1529        * morituri/rip/cd.py:
1530          Clean up the temporary unencoded file.
1531          Pass profile as objects to tasks, so that temp files have the right
1532          extension.
1533
15342009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1535
1536        * morituri/common/encode.py:
1537        * morituri/program/cdparanoia.py:
1538          Add encoding profiles, kept simple for now as a class and
1539          subclasses.  Use them to encode.  Calculate peak level while
1540          encoding, compared to EAC and replaygain's value.
1541        * morituri/rip/cd.py:
1542          Use the encoding profiles, ripping with the right extension.
1543          Add a --profile parameter for it.
1544
15452009-05-31  Thomas Vander Stichele  <thomas at apestaart dot org>
1546
1547        * morituri/rip/cd.py:
1548          Clean up track numbering confusion.
1549
15502009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1551
1552        * morituri/common/encode.py (added):
1553        * examples/encode.py (added):
1554          Add an Encode Task, hardcoded to flac for now.
1555          Add an example, that also sets tags.
1556
15572009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1558
1559        * morituri/common/task.py:
1560          Add debug.
1561        * morituri/rip/drive.py:
1562          Show all drives, not just the ones that happen to have an Audio CD
1563          inserted.
1564
15652009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1566
1567        * morituri/rip/cd.py:
1568          Add asserts for comparing id's between the simple toc and
1569          the full table.
1570          Create the output directory before ripping the htoa.
1571          Ignore data tracks for now.
1572          Don't fail if we have no AccurateRip responses.
1573        * morituri/image/table.py:
1574          Add a session ivar to Track.
1575          Factor in session leadin when calculating track length
1576          of last track in a session.
1577          add getMusicBrainzSubmitURL()
1578          add _getSessionGap() because the session gap size is different
1579          for session 2 and all following.
1580          Use it in merge() to get offsets right.
1581          Fix getAccurateRipURL by only using the audio tracks for the
1582          'length in tracks' number
1583          Temporarily disable writing out data tracks to a .cue file,
1584          since it's not implemented yet.
1585          Add canCue to see if we can write a .cue file from the given table,
1586          and debug why not if not.
1587        * morituri/program/cdrdao.py:
1588          Rework to rip each session separately instead of using session 9.
1589          This fixes session 9 read-toc missing the pregap.
1590          Add a simple LineParser for handling output from disk-info.
1591          Count tracks relatively for the session, because the output for
1592          session 2 for track numbers picks up where session 1 left off.
1593          Don't set leadout from TOC printing since for the same reason
1594          session 2's leadout is absolute, not relative to start of session.
1595          Add a DiscInfoTask.
1596          Convert Table and Toc reading tasks to multitasks, first getting the
1597          number of sessions, then reading table/toc for each session.
1598
1599        * morituri/test/test_image_table.py:
1600          Fix up MusicBrainz disc id for my Ladyhawke disc.
1601          Add AccurateRip URL verification, compared against EAC's.
1602        * morituri/test/test_image_toc.py:
1603          Use two separate session read-toc output files to verify
1604          the case of Das Capital.
1605          Verify musicbrainz URL.
1606
16072009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1608
1609        * morituri/common/task.py:
1610          Add documentation.
1611          Use a _task counter instead of duplicating tasks to
1612          __tasks; this allows us to add tasks after starting.
1613          Catch Exceptions during next() so that we don't get
1614          stuck in a main loop that doesn't exit.
1615          Raise it later when we're done.
1616
16172009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1618
1619        * morituri/common/common.py:
1620          Since the version was inherited from the current code
1621          in unpickled objects, separate into classVersion and
1622          an instanceVersion set from __init__.
1623
16242009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1625
1626        * morituri/image/toc.py:
1627          Add a logName for debugging.
1628
16292009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1630
1631        * morituri/program/cdparanoia.py:
1632        * morituri/image/image.py:
1633          Correctly chain up to parent __init__ for MultiTasks
1634
16352009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1636
1637        * morituri/test/capital.1.toc (added):
1638        * morituri/test/capital.2.toc (added):
1639          Add two .toc's for two sessions of a 2 session disc
1640        * morituri/image/table.py:
1641          Add a merge method to merge in a second session.
1642        * morituri/test/Makefile.am:
1643        * morituri/test/test_image_toc.py:
1644          Add a test for merging the Das Capital sessions, gets
1645          the CDDB disc id right.
1646
16472009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1648
1649        * morituri/common/common.py:
1650          Add a persisted cache so that we can store pickles on discs.
1651          Automatically delete them if the class version is newer than
1652          the object's.
1653        * morituri/rip/cd.py:
1654          Use it.
1655
16562009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1657
1658        * morituri/image/table.py:
1659          Add a version ivar to help with versioning pickled objects.
1660
16612009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1662
1663        * morituri/program/cdparanoia.py:
1664          Add copy and test CRC's to object.
1665
16662009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1667
1668        * morituri/common/Makefile.am:
1669        * morituri/common/drive.py (added):
1670          Add drive module.
1671
16722009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1673
1674        * morituri/program/cdparanoia.py:
1675        * morituri/program/cdrdao.py:
1676        * morituri/rip/cd.py:
1677        * morituri/rip/offset.py:
1678          Add device argument to ripping/scanning tasks.
1679
16802009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1681
1682        * morituri/common/accurip.py:
1683        * morituri/image/image.py:
1684        * morituri/test/Makefile.am:
1685        * morituri/test/test_image_image.py:
1686        * morituri/test/test_common_accurip.py (added):
1687          Move accuraterip stuff to the accurip module.
1688          Move/create new test file.
1689
16902009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1691
1692        * morituri/rip/Makefile.am:
1693        * morituri/rip/main.py:
1694        * morituri/rip/drive.py (added):
1695          Add 'rip drive list' command to list available drives.
1696        * morituri/common/accurip.py:
1697          Add force.
1698        * morituri/rip/cd.py:
1699          Add --output-directory argument.
1700
17012009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1702
1703        * morituri/common/Makefile.am:
1704        * morituri/rip/cd.py:
1705        * morituri/common/accurip.py (added):
1706          Add a module for handling a cache of AccurateRip results.
1707          Use it.
1708
17092009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1710
1711        * morituri/rip/Makefile.am:
1712        * morituri/rip/main.py:
1713        * morituri/rip/cd.py (added):
1714          Add second command, 'rip cd rip' before factoring out functionality.
1715
17162009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1717
1718        * morituri/rip/Makefile.am:
1719        * morituri/rip/main.py:
1720        * morituri/rip/offset.py (added):
1721          Add first command, 'rip offset find'
1722
17232009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1724
1725        * Makefile.am:
1726        * morituri/test/Makefile.am:
1727          Make distcheck work.
1728
17292009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1730
1731        * morituri/common/checksum.py:
1732          More pychecker fixes.
1733
17342009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1735
1736        * morituri/common/common.py:
1737        * morituri/common/renamer.py:
1738          Pychecker fixes.
1739
17402009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1741
1742        * RELEASE:
1743        * misc/pycheckerrc:
1744        * misc/show-coverage.py:
1745        * morituri/image/Makefile.am:
1746        * morituri/program/Makefile.am:
1747        * RELEASE (added):
1748        * morituri/image/Makefile.am (added):
1749        * morituri/program/Makefile.am (added):
1750        * misc/show-coverage.py (added):
1751        * misc/pycheckerrc (added):
1752          more additions
1753
17542009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1755
1756        * AUTHORS:
1757        * Makefile.am:
1758        * NEWS:
1759        * TODO:
1760        * autogen.sh:
1761        * configure.ac:
1762        * examples/ARcalibrate.py:
1763        * misc/Makefile.am:
1764        * misc/morituri-uninstalled:
1765        * morituri.spec.in:
1766        * morituri/Makefile.am:
1767        * morituri/common/Makefile.am:
1768        * morituri/common/logcommand.py:
1769        * morituri/extern/Makefile.am:
1770        * morituri/rip/Makefile.am:
1771        * morituri/rip/__init__.py:
1772        * morituri/rip/main.py:
1773        * morituri/test/Makefile:
1774        * morituri/test/Makefile.am:
1775        * configure.ac (added):
1776        * AUTHORS (added):
1777        * morituri.spec.in (added):
1778        * Makefile.am (added):
1779        * morituri/test/Makefile.am (added):
1780        * morituri/extern/Makefile.am (added):
1781        * morituri/common/logcommand.py (added):
1782        * morituri/common/Makefile.am (added):
1783        * morituri/Makefile.am (added):
1784        * morituri/rip (added):
1785        * morituri/rip/__init__.py (added):
1786        * morituri/rip/Makefile.am (added):
1787        * morituri/rip/main.py (added):
1788        * misc/Makefile.am (added):
1789        * misc/morituri-uninstalled (added):
1790        * autogen.sh (added):
1791        * NEWS (added):
1792          Start autotooling.  Add a command-line application.
1793
17942009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1795
1796        * morituri/program/cdrdao.py:
1797          read all sessions by reading session 9.
1798        * morituri/image/toc.py:
1799          Parse ZERO statements properly.
1800          Also set absolute offsets when we know them from the .toc file.
1801          Properly set audio flag on tracks.
1802          FIXME: probably doesn't work if the .toc does not have lengths.
1803        * morituri/image/table.py:
1804          Add some debug to cddb disc id calculation.
1805          Fix absolutize function, it was going one index too far.
1806          raise ValueError when overriding .absolute with a wrong value.
1807        * examples/readdisc.py:
1808          Show CDDB disc id at the start.
1809          Assert when toc and table have different disc id's (to be fixed)
1810        * morituri/test/test_image_cue.py:
1811          Update for having the table already with absolute values.
1812        * morituri/test/test_image_toc.py:
1813          Add Ladyhawke CDDB test, it has a data track.
1814
18152009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1816
1817        * examples/readdisc.py:
1818          Move constants to common
1819
18202009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1821
1822        * examples/readdisc.py:
1823        * examples/readhtoa.py:
1824        * examples/readtoc.py:
1825          Rename IndexTable to Table.
1826
18272009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1828
1829        * morituri/image/cue.py:
1830        * morituri/image/image.py:
1831        * morituri/image/table.py:
1832        * morituri/image/toc.py:
1833        * morituri/program/cdparanoia.py:
1834        * morituri/program/cdrdao.py:
1835        * morituri/test/test_image_cue.py:
1836        * morituri/test/test_image_table.py:
1837          Rename IndexTable to Table.
1838
18392009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1840
1841        * morituri/image/cue.py:
1842        * morituri/image/image.py:
1843        * morituri/image/table.py:
1844        * morituri/image/toc.py:
1845        * morituri/program/cdrdao.py:
1846        * morituri/test/test_image_cue.py:
1847        * morituri/test/test_image_table.py:
1848          Rename ITTrack to Track.
1849
18502009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1851
1852        * morituri/common/common.py:
1853        * morituri/image/cue.py:
1854          Use FRAMES_PER_SECOND where appropriate.
1855
18562009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1857
1858        * morituri/common/checksum.py:
1859        * morituri/common/common.py:
1860        * morituri/image/image.py:
1861        * morituri/image/table.py:
1862        * morituri/program/cdparanoia.py:
1863          Move constants to common
1864
18652009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1866
1867        * examples/readdisc.py:
1868          Get our metadata only from the toc.
1869
18702009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1871
1872        * examples/readdisc.py:
1873          Also work for discs without htoa.
1874
18752009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1876
1877        * examples/readdisc.py:
1878          Write .m3u file.
1879
18802009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1881
1882        * examples/readdisc.py:
1883          Rip HTOA as well.  Add disc-template parameter.
1884
18852009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1886
1887        * morituri/image/table.py:
1888          Fix a subtle bug in our CDDB disc id calculation.
1889          The length of the audio should be calculated as the delta
1890          between leadout and start already converted (and truncated)
1891          to seconds.
1892        * morituri/test/bloc.cue:
1893        * morituri/test/test_image_toc.py:
1894          Fix up tests for this.
1895
18962009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1897
1898        * morituri/program/cdparanoia.py:
1899          Fix up track counting so HTOA can be ripped again.
1900        * examples/readhtoa.py:
1901          Fix up example so it works again, tested on Silent Alarm.
1902
19032009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1904
1905        * morituri/test/test_image_toc.py:
1906        * morituri/test/bloc.cue (added):
1907          Add an expected .cue file for the bloc party toc.
1908
19092009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1910
1911        * morituri/image/toc.py:
1912          Calculate the leadout from the sum of the track lengths.
1913        * morituri/test/breeders.cue:
1914        * morituri/test/cure.cue:
1915          Adapt expected results for DISCID.
1916        * morituri/image/table.py:
1917          Add an assert for hasTOC() when doing .cue()
1918        * morituri/test/test_image_toc.py:
1919        * morituri/test/test_image_cue.py:
1920          absolutize before cue()
1921
19222009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1923
1924        * morituri/image/table.py:
1925          Only add DISCID if our table is a TOC (which it isn't
1926          with our current .toc file parsing)
1927        * morituri/test/test_image_cue.py:
1928        * morituri/test/test_image_toc.py:
1929          Fix up tests; testsuite passes again.
1930
19312009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1932
1933        * morituri/image/toc.py:
1934          Add some debugging.
1935
19362009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1937
1938        * morituri/image/table.py:
1939          Update .cue writing:
1940          - customise program name
1941          - add DISCID
1942          - use counter for FILE lines
1943          - put FILE line before TRACK if track does not have INDEX 00
1944          Take counter into account for setFile
1945          Fix off-by-one in setFile
1946        * examples/readdisc.py:
1947          Add --track-template.
1948          Pass counter to setFile.
1949
19502009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1951
1952        * morituri/image/table.py:
1953          Add CDText writing to .cue() method.
1954        * morituri/image/toc.py:
1955          Add CDText parsing.
1956        * morituri/test/test_image_toc.py:
1957        * morituri/test/breeders.cue (added):
1958          Add a test for cue'ing the breeders' toc.
1959
19602009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1961
1962        * morituri/image/table.py:
1963        * morituri/image/toc.py:
1964          Add parsing of ISRC codes.
1965          Add first part of CDTEXT stuff.
1966        * morituri/test/test_image_toc.py:
1967          Add test for converting .toc to .cue
1968        * morituri/test/cure.cue
1969          Add reference for converted cure.toc
1970
19712009-05-10  Thomas Vander Stichele  <thomas at apestaart dot org>
1972
1973        * examples/readhtoa.py:
1974          Fix example.
1975
19762009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1977
1978        * morituri/image/table.py:
1979        * morituri/test/test_image_table.py:
1980          Correctly calculate MusicBrainz disc id for enhanced cd's.
1981
19822009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1983
1984        * morituri/common/task.py:
1985          Log on runners too.
1986        * morituri/program/cdrdao.py:
1987          Abort if output has ERROR by killing and setting an exception.
1988
19892009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1990
1991        * examples/readdisc.py:
1992          filter out slashes when deciding on file names.
1993
19942009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1995
1996        * morituri/common/task.py:
1997        * morituri/image/image.py:
1998          Remove prints.  Describe tasks.
1999
20002009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
2001
2002        * morituri/common/task.py:
2003          Add an exception ivar for tasks to set an exception on while
2004          running.  Make SyncRunner raise it during done()
2005        * morituri/program/cdparanoia.py:
2006          Set an exception if the ripped file doesn't match the expected size
2007          (for example when disc is full)
2008
20092009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
2010
2011        * morituri/common/common.py:
2012          Set the object when we don't persist.
2013        * examples/readdisc.py:
2014          Small fixes.
2015
20162009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
2017
2018        * examples/readdisc.py:
2019          Fix up cue file reading.
2020
20212009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
2022
2023        * examples/readdisc.py:
2024          Add musicbrainz code for disc naming.
2025
20262009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
2027
2028        * morituri/image/table.py:
2029        * morituri/image/toc.py:
2030          Delete old code.
2031
20322009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
2033
2034        * morituri/image/toc.py:
2035        * morituri/test/test_image_toc.py:
2036        * morituri/test/test_program_cdrdao.py:
2037          After careful vetting, fix up the expected values after toc parsing.
2038          Fix (untested) INDEX handling.  Fix handling of START.
2039
20402009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
2041
2042        * morituri/image/table.py:
2043        * morituri/test/test_image_table.py:
2044          Implement MusicBrainz disc id.  Works for audio-only discs,
2045          have to figure out why it fails for an Enhanced CD like the
2046          Ladyhawke one.
2047
20482009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
2049
2050        * morituri/image/table.py:
2051          Add logging.
2052          Add methods to clear a table of files, and to absolutize indexes
2053          as long as the source is the same file, and to set a File on a
2054          given index, adjusting all following indexes that match the
2055          duration, and check if the IndexTable has all information for a TOC.
2056        * morituri/image/toc.py:
2057          Add logging.
2058          Use a counter for the source.
2059          Fix up index offset calculation.
2060        * morituri/program/cdrdao.py:
2061          Use a real IndexTable as the result, instead of a TocFile.
2062        * morituri/image/cue.py:
2063          Use a real IndexTable to store tracks.
2064        * morituri/test/test_image_toc.py:
2065          The toc file now has a table which has the tracks.
2066          Fix the tests to adjust for wrong index calculations.
2067        * morituri/test/test_image_cue.py:
2068        * morituri/test/test_image_image.py:
2069        * morituri/image/image.py:
2070          The cue file now has a table which has the tracks.
2071        * morituri/test/test_image_table.py:
2072          Add assertions to make sure when the table can serve as a TOC.
2073        * examples/readdisc.py:
2074          Adjust for changes.  Fix up to include AccurateRip results.
2075          First time we can do a complete normal rip including verifying
2076          against AccurateRip results!
2077
20782009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
2079
2080        * examples/readdisc.py:
2081        * morituri/image/table.py:
2082        * morituri/test/test_image_table.py:
2083          Fix up and deprecate stuff.
2084
20852009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2086
2087        * examples/movecue.py:
2088        * examples/readcue.py:
2089        * morituri/image/cue.py:
2090        * morituri/image/image.py:
2091        * morituri/image/toc.py:
2092        * morituri/program/cdrdao.py:
2093        * morituri/test/test_image_cue.py:
2094        * morituri/test/test_image_toc.py:
2095          Cue -> CueFile
2096          TOC -> TocFile
2097
20982009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2099
2100        * examples/readdisc.py (added):
2101          Add an example to read a whole disc.  Doesn't work yet.
2102
21032009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2104
2105        * examples/readhtoa.py:
2106          Fix up readhtoa example.  Add offset option.
2107
21082009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2109
2110        * examples/ARcalibrate.py:
2111        * examples/readhtoa.py:
2112        * examples/readtoc.py:
2113        * morituri/program/cdrdao.py:
2114          Rename ReadTOCTask to ReadIndexTableTask.
2115          Rename ReadTableTask to ReadTOCTask.
2116
21172009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2118
2119        * morituri/program/cdrdao.py:
2120          Convert ReadTableTask to a CDRDAOTask subclass.
2121        * examples/ARcalibrate.py:
2122        * morituri/program/cdparanoia.py:
2123          Adapt.
2124
21252009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2126
2127        * morituri/program/cdrdao.py:
2128          Fix up index scanning's progress report.
2129          Add some debugging.
2130
21312009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2132
2133        * morituri/program/cdrdao.py:
2134        * morituri/test/test_program_cdrdao.py:
2135          Fix up tests.  Use an IndexTable.
2136
21372009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2138
2139        * morituri/program/cdrdao.py:
2140          Massage out a base class for running cdrdao.
2141
21422009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2143
2144        * morituri/program/cdrdao.py:
2145        * morituri/test/test_program_cdrdao.py (added):
2146          Split out the parser from the task.  Test the parser.
2147
21482009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2149
2150        * morituri/image/cue.py:
2151        * morituri/image/image.py:
2152        * morituri/image/table.py:
2153        * morituri/program/cdparanoia.py:
2154        * morituri/test/test_image_cue.py:
2155          Move to using a shared IndexTable for everything.
2156          Sadly mixed with a MultiTask rename.
2157
21582009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2159
2160        * morituri/common/checksum.py:
2161          Update debugging.  Add repr.
2162
21632009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
2164
2165        * examples/ARcue.py:
2166          Handle case where we have no matching response.
2167
21682009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2169
2170        * morituri/common/task.py:
2171          Distinguish more clearly between MultiSeparateTask and
2172          MultiCombinedTask.
2173
21742009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2175
2176        * morituri/image/cue.py:
2177        * morituri/test/test_image_cue.py:
2178          Add dumping of .cue files.
2179
21802009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2181
2182        * morituri/program/cdparanoia.py:
2183          Use a temporary file to rip to.
2184
21852009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2186
2187        * examples/readtrack.py:
2188          Allow specifying the track to save.
2189
21902009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2191
2192        * morituri/common/task.py:
2193          Make SyncRunner clear previous description/progress task by
2194          tracking longest output given up to now.
2195
21962009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2197
2198        * morituri/program/cdparanoia.py:
2199          Add a task to read and verify a track.
2200        * examples/readtrack.py:
2201          Use it to clean up code.
2202        * morituri/common/task.py:
2203          describe a MultiTask better.
2204
2205
22062009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2207
2208        * morituri/common/common.py:
2209          Create a Persister class to wrap a possible pickle path.
2210        * examples/trm.py:
2211          Use it.
2212
22132009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2214
2215        * morituri/program/cdparanoia.py:
2216          Add table to __init__, so we can correctly calculate cdparanoia's
2217          strange ripping regions.
2218        * examples/ARcalibrate.py:
2219          When we found a positive match on a first track, match all the other
2220          tracks too for confirmation.
2221
22222009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2223
2224        * morituri/common/taskgtk.py:
2225          Bug fix.
2226
22272009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2228
2229        * morituri/common/task.py:
2230        * morituri/common/taskgtk.py:
2231          Split off GtkProgressRunner in separate module to not import gtk
2232          everywhere.
2233        * examples/ARcalibrate.py:
2234        * examples/ARcue.py:
2235        * examples/gtkchecksum.py:
2236        * examples/trm.py:
2237          Adapt.
2238
22392009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2240
2241        * examples/ARcalibrate.py (added):
2242          Add an example that calculates the read offset of your drive
2243          using AccurateRip.
2244
22452009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
2246
2247        * morituri/program/cdrdao.py:
2248          Add a task to read the Table.
2249
22502009-05-02  Thomas Vander Stichele  <thomas at apestaart dot org>
2251
2252        * morituri/common/task.py:
2253        * morituri/image/image.py:
2254          Add some debugging.
2255
22562009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2257
2258        * examples/readhtoa.py (added):
2259          Add an example that detects and rips the Hidden Track One Audio.
2260
22612009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2262
2263        * examples/readtoc.py:
2264        * morituri/program/cdrdao.py (added):
2265          Move the ReadTocTask to the new cdrdao module.
2266
22672009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2268
2269        * examples/readtrack.py:
2270        * morituri/program/cdparanoia.py:
2271          Move ReadTrackTask to cdparanoia module.
2272
22732009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2274
2275        * examples/readtrack.py (added):
2276          Add an example that reads a track using cdparanoia.
2277
22782009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2279
2280        * morituri/test/cdparanoia.progress (added):
2281        * morituri/test/test_program_cdparanoia.py (added):
2282        * morituri/program/__init__.py (added):
2283        * morituri/program/cdparanoia.py (added):
2284          Add a module to wrap cdparanoia.  Add a test for parsing
2285          the progress report output.
2286
22872009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2288
2289        * morituri/common/checksum.py:
2290          Debug fixes.
2291
22922009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2293
2294        * morituri/common/common.py:
2295          Create some common functions to parse MSF and back.
2296        * morituri/image/toc.py:
2297          Use it here.
2298
22992009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2300
2301        * examples/trm.py:
2302          Allow loading and saving fingerprints from a pickle.
2303
23042009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2305
2306        * morituri/image/toc.py:
2307        * morituri/test/test_image_toc.py:
2308        * morituri/test/bloc.toc (added):
2309          Fix up .toc parsing to correct index 0 behaviour.
2310          Add Bloc Party's Silent Alarm .toc file to test HTOA.
2311
23122009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2313
2314        * examples/readtoc.py:
2315          Update to work on my desktop.
2316
23172009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2318
2319        * morituri/common/task.py:
2320          Make task subclass log.Log
2321
23222009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
2323
2324        * morituri/common/log.py:
2325          Add external log module and use it.
2326
23272009-04-29  Thomas Vander Stichele  <thomas at apestaart dot org>
2328
2329        * morituri/test/cure.toc (added):
2330          Add an example .toc file for the test.
2331
23322009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2333
2334        * examples/readtoc.py:
2335          Extract and print TOC.
2336
23372009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2338
2339        * morituri/test/test_image_toc.py (added):
2340        * morituri/image/toc.py (added):
2341          Add first stab at .toc parsing.
2342
23432009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2344
2345        * examples/readtoc.py:
2346          get errors from output too.
2347
23482009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2349
2350        * morituri/image/image.py:
2351        * morituri/image/table.py:
2352        * morituri/test/test_image_image.py:
2353        * morituri/test/test_image_table.py:
2354          Rename toc.TOC to table.Table
2355
23562009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2357
2358        * morituri/test/test_image_table.py (added):
2359        * morituri/image/table.py (added):
2360        * morituri/test/test_image_toc.py (deleted):
2361        * morituri/image/toc.py (deleted):
2362          Move files around in preparation for the .toc file parsing.
2363
23642009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
2365
2366        * examples/movecue.py (added):
2367          Add a script that moves a .cue file in its corresponding directory.
2368
23692009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
2370
2371        * morituri/test/kanye.cue (added):
2372          Add a cue test with mixed mode.
2373        * morituri/image/cue.py:
2374        * morituri/test/test_image_cue.py:
2375          Handle it properly.
2376
23772009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2378
2379        * morituri/image/cue.py:
2380          getRealPath should be here, it doesn't need anything outside
2381          the .cue file
2382        * morituri/image/image.py:
2383          Proxy it here.
2384
23852009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2386
2387        * morituri/common/checksum.py:
2388          Add some debugging.
2389        * morituri/test/test_image_image.py:
2390          Run less verbose.
2391
23922009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2393
2394        * morituri/common/task.py:
2395          Allow a SyncRunner to be constructed with verbose too.
2396          Separate a 'running' verbose mode from that.
2397          Fixes unwanted test output.
2398        * morituri/test/test_image_image.py:
2399          Run without verbosity.
2400
24012009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2402
2403        * morituri/test/test_image_image.py:
2404          Fix name.
2405
24062009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2407
2408        * morituri/test/test_common_renamer.py (added):
2409        * morituri/common/renamer.py (added):
2410          Add a way of doing transactional file renames, as well as their
2411          metafile updates.
2412
24132009-04-21  Thomas Vander Stichele  <thomas at apestaart dot org>
2414
2415        * morituri/common/task.py:
2416          Add a 'described' method so listeners can get proper notification
2417          of description changes, and update their description in between
2418          progress changes.
2419          Add a MultiCombinedTask that reports on progress over all tasks
2420          combined.
2421        * examples/trm.py:
2422          Add a playlist option to the example.  Still needs to store results
2423          to pickles, preferably after each completed task.
2424        * morituri/common/checksum.py:
2425          Add audioconvert to make sure we can trm ogg files.
2426
24272009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2428
2429        * morituri/common/task.py:
2430        * morituri/image/image.py:
2431          Move MultiTask to the task module.
2432
24332009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2434
2435        * morituri/common/checksum.py:
2436          Add a task to calculate a trm fingerprint.
2437        * examples/trm.py (added):
2438          Add an example.
2439          Strangely enough it starts burstily, doing 10% directly, halting,
2440          then progressing quickly,
2441
24422009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2443
2444        * examples/ARcue.py:
2445          Fix a bug in the gtk example.
2446
24472009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2448
2449        * examples/readtoc.py:
2450          Read the toc using cdrdao.  Now sets progress based on which
2451          frame it is on.
2452
24532009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2454
2455        * morituri/common/task.py:
2456          Add a __main__ example using DummyTask.
2457
24582009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
2459
2460        * morituri/common/task.py:
2461          Make sure we also show progress when it's 0%, at the start.
2462
24632009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
2464
2465        * morituri/image/cue.py:
2466          Use names for matches in regexps.
2467
24682009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
2469
2470        * examples/readtoc.py (added):
2471          Add an example to read the TOC, not finished yet.
2472
24732009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
2474
2475        * morituri/extern (added):
2476        * morituri/extern/__init__.py (added):
2477        * morituri/extern/asyncsub.py (added):
2478          Add extern module; add asynchronous subprocess Popen from
2479          http://code.activestate.com/recipes/440554/
2480
24812009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2482
2483        * examples/gtkchecksum.py:
2484        * morituri/common/checksum.py:
2485          Final crc->checksum fixes.
2486
24872009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2488
2489        * examples/ARcue.py:
2490        * morituri/common/checksum.py:
2491        * morituri/image/image.py:
2492        * morituri/image/toc.py:
2493        * examples/gtkchecksum.py (added):
2494        * examples/gtkcrc.py (deleted):
2495          More crc->checksum changes.
2496
24972009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2498
2499        * examples/ARcue.py:
2500        * morituri/common/checksum.py:
2501        * morituri/image/image.py:
2502        * morituri/test/test_image_image.py:
2503          Change crc to checksum everywhere.
2504
25052009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2506
2507        * morituri/image/image.py:
2508        * morituri/image/toc.py:
2509        * morituri/common/checksum.py (added):
2510        * morituri/common/crc.py (deleted):
2511          Rename crc to checksum, because AccurateRip checksums are not CRC's.
2512
25132009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2514
2515        * examples/ARcue.py:
2516        * morituri/image/image.py:
2517        * morituri/test/test_image_image.py:
2518          Make everything use TOC for the id's.
2519
25202009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2521
2522        * morituri/image/image.py:
2523          Refactor to use TOC class.
2524        * morituri/image/toc.py:
2525          Fully document.
2526
25272009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2528
2529        * morituri/test/test_image_toc.py (added):
2530        * morituri/image/toc.py (added):
2531          Add an abstraction for a TOC.
2532          Take data tracks into account correctly for CDDB and AccurateRip
2533          disc ID's.
2534
25352009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2536
2537        * morituri/image/image.py:
2538        * morituri/test/test_image_image.py:
2539          AccurateRip binary files actually contain multiple responses, so
2540          parse all of them.
2541        * examples/ARcue.py:
2542          Handle case of not having a response, and having multiple responses.
2543
25442009-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
2545
2546        * morituri/common/crc.py:
2547          Actually return the CRC when checking frame 5.
2548        * morituri/test/test_image_image.py:
2549          Update test for this fix.
2550
25512009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2552
2553        * morituri/image/image.py:
2554          Also look for audio file basename relative to cue file.
2555
25562009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2557
2558        * examples/ARcue.py:
2559          Make output a bit nicer, mentioning whether tracks were
2560          accurately ripped.
2561
25622009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2563
2564        * morituri/image/image.py:
2565          Add an object to parse the response of AccurateRip.
2566        * morituri/test/test_image_image.py:
2567        * morituri/test/dBAR-011-0010e284-009228a3-9809ff0b.bin (added):
2568          Add a test for it, based on my Kings Of Leon CD.
2569
25702009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2571
2572        * morituri/image/image.py:
2573          Add the 150 frames for the leadin only to the CDDB calculation.
2574          Add methods to calculate AccurateRip id's and URL.
2575        * morituri/test/test_image_image.py:
2576          Add tests for it.
2577        * examples/ARcue.py:
2578          Show AccurateRip URL.
2579
25802009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2581
2582        * examples/ARcue.py:
2583        * morituri/common/crc.py:
2584        * morituri/image/image.py:
2585        * morituri/test/test_image_image.py:
2586          Calculate CDDB disc id.
2587          Tested on my Kings Of Leon CD.
2588
25892009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2590
2591        * examples/ARcue.py:
2592        * morituri/image/image.py:
2593        * morituri/test/test_image_image.py:
2594          Add a task to verify a disk image, which also calculates
2595          track lengths for tracks the cue file doesn't know the length of.
2596
25972009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2598
2599        * examples/ARcue.py:
2600          Add option to run either command-line or gtk.
2601
26022009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2603
2604        * morituri/image/image.py:
2605          Create a MultiTask base class, and make AudioRipCRCTask
2606          use it.
2607
26082009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2609
2610        * morituri/image/image.py:
2611        * morituri/test/test_image_image.py:
2612          Add a task for calculating frame length of an audio file.
2613          Add a test for it.
2614
26152009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2616
2617        * morituri/common/task.py:
2618          Schedule the start from the main loop, otherwise the
2619          task might complete before we're in the main loop,
2620          and then the loop.quit() doesn't work.
2621
26222009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2623
2624        * examples/ARcue.py:
2625        * examples/gtkcrc.py:
2626          Rework both examples to look more similar.
2627
26282009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2629
2630        * examples/gtkcrc.py:
2631        * morituri/common/task.py:
2632          Move the gtk-based progress bar to task.
2633
26342009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2635
2636        * examples/gtkcrc.py:
2637        * morituri/common/crc.py:
2638        * morituri/common/task.py:
2639        * morituri/image/image.py:
2640          Add a 'schedule' call to the TaskRunner class, so that we can
2641          abstract things like gobject.timeout_add and reactor.callLater
2642          Pass the runner to the task in Task.start() so a task can call
2643          schedule.
2644
26452009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2646
2647        * morituri/common/task.py:
2648          Update the docs.
2649
26502009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2651
2652        * morituri/test/test_image_image.py (added):
2653          Add tests for AudioRip CRC'ing images.
2654
26552009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2656
2657        * morituri/test/track-separate.cue (added):
2658        * morituri/test/track.flac (added):
2659        * morituri/test/Makefile (added):
2660        * morituri/test/track-single.cue (added):
2661          Add a simple 10 frame flac file, and two .cue files
2662          using it.
2663
26642009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2665
2666        * morituri/image/image.py:
2667          If paths are relative, make them relative to cue file.
2668
26692009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2670
2671        * morituri/common/task.py:
2672          clear with whitespace.
2673
26742009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2675
2676        * examples/ARcue.py:
2677        * morituri/common/task.py:
2678        * morituri/image/image.py (added):
2679          Add an object for handling an Image based on a .cue file.
2680          Create a Task for CRC'ing the whole Image.
2681          Make the example use this new task instead.
2682
26832009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2684
2685        * examples/gtkcrc.py:
2686        * morituri/common/task.py:
2687          Add task object to listener interface methods.
2688
26892009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2690
2691        * morituri/common/task.py:
2692          Move methods around.
2693
26942009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2695
2696        * examples/ARcue.py:
2697        * examples/gtkcrc.py:
2698        * morituri/common/crc.py:
2699        * morituri/common/task.py:
2700          Split out generic task/runner from CRC tasks.
2701
27022009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2703
2704        * morituri/common/crc.py (added):
2705          Copy from task.py before splitting.
2706
27072009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2708
2709        * examples/gtkcrc.py:
2710        * morituri/common/task.py:
2711          Don't block the main loop by infinitely scheduling
2712          set_state.
2713
27142009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2715
2716        * examples/ARcue.py:
2717        * examples/gtkcrc.py:
2718        * morituri/common/task.py:
2719          Make a real Task interface and use it.
2720          Make runners reusable for multiple tasks.
2721          gtkcrc.py seems to be blocking updates however.
2722
27232009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2724
2725        * morituri/test (added):
2726        * morituri/test/test_image_cue.py (added):
2727        * morituri/test/kings-single.cue (added):
2728        * morituri/test/__init__.py (added):
2729        * morituri/test/kings-separate.cue (added):
2730          Add test suite.  Add Kings Of Leon cue files.
2731
27322009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2733
2734        * examples/ARcue.py:
2735          Error out when the file doesn't exist.
2736        * morituri/common/task.py:
2737          Drag the lake.
2738          Clean up prints.
2739
27402009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2741
2742        * morituri/common/task.py:
2743          Remove queue to avoid race.
2744          Remove prints.
2745          Clean up debug.
2746          Update progress after handling buffers.
2747
27482009-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
2749
2750        * morituri/common/task.py:
2751          Introduce constants for FRAMES_PER_DISC_FRAME
2752        * examples/ARcue.py:
2753          Use the constant.
2754          Get the CRC right for the last track too.
2755
27562009-03-26  Thomas Vander Stichele  <thomas at apestaart dot org>
2757
2758        * examples/ARcue.py:
2759        * morituri/common/task.py:
2760          Use an adapter to assemble CD frames.
2761          Take into account special rules for first and last track.
2762          Mention some bugs.
2763          Remember to drag the lake from the task.
2764
27652009-03-22  Thomas Vander Stichele  <thomas at apestaart dot org>
2766
2767        * examples/ARcue.py:
2768        * morituri/common/task.py:
2769          First version that seems to get some AccurateRip checksums right.
2770
27712009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2772
2773        * morituri/image/cue.py:
2774          publicize CueFile.tracks
2775          Add a method to get track lengths
2776        * examples/readcue.py:
2777          Use it.
2778
27792009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2780
2781        * morituri/common/task.py (added):
2782          Add a task abstraction.
2783
Note: See TracBrowser for help on using the repository browser.