source: trunk/ChangeLog @ 449

Revision 449, 66.2 KB checked in by thomas, 2 years ago (diff)
  • morituri/common/checksum.py:
  • morituri/image/image.py:
  • morituri/test/test_common_checksum.py:
  • morituri/common/gstreamer.py (added): Factor out GstException? and GstPipelineTask?.
Line 
12011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
2
3        * morituri/common/checksum.py:
4        * morituri/image/image.py:
5        * morituri/test/test_common_checksum.py:
6        * morituri/common/gstreamer.py (added):
7          Factor out GstException and GstPipelineTask.
8
92011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
10
11        * misc/morituri-uninstalled:
12          The binary name is rip, so add an option to override.
13          Fixes #46.
14
152011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
16
17        * morituri/rip/image.py:
18          Document image subcommand.  Fixes #61.
19
202011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
21
22        * morituri/test/Makefile.am:
23          Package error progress output.  Fixes distcheck on slaves.
24
252011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
26
27        * morituri/test/test_program_cdparanoia.py:
28          Update expected quality percentage.
29          Was broken since its commit in [432].
30
312011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
32
33        * morituri/common/checksum.py:
34        * morituri/common/encode.py:
35        * morituri/image/table.py:
36        * morituri/rip/cd.py:
37        * morituri/rip/image.py:
38        * morituri/rip/offset.py:
39        * morituri/test/test_common_accurip.py:
40        * morituri/test/test_common_checksum.py:
41        * morituri/test/test_image_cue.py:
42        * morituri/test/test_image_table.py:
43          Pychecker fixes.
44
452011-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
46
47        * morituri/common/checksum.py:
48          Actually raise the exception.
49        * morituri/common/task.py:
50          Document interface more clearly.
51        * morituri/test/test_common_checksum.py:
52          Use tcommon for test.common
53
542011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
55
56        * morituri/common/common.py:
57          Don't fail on loading pickle.
58
592011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
60
61        * morituri/common/encode.py:
62          Alac does not have merge_tags.  Fixes #15.
63
642011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
65
66        * morituri/program/cdparanoia.py:
67        * morituri/common/encode.py:
68        * morituri/common/program.py:
69        * morituri/rip/cd.py:
70          Add action and what args to describe task better.
71
722011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
73
74        * morituri/common/task.py:
75          Add more debug.
76
772011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
78
79        * morituri/rip/main.py:
80          More debug info: args, version, revision.
81
822011-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
83
84        * morituri/configure/configure.py (svn:keywords):
85          Expand revision.
86        * morituri/configure/configure.py:
87          Set it on the revision local.
88
892011-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
90
91        * morituri/common/encode.py:
92          wavenc does not have merge_tags, it seems.
93          So don't call an element a tagger, don't merge tags if there is
94          no tagger, and complain if there is no merge_tags when we think
95          there should be.
96
972011-03-23  Thomas Vander Stichele  <thomas at apestaart dot org>
98
99        * morituri/program/cdparanoia.py:
100          cdparanoia can hang indefinitely on scsi read errors.
101          For example, on some drives, when trying negative offsets.
102          Notice them, count them, and fail after 100.
103        * morituri/test/test_program_cdparanoia.py:
104        * morituri/test/cdparanoia.progress.error (added):
105          Add a test for this output.
106
1072011-03-22  Thomas Vander Stichele  <thomas at apestaart dot org>
108
109        * morituri/common/program.py:
110        * morituri/rip/offset.py:
111          When finding the offset, also load and possibly unmount, resolving
112          to the real path for the device.
113
1142011-03-20  Thomas Vander Stichele  <thomas at apestaart dot org>
115
116        * morituri/common/encode.py:
117          Debug failing to write tags better.  See #60.
118
1192011-03-20  Thomas Vander Stichele  <thomas at apestaart dot org>
120
121        * morituri/program/cdparanoia.py:
122          Extend FileSizeError with an extra message.
123        * morituri/rip/offset.py:
124          Print a reasonable warning when we cannot rip with a certain offset.
125          See #57.
126
1272011-03-17  Thomas Vander Stichele  <thomas at apestaart dot org>
128
129        * morituri/rip/drive.py:
130          Fix typo.  Fixes #59.
131
1322011-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
133
134        * morituri/common/checksum.py:
135          Create a GstException to wrap a Gst.GError.
136          Create a base GstPipelineTask class.
137          Use it in Checksum and TRM tasks.
138          Raise and don't proceed to call .paused() when a GstError happens.
139          Should help debug https://bugs.launchpad.net/bugs/735053
140        * morituri/test/test_common_checksum.py:
141          Adapt test.
142
1432011-01-09  Thomas Vander Stichele  <thomas at apestaart dot org>
144
145        patch by: Ross Burton
146
147        * morituri/common/program.py:
148          On compilation albums the album artist is different to the artist.
149          If this is the case, morituri should write both tags.
150          Fixes #43.
151
1522011-01-02  Thomas Vander Stichele  <thomas at apestaart dot org>
153
154        * morituri/common/program.py:
155        * morituri/image/table.py:
156        * morituri/rip/cd.py:
157          Get CDDB disc id.  Use it to print info when not found on
158          MusicBrainz.
159
1602011-01-01  Thomas Vander Stichele  <thomas at apestaart dot org>
161
162        * morituri/rip/cd.py:
163          Add -U/--unknown option to continue ripping even if the CD is
164          unknown.  Default to False.
165
1662010-12-30  Thomas Vander Stichele  <thomas at apestaart dot org>
167
168        * morituri/common/program.py:
169        * morituri/rip/cd.py:
170          Add load and eject device.  Do so before and after ripping.
171
1722010-11-14  Thomas Vander Stichele  <thomas at apestaart dot org>
173
174        patch by: Loïc Minier <lool at debian dot org>
175
176        * examples/ARcalibrate.py:
177        * examples/ARcue.py:
178        * examples/readdisc.py:
179        * morituri/rip/cd.py:
180        * morituri/rip/offset.py:
181          s/reponse/response.
182          Fixes #51.
183
1842010-11-08  Thomas Vander Stichele  <thomas at apestaart dot org>
185
186        * morituri/program/cdrdao.py:
187          Add logCategory to CDRDAO tasks.
188          Remove errors from parser, set them publically on task.
189          Properly raise exceptions on data cd's with correct stack origin.
190
1912010-07-08  Thomas Vander Stichele  <thomas at apestaart dot org>
192
193        * morituri/common/program.py:
194          Comment where we got the template variables from.
195        * morituri/rip/cd.py:
196          Document the template variables.
197
1982010-06-19  Thomas Vander Stichele  <thomas at apestaart dot org>
199
200        * morituri/program/cdparanoia.py:
201          Warn about missing cdparanoia too.
202
2032010-06-19  Thomas Vander Stichele  <thomas at apestaart dot org>
204
205        * morituri/common/common.py:
206          Add MissingDependencyException.
207        * morituri/program/cdrdao.py:
208        * morituri/rip/main.py:
209          Use it to warn about missing cdrdao.
210
2112010-06-18  Thomas Vander Stichele  <thomas at apestaart dot org>
212
213        * morituri/common/task.py:
214          Add exception traceback for easier debugging.
215
2162010-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
217
218        * morituri.spec.in:
219          Add requires for python-setuptools since we use parse_version.
220          Fixes #32.
221
2222010-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
223
224        * morituri/common/program.py:
225          Set results by default so that it is set even if we get an
226          exception getting them.
227          Fixes #35.
228
2292010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
230
231        * morituri/test/test_image_toc.py:
232          Fix distcheck by writing unicode toc filename in a temp dir.
233
2342010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
235
236        * morituri/rip/cd.py:
237          Log the version at the beginning to help in bug reports.
238
2392010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
240
241        * morituri/rip/main.py:
242          Fix another UnicodeEncodeError problem as mentioned in #25.
243
2442010-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
245
246        * morituri/test/Makefile.am:
247        * morituri/test/jose.toc (added):
248        * morituri/test/JoséGonzález.toc (deleted):
249          Rename utf-8 file to a normal file.
250        * morituri/test/common.py:
251        * morituri/test/test_common_checksum.py:
252        * morituri/test/test_common_encode.py:
253        * morituri/test/test_image_image.py:
254        * morituri/test/test_image_toc.py:
255          Copy the normal file first to the utf-8 filename, if supported.
256          Skip tests that need unicode when we are not in a utf-8 locale.
257
2582010-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
259
260        * configure.ac:
261        * doc/release:
262          Back to trunk.
263
264=== release 0.1.1 ===
265
2662010-04-16  Thomas Vander Stichele  <thomas at apestaart dot org>
267
268        * NEWS:
269        * README:
270        * RELEASE:
271        * configure.ac:
272        * doc/release:
273        * morituri.doap:
274          Releasing 0.1.1, 'Dead'
275
2762010-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
277
278        * morituri/common/encode.py:
279        * morituri/rip/image.py:
280          Provide status on the retagging.
281
2822010-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
283
284        patch by: Peter Oliver
285
286        * morituri/program/cdparanoia.py:
287          Respect umask for encoded files.  Fixes #17.
288
2892010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
290
291        * morituri/common/encode.py:
292          Before moving the newly tagged file to overwrite the original
293          one, copy over mode.
294
2952010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
296
297        * morituri/common/program.py:
298          Commit one missing line from patch in #4 for multi-artist discs.
299
3002010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
301
302        patch by: Peter Oliver
303
304        * morituri/common/program.py:
305          Handle multi-artist releases where track artist is unset.
306          Fixes #14.
307
3082010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
309
310        * morituri/rip/image.py:
311          Fix more utf-8 issues.
312
3132010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
314
315        * morituri/image/image.py:
316          Remove dead code.
317
3182010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
319
320        * morituri/common/encode.py:
321          Fix wrong code for checksum comparison.
322
3232010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
324
325        * morituri/common/program.py:
326          Rename some vars to start with mbid.  Fix pychecker issues.
327
3282010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
329
330        * morituri/common/program.py:
331          Add a retagging command.
332          Add a getMusicBrainz() method.
333          Also store musicbrainz track/album/artist ids.
334          Patch provided by Peter Oliver.  Fixes #4.
335        * morituri/rip/cd.py:
336          Use it.
337        * morituri/image/image.py:
338          Add a task to retag an image.
339        * morituri/rip/image.py:
340          Add a command to retag an image.
341
3422010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
343
344        * morituri/common/encode.py:
345          Add tasks to read, write, and safely retag flac files.
346        * morituri/test/test_common_encode.py:
347          Add tests for this.
348
3492010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
350
351        * morituri/common/checksum.py:
352          Style fixes.
353        * morituri/common/common.py:
354          Add functions to convert a gst.TagList to a dict and compare them.
355        * morituri/common/task.py:
356          Add setAndRaiseException which gives us an appropriate
357          exceptionMessage as if we raised where we called this new function.
358
3592010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
360
361        * morituri/common/encode.py:
362          pychecker fix.
363
3642010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
365
366        * morituri/common/encode.py:
367          Add a task to read tags.
368        * morituri/test/test_common_encode.py:
369          Add a test.
370
3712010-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
372
373        * morituri/common/encode.py:
374          Add a vbr profile.
375
3762010-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
377
378        * morituri/rip/image.py:
379          Don't splitext on inputdir; fixes encoding of directories like
380          Sigur Ros - Takk... (which removed a period)
381
3822010-04-09  Thomas Vander Stichele  <thomas at apestaart dot org>
383
384        * morituri/image/table.py:
385        * morituri/program/cdparanoia.py:
386          Do some 80 character cleanups.
387
3882010-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
389
390        * morituri/rip/image.py:
391          Fix problem to encode from files with unicode chars.
392
3932010-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
394
395        * morituri/program/cdparanoia.py:
396          Add some debug.
397        * morituri/common/encode.py:
398          Add more debug.
399          Handle the case where peak is full scale, and peakdB thus 0,
400          which triggered not setting self.peak.
401
4022010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
403
404        patch by: Peter Oliver
405
406        * morituri/common/program.py:
407          Allow using sortName for artist/track using %S/%s.
408          Fixes #19.
409
4102010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
411
412        * doc/release:
413          Document having clean test run.
414        * morituri/common/encode.py:
415          Catch and properly stop on gst.QueryError.
416          Don't set peak in stop if we had an error.
417        * morituri/test/test_common_encode.py:
418        * morituri/test/test_common_renamer.py:
419        * morituri/test/test_image_cue.py:
420          Clean up after tests.
421
4222010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
423
424        * morituri/common/task.py:
425        * morituri/image/cue.py:
426          Add logCategory.
427        * morituri/image/image.py:
428          If subtasks had an exception, retrigger the exception and stop.
429
4302010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
431
432        * morituri/image/image.py:
433          Fix AudioLengthTask for the case where we don't have the decoder,
434          by instead of doing get_state, waiting for an ASYNC_DONE or ERROR
435          message.  Properly raise a gst.GError in that case.
436        * morituri/common/task.py:
437          Add some debug.
438        * morituri/test/test_image_image.py:
439          After this fix, we now catch the TYPE_NOT_FOUND because of an
440          empty stream instead of the later gst.QueryError.
441        * morituri/test/test_common_encode.py:
442          Let us know what it is if not a gst.QueryError.
443
4442010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
445
446        * doc/Makefile.am:
447          Don't put rip.1 manpage in subdir.
448
4492010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
450
451        * morituri/common/common.py:
452          add quoteParse function to quote properly for gst.parse_launch()
453        * morituri/common/checksum.py:
454          Fix single quote problem.
455          use self.setException()
456        * morituri/common/encode.py:
457          Fix single quote problem.
458        * morituri/image/image.py:
459          Fix single quote problem.
460          Reraise gst.QueryError.
461        * morituri/test/test_common_encode.py:
462        * morituri/test/test_common_encode.py (added):
463          Add tests for unicode/single/double quote.
464        * morituri/test/test_image_image.py:
465        * morituri/test/test_common_checksum.py:
466          Add tests for single/double quote.
467        * morituri/test/common.py:
468          add twisted-like failUnlessRaises to TestCase that returns
469          the exception, so we can check wrapped exceptions in TaskException.
470          Fixes #16.
471
4722010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
473
474        * morituri/common/task.py:
475          Wrap exceptions during tasks in a TaskException, storing the
476          message, for improved error reporting later on.
477
4782010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
479
480        * doc/Makefile.am:
481        * morituri.spec.in:
482        * morituri/extern/Makefile.am:
483          Use help2man.py to generate manpage.
484
4852010-04-04  Thomas Vander Stichele  <thomas at apestaart dot org>
486
487        * morituri/common/encode.py:
488        * morituri/common/program.py:
489        * morituri/image/image.py:
490        * morituri/program/cdparanoia.py:
491        * morituri/rip/cd.py:
492        * morituri/rip/image.py:
493        * morituri/rip/offset.py:
494          Move all gst-using imports inside functions and classes
495          to avoid 'import gst' eating our options.
496          Fixes #12.
497
4982010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
499
500        * bin/Makefile.am:
501          Install rip as the script.
502
5032010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
504
505        * morituri/common/Makefile.am:
506          Add missing result.py
507        * morituri/test/Makefile.am:
508        * morituri/test/test_image_toc.py:
509        * morituri/test/JoséGonzález.toc (added):
510        * morituri/test/José González.toc (deleted):
511          automake doesn't handle spaces in names, so move it.
512
5132010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
514
515        * bin/rip.in:
516          Add our PYTHONLIBDIR to sys.path if needed.  Should make this
517          work when doing ./configure; sudo checkinstall make install
518          on e.g. Ubuntu.
519
5202010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
521
522        * configure.ac:
523        * bin/rip.in (added):
524        * bin/rip (deleted):
525          Generate bin/rip so we can do sys.path stuff.
526
5272010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
528
529        * morituri/rip/offset.py:
530          Add a more complete list of offsets, obtained using misc/offsets.py
531
5322010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
533
534        * misc/offsets.py (added):
535          Add a script to calculate list of offsets based on AccurateRip's
536          online database, according to popularity.
537
5382010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
539
540        * morituri/common/encode.py:
541          Handle utf-8 properly.
542
5432010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
544
545        * morituri/common/program.py:
546          Fix a problem with Arid's new album of not having an id.
547
5482010-01-31  Thomas Vander Stichele  <thomas at apestaart dot org>
549
550        * morituri/common/accurip.py:
551          The AccuRip cache dir could exist without the file; handle that
552          case.
553
5542009-12-28  Thomas Vander Stichele  <thomas at apestaart dot org>
555
556        * morituri/common/program.py:
557          For Various Artists releases, fall back to the release artist if
558          the track artist is None.
559
5602009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
561
562        * morituri/image/image.py:
563          Add ImageEncodeTask to encode a disk image to a different profile
564          and directory.
565        * morituri/common/encode.py:
566          Add lossy encoding profiles for mp3 and vorbis.
567          Rename muxer to tagger since that's what we use it for.
568          Do progress probe after level to make sure we get samples for
569          offsets.
570        * morituri/rip/image.py:
571          Add rip image encode command.
572
5732009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
574
575        * morituri/test/José González.toc (added):
576          Add test file for a test.
577
5782009-10-16  Thomas Vander Stichele  <thomas at apestaart dot org>
579
580        * morituri/common/task.py:
581          Add exceptionMessage on Task to store the result of
582          log.getExceptionMessage when the stack is still valid.
583
5842009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
585
586        * configure.ac:
587          Back to TRUNK.
588
589=== release 0.1.0 ===
590
5912009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
592
593        * NEWS:
594        * RELEASE:
595        * configure.ac:
596          Releasing 0.1.0, "Youngblood".
597
5982009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
599
600        * morituri/program/cdparanoia.py:
601          explicitize keyword args.
602          Break some 80+ lines.
603
6042009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
605
606        * morituri/rip/offset.py:
607          Pass device parameter to ReadTrackTask.  Thanks to Alex B for
608          spotting this on my blog.
609
6102009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
611
612        * morituri/program/cdparanoia.py:
613        * morituri/rip/offset.py:
614          Another unicode fix.
615
6162009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
617
618        * HACKING:
619          More unicode notes.
620        * morituri/common/program.py:
621        * morituri/image/table.py:
622        * morituri/image/toc.py:
623        * morituri/result/result.py:
624        * morituri/rip/cd.py:
625        * morituri/test/test_image_toc.py:
626          Further unicode fixes, for options, CD-Text, paths, ...
627
6282009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
629
630        * morituri/program/cdrdao.py:
631          Wrap read in an exception handler.
632        * morituri/common/task.py:
633          Debug exceptions more.
634
6352009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
636
637        * HACKING:
638          Note unicode handling.
639        * morituri/test/test_image_image.py:
640        * morituri/image/table.py:
641        * morituri/program/cdparanoia.py:
642        * morituri/common/checksum.py:
643          Use unicode for paths.
644          Use repr for path representation.
645        * morituri/test/test_common_checksum.py:
646          Add test for unicode audio file name.
647
6482009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
649
650        * morituri/image/cue.py:
651        * morituri/image/toc.py:
652        * morituri/test/test_image_cue.py:
653        * morituri/test/test_image_toc.py:
654          Read input file as utf-8.  Fix logging of paths.
655        * morituri/image/image.py:
656          Document and add asserts for unicodeness of paths.
657          Encode path in launch lines as utf-8
658
6592009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
660
661        * morituri/common/task.py:
662          Make SyncRunner wrap start() so we correctly handle any
663          exception being thrown.
664         
6652009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
666
667        * morituri/common/checksum.py:
668        * morituri/test/Makefile.am:
669        * morituri/test/test_common_checksum.py (added):
670          Add a check to make sure that checksumming an empty file doesn't
671          hang.  Fix the hang.
672
6732009-09-08  Thomas Vander Stichele  <thomas at apestaart dot org>
674
675        * morituri.spec.in:
676          Add pycdio as requirement.
677
6782009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
679
680        * morituri/common/program.py:
681          Fix getting AccurateRip results for albums with a HTOA.
682        * morituri/test/Makefile.am:
683        * morituri/test/test_common_program.py:
684        * morituri/test/silentalarm.result.pickle (added):
685          Add testcase for it, Bloc Party's Silent Alarm.
686
6872009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
688
689        * morituri.spec.in:
690          Update requirements to work around known bugs.
691
6922009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
693
694        * morituri/rip/cd.py:
695          Fix warning against rebuilt package.
696
6972009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
698
699        * README:
700          Fix up dependencies.
701        * morituri.spec.in:
702          Fix dependencies and noarch install location.
703        * morituri/common/Makefile.am:
704          Add result.py to dist
705
7062009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
707
708        * configure.ac:
709        * m4/Makefile.am:
710        * m4/as-ac-expand.m4 (added):
711          Correctly set installation dir for noarch python files so that it
712          works on 64 bit.
713
7142009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
715
716        * morituri/program/cdrdao.py:
717          Parse version number.
718        * morituri/rip/cd.py:
719          Warn about cdrdao versions with a bug.
720        * morituri/test/test_program_cdrdao.py:
721          Test that we can parse the version.
722
7232009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
724
725        * morituri/program/cdrdao.py:
726          Handle errors.  Tested by not having a CD in the drive.
727
7282009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
729
730        * morituri/common/task.py:
731          Document better.
732          Create an ITaskListener interface where we can document.
733          Log some more.
734
7352009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
736
737        * morituri/test/test_common_program.py:
738        * morituri/common/program.py:
739          Extract a common method to get textual representation of
740          AccurateRip results, and test it.
741        * morituri/rip/cd.py:
742        * morituri/rip/image.py:
743          Use the method.
744
7452009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
746
747        * morituri/image/table.py:
748          Fix deprecationwarning for python 2.6
749
7502009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
751
752        * morituri/test/test_common_program.py (added):
753        * morituri/common/program.py:
754          Break verifyImage into two so we can test it.
755          Test it using an AccurateRip result for Luke Haines Is Dead
756          which had a wrongly ripped track 10.
757
758
7592009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
760
761        * morituri/result/result.py:
762          Document some more.
763
7642009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
765
766        * morituri/test/Makefile.am:
767        * morituri/test/dBAR-020-002e5023-029d8e49-040eaa14.bin (added):
768          Add AR result for Luke Haines Is Dead disc 1
769
7702009-06-20  Thomas Vander Stichele  <thomas at apestaart dot org>
771
772        * Makefile.am:
773        * misc/pycheckerrc:
774        * morituri/common/accurip.py:
775        * morituri/common/checksum.py:
776        * morituri/common/encode.py:
777        * morituri/image/table.py:
778        * morituri/rip/drive.py:
779          Fix up for pychecker warnings for 2.6
780          Fix rip drive list, which forgot some modules.
781
7822009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
783
784        * morituri/rip/main.py:
785        * morituri/rip/image.py (added):
786          Add command to verify an image.
787        * morituri/common/program.py:
788        * morituri/rip/cd.py:
789          Fix AccurateRip checksum output.
790
7912009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
792
793        * morituri/common/drive.py:
794          Really make pycdio and cdio optional.
795        * morituri/rip/drive.py:
796        * morituri/rip/offset.py:
797          Use drive.getAllDevicePaths()
798
7992009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
800
801        * morituri/result/result.py:
802          Add max confidence from database.
803        * morituri/common/program.py:
804        * morituri/rip/cd.py:
805          Move AccurateRip checking to program.py
806          Re-rip if verification failed when continuing a rip.
807
8082009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
809
810        * morituri/image/cue.py:
811          Better debug.
812
8132009-06-09  Thomas Vander Stichele  <thomas at apestaart dot org>
814
815        * morituri/common/program.py:
816        * morituri/rip/cd.py:
817          Serialize the rip result after every rip, so we can pick up
818          where we left off with all result data.
819
8202009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
821
822        * morituri/common/program.py:
823          Move getPath to Program.
824          Remove arguments to ripTrack that can be gotten from
825          trackResult.
826        * morituri/rip/cd.py:
827          Continue without musicbrainz metadata.
828          Unify htoa and normal track ripping.
829        * morituri/result/result.py:
830          Add getTrackResult so it's easier to look up track results
831          when there's a HTOA.
832
8332009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
834
835        * morituri/common/program.py:
836        * morituri/rip/cd.py:
837          Move HTOA checking to program.
838
8392009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
840
841        * morituri/result/logger.py:
842          Fix for toctable->table
843        * morituri/common/program.py:
844        * morituri/rip/cd.py:
845          Move lots of functionality to program module.
846
8472009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
848
849        * morituri/result/result.py:
850          Change toctable to table since it's a full index table.
851        * morituri/common/Makefile.am:
852        * morituri/common/program.py (added):
853          Add module and class for program state.
854        * morituri/rip/cd.py:
855          Use the program state to clean up the do() function.
856
8572009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
858
859        * morituri/rip/cd.py:
860          Massage into 80 characters per line.
861          Make pycdio/cdio optional.
862
8632009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
864
865        * morituri/rip/drive.py:
866          Make pycdio and cdio optional.
867
8682009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
869
870        * morituri/image/table.py:
871          Add getPregap() method.
872        * morituri/rip/cd.py:
873          Use artist.name, not getUniqueName, to avoid monstruous names for
874          Muse.
875          Pass mbdiscid to getPath, so Unknown Disc can be saved with it.
876          Don't set the date if the release doesn't have one.
877          Set pregap on trackResult using new Track.getPregap()
878          Write all log/cue/m3u files as utf-8.
879
8802009-06-06  Thomas Vander Stichele  <thomas at apestaart dot org>
881
882        * morituri/test/cdparanoia.progress:
883          Add a shorter test file, 23 seconds.
884        * morituri/test/test_program_cdparanoia.py:
885          Update the test to adapt.  Check for track quality.
886        * morituri/program/cdparanoia.py:
887          Add a measure of track quality based on the number of reads.
888          Use the [wrote] output for progress updates, a bit more
889          jittery in its output.
890        * morituri/rip/cd.py:
891          Set track quality on RipResult.
892
8932009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
894
895        * morituri/rip/cd.py:
896          Use RipResult to store result information.
897        * morituri/result/logger.py (added):
898          Add a Logger to handle the RipResult, much like
899          EAC's log file.
900
9012009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
902
903        * morituri/rip/cd.py:
904          Comment out number of track setting on tag for now.
905          MusicBrainz can give us dates in YYYY, YYYY-MM, and YYYY-MM-DD
906          format, so convert to YYYY-MM-DD always.
907          Unmount the data part of the CD we want to rip if it is mounted.
908          Adapt to peak level change.
909          Don't try to write data tracks to the m3u file.
910          Resolve the device path to the actual device path.
911
9122009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
913
914        * morituri/result/result.py:
915          Add a Logger base class.
916
9172009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
918
919        * configure.ac:
920        * morituri/Makefile.am:
921        * morituri/result (added):
922        * morituri/result/result.py (added):
923        * morituri/result/__init__.py (added):
924        * morituri/result/Makefile.am (added):
925          Add classes to store track and rip results in.
926
9272009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
928
929        * morituri/common/common.py:
930          Add an argument for the delimiter in formatting.
931        * morituri/common/encode.py:
932          Most programs use peak volume, not power, so do this too.
933
9342009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
935
936        * morituri/test/common.py:
937          Add a method for diffing multiline strings.
938
9392009-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
940
941        * morituri/common/encode.py:
942          Add a test() method to the profile so we can warn about bad
943          flacenc versions.
944          Encode track number and count, and release date, if possible.
945        * morituri/rip/cd.py:
946          Fix another off-by-one error in the tag encoding.
947
9482009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
949
950        * morituri/program/cdparanoia.py:
951        * morituri/rip/cd.py:
952          Handle another off-by-one error in the m3u handling.
953          Add a getTagList function.
954          Use it to encode tags.
955
9562009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
957
958        * morituri/common/encode.py:
959        * morituri/program/cdparanoia.py:
960        * morituri/rip/cd.py:
961          Clean up the temporary unencoded file.
962          Pass profile as objects to tasks, so that temp files have the right
963          extension.
964
9652009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
966
967        * morituri/common/encode.py:
968        * morituri/program/cdparanoia.py:
969          Add encoding profiles, kept simple for now as a class and
970          subclasses.  Use them to encode.  Calculate peak level while
971          encoding, compared to EAC and replaygain's value.
972        * morituri/rip/cd.py:
973          Use the encoding profiles, ripping with the right extension.
974          Add a --profile parameter for it.
975
9762009-05-31  Thomas Vander Stichele  <thomas at apestaart dot org>
977
978        * morituri/rip/cd.py:
979          Clean up track numbering confusion.
980
9812009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
982
983        * morituri/common/encode.py (added):
984        * examples/encode.py (added):
985          Add an Encode Task, hardcoded to flac for now.
986          Add an example, that also sets tags.
987
9882009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
989
990        * morituri/common/task.py:
991          Add debug.
992        * morituri/rip/drive.py:
993          Show all drives, not just the ones that happen to have an Audio CD
994          inserted.
995
9962009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
997
998        * morituri/rip/cd.py:
999          Add asserts for comparing id's between the simple toc and
1000          the full table.
1001          Create the output directory before ripping the htoa.
1002          Ignore data tracks for now.
1003          Don't fail if we have no AccurateRip responses.
1004        * morituri/image/table.py:
1005          Add a session ivar to Track.
1006          Factor in session leadin when calculating track length
1007          of last track in a session.
1008          add getMusicBrainzSubmitURL()
1009          add _getSessionGap() because the session gap size is different
1010          for session 2 and all following.
1011          Use it in merge() to get offsets right.
1012          Fix getAccurateRipURL by only using the audio tracks for the
1013          'length in tracks' number
1014          Temporarily disable writing out data tracks to a .cue file,
1015          since it's not implemented yet.
1016          Add canCue to see if we can write a .cue file from the given table,
1017          and debug why not if not.
1018        * morituri/program/cdrdao.py:
1019          Rework to rip each session separately instead of using session 9.
1020          This fixes session 9 read-toc missing the pregap.
1021          Add a simple LineParser for handling output from disk-info.
1022          Count tracks relatively for the session, because the output for
1023          session 2 for track numbers picks up where session 1 left off.
1024          Don't set leadout from TOC printing since for the same reason
1025          session 2's leadout is absolute, not relative to start of session.
1026          Add a DiscInfoTask.
1027          Convert Table and Toc reading tasks to multitasks, first getting the
1028          number of sessions, then reading table/toc for each session.
1029
1030        * morituri/test/test_image_table.py:
1031          Fix up MusicBrainz disc id for my Ladyhawke disc.
1032          Add AccurateRip URL verification, compared against EAC's.
1033        * morituri/test/test_image_toc.py:
1034          Use two separate session read-toc output files to verify
1035          the case of Das Capital.
1036          Verify musicbrainz URL.
1037
10382009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1039
1040        * morituri/common/task.py:
1041          Add documentation.
1042          Use a _task counter instead of duplicating tasks to
1043          __tasks; this allows us to add tasks after starting.
1044          Catch Exceptions during next() so that we don't get
1045          stuck in a main loop that doesn't exit.
1046          Raise it later when we're done.
1047
10482009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1049
1050        * morituri/common/common.py:
1051          Since the version was inherited from the current code
1052          in unpickled objects, separate into classVersion and
1053          an instanceVersion set from __init__.
1054
10552009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1056
1057        * morituri/image/toc.py:
1058          Add a logName for debugging.
1059
10602009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1061
1062        * morituri/program/cdparanoia.py:
1063        * morituri/image/image.py:
1064          Correctly chain up to parent __init__ for MultiTasks
1065
10662009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1067
1068        * morituri/test/capital.1.toc (added):
1069        * morituri/test/capital.2.toc (added):
1070          Add two .toc's for two sessions of a 2 session disc
1071        * morituri/image/table.py:
1072          Add a merge method to merge in a second session.
1073        * morituri/test/Makefile.am:
1074        * morituri/test/test_image_toc.py:
1075          Add a test for merging the Das Capital sessions, gets
1076          the CDDB disc id right.
1077
10782009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
1079
1080        * morituri/common/common.py:
1081          Add a persisted cache so that we can store pickles on discs.
1082          Automatically delete them if the class version is newer than
1083          the object's.
1084        * morituri/rip/cd.py:
1085          Use it.
1086
10872009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1088
1089        * morituri/image/table.py:
1090          Add a version ivar to help with versioning pickled objects.
1091
10922009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1093
1094        * morituri/program/cdparanoia.py:
1095          Add copy and test CRC's to object.
1096
10972009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1098
1099        * morituri/common/Makefile.am:
1100        * morituri/common/drive.py (added):
1101          Add drive module.
1102
11032009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1104
1105        * morituri/program/cdparanoia.py:
1106        * morituri/program/cdrdao.py:
1107        * morituri/rip/cd.py:
1108        * morituri/rip/offset.py:
1109          Add device argument to ripping/scanning tasks.
1110
11112009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1112
1113        * morituri/common/accurip.py:
1114        * morituri/image/image.py:
1115        * morituri/test/Makefile.am:
1116        * morituri/test/test_image_image.py:
1117        * morituri/test/test_common_accurip.py (added):
1118          Move accuraterip stuff to the accurip module.
1119          Move/create new test file.
1120
11212009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1122
1123        * morituri/rip/Makefile.am:
1124        * morituri/rip/main.py:
1125        * morituri/rip/drive.py (added):
1126          Add 'rip drive list' command to list available drives.
1127        * morituri/common/accurip.py:
1128          Add force.
1129        * morituri/rip/cd.py:
1130          Add --output-directory argument.
1131
11322009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1133
1134        * morituri/common/Makefile.am:
1135        * morituri/rip/cd.py:
1136        * morituri/common/accurip.py (added):
1137          Add a module for handling a cache of AccurateRip results.
1138          Use it.
1139
11402009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1141
1142        * morituri/rip/Makefile.am:
1143        * morituri/rip/main.py:
1144        * morituri/rip/cd.py (added):
1145          Add second command, 'rip cd rip' before factoring out functionality.
1146
11472009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1148
1149        * morituri/rip/Makefile.am:
1150        * morituri/rip/main.py:
1151        * morituri/rip/offset.py (added):
1152          Add first command, 'rip offset find'
1153
11542009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
1155
1156        * Makefile.am:
1157        * morituri/test/Makefile.am:
1158          Make distcheck work.
1159
11602009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1161
1162        * morituri/common/checksum.py:
1163          More pychecker fixes.
1164
11652009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1166
1167        * morituri/common/common.py:
1168        * morituri/common/renamer.py:
1169          Pychecker fixes.
1170
11712009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1172
1173        * RELEASE:
1174        * misc/pycheckerrc:
1175        * misc/show-coverage.py:
1176        * morituri/image/Makefile.am:
1177        * morituri/program/Makefile.am:
1178        * RELEASE (added):
1179        * morituri/image/Makefile.am (added):
1180        * morituri/program/Makefile.am (added):
1181        * misc/show-coverage.py (added):
1182        * misc/pycheckerrc (added):
1183          more additions
1184
11852009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1186
1187        * AUTHORS:
1188        * Makefile.am:
1189        * NEWS:
1190        * TODO:
1191        * autogen.sh:
1192        * configure.ac:
1193        * examples/ARcalibrate.py:
1194        * misc/Makefile.am:
1195        * misc/morituri-uninstalled:
1196        * morituri.spec.in:
1197        * morituri/Makefile.am:
1198        * morituri/common/Makefile.am:
1199        * morituri/common/logcommand.py:
1200        * morituri/extern/Makefile.am:
1201        * morituri/rip/Makefile.am:
1202        * morituri/rip/__init__.py:
1203        * morituri/rip/main.py:
1204        * morituri/test/Makefile:
1205        * morituri/test/Makefile.am:
1206        * configure.ac (added):
1207        * AUTHORS (added):
1208        * morituri.spec.in (added):
1209        * Makefile.am (added):
1210        * morituri/test/Makefile.am (added):
1211        * morituri/extern/Makefile.am (added):
1212        * morituri/common/logcommand.py (added):
1213        * morituri/common/Makefile.am (added):
1214        * morituri/Makefile.am (added):
1215        * morituri/rip (added):
1216        * morituri/rip/__init__.py (added):
1217        * morituri/rip/Makefile.am (added):
1218        * morituri/rip/main.py (added):
1219        * misc/Makefile.am (added):
1220        * misc/morituri-uninstalled (added):
1221        * autogen.sh (added):
1222        * NEWS (added):
1223          Start autotooling.  Add a command-line application.
1224
12252009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1226
1227        * morituri/program/cdrdao.py:
1228          read all sessions by reading session 9.
1229        * morituri/image/toc.py:
1230          Parse ZERO statements properly.
1231          Also set absolute offsets when we know them from the .toc file.
1232          Properly set audio flag on tracks.
1233          FIXME: probably doesn't work if the .toc does not have lengths.
1234        * morituri/image/table.py:
1235          Add some debug to cddb disc id calculation.
1236          Fix absolutize function, it was going one index too far.
1237          raise ValueError when overriding .absolute with a wrong value.
1238        * examples/readdisc.py:
1239          Show CDDB disc id at the start.
1240          Assert when toc and table have different disc id's (to be fixed)
1241        * morituri/test/test_image_cue.py:
1242          Update for having the table already with absolute values.
1243        * morituri/test/test_image_toc.py:
1244          Add Ladyhawke CDDB test, it has a data track.
1245
12462009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1247
1248        * examples/readdisc.py:
1249          Move constants to common
1250
12512009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1252
1253        * examples/readdisc.py:
1254        * examples/readhtoa.py:
1255        * examples/readtoc.py:
1256          Rename IndexTable to Table.
1257
12582009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1259
1260        * morituri/image/cue.py:
1261        * morituri/image/image.py:
1262        * morituri/image/table.py:
1263        * morituri/image/toc.py:
1264        * morituri/program/cdparanoia.py:
1265        * morituri/program/cdrdao.py:
1266        * morituri/test/test_image_cue.py:
1267        * morituri/test/test_image_table.py:
1268          Rename IndexTable to Table.
1269
12702009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1271
1272        * morituri/image/cue.py:
1273        * morituri/image/image.py:
1274        * morituri/image/table.py:
1275        * morituri/image/toc.py:
1276        * morituri/program/cdrdao.py:
1277        * morituri/test/test_image_cue.py:
1278        * morituri/test/test_image_table.py:
1279          Rename ITTrack to Track.
1280
12812009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1282
1283        * morituri/common/common.py:
1284        * morituri/image/cue.py:
1285          Use FRAMES_PER_SECOND where appropriate.
1286
12872009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1288
1289        * morituri/common/checksum.py:
1290        * morituri/common/common.py:
1291        * morituri/image/image.py:
1292        * morituri/image/table.py:
1293        * morituri/program/cdparanoia.py:
1294          Move constants to common
1295
12962009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1297
1298        * examples/readdisc.py:
1299          Get our metadata only from the toc.
1300
13012009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1302
1303        * examples/readdisc.py:
1304          Also work for discs without htoa.
1305
13062009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1307
1308        * examples/readdisc.py:
1309          Write .m3u file.
1310
13112009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1312
1313        * examples/readdisc.py:
1314          Rip HTOA as well.  Add disc-template parameter.
1315
13162009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1317
1318        * morituri/image/table.py:
1319          Fix a subtle bug in our CDDB disc id calculation.
1320          The length of the audio should be calculated as the delta
1321          between leadout and start already converted (and truncated)
1322          to seconds.
1323        * morituri/test/bloc.cue:
1324        * morituri/test/test_image_toc.py:
1325          Fix up tests for this.
1326
13272009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1328
1329        * morituri/program/cdparanoia.py:
1330          Fix up track counting so HTOA can be ripped again.
1331        * examples/readhtoa.py:
1332          Fix up example so it works again, tested on Silent Alarm.
1333
13342009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1335
1336        * morituri/test/test_image_toc.py:
1337        * morituri/test/bloc.cue (added):
1338          Add an expected .cue file for the bloc party toc.
1339
13402009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1341
1342        * morituri/image/toc.py:
1343          Calculate the leadout from the sum of the track lengths.
1344        * morituri/test/breeders.cue:
1345        * morituri/test/cure.cue:
1346          Adapt expected results for DISCID.
1347        * morituri/image/table.py:
1348          Add an assert for hasTOC() when doing .cue()
1349        * morituri/test/test_image_toc.py:
1350        * morituri/test/test_image_cue.py:
1351          absolutize before cue()
1352
13532009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1354
1355        * morituri/image/table.py:
1356          Only add DISCID if our table is a TOC (which it isn't
1357          with our current .toc file parsing)
1358        * morituri/test/test_image_cue.py:
1359        * morituri/test/test_image_toc.py:
1360          Fix up tests; testsuite passes again.
1361
13622009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1363
1364        * morituri/image/toc.py:
1365          Add some debugging.
1366
13672009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1368
1369        * morituri/image/table.py:
1370          Update .cue writing:
1371          - customise program name
1372          - add DISCID
1373          - use counter for FILE lines
1374          - put FILE line before TRACK if track does not have INDEX 00
1375          Take counter into account for setFile
1376          Fix off-by-one in setFile
1377        * examples/readdisc.py:
1378          Add --track-template.
1379          Pass counter to setFile.
1380
13812009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1382
1383        * morituri/image/table.py:
1384          Add CDText writing to .cue() method.
1385        * morituri/image/toc.py:
1386          Add CDText parsing.
1387        * morituri/test/test_image_toc.py:
1388        * morituri/test/breeders.cue (added):
1389          Add a test for cue'ing the breeders' toc.
1390
13912009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1392
1393        * morituri/image/table.py:
1394        * morituri/image/toc.py:
1395          Add parsing of ISRC codes.
1396          Add first part of CDTEXT stuff.
1397        * morituri/test/test_image_toc.py:
1398          Add test for converting .toc to .cue
1399        * morituri/test/cure.cue
1400          Add reference for converted cure.toc
1401
14022009-05-10  Thomas Vander Stichele  <thomas at apestaart dot org>
1403
1404        * examples/readhtoa.py:
1405          Fix example.
1406
14072009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1408
1409        * morituri/image/table.py:
1410        * morituri/test/test_image_table.py:
1411          Correctly calculate MusicBrainz disc id for enhanced cd's.
1412
14132009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1414
1415        * morituri/common/task.py:
1416          Log on runners too.
1417        * morituri/program/cdrdao.py:
1418          Abort if output has ERROR by killing and setting an exception.
1419
14202009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1421
1422        * examples/readdisc.py:
1423          filter out slashes when deciding on file names.
1424
14252009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1426
1427        * morituri/common/task.py:
1428        * morituri/image/image.py:
1429          Remove prints.  Describe tasks.
1430
14312009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1432
1433        * morituri/common/task.py:
1434          Add an exception ivar for tasks to set an exception on while
1435          running.  Make SyncRunner raise it during done()
1436        * morituri/program/cdparanoia.py:
1437          Set an exception if the ripped file doesn't match the expected size
1438          (for example when disc is full)
1439
14402009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1441
1442        * morituri/common/common.py:
1443          Set the object when we don't persist.
1444        * examples/readdisc.py:
1445          Small fixes.
1446
14472009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1448
1449        * examples/readdisc.py:
1450          Fix up cue file reading.
1451
14522009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1453
1454        * examples/readdisc.py:
1455          Add musicbrainz code for disc naming.
1456
14572009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1458
1459        * morituri/image/table.py:
1460        * morituri/image/toc.py:
1461          Delete old code.
1462
14632009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1464
1465        * morituri/image/toc.py:
1466        * morituri/test/test_image_toc.py:
1467        * morituri/test/test_program_cdrdao.py:
1468          After careful vetting, fix up the expected values after toc parsing.
1469          Fix (untested) INDEX handling.  Fix handling of START.
1470
14712009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1472
1473        * morituri/image/table.py:
1474        * morituri/test/test_image_table.py:
1475          Implement MusicBrainz disc id.  Works for audio-only discs,
1476          have to figure out why it fails for an Enhanced CD like the
1477          Ladyhawke one.
1478
14792009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1480
1481        * morituri/image/table.py:
1482          Add logging.
1483          Add methods to clear a table of files, and to absolutize indexes
1484          as long as the source is the same file, and to set a File on a
1485          given index, adjusting all following indexes that match the
1486          duration, and check if the IndexTable has all information for a TOC.
1487        * morituri/image/toc.py:
1488          Add logging.
1489          Use a counter for the source.
1490          Fix up index offset calculation.
1491        * morituri/program/cdrdao.py:
1492          Use a real IndexTable as the result, instead of a TocFile.
1493        * morituri/image/cue.py:
1494          Use a real IndexTable to store tracks.
1495        * morituri/test/test_image_toc.py:
1496          The toc file now has a table which has the tracks.
1497          Fix the tests to adjust for wrong index calculations.
1498        * morituri/test/test_image_cue.py:
1499        * morituri/test/test_image_image.py:
1500        * morituri/image/image.py:
1501          The cue file now has a table which has the tracks.
1502        * morituri/test/test_image_table.py:
1503          Add assertions to make sure when the table can serve as a TOC.
1504        * examples/readdisc.py:
1505          Adjust for changes.  Fix up to include AccurateRip results.
1506          First time we can do a complete normal rip including verifying
1507          against AccurateRip results!
1508
15092009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1510
1511        * examples/readdisc.py:
1512        * morituri/image/table.py:
1513        * morituri/test/test_image_table.py:
1514          Fix up and deprecate stuff.
1515
15162009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1517
1518        * examples/movecue.py:
1519        * examples/readcue.py:
1520        * morituri/image/cue.py:
1521        * morituri/image/image.py:
1522        * morituri/image/toc.py:
1523        * morituri/program/cdrdao.py:
1524        * morituri/test/test_image_cue.py:
1525        * morituri/test/test_image_toc.py:
1526          Cue -> CueFile
1527          TOC -> TocFile
1528
15292009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1530
1531        * examples/readdisc.py (added):
1532          Add an example to read a whole disc.  Doesn't work yet.
1533
15342009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1535
1536        * examples/readhtoa.py:
1537          Fix up readhtoa example.  Add offset option.
1538
15392009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1540
1541        * examples/ARcalibrate.py:
1542        * examples/readhtoa.py:
1543        * examples/readtoc.py:
1544        * morituri/program/cdrdao.py:
1545          Rename ReadTOCTask to ReadIndexTableTask.
1546          Rename ReadTableTask to ReadTOCTask.
1547
15482009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1549
1550        * morituri/program/cdrdao.py:
1551          Convert ReadTableTask to a CDRDAOTask subclass.
1552        * examples/ARcalibrate.py:
1553        * morituri/program/cdparanoia.py:
1554          Adapt.
1555
15562009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1557
1558        * morituri/program/cdrdao.py:
1559          Fix up index scanning's progress report.
1560          Add some debugging.
1561
15622009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1563
1564        * morituri/program/cdrdao.py:
1565        * morituri/test/test_program_cdrdao.py:
1566          Fix up tests.  Use an IndexTable.
1567
15682009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1569
1570        * morituri/program/cdrdao.py:
1571          Massage out a base class for running cdrdao.
1572
15732009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1574
1575        * morituri/program/cdrdao.py:
1576        * morituri/test/test_program_cdrdao.py (added):
1577          Split out the parser from the task.  Test the parser.
1578
15792009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1580
1581        * morituri/image/cue.py:
1582        * morituri/image/image.py:
1583        * morituri/image/table.py:
1584        * morituri/program/cdparanoia.py:
1585        * morituri/test/test_image_cue.py:
1586          Move to using a shared IndexTable for everything.
1587          Sadly mixed with a MultiTask rename.
1588
15892009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1590
1591        * morituri/common/checksum.py:
1592          Update debugging.  Add repr.
1593
15942009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1595
1596        * examples/ARcue.py:
1597          Handle case where we have no matching response.
1598
15992009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1600
1601        * morituri/common/task.py:
1602          Distinguish more clearly between MultiSeparateTask and
1603          MultiCombinedTask.
1604
16052009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1606
1607        * morituri/image/cue.py:
1608        * morituri/test/test_image_cue.py:
1609          Add dumping of .cue files.
1610
16112009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1612
1613        * morituri/program/cdparanoia.py:
1614          Use a temporary file to rip to.
1615
16162009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1617
1618        * examples/readtrack.py:
1619          Allow specifying the track to save.
1620
16212009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1622
1623        * morituri/common/task.py:
1624          Make SyncRunner clear previous description/progress task by
1625          tracking longest output given up to now.
1626
16272009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1628
1629        * morituri/program/cdparanoia.py:
1630          Add a task to read and verify a track.
1631        * examples/readtrack.py:
1632          Use it to clean up code.
1633        * morituri/common/task.py:
1634          describe a MultiTask better.
1635
1636
16372009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1638
1639        * morituri/common/common.py:
1640          Create a Persister class to wrap a possible pickle path.
1641        * examples/trm.py:
1642          Use it.
1643
16442009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1645
1646        * morituri/program/cdparanoia.py:
1647          Add table to __init__, so we can correctly calculate cdparanoia's
1648          strange ripping regions.
1649        * examples/ARcalibrate.py:
1650          When we found a positive match on a first track, match all the other
1651          tracks too for confirmation.
1652
16532009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1654
1655        * morituri/common/taskgtk.py:
1656          Bug fix.
1657
16582009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1659
1660        * morituri/common/task.py:
1661        * morituri/common/taskgtk.py:
1662          Split off GtkProgressRunner in separate module to not import gtk
1663          everywhere.
1664        * examples/ARcalibrate.py:
1665        * examples/ARcue.py:
1666        * examples/gtkchecksum.py:
1667        * examples/trm.py:
1668          Adapt.
1669
16702009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1671
1672        * examples/ARcalibrate.py (added):
1673          Add an example that calculates the read offset of your drive
1674          using AccurateRip.
1675
16762009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1677
1678        * morituri/program/cdrdao.py:
1679          Add a task to read the Table.
1680
16812009-05-02  Thomas Vander Stichele  <thomas at apestaart dot org>
1682
1683        * morituri/common/task.py:
1684        * morituri/image/image.py:
1685          Add some debugging.
1686
16872009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1688
1689        * examples/readhtoa.py (added):
1690          Add an example that detects and rips the Hidden Track One Audio.
1691
16922009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1693
1694        * examples/readtoc.py:
1695        * morituri/program/cdrdao.py (added):
1696          Move the ReadTocTask to the new cdrdao module.
1697
16982009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1699
1700        * examples/readtrack.py:
1701        * morituri/program/cdparanoia.py:
1702          Move ReadTrackTask to cdparanoia module.
1703
17042009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1705
1706        * examples/readtrack.py (added):
1707          Add an example that reads a track using cdparanoia.
1708
17092009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1710
1711        * morituri/test/cdparanoia.progress (added):
1712        * morituri/test/test_program_cdparanoia.py (added):
1713        * morituri/program/__init__.py (added):
1714        * morituri/program/cdparanoia.py (added):
1715          Add a module to wrap cdparanoia.  Add a test for parsing
1716          the progress report output.
1717
17182009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1719
1720        * morituri/common/checksum.py:
1721          Debug fixes.
1722
17232009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1724
1725        * morituri/common/common.py:
1726          Create some common functions to parse MSF and back.
1727        * morituri/image/toc.py:
1728          Use it here.
1729
17302009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1731
1732        * examples/trm.py:
1733          Allow loading and saving fingerprints from a pickle.
1734
17352009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1736
1737        * morituri/image/toc.py:
1738        * morituri/test/test_image_toc.py:
1739        * morituri/test/bloc.toc (added):
1740          Fix up .toc parsing to correct index 0 behaviour.
1741          Add Bloc Party's Silent Alarm .toc file to test HTOA.
1742
17432009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1744
1745        * examples/readtoc.py:
1746          Update to work on my desktop.
1747
17482009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1749
1750        * morituri/common/task.py:
1751          Make task subclass log.Log
1752
17532009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1754
1755        * morituri/common/log.py:
1756          Add external log module and use it.
1757
17582009-04-29  Thomas Vander Stichele  <thomas at apestaart dot org>
1759
1760        * morituri/test/cure.toc (added):
1761          Add an example .toc file for the test.
1762
17632009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1764
1765        * examples/readtoc.py:
1766          Extract and print TOC.
1767
17682009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1769
1770        * morituri/test/test_image_toc.py (added):
1771        * morituri/image/toc.py (added):
1772          Add first stab at .toc parsing.
1773
17742009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1775
1776        * examples/readtoc.py:
1777          get errors from output too.
1778
17792009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1780
1781        * morituri/image/image.py:
1782        * morituri/image/table.py:
1783        * morituri/test/test_image_image.py:
1784        * morituri/test/test_image_table.py:
1785          Rename toc.TOC to table.Table
1786
17872009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1788
1789        * morituri/test/test_image_table.py (added):
1790        * morituri/image/table.py (added):
1791        * morituri/test/test_image_toc.py (deleted):
1792        * morituri/image/toc.py (deleted):
1793          Move files around in preparation for the .toc file parsing.
1794
17952009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1796
1797        * examples/movecue.py (added):
1798          Add a script that moves a .cue file in its corresponding directory.
1799
18002009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1801
1802        * morituri/test/kanye.cue (added):
1803          Add a cue test with mixed mode.
1804        * morituri/image/cue.py:
1805        * morituri/test/test_image_cue.py:
1806          Handle it properly.
1807
18082009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1809
1810        * morituri/image/cue.py:
1811          getRealPath should be here, it doesn't need anything outside
1812          the .cue file
1813        * morituri/image/image.py:
1814          Proxy it here.
1815
18162009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1817
1818        * morituri/common/checksum.py:
1819          Add some debugging.
1820        * morituri/test/test_image_image.py:
1821          Run less verbose.
1822
18232009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1824
1825        * morituri/common/task.py:
1826          Allow a SyncRunner to be constructed with verbose too.
1827          Separate a 'running' verbose mode from that.
1828          Fixes unwanted test output.
1829        * morituri/test/test_image_image.py:
1830          Run without verbosity.
1831
18322009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1833
1834        * morituri/test/test_image_image.py:
1835          Fix name.
1836
18372009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1838
1839        * morituri/test/test_common_renamer.py (added):
1840        * morituri/common/renamer.py (added):
1841          Add a way of doing transactional file renames, as well as their
1842          metafile updates.
1843
18442009-04-21  Thomas Vander Stichele  <thomas at apestaart dot org>
1845
1846        * morituri/common/task.py:
1847          Add a 'described' method so listeners can get proper notification
1848          of description changes, and update their description in between
1849          progress changes.
1850          Add a MultiCombinedTask that reports on progress over all tasks
1851          combined.
1852        * examples/trm.py:
1853          Add a playlist option to the example.  Still needs to store results
1854          to pickles, preferably after each completed task.
1855        * morituri/common/checksum.py:
1856          Add audioconvert to make sure we can trm ogg files.
1857
18582009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1859
1860        * morituri/common/task.py:
1861        * morituri/image/image.py:
1862          Move MultiTask to the task module.
1863
18642009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1865
1866        * morituri/common/checksum.py:
1867          Add a task to calculate a trm fingerprint.
1868        * examples/trm.py (added):
1869          Add an example.
1870          Strangely enough it starts burstily, doing 10% directly, halting,
1871          then progressing quickly,
1872
18732009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1874
1875        * examples/ARcue.py:
1876          Fix a bug in the gtk example.
1877
18782009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1879
1880        * examples/readtoc.py:
1881          Read the toc using cdrdao.  Now sets progress based on which
1882          frame it is on.
1883
18842009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1885
1886        * morituri/common/task.py:
1887          Add a __main__ example using DummyTask.
1888
18892009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1890
1891        * morituri/common/task.py:
1892          Make sure we also show progress when it's 0%, at the start.
1893
18942009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1895
1896        * morituri/image/cue.py:
1897          Use names for matches in regexps.
1898
18992009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1900
1901        * examples/readtoc.py (added):
1902          Add an example to read the TOC, not finished yet.
1903
19042009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1905
1906        * morituri/extern (added):
1907        * morituri/extern/__init__.py (added):
1908        * morituri/extern/asyncsub.py (added):
1909          Add extern module; add asynchronous subprocess Popen from
1910          http://code.activestate.com/recipes/440554/
1911
19122009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1913
1914        * examples/gtkchecksum.py:
1915        * morituri/common/checksum.py:
1916          Final crc->checksum fixes.
1917
19182009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1919
1920        * examples/ARcue.py:
1921        * morituri/common/checksum.py:
1922        * morituri/image/image.py:
1923        * morituri/image/toc.py:
1924        * examples/gtkchecksum.py (added):
1925        * examples/gtkcrc.py (deleted):
1926          More crc->checksum changes.
1927
19282009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1929
1930        * examples/ARcue.py:
1931        * morituri/common/checksum.py:
1932        * morituri/image/image.py:
1933        * morituri/test/test_image_image.py:
1934          Change crc to checksum everywhere.
1935
19362009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1937
1938        * morituri/image/image.py:
1939        * morituri/image/toc.py:
1940        * morituri/common/checksum.py (added):
1941        * morituri/common/crc.py (deleted):
1942          Rename crc to checksum, because AccurateRip checksums are not CRC's.
1943
19442009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1945
1946        * examples/ARcue.py:
1947        * morituri/image/image.py:
1948        * morituri/test/test_image_image.py:
1949          Make everything use TOC for the id's.
1950
19512009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1952
1953        * morituri/image/image.py:
1954          Refactor to use TOC class.
1955        * morituri/image/toc.py:
1956          Fully document.
1957
19582009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1959
1960        * morituri/test/test_image_toc.py (added):
1961        * morituri/image/toc.py (added):
1962          Add an abstraction for a TOC.
1963          Take data tracks into account correctly for CDDB and AccurateRip
1964          disc ID's.
1965
19662009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1967
1968        * morituri/image/image.py:
1969        * morituri/test/test_image_image.py:
1970          AccurateRip binary files actually contain multiple responses, so
1971          parse all of them.
1972        * examples/ARcue.py:
1973          Handle case of not having a response, and having multiple responses.
1974
19752009-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1976
1977        * morituri/common/crc.py:
1978          Actually return the CRC when checking frame 5.
1979        * morituri/test/test_image_image.py:
1980          Update test for this fix.
1981
19822009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1983
1984        * morituri/image/image.py:
1985          Also look for audio file basename relative to cue file.
1986
19872009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1988
1989        * examples/ARcue.py:
1990          Make output a bit nicer, mentioning whether tracks were
1991          accurately ripped.
1992
19932009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1994
1995        * morituri/image/image.py:
1996          Add an object to parse the response of AccurateRip.
1997        * morituri/test/test_image_image.py:
1998        * morituri/test/dBAR-011-0010e284-009228a3-9809ff0b.bin (added):
1999          Add a test for it, based on my Kings Of Leon CD.
2000
20012009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
2002
2003        * morituri/image/image.py:
2004          Add the 150 frames for the leadin only to the CDDB calculation.
2005          Add methods to calculate AccurateRip id's and URL.
2006        * morituri/test/test_image_image.py:
2007          Add tests for it.
2008        * examples/ARcue.py:
2009          Show AccurateRip URL.
2010
20112009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2012
2013        * examples/ARcue.py:
2014        * morituri/common/crc.py:
2015        * morituri/image/image.py:
2016        * morituri/test/test_image_image.py:
2017          Calculate CDDB disc id.
2018          Tested on my Kings Of Leon CD.
2019
20202009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2021
2022        * examples/ARcue.py:
2023        * morituri/image/image.py:
2024        * morituri/test/test_image_image.py:
2025          Add a task to verify a disk image, which also calculates
2026          track lengths for tracks the cue file doesn't know the length of.
2027
20282009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2029
2030        * examples/ARcue.py:
2031          Add option to run either command-line or gtk.
2032
20332009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2034
2035        * morituri/image/image.py:
2036          Create a MultiTask base class, and make AudioRipCRCTask
2037          use it.
2038
20392009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2040
2041        * morituri/image/image.py:
2042        * morituri/test/test_image_image.py:
2043          Add a task for calculating frame length of an audio file.
2044          Add a test for it.
2045
20462009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2047
2048        * morituri/common/task.py:
2049          Schedule the start from the main loop, otherwise the
2050          task might complete before we're in the main loop,
2051          and then the loop.quit() doesn't work.
2052
20532009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2054
2055        * examples/ARcue.py:
2056        * examples/gtkcrc.py:
2057          Rework both examples to look more similar.
2058
20592009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2060
2061        * examples/gtkcrc.py:
2062        * morituri/common/task.py:
2063          Move the gtk-based progress bar to task.
2064
20652009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2066
2067        * examples/gtkcrc.py:
2068        * morituri/common/crc.py:
2069        * morituri/common/task.py:
2070        * morituri/image/image.py:
2071          Add a 'schedule' call to the TaskRunner class, so that we can
2072          abstract things like gobject.timeout_add and reactor.callLater
2073          Pass the runner to the task in Task.start() so a task can call
2074          schedule.
2075
20762009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2077
2078        * morituri/common/task.py:
2079          Update the docs.
2080
20812009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
2082
2083        * morituri/test/test_image_image.py (added):
2084          Add tests for AudioRip CRC'ing images.
2085
20862009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2087
2088        * morituri/test/track-separate.cue (added):
2089        * morituri/test/track.flac (added):
2090        * morituri/test/Makefile (added):
2091        * morituri/test/track-single.cue (added):
2092          Add a simple 10 frame flac file, and two .cue files
2093          using it.
2094
20952009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2096
2097        * morituri/image/image.py:
2098          If paths are relative, make them relative to cue file.
2099
21002009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2101
2102        * morituri/common/task.py:
2103          clear with whitespace.
2104
21052009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2106
2107        * examples/ARcue.py:
2108        * morituri/common/task.py:
2109        * morituri/image/image.py (added):
2110          Add an object for handling an Image based on a .cue file.
2111          Create a Task for CRC'ing the whole Image.
2112          Make the example use this new task instead.
2113
21142009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2115
2116        * examples/gtkcrc.py:
2117        * morituri/common/task.py:
2118          Add task object to listener interface methods.
2119
21202009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2121
2122        * morituri/common/task.py:
2123          Move methods around.
2124
21252009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2126
2127        * examples/ARcue.py:
2128        * examples/gtkcrc.py:
2129        * morituri/common/crc.py:
2130        * morituri/common/task.py:
2131          Split out generic task/runner from CRC tasks.
2132
21332009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2134
2135        * morituri/common/crc.py (added):
2136          Copy from task.py before splitting.
2137
21382009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2139
2140        * examples/gtkcrc.py:
2141        * morituri/common/task.py:
2142          Don't block the main loop by infinitely scheduling
2143          set_state.
2144
21452009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2146
2147        * examples/ARcue.py:
2148        * examples/gtkcrc.py:
2149        * morituri/common/task.py:
2150          Make a real Task interface and use it.
2151          Make runners reusable for multiple tasks.
2152          gtkcrc.py seems to be blocking updates however.
2153
21542009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2155
2156        * morituri/test (added):
2157        * morituri/test/test_image_cue.py (added):
2158        * morituri/test/kings-single.cue (added):
2159        * morituri/test/__init__.py (added):
2160        * morituri/test/kings-separate.cue (added):
2161          Add test suite.  Add Kings Of Leon cue files.
2162
21632009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2164
2165        * examples/ARcue.py:
2166          Error out when the file doesn't exist.
2167        * morituri/common/task.py:
2168          Drag the lake.
2169          Clean up prints.
2170
21712009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
2172
2173        * morituri/common/task.py:
2174          Remove queue to avoid race.
2175          Remove prints.
2176          Clean up debug.
2177          Update progress after handling buffers.
2178
21792009-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
2180
2181        * morituri/common/task.py:
2182          Introduce constants for FRAMES_PER_DISC_FRAME
2183        * examples/ARcue.py:
2184          Use the constant.
2185          Get the CRC right for the last track too.
2186
21872009-03-26  Thomas Vander Stichele  <thomas at apestaart dot org>
2188
2189        * examples/ARcue.py:
2190        * morituri/common/task.py:
2191          Use an adapter to assemble CD frames.
2192          Take into account special rules for first and last track.
2193          Mention some bugs.
2194          Remember to drag the lake from the task.
2195
21962009-03-22  Thomas Vander Stichele  <thomas at apestaart dot org>
2197
2198        * examples/ARcue.py:
2199        * morituri/common/task.py:
2200          First version that seems to get some AccurateRip checksums right.
2201
22022009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2203
2204        * morituri/image/cue.py:
2205          publicize CueFile.tracks
2206          Add a method to get track lengths
2207        * examples/readcue.py:
2208          Use it.
2209
22102009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
2211
2212        * morituri/common/task.py (added):
2213          Add a task abstraction.
2214
Note: See TracBrowser for help on using the repository browser.