source: trunk/ChangeLog @ 486

Revision 486, 72.7 KB checked in by thomas, 2 years ago (diff)
  • morituri/common/gstreamer.py: Remove parsers for current git trunk of good too.
Line 
12011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
2
3        * morituri/common/gstreamer.py:
4          Remove parsers for current git trunk of good too.
5
62011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
7
8        * morituri/common/encode.py:
9          Query for duration and use it in level callback to set progress.
10          Works around F-15 bug where encode progress is not being updated.
11
122011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
13
14        * morituri/rip/Makefile.am:
15        * morituri/rip/main.py:
16        * morituri/rip/debug.py (added):
17          Add helper command to debug tasks.
18        * morituri/common/encode.py:
19          Add debug.
20
212011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
22
23        * morituri/test/test_common_encode.py:
24          Use pink-noise as a wave form to make sure it's long enough.
25          Fixes last tests for F-15.
26
272011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
28
29        * morituri/common/checksum.py:
30        * morituri/common/gstreamer.py:
31          Remove audioparsers plugin if it has the known bug.
32          Fixes #64.
33
342011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
35
36        * morituri/common/task.py:
37          Show us when we stop twice.
38        * morituri/common/gstreamer.py:
39          Stop on Exceptions.
40
412011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
42
43        * morituri/common/common.py:
44          Add an EmptyError.
45        * morituri/common/checksum.py:
46          Set it when we don't get any frames.
47        * morituri/rip/main.py:
48          Catch it and stop ripping if this happens.
49
502011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
51
52        * morituri/common/task.py:
53          More exception handling and debug.
54
552011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
56
57        * morituri/common/task.py:
58          add task argument to TaskRunner.schedule so we can get exceptions.
59          Add .schedule method to Task to pass self.
60        * morituri/common/checksum.py:
61        * morituri/common/encode.py:
62        * morituri/common/gstreamer.py:
63        * morituri/program/cdparanoia.py:
64        * morituri/program/cdrdao.py:
65          Adapt.
66
672011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
68
69        reviewed by: <delete if not using a buddy>
70        patch by: <delete if not someone else's patch>
71
72        * morituri/common/gstreamer.py:
73        * morituri/image/image.py:
74
752011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
76
77        * morituri/test/test_common_encode.py:
78          Write a non-sine wave so we have an actual flac file that will
79          typefind.
80
812011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
82
83        * morituri/image/image.py:
84          Actually set exception so MultiTask tells us what went wrong.
85
862011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
87
88        * morituri/common/task.py:
89          Document and change name of a method.
90
912011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
92
93        * morituri/common/gstreamer.py:
94          Add a cvar to stop going to playing.
95        * morituri/image/image.py:
96          Convert AudioLengthTask to GstPipelineTask.
97        * morituri/test/test_image_image.py:
98          Adapt to new typefind error we run in.
99
1002011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
101
102        * morituri/common/gstreamer.py:
103          Stop task when we get an exception.
104          Don't make pipeline go to PLAYING if we got an exception
105          before doing so.
106
1072011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
108
109        * morituri/common/encode.py:
110          Convert TagReadTask to gstreamer.GstPipelineTask and
111          remove lots of duplicate code.
112
1132011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
114
115        * morituri/common/checksum.py:
116        * morituri/common/encode.py:
117        * morituri/common/gstreamer.py:
118          Move play to base class of GstPipelineTask.
119
1202011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
121
122        * morituri/common/gstreamer.py:
123          Add a stop method and a stopped overridable handler.
124        * morituri/common/checksum.py:
125        * morituri/common/encode.py:
126          Adapt to using stopped.
127
1282011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
129
130        * morituri/test/test_common_encode.py:
131          Generate an actual file by spawning gst-launch; otherwise
132          with proper error handling we get an error from wavparse that
133          there is not enough data to typefind.
134        * morituri/common/gstreamer.py:
135          Move the gst import to start() and set it as a class attribute.
136          Document methods.
137        * morituri/common/encode.py:
138          Convert EncodeTask to a GstPipelineTask.
139
1402011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
141
142        * morituri/common/encode.py:
143          Add some debug.
144
1452011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
146
147        * morituri/common/program.py:
148          AccurateRip responses should be treated per track; one response set
149          isn't necessarily from the same pressing.
150          The first response set contains all the highest confidence
151          checksums, and so on in decreasing order.
152          So don't assert about one track having a checksum matching from
153          a different response set.
154          Fixes #5.
155
1562011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
157
158        based on code by: Loïc Minier <lool@dooz.org>
159
160        * morituri/rip/Makefile.am:
161        * morituri/rip/main.py:
162        * morituri/rip/accurip.py (added):
163          Add a rip accurip show command to show the accuraterip information
164          for a given URL.  See #5.
165
1662011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
167
168        * morituri/image/table.py:
169          Extract one function to write a FILE line.
170
1712011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
172
173        patch by: Ross Burton <ross@burtonini.com>
174
175        * morituri/image/table.py:
176          When writing the .cue file, only write the basename, since
177          the .cue file gets stored in the album directory.
178          Fixes #10.
179
1802011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
181
182        * morituri/rip/main.py:
183          Give a nice error message if cdrdao cannot read the disc.
184          Fixes #62.
185
1862011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
187
188        * morituri/program/cdparanoia.py:
189          Since stop can be same as start, add + 1 to progress calculation.
190          Fixes #37.
191
1922011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
193
194        * morituri/common/gstreamer.py:
195          Remove unused imports.
196        * morituri/image/image.py:
197          Remove halfbaked code.
198
1992011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
200
201        * morituri/rip/cd.py:
202          Factor out function to write .m3u lines.
203
2042011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
205
206        patch by: Loïc Minier <lool@dooz.org>
207
208        * morituri/rip/cd.py:
209          Don't strip extension of HTOA track.
210          Fixes #50.
211
2122011-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
213
214        * morituri/result/logger.py:
215          Always write strftime in C locale.  Fixes second bug
216          mentioned in #49.
217
2182011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
219
220        * morituri/common/checksum.py:
221        * morituri/image/image.py:
222        * morituri/test/test_common_checksum.py:
223        * morituri/common/gstreamer.py (added):
224          Factor out GstException and GstPipelineTask.
225
2262011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
227
228        * misc/morituri-uninstalled:
229          The binary name is rip, so add an option to override.
230          Fixes #46.
231
2322011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
233
234        * morituri/rip/image.py:
235          Document image subcommand.  Fixes #61.
236
2372011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
238
239        * morituri/test/Makefile.am:
240          Package error progress output.  Fixes distcheck on slaves.
241
2422011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
243
244        * morituri/test/test_program_cdparanoia.py:
245          Update expected quality percentage.
246          Was broken since its commit in [432].
247
2482011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
249
250        * morituri/common/checksum.py:
251        * morituri/common/encode.py:
252        * morituri/image/table.py:
253        * morituri/rip/cd.py:
254        * morituri/rip/image.py:
255        * morituri/rip/offset.py:
256        * morituri/test/test_common_accurip.py:
257        * morituri/test/test_common_checksum.py:
258        * morituri/test/test_image_cue.py:
259        * morituri/test/test_image_table.py:
260          Pychecker fixes.
261
2622011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
263
264        * morituri/common/checksum.py:
265          Actually raise the exception.
266        * morituri/common/task.py:
267          Document interface more clearly.
268        * morituri/test/test_common_checksum.py:
269          Use tcommon for test.common
270
2712011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
272
273        * morituri/common/common.py:
274          Don't fail on loading pickle.
275
2762011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
277
278        * morituri/common/encode.py:
279          Alac does not have merge_tags.  Fixes #15.
280
2812011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
282
283        * morituri/program/cdparanoia.py:
284        * morituri/common/encode.py:
285        * morituri/common/program.py:
286        * morituri/rip/cd.py:
287          Add action and what args to describe task better.
288
2892011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
290
291        * morituri/common/task.py:
292          Add more debug.
293
2942011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
295
296        * morituri/rip/main.py:
297          More debug info: args, version, revision.
298
2992011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
300
301        * morituri/configure/configure.py (svn:keywords):
302          Expand revision.
303        * morituri/configure/configure.py:
304          Set it on the revision local.
305
3062011-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
307
308        * morituri/common/encode.py:
309          wavenc does not have merge_tags, it seems.
310          So don't call an element a tagger, don't merge tags if there is
311          no tagger, and complain if there is no merge_tags when we think
312          there should be.
313
3142011-03-23  Thomas Vander Stichele  <thomas at apestaart dot org>
315
316        * morituri/program/cdparanoia.py:
317          cdparanoia can hang indefinitely on scsi read errors.
318          For example, on some drives, when trying negative offsets.
319          Notice them, count them, and fail after 100.
320        * morituri/test/test_program_cdparanoia.py:
321        * morituri/test/cdparanoia.progress.error (added):
322          Add a test for this output.
323
3242011-03-22  Thomas Vander Stichele  <thomas at apestaart dot org>
325
326        * morituri/common/program.py:
327        * morituri/rip/offset.py:
328          When finding the offset, also load and possibly unmount, resolving
329          to the real path for the device.
330
3312011-03-20  Thomas Vander Stichele  <thomas at apestaart dot org>
332
333        * morituri/common/encode.py:
334          Debug failing to write tags better.  See #60.
335
3362011-03-20  Thomas Vander Stichele  <thomas at apestaart dot org>
337
338        * morituri/program/cdparanoia.py:
339          Extend FileSizeError with an extra message.
340        * morituri/rip/offset.py:
341          Print a reasonable warning when we cannot rip with a certain offset.
342          See #57.
343
3442011-03-17  Thomas Vander Stichele  <thomas at apestaart dot org>
345
346        * morituri/rip/drive.py:
347          Fix typo.  Fixes #59.
348
3492011-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
350
351        * morituri/common/checksum.py:
352          Create a GstException to wrap a Gst.GError.
353          Create a base GstPipelineTask class.
354          Use it in Checksum and TRM tasks.
355          Raise and don't proceed to call .paused() when a GstError happens.
356          Should help debug https://bugs.launchpad.net/bugs/735053
357        * morituri/test/test_common_checksum.py:
358          Adapt test.
359
3602011-01-09  Thomas Vander Stichele  <thomas at apestaart dot org>
361
362        patch by: Ross Burton
363
364        * morituri/common/program.py:
365          On compilation albums the album artist is different to the artist.
366          If this is the case, morituri should write both tags.
367          Fixes #43.
368
3692011-01-02  Thomas Vander Stichele  <thomas at apestaart dot org>
370
371        * morituri/common/program.py:
372        * morituri/image/table.py:
373        * morituri/rip/cd.py:
374          Get CDDB disc id.  Use it to print info when not found on
375          MusicBrainz.
376
3772011-01-01  Thomas Vander Stichele  <thomas at apestaart dot org>
378
379        * morituri/rip/cd.py:
380          Add -U/--unknown option to continue ripping even if the CD is
381          unknown.  Default to False.
382
3832010-12-30  Thomas Vander Stichele  <thomas at apestaart dot org>
384
385        * morituri/common/program.py:
386        * morituri/rip/cd.py:
387          Add load and eject device.  Do so before and after ripping.
388
3892010-11-14  Thomas Vander Stichele  <thomas at apestaart dot org>
390
391        patch by: Loïc Minier <lool at debian dot org>
392
393        * examples/ARcalibrate.py:
394        * examples/ARcue.py:
395        * examples/readdisc.py:
396        * morituri/rip/cd.py:
397        * morituri/rip/offset.py:
398          s/reponse/response.
399          Fixes #51.
400
4012010-11-08  Thomas Vander Stichele  <thomas at apestaart dot org>
402
403        * morituri/program/cdrdao.py:
404          Add logCategory to CDRDAO tasks.
405          Remove errors from parser, set them publically on task.
406          Properly raise exceptions on data cd's with correct stack origin.
407
4082010-07-08  Thomas Vander Stichele  <thomas at apestaart dot org>
409
410        * morituri/common/program.py:
411          Comment where we got the template variables from.
412        * morituri/rip/cd.py:
413          Document the template variables.
414
4152010-06-19  Thomas Vander Stichele  <thomas at apestaart dot org>
416
417        * morituri/program/cdparanoia.py:
418          Warn about missing cdparanoia too.
419
4202010-06-19  Thomas Vander Stichele  <thomas at apestaart dot org>
421
422        * morituri/common/common.py:
423          Add MissingDependencyException.
424        * morituri/program/cdrdao.py:
425        * morituri/rip/main.py:
426          Use it to warn about missing cdrdao.
427
4282010-06-18  Thomas Vander Stichele  <thomas at apestaart dot org>
429
430        * morituri/common/task.py:
431          Add exception traceback for easier debugging.
432
4332010-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
434
435        * morituri.spec.in:
436          Add requires for python-setuptools since we use parse_version.
437          Fixes #32.
438
4392010-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
440
441        * morituri/common/program.py:
442          Set results by default so that it is set even if we get an
443          exception getting them.
444          Fixes #35.
445
4462010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
447
448        * morituri/test/test_image_toc.py:
449          Fix distcheck by writing unicode toc filename in a temp dir.
450
4512010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
452
453        * morituri/rip/cd.py:
454          Log the version at the beginning to help in bug reports.
455
4562010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
457
458        * morituri/rip/main.py:
459          Fix another UnicodeEncodeError problem as mentioned in #25.
460
4612010-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
462
463        * morituri/test/Makefile.am:
464        * morituri/test/jose.toc (added):
465        * morituri/test/JoséGonzález.toc (deleted):
466          Rename utf-8 file to a normal file.
467        * morituri/test/common.py:
468        * morituri/test/test_common_checksum.py:
469        * morituri/test/test_common_encode.py:
470        * morituri/test/test_image_image.py:
471        * morituri/test/test_image_toc.py:
472          Copy the normal file first to the utf-8 filename, if supported.
473          Skip tests that need unicode when we are not in a utf-8 locale.
474
4752010-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
476
477        * configure.ac:
478        * doc/release:
479          Back to trunk.
480
481=== release 0.1.1 ===
482
4832010-04-16  Thomas Vander Stichele  <thomas at apestaart dot org>
484
485        * NEWS:
486        * README:
487        * RELEASE:
488        * configure.ac:
489        * doc/release:
490        * morituri.doap:
491          Releasing 0.1.1, 'Dead'
492
4932010-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
494
495        * morituri/common/encode.py:
496        * morituri/rip/image.py:
497          Provide status on the retagging.
498
4992010-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
500
501        patch by: Peter Oliver
502
503        * morituri/program/cdparanoia.py:
504          Respect umask for encoded files.  Fixes #17.
505
5062010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
507
508        * morituri/common/encode.py:
509          Before moving the newly tagged file to overwrite the original
510          one, copy over mode.
511
5122010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
513
514        * morituri/common/program.py:
515          Commit one missing line from patch in #4 for multi-artist discs.
516
5172010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
518
519        patch by: Peter Oliver
520
521        * morituri/common/program.py:
522          Handle multi-artist releases where track artist is unset.
523          Fixes #14.
524
5252010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
526
527        * morituri/rip/image.py:
528          Fix more utf-8 issues.
529
5302010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
531
532        * morituri/image/image.py:
533          Remove dead code.
534
5352010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
536
537        * morituri/common/encode.py:
538          Fix wrong code for checksum comparison.
539
5402010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
541
542        * morituri/common/program.py:
543          Rename some vars to start with mbid.  Fix pychecker issues.
544
5452010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
546
547        * morituri/common/program.py:
548          Add a retagging command.
549          Add a getMusicBrainz() method.
550          Also store musicbrainz track/album/artist ids.
551          Patch provided by Peter Oliver.  Fixes #4.
552        * morituri/rip/cd.py:
553          Use it.
554        * morituri/image/image.py:
555          Add a task to retag an image.
556        * morituri/rip/image.py:
557          Add a command to retag an image.
558
5592010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
560
561        * morituri/common/encode.py:
562          Add tasks to read, write, and safely retag flac files.
563        * morituri/test/test_common_encode.py:
564          Add tests for this.
565
5662010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
567
568        * morituri/common/checksum.py:
569          Style fixes.
570        * morituri/common/common.py:
571          Add functions to convert a gst.TagList to a dict and compare them.
572        * morituri/common/task.py:
573          Add setAndRaiseException which gives us an appropriate
574          exceptionMessage as if we raised where we called this new function.
575
5762010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
577
578        * morituri/common/encode.py:
579          pychecker fix.
580
5812010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
582
583        * morituri/common/encode.py:
584          Add a task to read tags.
585        * morituri/test/test_common_encode.py:
586          Add a test.
587
5882010-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
589
590        * morituri/common/encode.py:
591          Add a vbr profile.
592
5932010-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
594
595        * morituri/rip/image.py:
596          Don't splitext on inputdir; fixes encoding of directories like
597          Sigur Ros - Takk... (which removed a period)
598
5992010-04-09  Thomas Vander Stichele  <thomas at apestaart dot org>
600
601        * morituri/image/table.py:
602        * morituri/program/cdparanoia.py:
603          Do some 80 character cleanups.
604
6052010-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
606
607        * morituri/rip/image.py:
608          Fix problem to encode from files with unicode chars.
609
6102010-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
611
612        * morituri/program/cdparanoia.py:
613          Add some debug.
614        * morituri/common/encode.py:
615          Add more debug.
616          Handle the case where peak is full scale, and peakdB thus 0,
617          which triggered not setting self.peak.
618
6192010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
620
621        patch by: Peter Oliver
622
623        * morituri/common/program.py:
624          Allow using sortName for artist/track using %S/%s.
625          Fixes #19.
626
6272010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
628
629        * doc/release:
630          Document having clean test run.
631        * morituri/common/encode.py:
632          Catch and properly stop on gst.QueryError.
633          Don't set peak in stop if we had an error.
634        * morituri/test/test_common_encode.py:
635        * morituri/test/test_common_renamer.py:
636        * morituri/test/test_image_cue.py:
637          Clean up after tests.
638
6392010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
640
641        * morituri/common/task.py:
642        * morituri/image/cue.py:
643          Add logCategory.
644        * morituri/image/image.py:
645          If subtasks had an exception, retrigger the exception and stop.
646
6472010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
648
649        * morituri/image/image.py:
650          Fix AudioLengthTask for the case where we don't have the decoder,
651          by instead of doing get_state, waiting for an ASYNC_DONE or ERROR
652          message.  Properly raise a gst.GError in that case.
653        * morituri/common/task.py:
654          Add some debug.
655        * morituri/test/test_image_image.py:
656          After this fix, we now catch the TYPE_NOT_FOUND because of an
657          empty stream instead of the later gst.QueryError.
658        * morituri/test/test_common_encode.py:
659          Let us know what it is if not a gst.QueryError.
660
6612010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
662
663        * doc/Makefile.am:
664          Don't put rip.1 manpage in subdir.
665
6662010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
667
668        * morituri/common/common.py:
669          add quoteParse function to quote properly for gst.parse_launch()
670        * morituri/common/checksum.py:
671          Fix single quote problem.
672          use self.setException()
673        * morituri/common/encode.py:
674          Fix single quote problem.
675        * morituri/image/image.py:
676          Fix single quote problem.
677          Reraise gst.QueryError.
678        * morituri/test/test_common_encode.py:
679        * morituri/test/test_common_encode.py (added):
680          Add tests for unicode/single/double quote.
681        * morituri/test/test_image_image.py:
682        * morituri/test/test_common_checksum.py:
683          Add tests for single/double quote.
684        * morituri/test/common.py:
685          add twisted-like failUnlessRaises to TestCase that returns
686          the exception, so we can check wrapped exceptions in TaskException.
687          Fixes #16.
688
6892010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
690
691        * morituri/common/task.py:
692          Wrap exceptions during tasks in a TaskException, storing the
693          message, for improved error reporting later on.
694
6952010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
696
697        * doc/Makefile.am:
698        * morituri.spec.in:
699        * morituri/extern/Makefile.am:
700          Use help2man.py to generate manpage.
701
7022010-04-04  Thomas Vander Stichele  <thomas at apestaart dot org>
703
704        * morituri/common/encode.py:
705        * morituri/common/program.py:
706        * morituri/image/image.py:
707        * morituri/program/cdparanoia.py:
708        * morituri/rip/cd.py:
709        * morituri/rip/image.py:
710        * morituri/rip/offset.py:
711          Move all gst-using imports inside functions and classes
712          to avoid 'import gst' eating our options.
713          Fixes #12.
714
7152010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
716
717        * bin/Makefile.am:
718          Install rip as the script.
719
7202010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
721
722        * morituri/common/Makefile.am:
723          Add missing result.py
724        * morituri/test/Makefile.am:
725        * morituri/test/test_image_toc.py:
726        * morituri/test/JoséGonzález.toc (added):
727        * morituri/test/José González.toc (deleted):
728          automake doesn't handle spaces in names, so move it.
729
7302010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
731
732        * bin/rip.in:
733          Add our PYTHONLIBDIR to sys.path if needed.  Should make this
734          work when doing ./configure; sudo checkinstall make install
735          on e.g. Ubuntu.
736
7372010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
738
739        * configure.ac:
740        * bin/rip.in (added):
741        * bin/rip (deleted):
742          Generate bin/rip so we can do sys.path stuff.
743
7442010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
745
746        * morituri/rip/offset.py:
747          Add a more complete list of offsets, obtained using misc/offsets.py
748
7492010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
750
751        * misc/offsets.py (added):
752          Add a script to calculate list of offsets based on AccurateRip's
753          online database, according to popularity.
754
7552010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
756
757        * morituri/common/encode.py:
758          Handle utf-8 properly.
759
7602010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
761
762        * morituri/common/program.py:
763          Fix a problem with Arid's new album of not having an id.
764
7652010-01-31  Thomas Vander Stichele  <thomas at apestaart dot org>
766
767        * morituri/common/accurip.py:
768          The AccuRip cache dir could exist without the file; handle that
769          case.
770
7712009-12-28  Thomas Vander Stichele  <thomas at apestaart dot org>
772
773        * morituri/common/program.py:
774          For Various Artists releases, fall back to the release artist if
775          the track artist is None.
776
7772009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
778
779        * morituri/image/image.py:
780          Add ImageEncodeTask to encode a disk image to a different profile
781          and directory.
782        * morituri/common/encode.py:
783          Add lossy encoding profiles for mp3 and vorbis.
784          Rename muxer to tagger since that's what we use it for.
785          Do progress probe after level to make sure we get samples for
786          offsets.
787        * morituri/rip/image.py:
788          Add rip image encode command.
789
7902009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
791
792        * morituri/test/José González.toc (added):
793          Add test file for a test.
794
7952009-10-16  Thomas Vander Stichele  <thomas at apestaart dot org>
796
797        * morituri/common/task.py:
798          Add exceptionMessage on Task to store the result of
799          log.getExceptionMessage when the stack is still valid.
800
8012009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
802
803        * configure.ac:
804          Back to TRUNK.
805
806=== release 0.1.0 ===
807
8082009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
809
810        * NEWS:
811        * RELEASE:
812        * configure.ac:
813          Releasing 0.1.0, "Youngblood".
814
8152009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
816
817        * morituri/program/cdparanoia.py:
818          explicitize keyword args.
819          Break some 80+ lines.
820
8212009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
822
823        * morituri/rip/offset.py:
824          Pass device parameter to ReadTrackTask.  Thanks to Alex B for
825          spotting this on my blog.
826
8272009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
828
829        * morituri/program/cdparanoia.py:
830        * morituri/rip/offset.py:
831          Another unicode fix.
832
8332009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
834
835        * HACKING:
836          More unicode notes.
837        * morituri/common/program.py:
838        * morituri/image/table.py:
839        * morituri/image/toc.py:
840        * morituri/result/result.py:
841        * morituri/rip/cd.py:
842        * morituri/test/test_image_toc.py:
843          Further unicode fixes, for options, CD-Text, paths, ...
844
8452009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
846
847        * morituri/program/cdrdao.py:
848          Wrap read in an exception handler.
849        * morituri/common/task.py:
850          Debug exceptions more.
851
8522009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
853
854        * HACKING:
855          Note unicode handling.
856        * morituri/test/test_image_image.py:
857        * morituri/image/table.py:
858        * morituri/program/cdparanoia.py:
859        * morituri/common/checksum.py:
860          Use unicode for paths.
861          Use repr for path representation.
862        * morituri/test/test_common_checksum.py:
863          Add test for unicode audio file name.
864
8652009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
866
867        * morituri/image/cue.py:
868        * morituri/image/toc.py:
869        * morituri/test/test_image_cue.py:
870        * morituri/test/test_image_toc.py:
871          Read input file as utf-8.  Fix logging of paths.
872        * morituri/image/image.py:
873          Document and add asserts for unicodeness of paths.
874          Encode path in launch lines as utf-8
875
8762009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
877
878        * morituri/common/task.py:
879          Make SyncRunner wrap start() so we correctly handle any
880          exception being thrown.
881         
8822009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
883
884        * morituri/common/checksum.py:
885        * morituri/test/Makefile.am:
886        * morituri/test/test_common_checksum.py (added):
887          Add a check to make sure that checksumming an empty file doesn't
888          hang.  Fix the hang.
889
8902009-09-08  Thomas Vander Stichele  <thomas at apestaart dot org>
891
892        * morituri.spec.in:
893          Add pycdio as requirement.
894
8952009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
896
897        * morituri/common/program.py:
898          Fix getting AccurateRip results for albums with a HTOA.
899        * morituri/test/Makefile.am:
900        * morituri/test/test_common_program.py:
901        * morituri/test/silentalarm.result.pickle (added):
902          Add testcase for it, Bloc Party's Silent Alarm.
903
9042009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
905
906        * morituri.spec.in:
907          Update requirements to work around known bugs.
908
9092009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
910
911        * morituri/rip/cd.py:
912          Fix warning against rebuilt package.
913
9142009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
915
916        * README:
917          Fix up dependencies.
918        * morituri.spec.in:
919          Fix dependencies and noarch install location.
920        * morituri/common/Makefile.am:
921          Add result.py to dist
922
9232009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
924
925        * configure.ac:
926        * m4/Makefile.am:
927        * m4/as-ac-expand.m4 (added):
928          Correctly set installation dir for noarch python files so that it
929          works on 64 bit.
930
9312009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
932
933        * morituri/program/cdrdao.py:
934          Parse version number.
935        * morituri/rip/cd.py:
936          Warn about cdrdao versions with a bug.
937        * morituri/test/test_program_cdrdao.py:
938          Test that we can parse the version.
939
9402009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
941
942        * morituri/program/cdrdao.py:
943          Handle errors.  Tested by not having a CD in the drive.
944
9452009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
946
947        * morituri/common/task.py:
948          Document better.
949          Create an ITaskListener interface where we can document.
950          Log some more.
951
9522009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
953
954        * morituri/test/test_common_program.py:
955        * morituri/common/program.py:
956          Extract a common method to get textual representation of
957          AccurateRip results, and test it.
958        * morituri/rip/cd.py:
959        * morituri/rip/image.py:
960          Use the method.
961
9622009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
963
964        * morituri/image/table.py:
965          Fix deprecationwarning for python 2.6
966
9672009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
968
969        * morituri/test/test_common_program.py (added):
970        * morituri/common/program.py:
971          Break verifyImage into two so we can test it.
972          Test it using an AccurateRip result for Luke Haines Is Dead
973          which had a wrongly ripped track 10.
974
975
9762009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
977
978        * morituri/result/result.py:
979          Document some more.
980
9812009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
982
983        * morituri/test/Makefile.am:
984        * morituri/test/dBAR-020-002e5023-029d8e49-040eaa14.bin (added):
985          Add AR result for Luke Haines Is Dead disc 1
986
9872009-06-20  Thomas Vander Stichele  <thomas at apestaart dot org>
988
989        * Makefile.am:
990        * misc/pycheckerrc:
991        * morituri/common/accurip.py:
992        * morituri/common/checksum.py:
993        * morituri/common/encode.py:
994        * morituri/image/table.py:
995        * morituri/rip/drive.py:
996          Fix up for pychecker warnings for 2.6
997          Fix rip drive list, which forgot some modules.
998
9992009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1000
1001        * morituri/rip/main.py:
1002        * morituri/rip/image.py (added):
1003          Add command to verify an image.
1004        * morituri/common/program.py:
1005        * morituri/rip/cd.py:
1006          Fix AccurateRip checksum output.
1007
10082009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1009
1010        * morituri/common/drive.py:
1011          Really make pycdio and cdio optional.
1012        * morituri/rip/drive.py:
1013        * morituri/rip/offset.py:
1014          Use drive.getAllDevicePaths()
1015
10162009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1017
1018        * morituri/result/result.py:
1019          Add max confidence from database.
1020        * morituri/common/program.py:
1021        * morituri/rip/cd.py:
1022          Move AccurateRip checking to program.py
1023          Re-rip if verification failed when continuing a rip.
1024
10252009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1026
1027        * morituri/image/cue.py:
1028          Better debug.
1029
10302009-06-09  Thomas Vander Stichele  <thomas at apestaart dot org>
1031
1032        * morituri/common/program.py:
1033        * morituri/rip/cd.py:
1034          Serialize the rip result after every rip, so we can pick up
1035          where we left off with all result data.
1036
10372009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1038
1039        * morituri/common/program.py:
1040          Move getPath to Program.
1041          Remove arguments to ripTrack that can be gotten from
1042          trackResult.
1043        * morituri/rip/cd.py:
1044          Continue without musicbrainz metadata.
1045          Unify htoa and normal track ripping.
1046        * morituri/result/result.py:
1047          Add getTrackResult so it's easier to look up track results
1048          when there's a HTOA.
1049
10502009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1051
1052        * morituri/common/program.py:
1053        * morituri/rip/cd.py:
1054          Move HTOA checking to program.
1055
10562009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1057
1058        * morituri/result/logger.py:
1059          Fix for toctable->table
1060        * morituri/common/program.py:
1061        * morituri/rip/cd.py:
1062          Move lots of functionality to program module.
1063
10642009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1065
1066        * morituri/result/result.py:
1067          Change toctable to table since it's a full index table.
1068        * morituri/common/Makefile.am:
1069        * morituri/common/program.py (added):
1070          Add module and class for program state.
1071        * morituri/rip/cd.py:
1072          Use the program state to clean up the do() function.
1073
10742009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1075
1076        * morituri/rip/cd.py:
1077          Massage into 80 characters per line.
1078          Make pycdio/cdio optional.
1079
10802009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1081
1082        * morituri/rip/drive.py:
1083          Make pycdio and cdio optional.
1084
10852009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1086
1087        * morituri/image/table.py:
1088          Add getPregap() method.
1089        * morituri/rip/cd.py:
1090          Use artist.name, not getUniqueName, to avoid monstruous names for
1091          Muse.
1092          Pass mbdiscid to getPath, so Unknown Disc can be saved with it.
1093          Don't set the date if the release doesn't have one.
1094          Set pregap on trackResult using new Track.getPregap()
1095          Write all log/cue/m3u files as utf-8.
1096
10972009-06-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1098
1099        * morituri/test/cdparanoia.progress:
1100          Add a shorter test file, 23 seconds.
1101        * morituri/test/test_program_cdparanoia.py:
1102          Update the test to adapt.  Check for track quality.
1103        * morituri/program/cdparanoia.py:
1104          Add a measure of track quality based on the number of reads.
1105          Use the [wrote] output for progress updates, a bit more
1106          jittery in its output.
1107        * morituri/rip/cd.py:
1108          Set track quality on RipResult.
1109
11102009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1111
1112        * morituri/rip/cd.py:
1113          Use RipResult to store result information.
1114        * morituri/result/logger.py (added):
1115          Add a Logger to handle the RipResult, much like
1116          EAC's log file.
1117
11182009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1119
1120        * morituri/rip/cd.py:
1121          Comment out number of track setting on tag for now.
1122          MusicBrainz can give us dates in YYYY, YYYY-MM, and YYYY-MM-DD
1123          format, so convert to YYYY-MM-DD always.
1124          Unmount the data part of the CD we want to rip if it is mounted.
1125          Adapt to peak level change.
1126          Don't try to write data tracks to the m3u file.
1127          Resolve the device path to the actual device path.
1128
11292009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1130
1131        * morituri/result/result.py:
1132          Add a Logger base class.
1133
11342009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1135
1136        * configure.ac:
1137        * morituri/Makefile.am:
1138        * morituri/result (added):
1139        * morituri/result/result.py (added):
1140        * morituri/result/__init__.py (added):
1141        * morituri/result/Makefile.am (added):
1142          Add classes to store track and rip results in.
1143
11442009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1145
1146        * morituri/common/common.py:
1147          Add an argument for the delimiter in formatting.
1148        * morituri/common/encode.py:
1149          Most programs use peak volume, not power, so do this too.
1150
11512009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1152
1153        * morituri/test/common.py:
1154          Add a method for diffing multiline strings.
1155
11562009-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
1157
1158        * morituri/common/encode.py:
1159          Add a test() method to the profile so we can warn about bad
1160          flacenc versions.
1161          Encode track number and count, and release date, if possible.
1162        * morituri/rip/cd.py:
1163          Fix another off-by-one error in the tag encoding.
1164
11652009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1166
1167        * morituri/program/cdparanoia.py:
1168        * morituri/rip/cd.py:
1169          Handle another off-by-one error in the m3u handling.
1170          Add a getTagList function.
1171          Use it to encode tags.
1172
11732009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1174
1175        * morituri/common/encode.py:
1176        * morituri/program/cdparanoia.py:
1177        * morituri/rip/cd.py:
1178          Clean up the temporary unencoded file.
1179          Pass profile as objects to tasks, so that temp files have the right
1180          extension.
1181
11822009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1183
1184        * morituri/common/encode.py:
1185        * morituri/program/cdparanoia.py:
1186          Add encoding profiles, kept simple for now as a class and
1187          subclasses.  Use them to encode.  Calculate peak level while
1188          encoding, compared to EAC and replaygain's value.
1189        * morituri/rip/cd.py:
1190          Use the encoding profiles, ripping with the right extension.
1191          Add a --profile parameter for it.
1192
11932009-05-31  Thomas Vander Stichele  <thomas at apestaart dot org>
1194
1195        * morituri/rip/cd.py:
1196          Clean up track numbering confusion.
1197
11982009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1199
1200        * morituri/common/encode.py (added):
1201        * examples/encode.py (added):
1202          Add an Encode Task, hardcoded to flac for now.
1203          Add an example, that also sets tags.
1204
12052009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1206
1207        * morituri/common/task.py:
1208          Add debug.
1209        * morituri/rip/drive.py:
1210          Show all drives, not just the ones that happen to have an Audio CD
1211          inserted.
1212
12132009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1214
1215        * morituri/rip/cd.py:
1216          Add asserts for comparing id's between the simple toc and
1217          the full table.
1218          Create the output directory before ripping the htoa.
1219          Ignore data tracks for now.
1220          Don't fail if we have no AccurateRip responses.
1221        * morituri/image/table.py:
1222          Add a session ivar to Track.
1223          Factor in session leadin when calculating track length
1224          of last track in a session.
1225          add getMusicBrainzSubmitURL()
1226          add _getSessionGap() because the session gap size is different
1227          for session 2 and all following.
1228          Use it in merge() to get offsets right.
1229          Fix getAccurateRipURL by only using the audio tracks for the
1230          'length in tracks' number
1231          Temporarily disable writing out data tracks to a .cue file,
1232          since it's not implemented yet.
1233          Add canCue to see if we can write a .cue file from the given table,
1234          and debug why not if not.
1235        * morituri/program/cdrdao.py:
1236          Rework to rip each session separately instead of using session 9.
1237          This fixes session 9 read-toc missing the pregap.
1238          Add a simple LineParser for handling output from disk-info.
1239          Count tracks relatively for the session, because the output for
1240          session 2 for track numbers picks up where session 1 left off.
1241          Don't set leadout from TOC printing since for the same reason
1242          session 2's leadout is absolute, not relative to start of session.
1243          Add a DiscInfoTask.
1244          Convert Table and Toc reading tasks to multitasks, first getting the
1245          number of sessions, then reading table/toc for each session.
1246
1247        * morituri/test/test_image_table.py:
1248          Fix up MusicBrainz disc id for my Ladyhawke disc.
1249          Add AccurateRip URL verification, compared against EAC's.
1250        * morituri/test/test_image_toc.py:
1251          Use two separate session read-toc output files to verify
1252          the case of Das Capital.
1253          Verify musicbrainz URL.
1254
12552009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1256
1257        * morituri/common/task.py:
1258          Add documentation.
1259          Use a _task counter instead of duplicating tasks to
1260          __tasks; this allows us to add tasks after starting.
1261          Catch Exceptions during next() so that we don't get
1262          stuck in a main loop that doesn't exit.
1263          Raise it later when we're done.
1264
12652009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1266
1267        * morituri/common/common.py:
1268          Since the version was inherited from the current code
1269          in unpickled objects, separate into classVersion and
1270          an instanceVersion set from __init__.
1271
12722009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1273
1274        * morituri/image/toc.py:
1275          Add a logName for debugging.
1276
12772009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1278
1279        * morituri/program/cdparanoia.py:
1280        * morituri/image/image.py:
1281          Correctly chain up to parent __init__ for MultiTasks
1282
12832009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1284
1285        * morituri/test/capital.1.toc (added):
1286        * morituri/test/capital.2.toc (added):
1287          Add two .toc's for two sessions of a 2 session disc
1288        * morituri/image/table.py:
1289          Add a merge method to merge in a second session.
1290        * morituri/test/Makefile.am:
1291        * morituri/test/test_image_toc.py:
1292          Add a test for merging the Das Capital sessions, gets
1293          the CDDB disc id right.
1294
12952009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1296
1297        * morituri/common/common.py:
1298          Add a persisted cache so that we can store pickles on discs.
1299          Automatically delete them if the class version is newer than
1300          the object's.
1301        * morituri/rip/cd.py:
1302          Use it.
1303
13042009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1305
1306        * morituri/image/table.py:
1307          Add a version ivar to help with versioning pickled objects.
1308
13092009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1310
1311        * morituri/program/cdparanoia.py:
1312          Add copy and test CRC's to object.
1313
13142009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1315
1316        * morituri/common/Makefile.am:
1317        * morituri/common/drive.py (added):
1318          Add drive module.
1319
13202009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1321
1322        * morituri/program/cdparanoia.py:
1323        * morituri/program/cdrdao.py:
1324        * morituri/rip/cd.py:
1325        * morituri/rip/offset.py:
1326          Add device argument to ripping/scanning tasks.
1327
13282009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1329
1330        * morituri/common/accurip.py:
1331        * morituri/image/image.py:
1332        * morituri/test/Makefile.am:
1333        * morituri/test/test_image_image.py:
1334        * morituri/test/test_common_accurip.py (added):
1335          Move accuraterip stuff to the accurip module.
1336          Move/create new test file.
1337
13382009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1339
1340        * morituri/rip/Makefile.am:
1341        * morituri/rip/main.py:
1342        * morituri/rip/drive.py (added):
1343          Add 'rip drive list' command to list available drives.
1344        * morituri/common/accurip.py:
1345          Add force.
1346        * morituri/rip/cd.py:
1347          Add --output-directory argument.
1348
13492009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1350
1351        * morituri/common/Makefile.am:
1352        * morituri/rip/cd.py:
1353        * morituri/common/accurip.py (added):
1354          Add a module for handling a cache of AccurateRip results.
1355          Use it.
1356
13572009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1358
1359        * morituri/rip/Makefile.am:
1360        * morituri/rip/main.py:
1361        * morituri/rip/cd.py (added):
1362          Add second command, 'rip cd rip' before factoring out functionality.
1363
13642009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1365
1366        * morituri/rip/Makefile.am:
1367        * morituri/rip/main.py:
1368        * morituri/rip/offset.py (added):
1369          Add first command, 'rip offset find'
1370
13712009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1372
1373        * Makefile.am:
1374        * morituri/test/Makefile.am:
1375          Make distcheck work.
1376
13772009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1378
1379        * morituri/common/checksum.py:
1380          More pychecker fixes.
1381
13822009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1383
1384        * morituri/common/common.py:
1385        * morituri/common/renamer.py:
1386          Pychecker fixes.
1387
13882009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1389
1390        * RELEASE:
1391        * misc/pycheckerrc:
1392        * misc/show-coverage.py:
1393        * morituri/image/Makefile.am:
1394        * morituri/program/Makefile.am:
1395        * RELEASE (added):
1396        * morituri/image/Makefile.am (added):
1397        * morituri/program/Makefile.am (added):
1398        * misc/show-coverage.py (added):
1399        * misc/pycheckerrc (added):
1400          more additions
1401
14022009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1403
1404        * AUTHORS:
1405        * Makefile.am:
1406        * NEWS:
1407        * TODO:
1408        * autogen.sh:
1409        * configure.ac:
1410        * examples/ARcalibrate.py:
1411        * misc/Makefile.am:
1412        * misc/morituri-uninstalled:
1413        * morituri.spec.in:
1414        * morituri/Makefile.am:
1415        * morituri/common/Makefile.am:
1416        * morituri/common/logcommand.py:
1417        * morituri/extern/Makefile.am:
1418        * morituri/rip/Makefile.am:
1419        * morituri/rip/__init__.py:
1420        * morituri/rip/main.py:
1421        * morituri/test/Makefile:
1422        * morituri/test/Makefile.am:
1423        * configure.ac (added):
1424        * AUTHORS (added):
1425        * morituri.spec.in (added):
1426        * Makefile.am (added):
1427        * morituri/test/Makefile.am (added):
1428        * morituri/extern/Makefile.am (added):
1429        * morituri/common/logcommand.py (added):
1430        * morituri/common/Makefile.am (added):
1431        * morituri/Makefile.am (added):
1432        * morituri/rip (added):
1433        * morituri/rip/__init__.py (added):
1434        * morituri/rip/Makefile.am (added):
1435        * morituri/rip/main.py (added):
1436        * misc/Makefile.am (added):
1437        * misc/morituri-uninstalled (added):
1438        * autogen.sh (added):
1439        * NEWS (added):
1440          Start autotooling.  Add a command-line application.
1441
14422009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1443
1444        * morituri/program/cdrdao.py:
1445          read all sessions by reading session 9.
1446        * morituri/image/toc.py:
1447          Parse ZERO statements properly.
1448          Also set absolute offsets when we know them from the .toc file.
1449          Properly set audio flag on tracks.
1450          FIXME: probably doesn't work if the .toc does not have lengths.
1451        * morituri/image/table.py:
1452          Add some debug to cddb disc id calculation.
1453          Fix absolutize function, it was going one index too far.
1454          raise ValueError when overriding .absolute with a wrong value.
1455        * examples/readdisc.py:
1456          Show CDDB disc id at the start.
1457          Assert when toc and table have different disc id's (to be fixed)
1458        * morituri/test/test_image_cue.py:
1459          Update for having the table already with absolute values.
1460        * morituri/test/test_image_toc.py:
1461          Add Ladyhawke CDDB test, it has a data track.
1462
14632009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1464
1465        * examples/readdisc.py:
1466          Move constants to common
1467
14682009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1469
1470        * examples/readdisc.py:
1471        * examples/readhtoa.py:
1472        * examples/readtoc.py:
1473          Rename IndexTable to Table.
1474
14752009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1476
1477        * morituri/image/cue.py:
1478        * morituri/image/image.py:
1479        * morituri/image/table.py:
1480        * morituri/image/toc.py:
1481        * morituri/program/cdparanoia.py:
1482        * morituri/program/cdrdao.py:
1483        * morituri/test/test_image_cue.py:
1484        * morituri/test/test_image_table.py:
1485          Rename IndexTable to Table.
1486
14872009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1488
1489        * morituri/image/cue.py:
1490        * morituri/image/image.py:
1491        * morituri/image/table.py:
1492        * morituri/image/toc.py:
1493        * morituri/program/cdrdao.py:
1494        * morituri/test/test_image_cue.py:
1495        * morituri/test/test_image_table.py:
1496          Rename ITTrack to Track.
1497
14982009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1499
1500        * morituri/common/common.py:
1501        * morituri/image/cue.py:
1502          Use FRAMES_PER_SECOND where appropriate.
1503
15042009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1505
1506        * morituri/common/checksum.py:
1507        * morituri/common/common.py:
1508        * morituri/image/image.py:
1509        * morituri/image/table.py:
1510        * morituri/program/cdparanoia.py:
1511          Move constants to common
1512
15132009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1514
1515        * examples/readdisc.py:
1516          Get our metadata only from the toc.
1517
15182009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1519
1520        * examples/readdisc.py:
1521          Also work for discs without htoa.
1522
15232009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1524
1525        * examples/readdisc.py:
1526          Write .m3u file.
1527
15282009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1529
1530        * examples/readdisc.py:
1531          Rip HTOA as well.  Add disc-template parameter.
1532
15332009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1534
1535        * morituri/image/table.py:
1536          Fix a subtle bug in our CDDB disc id calculation.
1537          The length of the audio should be calculated as the delta
1538          between leadout and start already converted (and truncated)
1539          to seconds.
1540        * morituri/test/bloc.cue:
1541        * morituri/test/test_image_toc.py:
1542          Fix up tests for this.
1543
15442009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1545
1546        * morituri/program/cdparanoia.py:
1547          Fix up track counting so HTOA can be ripped again.
1548        * examples/readhtoa.py:
1549          Fix up example so it works again, tested on Silent Alarm.
1550
15512009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1552
1553        * morituri/test/test_image_toc.py:
1554        * morituri/test/bloc.cue (added):
1555          Add an expected .cue file for the bloc party toc.
1556
15572009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1558
1559        * morituri/image/toc.py:
1560          Calculate the leadout from the sum of the track lengths.
1561        * morituri/test/breeders.cue:
1562        * morituri/test/cure.cue:
1563          Adapt expected results for DISCID.
1564        * morituri/image/table.py:
1565          Add an assert for hasTOC() when doing .cue()
1566        * morituri/test/test_image_toc.py:
1567        * morituri/test/test_image_cue.py:
1568          absolutize before cue()
1569
15702009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1571
1572        * morituri/image/table.py:
1573          Only add DISCID if our table is a TOC (which it isn't
1574          with our current .toc file parsing)
1575        * morituri/test/test_image_cue.py:
1576        * morituri/test/test_image_toc.py:
1577          Fix up tests; testsuite passes again.
1578
15792009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1580
1581        * morituri/image/toc.py:
1582          Add some debugging.
1583
15842009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1585
1586        * morituri/image/table.py:
1587          Update .cue writing:
1588          - customise program name
1589          - add DISCID
1590          - use counter for FILE lines
1591          - put FILE line before TRACK if track does not have INDEX 00
1592          Take counter into account for setFile
1593          Fix off-by-one in setFile
1594        * examples/readdisc.py:
1595          Add --track-template.
1596          Pass counter to setFile.
1597
15982009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1599
1600        * morituri/image/table.py:
1601          Add CDText writing to .cue() method.
1602        * morituri/image/toc.py:
1603          Add CDText parsing.
1604        * morituri/test/test_image_toc.py:
1605        * morituri/test/breeders.cue (added):
1606          Add a test for cue'ing the breeders' toc.
1607
16082009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1609
1610        * morituri/image/table.py:
1611        * morituri/image/toc.py:
1612          Add parsing of ISRC codes.
1613          Add first part of CDTEXT stuff.
1614        * morituri/test/test_image_toc.py:
1615          Add test for converting .toc to .cue
1616        * morituri/test/cure.cue
1617          Add reference for converted cure.toc
1618
16192009-05-10  Thomas Vander Stichele  <thomas at apestaart dot org>
1620
1621        * examples/readhtoa.py:
1622          Fix example.
1623
16242009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1625
1626        * morituri/image/table.py:
1627        * morituri/test/test_image_table.py:
1628          Correctly calculate MusicBrainz disc id for enhanced cd's.
1629
16302009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1631
1632        * morituri/common/task.py:
1633          Log on runners too.
1634        * morituri/program/cdrdao.py:
1635          Abort if output has ERROR by killing and setting an exception.
1636
16372009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1638
1639        * examples/readdisc.py:
1640          filter out slashes when deciding on file names.
1641
16422009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1643
1644        * morituri/common/task.py:
1645        * morituri/image/image.py:
1646          Remove prints.  Describe tasks.
1647
16482009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1649
1650        * morituri/common/task.py:
1651          Add an exception ivar for tasks to set an exception on while
1652          running.  Make SyncRunner raise it during done()
1653        * morituri/program/cdparanoia.py:
1654          Set an exception if the ripped file doesn't match the expected size
1655          (for example when disc is full)
1656
16572009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1658
1659        * morituri/common/common.py:
1660          Set the object when we don't persist.
1661        * examples/readdisc.py:
1662          Small fixes.
1663
16642009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1665
1666        * examples/readdisc.py:
1667          Fix up cue file reading.
1668
16692009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1670
1671        * examples/readdisc.py:
1672          Add musicbrainz code for disc naming.
1673
16742009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1675
1676        * morituri/image/table.py:
1677        * morituri/image/toc.py:
1678          Delete old code.
1679
16802009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1681
1682        * morituri/image/toc.py:
1683        * morituri/test/test_image_toc.py:
1684        * morituri/test/test_program_cdrdao.py:
1685          After careful vetting, fix up the expected values after toc parsing.
1686          Fix (untested) INDEX handling.  Fix handling of START.
1687
16882009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1689
1690        * morituri/image/table.py:
1691        * morituri/test/test_image_table.py:
1692          Implement MusicBrainz disc id.  Works for audio-only discs,
1693          have to figure out why it fails for an Enhanced CD like the
1694          Ladyhawke one.
1695
16962009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1697
1698        * morituri/image/table.py:
1699          Add logging.
1700          Add methods to clear a table of files, and to absolutize indexes
1701          as long as the source is the same file, and to set a File on a
1702          given index, adjusting all following indexes that match the
1703          duration, and check if the IndexTable has all information for a TOC.
1704        * morituri/image/toc.py:
1705          Add logging.
1706          Use a counter for the source.
1707          Fix up index offset calculation.
1708        * morituri/program/cdrdao.py:
1709          Use a real IndexTable as the result, instead of a TocFile.
1710        * morituri/image/cue.py:
1711          Use a real IndexTable to store tracks.
1712        * morituri/test/test_image_toc.py:
1713          The toc file now has a table which has the tracks.
1714          Fix the tests to adjust for wrong index calculations.
1715        * morituri/test/test_image_cue.py:
1716        * morituri/test/test_image_image.py:
1717        * morituri/image/image.py:
1718          The cue file now has a table which has the tracks.
1719        * morituri/test/test_image_table.py:
1720          Add assertions to make sure when the table can serve as a TOC.
1721        * examples/readdisc.py:
1722          Adjust for changes.  Fix up to include AccurateRip results.
1723          First time we can do a complete normal rip including verifying
1724          against AccurateRip results!
1725
17262009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1727
1728        * examples/readdisc.py:
1729        * morituri/image/table.py:
1730        * morituri/test/test_image_table.py:
1731          Fix up and deprecate stuff.
1732
17332009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1734
1735        * examples/movecue.py:
1736        * examples/readcue.py:
1737        * morituri/image/cue.py:
1738        * morituri/image/image.py:
1739        * morituri/image/toc.py:
1740        * morituri/program/cdrdao.py:
1741        * morituri/test/test_image_cue.py:
1742        * morituri/test/test_image_toc.py:
1743          Cue -> CueFile
1744          TOC -> TocFile
1745
17462009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1747
1748        * examples/readdisc.py (added):
1749          Add an example to read a whole disc.  Doesn't work yet.
1750
17512009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1752
1753        * examples/readhtoa.py:
1754          Fix up readhtoa example.  Add offset option.
1755
17562009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1757
1758        * examples/ARcalibrate.py:
1759        * examples/readhtoa.py:
1760        * examples/readtoc.py:
1761        * morituri/program/cdrdao.py:
1762          Rename ReadTOCTask to ReadIndexTableTask.
1763          Rename ReadTableTask to ReadTOCTask.
1764
17652009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1766
1767        * morituri/program/cdrdao.py:
1768          Convert ReadTableTask to a CDRDAOTask subclass.
1769        * examples/ARcalibrate.py:
1770        * morituri/program/cdparanoia.py:
1771          Adapt.
1772
17732009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1774
1775        * morituri/program/cdrdao.py:
1776          Fix up index scanning's progress report.
1777          Add some debugging.
1778
17792009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1780
1781        * morituri/program/cdrdao.py:
1782        * morituri/test/test_program_cdrdao.py:
1783          Fix up tests.  Use an IndexTable.
1784
17852009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1786
1787        * morituri/program/cdrdao.py:
1788          Massage out a base class for running cdrdao.
1789
17902009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1791
1792        * morituri/program/cdrdao.py:
1793        * morituri/test/test_program_cdrdao.py (added):
1794          Split out the parser from the task.  Test the parser.
1795
17962009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1797
1798        * morituri/image/cue.py:
1799        * morituri/image/image.py:
1800        * morituri/image/table.py:
1801        * morituri/program/cdparanoia.py:
1802        * morituri/test/test_image_cue.py:
1803          Move to using a shared IndexTable for everything.
1804          Sadly mixed with a MultiTask rename.
1805
18062009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1807
1808        * morituri/common/checksum.py:
1809          Update debugging.  Add repr.
1810
18112009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1812
1813        * examples/ARcue.py:
1814          Handle case where we have no matching response.
1815
18162009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1817
1818        * morituri/common/task.py:
1819          Distinguish more clearly between MultiSeparateTask and
1820          MultiCombinedTask.
1821
18222009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1823
1824        * morituri/image/cue.py:
1825        * morituri/test/test_image_cue.py:
1826          Add dumping of .cue files.
1827
18282009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1829
1830        * morituri/program/cdparanoia.py:
1831          Use a temporary file to rip to.
1832
18332009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1834
1835        * examples/readtrack.py:
1836          Allow specifying the track to save.
1837
18382009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1839
1840        * morituri/common/task.py:
1841          Make SyncRunner clear previous description/progress task by
1842          tracking longest output given up to now.
1843
18442009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1845
1846        * morituri/program/cdparanoia.py:
1847          Add a task to read and verify a track.
1848        * examples/readtrack.py:
1849          Use it to clean up code.
1850        * morituri/common/task.py:
1851          describe a MultiTask better.
1852
1853
18542009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1855
1856        * morituri/common/common.py:
1857          Create a Persister class to wrap a possible pickle path.
1858        * examples/trm.py:
1859          Use it.
1860
18612009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1862
1863        * morituri/program/cdparanoia.py:
1864          Add table to __init__, so we can correctly calculate cdparanoia's
1865          strange ripping regions.
1866        * examples/ARcalibrate.py:
1867          When we found a positive match on a first track, match all the other
1868          tracks too for confirmation.
1869
18702009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1871
1872        * morituri/common/taskgtk.py:
1873          Bug fix.
1874
18752009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1876
1877        * morituri/common/task.py:
1878        * morituri/common/taskgtk.py:
1879          Split off GtkProgressRunner in separate module to not import gtk
1880          everywhere.
1881        * examples/ARcalibrate.py:
1882        * examples/ARcue.py:
1883        * examples/gtkchecksum.py:
1884        * examples/trm.py:
1885          Adapt.
1886
18872009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1888
1889        * examples/ARcalibrate.py (added):
1890          Add an example that calculates the read offset of your drive
1891          using AccurateRip.
1892
18932009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1894
1895        * morituri/program/cdrdao.py:
1896          Add a task to read the Table.
1897
18982009-05-02  Thomas Vander Stichele  <thomas at apestaart dot org>
1899
1900        * morituri/common/task.py:
1901        * morituri/image/image.py:
1902          Add some debugging.
1903
19042009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1905
1906        * examples/readhtoa.py (added):
1907          Add an example that detects and rips the Hidden Track One Audio.
1908
19092009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1910
1911        * examples/readtoc.py:
1912        * morituri/program/cdrdao.py (added):
1913          Move the ReadTocTask to the new cdrdao module.
1914
19152009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1916
1917        * examples/readtrack.py:
1918        * morituri/program/cdparanoia.py:
1919          Move ReadTrackTask to cdparanoia module.
1920
19212009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1922
1923        * examples/readtrack.py (added):
1924          Add an example that reads a track using cdparanoia.
1925
19262009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1927
1928        * morituri/test/cdparanoia.progress (added):
1929        * morituri/test/test_program_cdparanoia.py (added):
1930        * morituri/program/__init__.py (added):
1931        * morituri/program/cdparanoia.py (added):
1932          Add a module to wrap cdparanoia.  Add a test for parsing
1933          the progress report output.
1934
19352009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1936
1937        * morituri/common/checksum.py:
1938          Debug fixes.
1939
19402009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1941
1942        * morituri/common/common.py:
1943          Create some common functions to parse MSF and back.
1944        * morituri/image/toc.py:
1945          Use it here.
1946
19472009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1948
1949        * examples/trm.py:
1950          Allow loading and saving fingerprints from a pickle.
1951
19522009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1953
1954        * morituri/image/toc.py:
1955        * morituri/test/test_image_toc.py:
1956        * morituri/test/bloc.toc (added):
1957          Fix up .toc parsing to correct index 0 behaviour.
1958          Add Bloc Party's Silent Alarm .toc file to test HTOA.
1959
19602009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1961
1962        * examples/readtoc.py:
1963          Update to work on my desktop.
1964
19652009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1966
1967        * morituri/common/task.py:
1968          Make task subclass log.Log
1969
19702009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1971
1972        * morituri/common/log.py:
1973          Add external log module and use it.
1974
19752009-04-29  Thomas Vander Stichele  <thomas at apestaart dot org>
1976
1977        * morituri/test/cure.toc (added):
1978          Add an example .toc file for the test.
1979
19802009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1981
1982        * examples/readtoc.py:
1983          Extract and print TOC.
1984
19852009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1986
1987        * morituri/test/test_image_toc.py (added):
1988        * morituri/image/toc.py (added):
1989          Add first stab at .toc parsing.
1990
19912009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1992
1993        * examples/readtoc.py:
1994          get errors from output too.
1995
19962009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1997
1998        * morituri/image/image.py:
1999        * morituri/image/table.py:
2000        * morituri/test/test_image_image.py:
2001        * morituri/test/test_image_table.py:
2002          Rename toc.TOC to table.Table
2003
20042009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2005
2006        * morituri/test/test_image_table.py (added):
2007        * morituri/image/table.py (added):
2008        * morituri/test/test_image_toc.py (deleted):
2009        * morituri/image/toc.py (deleted):
2010          Move files around in preparation for the .toc file parsing.
2011
20122009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
2013
2014        * examples/movecue.py (added):
2015          Add a script that moves a .cue file in its corresponding directory.
2016
20172009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
2018
2019        * morituri/test/kanye.cue (added):
2020          Add a cue test with mixed mode.
2021        * morituri/image/cue.py:
2022        * morituri/test/test_image_cue.py:
2023          Handle it properly.
2024
20252009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2026
2027        * morituri/image/cue.py:
2028          getRealPath should be here, it doesn't need anything outside
2029          the .cue file
2030        * morituri/image/image.py:
2031          Proxy it here.
2032
20332009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2034
2035        * morituri/common/checksum.py:
2036          Add some debugging.
2037        * morituri/test/test_image_image.py:
2038          Run less verbose.
2039
20402009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2041
2042        * morituri/common/task.py:
2043          Allow a SyncRunner to be constructed with verbose too.
2044          Separate a 'running' verbose mode from that.
2045          Fixes unwanted test output.
2046        * morituri/test/test_image_image.py:
2047          Run without verbosity.
2048
20492009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2050
2051        * morituri/test/test_image_image.py:
2052          Fix name.
2053
20542009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2055
2056        * morituri/test/test_common_renamer.py (added):
2057        * morituri/common/renamer.py (added):
2058          Add a way of doing transactional file renames, as well as their
2059          metafile updates.
2060
20612009-04-21  Thomas Vander Stichele  <thomas at apestaart dot org>
2062
2063        * morituri/common/task.py:
2064          Add a 'described' method so listeners can get proper notification
2065          of description changes, and update their description in between
2066          progress changes.
2067          Add a MultiCombinedTask that reports on progress over all tasks
2068          combined.
2069        * examples/trm.py:
2070          Add a playlist option to the example.  Still needs to store results
2071          to pickles, preferably after each completed task.
2072        * morituri/common/checksum.py:
2073          Add audioconvert to make sure we can trm ogg files.
2074
20752009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2076
2077        * morituri/common/task.py:
2078        * morituri/image/image.py:
2079          Move MultiTask to the task module.
2080
20812009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2082
2083        * morituri/common/checksum.py:
2084          Add a task to calculate a trm fingerprint.
2085        * examples/trm.py (added):
2086          Add an example.
2087          Strangely enough it starts burstily, doing 10% directly, halting,
2088          then progressing quickly,
2089
20902009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2091
2092        * examples/ARcue.py:
2093          Fix a bug in the gtk example.
2094
20952009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2096
2097        * examples/readtoc.py:
2098          Read the toc using cdrdao.  Now sets progress based on which
2099          frame it is on.
2100
21012009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
2102
2103        * morituri/common/task.py:
2104          Add a __main__ example using DummyTask.
2105
21062009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
2107
2108        * morituri/common/task.py:
2109          Make sure we also show progress when it's 0%, at the start.
2110
21112009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
2112
2113        * morituri/image/cue.py:
2114          Use names for matches in regexps.
2115
21162009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
2117
2118        * examples/readtoc.py (added):
2119          Add an example to read the TOC, not finished yet.
2120
21212009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
2122
2123        * morituri/extern (added):
2124        * morituri/extern/__init__.py (added):
2125        * morituri/extern/asyncsub.py (added):
2126          Add extern module; add asynchronous subprocess Popen from
2127          http://code.activestate.com/recipes/440554/
2128
21292009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2130
2131        * examples/gtkchecksum.py:
2132        * morituri/common/checksum.py:
2133          Final crc->checksum fixes.
2134
21352009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2136
2137        * examples/ARcue.py:
2138        * morituri/common/checksum.py:
2139        * morituri/image/image.py:
2140        * morituri/image/toc.py:
2141        * examples/gtkchecksum.py (added):
2142        * examples/gtkcrc.py (deleted):
2143          More crc->checksum changes.
2144
21452009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2146
2147        * examples/ARcue.py:
2148        * morituri/common/checksum.py:
2149        * morituri/image/image.py:
2150        * morituri/test/test_image_image.py:
2151          Change crc to checksum everywhere.
2152
21532009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2154
2155        * morituri/image/image.py:
2156        * morituri/image/toc.py:
2157        * morituri/common/checksum.py (added):
2158        * morituri/common/crc.py (deleted):
2159          Rename crc to checksum, because AccurateRip checksums are not CRC's.
2160
21612009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2162
2163        * examples/ARcue.py:
2164        * morituri/image/image.py:
2165        * morituri/test/test_image_image.py:
2166          Make everything use TOC for the id's.
2167
21682009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2169
2170        * morituri/image/image.py:
2171          Refactor to use TOC class.
2172        * morituri/image/toc.py:
2173          Fully document.
2174
21752009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2176
2177        * morituri/test/test_image_toc.py (added):
2178        * morituri/image/toc.py (added):
2179          Add an abstraction for a TOC.
2180          Take data tracks into account correctly for CDDB and AccurateRip
2181          disc ID's.
2182
21832009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
2184
2185        * morituri/image/image.py:
2186        * morituri/test/test_image_image.py:
2187          AccurateRip binary files actually contain multiple responses, so
2188          parse all of them.
2189        * examples/ARcue.py:
2190          Handle case of not having a response, and having multiple responses.
2191
21922009-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
2193
2194        * morituri/common/crc.py:
2195          Actually return the CRC when checking frame 5.
2196        * morituri/test/test_image_image.py:
2197          Update test for this fix.
2198
21992009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2200
2201        * morituri/image/image.py:
2202          Also look for audio file basename relative to cue file.
2203
22042009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2205
2206        * examples/ARcue.py:
2207          Make output a bit nicer, mentioning whether tracks were
2208          accurately ripped.
2209
22102009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2211
2212        * morituri/image/image.py:
2213          Add an object to parse the response of AccurateRip.
2214        * morituri/test/test_image_image.py:
2215        * morituri/test/dBAR-011-0010e284-009228a3-9809ff0b.bin (added):
2216          Add a test for it, based on my Kings Of Leon CD.
2217
22182009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2219
2220        * morituri/image/image.py:
2221          Add the 150 frames for the leadin only to the CDDB calculation.
2222          Add methods to calculate AccurateRip id's and URL.
2223        * morituri/test/test_image_image.py:
2224          Add tests for it.
2225        * examples/ARcue.py:
2226          Show AccurateRip URL.
2227
22282009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2229
2230        * examples/ARcue.py:
2231        * morituri/common/crc.py:
2232        * morituri/image/image.py:
2233        * morituri/test/test_image_image.py:
2234          Calculate CDDB disc id.
2235          Tested on my Kings Of Leon CD.
2236
22372009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2238
2239        * examples/ARcue.py:
2240        * morituri/image/image.py:
2241        * morituri/test/test_image_image.py:
2242          Add a task to verify a disk image, which also calculates
2243          track lengths for tracks the cue file doesn't know the length of.
2244
22452009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2246
2247        * examples/ARcue.py:
2248          Add option to run either command-line or gtk.
2249
22502009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2251
2252        * morituri/image/image.py:
2253          Create a MultiTask base class, and make AudioRipCRCTask
2254          use it.
2255
22562009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2257
2258        * morituri/image/image.py:
2259        * morituri/test/test_image_image.py:
2260          Add a task for calculating frame length of an audio file.
2261          Add a test for it.
2262
22632009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2264
2265        * morituri/common/task.py:
2266          Schedule the start from the main loop, otherwise the
2267          task might complete before we're in the main loop,
2268          and then the loop.quit() doesn't work.
2269
22702009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2271
2272        * examples/ARcue.py:
2273        * examples/gtkcrc.py:
2274          Rework both examples to look more similar.
2275
22762009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2277
2278        * examples/gtkcrc.py:
2279        * morituri/common/task.py:
2280          Move the gtk-based progress bar to task.
2281
22822009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2283
2284        * examples/gtkcrc.py:
2285        * morituri/common/crc.py:
2286        * morituri/common/task.py:
2287        * morituri/image/image.py:
2288          Add a 'schedule' call to the TaskRunner class, so that we can
2289          abstract things like gobject.timeout_add and reactor.callLater
2290          Pass the runner to the task in Task.start() so a task can call
2291          schedule.
2292
22932009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2294
2295        * morituri/common/task.py:
2296          Update the docs.
2297
22982009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2299
2300        * morituri/test/test_image_image.py (added):
2301          Add tests for AudioRip CRC'ing images.
2302
23032009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2304
2305        * morituri/test/track-separate.cue (added):
2306        * morituri/test/track.flac (added):
2307        * morituri/test/Makefile (added):
2308        * morituri/test/track-single.cue (added):
2309          Add a simple 10 frame flac file, and two .cue files
2310          using it.
2311
23122009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2313
2314        * morituri/image/image.py:
2315          If paths are relative, make them relative to cue file.
2316
23172009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2318
2319        * morituri/common/task.py:
2320          clear with whitespace.
2321
23222009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2323
2324        * examples/ARcue.py:
2325        * morituri/common/task.py:
2326        * morituri/image/image.py (added):
2327          Add an object for handling an Image based on a .cue file.
2328          Create a Task for CRC'ing the whole Image.
2329          Make the example use this new task instead.
2330
23312009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2332
2333        * examples/gtkcrc.py:
2334        * morituri/common/task.py:
2335          Add task object to listener interface methods.
2336
23372009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2338
2339        * morituri/common/task.py:
2340          Move methods around.
2341
23422009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2343
2344        * examples/ARcue.py:
2345        * examples/gtkcrc.py:
2346        * morituri/common/crc.py:
2347        * morituri/common/task.py:
2348          Split out generic task/runner from CRC tasks.
2349
23502009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2351
2352        * morituri/common/crc.py (added):
2353          Copy from task.py before splitting.
2354
23552009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2356
2357        * examples/gtkcrc.py:
2358        * morituri/common/task.py:
2359          Don't block the main loop by infinitely scheduling
2360          set_state.
2361
23622009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2363
2364        * examples/ARcue.py:
2365        * examples/gtkcrc.py:
2366        * morituri/common/task.py:
2367          Make a real Task interface and use it.
2368          Make runners reusable for multiple tasks.
2369          gtkcrc.py seems to be blocking updates however.
2370
23712009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2372
2373        * morituri/test (added):
2374        * morituri/test/test_image_cue.py (added):
2375        * morituri/test/kings-single.cue (added):
2376        * morituri/test/__init__.py (added):
2377        * morituri/test/kings-separate.cue (added):
2378          Add test suite.  Add Kings Of Leon cue files.
2379
23802009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2381
2382        * examples/ARcue.py:
2383          Error out when the file doesn't exist.
2384        * morituri/common/task.py:
2385          Drag the lake.
2386          Clean up prints.
2387
23882009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2389
2390        * morituri/common/task.py:
2391          Remove queue to avoid race.
2392          Remove prints.
2393          Clean up debug.
2394          Update progress after handling buffers.
2395
23962009-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
2397
2398        * morituri/common/task.py:
2399          Introduce constants for FRAMES_PER_DISC_FRAME
2400        * examples/ARcue.py:
2401          Use the constant.
2402          Get the CRC right for the last track too.
2403
24042009-03-26  Thomas Vander Stichele  <thomas at apestaart dot org>
2405
2406        * examples/ARcue.py:
2407        * morituri/common/task.py:
2408          Use an adapter to assemble CD frames.
2409          Take into account special rules for first and last track.
2410          Mention some bugs.
2411          Remember to drag the lake from the task.
2412
24132009-03-22  Thomas Vander Stichele  <thomas at apestaart dot org>
2414
2415        * examples/ARcue.py:
2416        * morituri/common/task.py:
2417          First version that seems to get some AccurateRip checksums right.
2418
24192009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2420
2421        * morituri/image/cue.py:
2422          publicize CueFile.tracks
2423          Add a method to get track lengths
2424        * examples/readcue.py:
2425          Use it.
2426
24272009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2428
2429        * morituri/common/task.py (added):
2430          Add a task abstraction.
2431
Note: See TracBrowser for help on using the repository browser.