source: trunk/ChangeLog @ 403

Revision 403, 59.1 KB checked in by thomas, 3 years ago (diff)
Line 
12010-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
2
3        * morituri/rip/main.py:
4          Fix another UnicodeEncodeError problem as mentioned in #25.
5
62010-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
7
8        * morituri/test/Makefile.am:
9        * morituri/test/jose.toc (added):
10        * morituri/test/JoséGonzález.toc (deleted):
11          Rename utf-8 file to a normal file.
12        * morituri/test/common.py:
13        * morituri/test/test_common_checksum.py:
14        * morituri/test/test_common_encode.py:
15        * morituri/test/test_image_image.py:
16        * morituri/test/test_image_toc.py:
17          Copy the normal file first to the utf-8 filename, if supported.
18          Skip tests that need unicode when we are not in a utf-8 locale.
19
202010-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
21
22        * configure.ac:
23        * doc/release:
24          Back to trunk.
25
26=== release 0.1.1 ===
27
282010-04-16  Thomas Vander Stichele  <thomas at apestaart dot org>
29
30        * NEWS:
31        * README:
32        * RELEASE:
33        * configure.ac:
34        * doc/release:
35        * morituri.doap:
36          Releasing 0.1.1, 'Dead'
37
382010-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
39
40        * morituri/common/encode.py:
41        * morituri/rip/image.py:
42          Provide status on the retagging.
43
442010-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
45
46        patch by: Peter Oliver
47
48        * morituri/program/cdparanoia.py:
49          Respect umask for encoded files.  Fixes #17.
50
512010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
52
53        * morituri/common/encode.py:
54          Before moving the newly tagged file to overwrite the original
55          one, copy over mode.
56
572010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
58
59        * morituri/common/program.py:
60          Commit one missing line from patch in #4 for multi-artist discs.
61
622010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
63
64        patch by: Peter Oliver
65
66        * morituri/common/program.py:
67          Handle multi-artist releases where track artist is unset.
68          Fixes #14.
69
702010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
71
72        * morituri/rip/image.py:
73          Fix more utf-8 issues.
74
752010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
76
77        * morituri/image/image.py:
78          Remove dead code.
79
802010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
81
82        * morituri/common/encode.py:
83          Fix wrong code for checksum comparison.
84
852010-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
86
87        * morituri/common/program.py:
88          Rename some vars to start with mbid.  Fix pychecker issues.
89
902010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
91
92        * morituri/common/program.py:
93          Add a retagging command.
94          Add a getMusicBrainz() method.
95          Also store musicbrainz track/album/artist ids.
96          Patch provided by Peter Oliver.  Fixes #4.
97        * morituri/rip/cd.py:
98          Use it.
99        * morituri/image/image.py:
100          Add a task to retag an image.
101        * morituri/rip/image.py:
102          Add a command to retag an image.
103
1042010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
105
106        * morituri/common/encode.py:
107          Add tasks to read, write, and safely retag flac files.
108        * morituri/test/test_common_encode.py:
109          Add tests for this.
110
1112010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
112
113        * morituri/common/checksum.py:
114          Style fixes.
115        * morituri/common/common.py:
116          Add functions to convert a gst.TagList to a dict and compare them.
117        * morituri/common/task.py:
118          Add setAndRaiseException which gives us an appropriate
119          exceptionMessage as if we raised where we called this new function.
120
1212010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
122
123        * morituri/common/encode.py:
124          pychecker fix.
125
1262010-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
127
128        * morituri/common/encode.py:
129          Add a task to read tags.
130        * morituri/test/test_common_encode.py:
131          Add a test.
132
1332010-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
134
135        * morituri/common/encode.py:
136          Add a vbr profile.
137
1382010-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
139
140        * morituri/rip/image.py:
141          Don't splitext on inputdir; fixes encoding of directories like
142          Sigur Ros - Takk... (which removed a period)
143
1442010-04-09  Thomas Vander Stichele  <thomas at apestaart dot org>
145
146        * morituri/image/table.py:
147        * morituri/program/cdparanoia.py:
148          Do some 80 character cleanups.
149
1502010-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
151
152        * morituri/rip/image.py:
153          Fix problem to encode from files with unicode chars.
154
1552010-04-08  Thomas Vander Stichele  <thomas at apestaart dot org>
156
157        * morituri/program/cdparanoia.py:
158          Add some debug.
159        * morituri/common/encode.py:
160          Add more debug.
161          Handle the case where peak is full scale, and peakdB thus 0,
162          which triggered not setting self.peak.
163
1642010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
165
166        patch by: Peter Oliver
167
168        * morituri/common/program.py:
169          Allow using sortName for artist/track using %S/%s.
170          Fixes #19.
171
1722010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
173
174        * doc/release:
175          Document having clean test run.
176        * morituri/common/encode.py:
177          Catch and properly stop on gst.QueryError.
178          Don't set peak in stop if we had an error.
179        * morituri/test/test_common_encode.py:
180        * morituri/test/test_common_renamer.py:
181        * morituri/test/test_image_cue.py:
182          Clean up after tests.
183
1842010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
185
186        * morituri/common/task.py:
187        * morituri/image/cue.py:
188          Add logCategory.
189        * morituri/image/image.py:
190          If subtasks had an exception, retrigger the exception and stop.
191
1922010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
193
194        * morituri/image/image.py:
195          Fix AudioLengthTask for the case where we don't have the decoder,
196          by instead of doing get_state, waiting for an ASYNC_DONE or ERROR
197          message.  Properly raise a gst.GError in that case.
198        * morituri/common/task.py:
199          Add some debug.
200        * morituri/test/test_image_image.py:
201          After this fix, we now catch the TYPE_NOT_FOUND because of an
202          empty stream instead of the later gst.QueryError.
203        * morituri/test/test_common_encode.py:
204          Let us know what it is if not a gst.QueryError.
205
2062010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
207
208        * doc/Makefile.am:
209          Don't put rip.1 manpage in subdir.
210
2112010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
212
213        * morituri/common/common.py:
214          add quoteParse function to quote properly for gst.parse_launch()
215        * morituri/common/checksum.py:
216          Fix single quote problem.
217          use self.setException()
218        * morituri/common/encode.py:
219          Fix single quote problem.
220        * morituri/image/image.py:
221          Fix single quote problem.
222          Reraise gst.QueryError.
223        * morituri/test/test_common_encode.py:
224        * morituri/test/test_common_encode.py (added):
225          Add tests for unicode/single/double quote.
226        * morituri/test/test_image_image.py:
227        * morituri/test/test_common_checksum.py:
228          Add tests for single/double quote.
229        * morituri/test/common.py:
230          add twisted-like failUnlessRaises to TestCase that returns
231          the exception, so we can check wrapped exceptions in TaskException.
232          Fixes #16.
233
2342010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
235
236        * morituri/common/task.py:
237          Wrap exceptions during tasks in a TaskException, storing the
238          message, for improved error reporting later on.
239
2402010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
241
242        * doc/Makefile.am:
243        * morituri.spec.in:
244        * morituri/extern/Makefile.am:
245          Use help2man.py to generate manpage.
246
2472010-04-04  Thomas Vander Stichele  <thomas at apestaart dot org>
248
249        * morituri/common/encode.py:
250        * morituri/common/program.py:
251        * morituri/image/image.py:
252        * morituri/program/cdparanoia.py:
253        * morituri/rip/cd.py:
254        * morituri/rip/image.py:
255        * morituri/rip/offset.py:
256          Move all gst-using imports inside functions and classes
257          to avoid 'import gst' eating our options.
258          Fixes #12.
259
2602010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
261
262        * bin/Makefile.am:
263          Install rip as the script.
264
2652010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
266
267        * morituri/common/Makefile.am:
268          Add missing result.py
269        * morituri/test/Makefile.am:
270        * morituri/test/test_image_toc.py:
271        * morituri/test/JoséGonzález.toc (added):
272        * morituri/test/José González.toc (deleted):
273          automake doesn't handle spaces in names, so move it.
274
2752010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
276
277        * bin/rip.in:
278          Add our PYTHONLIBDIR to sys.path if needed.  Should make this
279          work when doing ./configure; sudo checkinstall make install
280          on e.g. Ubuntu.
281
2822010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
283
284        * configure.ac:
285        * bin/rip.in (added):
286        * bin/rip (deleted):
287          Generate bin/rip so we can do sys.path stuff.
288
2892010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
290
291        * morituri/rip/offset.py:
292          Add a more complete list of offsets, obtained using misc/offsets.py
293
2942010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
295
296        * misc/offsets.py (added):
297          Add a script to calculate list of offsets based on AccurateRip's
298          online database, according to popularity.
299
3002010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
301
302        * morituri/common/encode.py:
303          Handle utf-8 properly.
304
3052010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
306
307        * morituri/common/program.py:
308          Fix a problem with Arid's new album of not having an id.
309
3102010-01-31  Thomas Vander Stichele  <thomas at apestaart dot org>
311
312        * morituri/common/accurip.py:
313          The AccuRip cache dir could exist without the file; handle that
314          case.
315
3162009-12-28  Thomas Vander Stichele  <thomas at apestaart dot org>
317
318        * morituri/common/program.py:
319          For Various Artists releases, fall back to the release artist if
320          the track artist is None.
321
3222009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
323
324        * morituri/image/image.py:
325          Add ImageEncodeTask to encode a disk image to a different profile
326          and directory.
327        * morituri/common/encode.py:
328          Add lossy encoding profiles for mp3 and vorbis.
329          Rename muxer to tagger since that's what we use it for.
330          Do progress probe after level to make sure we get samples for
331          offsets.
332        * morituri/rip/image.py:
333          Add rip image encode command.
334
3352009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
336
337        * morituri/test/José González.toc (added):
338          Add test file for a test.
339
3402009-10-16  Thomas Vander Stichele  <thomas at apestaart dot org>
341
342        * morituri/common/task.py:
343          Add exceptionMessage on Task to store the result of
344          log.getExceptionMessage when the stack is still valid.
345
3462009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
347
348        * configure.ac:
349          Back to TRUNK.
350
351=== release 0.1.0 ===
352
3532009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
354
355        * NEWS:
356        * RELEASE:
357        * configure.ac:
358          Releasing 0.1.0, "Youngblood".
359
3602009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
361
362        * morituri/program/cdparanoia.py:
363          explicitize keyword args.
364          Break some 80+ lines.
365
3662009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
367
368        * morituri/rip/offset.py:
369          Pass device parameter to ReadTrackTask.  Thanks to Alex B for
370          spotting this on my blog.
371
3722009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
373
374        * morituri/program/cdparanoia.py:
375        * morituri/rip/offset.py:
376          Another unicode fix.
377
3782009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
379
380        * HACKING:
381          More unicode notes.
382        * morituri/common/program.py:
383        * morituri/image/table.py:
384        * morituri/image/toc.py:
385        * morituri/result/result.py:
386        * morituri/rip/cd.py:
387        * morituri/test/test_image_toc.py:
388          Further unicode fixes, for options, CD-Text, paths, ...
389
3902009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
391
392        * morituri/program/cdrdao.py:
393          Wrap read in an exception handler.
394        * morituri/common/task.py:
395          Debug exceptions more.
396
3972009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
398
399        * HACKING:
400          Note unicode handling.
401        * morituri/test/test_image_image.py:
402        * morituri/image/table.py:
403        * morituri/program/cdparanoia.py:
404        * morituri/common/checksum.py:
405          Use unicode for paths.
406          Use repr for path representation.
407        * morituri/test/test_common_checksum.py:
408          Add test for unicode audio file name.
409
4102009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
411
412        * morituri/image/cue.py:
413        * morituri/image/toc.py:
414        * morituri/test/test_image_cue.py:
415        * morituri/test/test_image_toc.py:
416          Read input file as utf-8.  Fix logging of paths.
417        * morituri/image/image.py:
418          Document and add asserts for unicodeness of paths.
419          Encode path in launch lines as utf-8
420
4212009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
422
423        * morituri/common/task.py:
424          Make SyncRunner wrap start() so we correctly handle any
425          exception being thrown.
426         
4272009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
428
429        * morituri/common/checksum.py:
430        * morituri/test/Makefile.am:
431        * morituri/test/test_common_checksum.py (added):
432          Add a check to make sure that checksumming an empty file doesn't
433          hang.  Fix the hang.
434
4352009-09-08  Thomas Vander Stichele  <thomas at apestaart dot org>
436
437        * morituri.spec.in:
438          Add pycdio as requirement.
439
4402009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
441
442        * morituri/common/program.py:
443          Fix getting AccurateRip results for albums with a HTOA.
444        * morituri/test/Makefile.am:
445        * morituri/test/test_common_program.py:
446        * morituri/test/silentalarm.result.pickle (added):
447          Add testcase for it, Bloc Party's Silent Alarm.
448
4492009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
450
451        * morituri.spec.in:
452          Update requirements to work around known bugs.
453
4542009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
455
456        * morituri/rip/cd.py:
457          Fix warning against rebuilt package.
458
4592009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
460
461        * README:
462          Fix up dependencies.
463        * morituri.spec.in:
464          Fix dependencies and noarch install location.
465        * morituri/common/Makefile.am:
466          Add result.py to dist
467
4682009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
469
470        * configure.ac:
471        * m4/Makefile.am:
472        * m4/as-ac-expand.m4 (added):
473          Correctly set installation dir for noarch python files so that it
474          works on 64 bit.
475
4762009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
477
478        * morituri/program/cdrdao.py:
479          Parse version number.
480        * morituri/rip/cd.py:
481          Warn about cdrdao versions with a bug.
482        * morituri/test/test_program_cdrdao.py:
483          Test that we can parse the version.
484
4852009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
486
487        * morituri/program/cdrdao.py:
488          Handle errors.  Tested by not having a CD in the drive.
489
4902009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
491
492        * morituri/common/task.py:
493          Document better.
494          Create an ITaskListener interface where we can document.
495          Log some more.
496
4972009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
498
499        * morituri/test/test_common_program.py:
500        * morituri/common/program.py:
501          Extract a common method to get textual representation of
502          AccurateRip results, and test it.
503        * morituri/rip/cd.py:
504        * morituri/rip/image.py:
505          Use the method.
506
5072009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
508
509        * morituri/image/table.py:
510          Fix deprecationwarning for python 2.6
511
5122009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
513
514        * morituri/test/test_common_program.py (added):
515        * morituri/common/program.py:
516          Break verifyImage into two so we can test it.
517          Test it using an AccurateRip result for Luke Haines Is Dead
518          which had a wrongly ripped track 10.
519
520
5212009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
522
523        * morituri/result/result.py:
524          Document some more.
525
5262009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
527
528        * morituri/test/Makefile.am:
529        * morituri/test/dBAR-020-002e5023-029d8e49-040eaa14.bin (added):
530          Add AR result for Luke Haines Is Dead disc 1
531
5322009-06-20  Thomas Vander Stichele  <thomas at apestaart dot org>
533
534        * Makefile.am:
535        * misc/pycheckerrc:
536        * morituri/common/accurip.py:
537        * morituri/common/checksum.py:
538        * morituri/common/encode.py:
539        * morituri/image/table.py:
540        * morituri/rip/drive.py:
541          Fix up for pychecker warnings for 2.6
542          Fix rip drive list, which forgot some modules.
543
5442009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
545
546        * morituri/rip/main.py:
547        * morituri/rip/image.py (added):
548          Add command to verify an image.
549        * morituri/common/program.py:
550        * morituri/rip/cd.py:
551          Fix AccurateRip checksum output.
552
5532009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
554
555        * morituri/common/drive.py:
556          Really make pycdio and cdio optional.
557        * morituri/rip/drive.py:
558        * morituri/rip/offset.py:
559          Use drive.getAllDevicePaths()
560
5612009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
562
563        * morituri/result/result.py:
564          Add max confidence from database.
565        * morituri/common/program.py:
566        * morituri/rip/cd.py:
567          Move AccurateRip checking to program.py
568          Re-rip if verification failed when continuing a rip.
569
5702009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
571
572        * morituri/image/cue.py:
573          Better debug.
574
5752009-06-09  Thomas Vander Stichele  <thomas at apestaart dot org>
576
577        * morituri/common/program.py:
578        * morituri/rip/cd.py:
579          Serialize the rip result after every rip, so we can pick up
580          where we left off with all result data.
581
5822009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
583
584        * morituri/common/program.py:
585          Move getPath to Program.
586          Remove arguments to ripTrack that can be gotten from
587          trackResult.
588        * morituri/rip/cd.py:
589          Continue without musicbrainz metadata.
590          Unify htoa and normal track ripping.
591        * morituri/result/result.py:
592          Add getTrackResult so it's easier to look up track results
593          when there's a HTOA.
594
5952009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
596
597        * morituri/common/program.py:
598        * morituri/rip/cd.py:
599          Move HTOA checking to program.
600
6012009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
602
603        * morituri/result/logger.py:
604          Fix for toctable->table
605        * morituri/common/program.py:
606        * morituri/rip/cd.py:
607          Move lots of functionality to program module.
608
6092009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
610
611        * morituri/result/result.py:
612          Change toctable to table since it's a full index table.
613        * morituri/common/Makefile.am:
614        * morituri/common/program.py (added):
615          Add module and class for program state.
616        * morituri/rip/cd.py:
617          Use the program state to clean up the do() function.
618
6192009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
620
621        * morituri/rip/cd.py:
622          Massage into 80 characters per line.
623          Make pycdio/cdio optional.
624
6252009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
626
627        * morituri/rip/drive.py:
628          Make pycdio and cdio optional.
629
6302009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
631
632        * morituri/image/table.py:
633          Add getPregap() method.
634        * morituri/rip/cd.py:
635          Use artist.name, not getUniqueName, to avoid monstruous names for
636          Muse.
637          Pass mbdiscid to getPath, so Unknown Disc can be saved with it.
638          Don't set the date if the release doesn't have one.
639          Set pregap on trackResult using new Track.getPregap()
640          Write all log/cue/m3u files as utf-8.
641
6422009-06-06  Thomas Vander Stichele  <thomas at apestaart dot org>
643
644        * morituri/test/cdparanoia.progress:
645          Add a shorter test file, 23 seconds.
646        * morituri/test/test_program_cdparanoia.py:
647          Update the test to adapt.  Check for track quality.
648        * morituri/program/cdparanoia.py:
649          Add a measure of track quality based on the number of reads.
650          Use the [wrote] output for progress updates, a bit more
651          jittery in its output.
652        * morituri/rip/cd.py:
653          Set track quality on RipResult.
654
6552009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
656
657        * morituri/rip/cd.py:
658          Use RipResult to store result information.
659        * morituri/result/logger.py (added):
660          Add a Logger to handle the RipResult, much like
661          EAC's log file.
662
6632009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
664
665        * morituri/rip/cd.py:
666          Comment out number of track setting on tag for now.
667          MusicBrainz can give us dates in YYYY, YYYY-MM, and YYYY-MM-DD
668          format, so convert to YYYY-MM-DD always.
669          Unmount the data part of the CD we want to rip if it is mounted.
670          Adapt to peak level change.
671          Don't try to write data tracks to the m3u file.
672          Resolve the device path to the actual device path.
673
6742009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
675
676        * morituri/result/result.py:
677          Add a Logger base class.
678
6792009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
680
681        * configure.ac:
682        * morituri/Makefile.am:
683        * morituri/result (added):
684        * morituri/result/result.py (added):
685        * morituri/result/__init__.py (added):
686        * morituri/result/Makefile.am (added):
687          Add classes to store track and rip results in.
688
6892009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
690
691        * morituri/common/common.py:
692          Add an argument for the delimiter in formatting.
693        * morituri/common/encode.py:
694          Most programs use peak volume, not power, so do this too.
695
6962009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
697
698        * morituri/test/common.py:
699          Add a method for diffing multiline strings.
700
7012009-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
702
703        * morituri/common/encode.py:
704          Add a test() method to the profile so we can warn about bad
705          flacenc versions.
706          Encode track number and count, and release date, if possible.
707        * morituri/rip/cd.py:
708          Fix another off-by-one error in the tag encoding.
709
7102009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
711
712        * morituri/program/cdparanoia.py:
713        * morituri/rip/cd.py:
714          Handle another off-by-one error in the m3u handling.
715          Add a getTagList function.
716          Use it to encode tags.
717
7182009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
719
720        * morituri/common/encode.py:
721        * morituri/program/cdparanoia.py:
722        * morituri/rip/cd.py:
723          Clean up the temporary unencoded file.
724          Pass profile as objects to tasks, so that temp files have the right
725          extension.
726
7272009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
728
729        * morituri/common/encode.py:
730        * morituri/program/cdparanoia.py:
731          Add encoding profiles, kept simple for now as a class and
732          subclasses.  Use them to encode.  Calculate peak level while
733          encoding, compared to EAC and replaygain's value.
734        * morituri/rip/cd.py:
735          Use the encoding profiles, ripping with the right extension.
736          Add a --profile parameter for it.
737
7382009-05-31  Thomas Vander Stichele  <thomas at apestaart dot org>
739
740        * morituri/rip/cd.py:
741          Clean up track numbering confusion.
742
7432009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
744
745        * morituri/common/encode.py (added):
746        * examples/encode.py (added):
747          Add an Encode Task, hardcoded to flac for now.
748          Add an example, that also sets tags.
749
7502009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
751
752        * morituri/common/task.py:
753          Add debug.
754        * morituri/rip/drive.py:
755          Show all drives, not just the ones that happen to have an Audio CD
756          inserted.
757
7582009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
759
760        * morituri/rip/cd.py:
761          Add asserts for comparing id's between the simple toc and
762          the full table.
763          Create the output directory before ripping the htoa.
764          Ignore data tracks for now.
765          Don't fail if we have no AccurateRip responses.
766        * morituri/image/table.py:
767          Add a session ivar to Track.
768          Factor in session leadin when calculating track length
769          of last track in a session.
770          add getMusicBrainzSubmitURL()
771          add _getSessionGap() because the session gap size is different
772          for session 2 and all following.
773          Use it in merge() to get offsets right.
774          Fix getAccurateRipURL by only using the audio tracks for the
775          'length in tracks' number
776          Temporarily disable writing out data tracks to a .cue file,
777          since it's not implemented yet.
778          Add canCue to see if we can write a .cue file from the given table,
779          and debug why not if not.
780        * morituri/program/cdrdao.py:
781          Rework to rip each session separately instead of using session 9.
782          This fixes session 9 read-toc missing the pregap.
783          Add a simple LineParser for handling output from disk-info.
784          Count tracks relatively for the session, because the output for
785          session 2 for track numbers picks up where session 1 left off.
786          Don't set leadout from TOC printing since for the same reason
787          session 2's leadout is absolute, not relative to start of session.
788          Add a DiscInfoTask.
789          Convert Table and Toc reading tasks to multitasks, first getting the
790          number of sessions, then reading table/toc for each session.
791
792        * morituri/test/test_image_table.py:
793          Fix up MusicBrainz disc id for my Ladyhawke disc.
794          Add AccurateRip URL verification, compared against EAC's.
795        * morituri/test/test_image_toc.py:
796          Use two separate session read-toc output files to verify
797          the case of Das Capital.
798          Verify musicbrainz URL.
799
8002009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
801
802        * morituri/common/task.py:
803          Add documentation.
804          Use a _task counter instead of duplicating tasks to
805          __tasks; this allows us to add tasks after starting.
806          Catch Exceptions during next() so that we don't get
807          stuck in a main loop that doesn't exit.
808          Raise it later when we're done.
809
8102009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
811
812        * morituri/common/common.py:
813          Since the version was inherited from the current code
814          in unpickled objects, separate into classVersion and
815          an instanceVersion set from __init__.
816
8172009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
818
819        * morituri/image/toc.py:
820          Add a logName for debugging.
821
8222009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
823
824        * morituri/program/cdparanoia.py:
825        * morituri/image/image.py:
826          Correctly chain up to parent __init__ for MultiTasks
827
8282009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
829
830        * morituri/test/capital.1.toc (added):
831        * morituri/test/capital.2.toc (added):
832          Add two .toc's for two sessions of a 2 session disc
833        * morituri/image/table.py:
834          Add a merge method to merge in a second session.
835        * morituri/test/Makefile.am:
836        * morituri/test/test_image_toc.py:
837          Add a test for merging the Das Capital sessions, gets
838          the CDDB disc id right.
839
8402009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
841
842        * morituri/common/common.py:
843          Add a persisted cache so that we can store pickles on discs.
844          Automatically delete them if the class version is newer than
845          the object's.
846        * morituri/rip/cd.py:
847          Use it.
848
8492009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
850
851        * morituri/image/table.py:
852          Add a version ivar to help with versioning pickled objects.
853
8542009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
855
856        * morituri/program/cdparanoia.py:
857          Add copy and test CRC's to object.
858
8592009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
860
861        * morituri/common/Makefile.am:
862        * morituri/common/drive.py (added):
863          Add drive module.
864
8652009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
866
867        * morituri/program/cdparanoia.py:
868        * morituri/program/cdrdao.py:
869        * morituri/rip/cd.py:
870        * morituri/rip/offset.py:
871          Add device argument to ripping/scanning tasks.
872
8732009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
874
875        * morituri/common/accurip.py:
876        * morituri/image/image.py:
877        * morituri/test/Makefile.am:
878        * morituri/test/test_image_image.py:
879        * morituri/test/test_common_accurip.py (added):
880          Move accuraterip stuff to the accurip module.
881          Move/create new test file.
882
8832009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
884
885        * morituri/rip/Makefile.am:
886        * morituri/rip/main.py:
887        * morituri/rip/drive.py (added):
888          Add 'rip drive list' command to list available drives.
889        * morituri/common/accurip.py:
890          Add force.
891        * morituri/rip/cd.py:
892          Add --output-directory argument.
893
8942009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
895
896        * morituri/common/Makefile.am:
897        * morituri/rip/cd.py:
898        * morituri/common/accurip.py (added):
899          Add a module for handling a cache of AccurateRip results.
900          Use it.
901
9022009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
903
904        * morituri/rip/Makefile.am:
905        * morituri/rip/main.py:
906        * morituri/rip/cd.py (added):
907          Add second command, 'rip cd rip' before factoring out functionality.
908
9092009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
910
911        * morituri/rip/Makefile.am:
912        * morituri/rip/main.py:
913        * morituri/rip/offset.py (added):
914          Add first command, 'rip offset find'
915
9162009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
917
918        * Makefile.am:
919        * morituri/test/Makefile.am:
920          Make distcheck work.
921
9222009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
923
924        * morituri/common/checksum.py:
925          More pychecker fixes.
926
9272009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
928
929        * morituri/common/common.py:
930        * morituri/common/renamer.py:
931          Pychecker fixes.
932
9332009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
934
935        * RELEASE:
936        * misc/pycheckerrc:
937        * misc/show-coverage.py:
938        * morituri/image/Makefile.am:
939        * morituri/program/Makefile.am:
940        * RELEASE (added):
941        * morituri/image/Makefile.am (added):
942        * morituri/program/Makefile.am (added):
943        * misc/show-coverage.py (added):
944        * misc/pycheckerrc (added):
945          more additions
946
9472009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
948
949        * AUTHORS:
950        * Makefile.am:
951        * NEWS:
952        * TODO:
953        * autogen.sh:
954        * configure.ac:
955        * examples/ARcalibrate.py:
956        * misc/Makefile.am:
957        * misc/morituri-uninstalled:
958        * morituri.spec.in:
959        * morituri/Makefile.am:
960        * morituri/common/Makefile.am:
961        * morituri/common/logcommand.py:
962        * morituri/extern/Makefile.am:
963        * morituri/rip/Makefile.am:
964        * morituri/rip/__init__.py:
965        * morituri/rip/main.py:
966        * morituri/test/Makefile:
967        * morituri/test/Makefile.am:
968        * configure.ac (added):
969        * AUTHORS (added):
970        * morituri.spec.in (added):
971        * Makefile.am (added):
972        * morituri/test/Makefile.am (added):
973        * morituri/extern/Makefile.am (added):
974        * morituri/common/logcommand.py (added):
975        * morituri/common/Makefile.am (added):
976        * morituri/Makefile.am (added):
977        * morituri/rip (added):
978        * morituri/rip/__init__.py (added):
979        * morituri/rip/Makefile.am (added):
980        * morituri/rip/main.py (added):
981        * misc/Makefile.am (added):
982        * misc/morituri-uninstalled (added):
983        * autogen.sh (added):
984        * NEWS (added):
985          Start autotooling.  Add a command-line application.
986
9872009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
988
989        * morituri/program/cdrdao.py:
990          read all sessions by reading session 9.
991        * morituri/image/toc.py:
992          Parse ZERO statements properly.
993          Also set absolute offsets when we know them from the .toc file.
994          Properly set audio flag on tracks.
995          FIXME: probably doesn't work if the .toc does not have lengths.
996        * morituri/image/table.py:
997          Add some debug to cddb disc id calculation.
998          Fix absolutize function, it was going one index too far.
999          raise ValueError when overriding .absolute with a wrong value.
1000        * examples/readdisc.py:
1001          Show CDDB disc id at the start.
1002          Assert when toc and table have different disc id's (to be fixed)
1003        * morituri/test/test_image_cue.py:
1004          Update for having the table already with absolute values.
1005        * morituri/test/test_image_toc.py:
1006          Add Ladyhawke CDDB test, it has a data track.
1007
10082009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1009
1010        * examples/readdisc.py:
1011          Move constants to common
1012
10132009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1014
1015        * examples/readdisc.py:
1016        * examples/readhtoa.py:
1017        * examples/readtoc.py:
1018          Rename IndexTable to Table.
1019
10202009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1021
1022        * morituri/image/cue.py:
1023        * morituri/image/image.py:
1024        * morituri/image/table.py:
1025        * morituri/image/toc.py:
1026        * morituri/program/cdparanoia.py:
1027        * morituri/program/cdrdao.py:
1028        * morituri/test/test_image_cue.py:
1029        * morituri/test/test_image_table.py:
1030          Rename IndexTable to Table.
1031
10322009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1033
1034        * morituri/image/cue.py:
1035        * morituri/image/image.py:
1036        * morituri/image/table.py:
1037        * morituri/image/toc.py:
1038        * morituri/program/cdrdao.py:
1039        * morituri/test/test_image_cue.py:
1040        * morituri/test/test_image_table.py:
1041          Rename ITTrack to Track.
1042
10432009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1044
1045        * morituri/common/common.py:
1046        * morituri/image/cue.py:
1047          Use FRAMES_PER_SECOND where appropriate.
1048
10492009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1050
1051        * morituri/common/checksum.py:
1052        * morituri/common/common.py:
1053        * morituri/image/image.py:
1054        * morituri/image/table.py:
1055        * morituri/program/cdparanoia.py:
1056          Move constants to common
1057
10582009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1059
1060        * examples/readdisc.py:
1061          Get our metadata only from the toc.
1062
10632009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1064
1065        * examples/readdisc.py:
1066          Also work for discs without htoa.
1067
10682009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
1069
1070        * examples/readdisc.py:
1071          Write .m3u file.
1072
10732009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1074
1075        * examples/readdisc.py:
1076          Rip HTOA as well.  Add disc-template parameter.
1077
10782009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1079
1080        * morituri/image/table.py:
1081          Fix a subtle bug in our CDDB disc id calculation.
1082          The length of the audio should be calculated as the delta
1083          between leadout and start already converted (and truncated)
1084          to seconds.
1085        * morituri/test/bloc.cue:
1086        * morituri/test/test_image_toc.py:
1087          Fix up tests for this.
1088
10892009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1090
1091        * morituri/program/cdparanoia.py:
1092          Fix up track counting so HTOA can be ripped again.
1093        * examples/readhtoa.py:
1094          Fix up example so it works again, tested on Silent Alarm.
1095
10962009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1097
1098        * morituri/test/test_image_toc.py:
1099        * morituri/test/bloc.cue (added):
1100          Add an expected .cue file for the bloc party toc.
1101
11022009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1103
1104        * morituri/image/toc.py:
1105          Calculate the leadout from the sum of the track lengths.
1106        * morituri/test/breeders.cue:
1107        * morituri/test/cure.cue:
1108          Adapt expected results for DISCID.
1109        * morituri/image/table.py:
1110          Add an assert for hasTOC() when doing .cue()
1111        * morituri/test/test_image_toc.py:
1112        * morituri/test/test_image_cue.py:
1113          absolutize before cue()
1114
11152009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1116
1117        * morituri/image/table.py:
1118          Only add DISCID if our table is a TOC (which it isn't
1119          with our current .toc file parsing)
1120        * morituri/test/test_image_cue.py:
1121        * morituri/test/test_image_toc.py:
1122          Fix up tests; testsuite passes again.
1123
11242009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1125
1126        * morituri/image/toc.py:
1127          Add some debugging.
1128
11292009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1130
1131        * morituri/image/table.py:
1132          Update .cue writing:
1133          - customise program name
1134          - add DISCID
1135          - use counter for FILE lines
1136          - put FILE line before TRACK if track does not have INDEX 00
1137          Take counter into account for setFile
1138          Fix off-by-one in setFile
1139        * examples/readdisc.py:
1140          Add --track-template.
1141          Pass counter to setFile.
1142
11432009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1144
1145        * morituri/image/table.py:
1146          Add CDText writing to .cue() method.
1147        * morituri/image/toc.py:
1148          Add CDText parsing.
1149        * morituri/test/test_image_toc.py:
1150        * morituri/test/breeders.cue (added):
1151          Add a test for cue'ing the breeders' toc.
1152
11532009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1154
1155        * morituri/image/table.py:
1156        * morituri/image/toc.py:
1157          Add parsing of ISRC codes.
1158          Add first part of CDTEXT stuff.
1159        * morituri/test/test_image_toc.py:
1160          Add test for converting .toc to .cue
1161        * morituri/test/cure.cue
1162          Add reference for converted cure.toc
1163
11642009-05-10  Thomas Vander Stichele  <thomas at apestaart dot org>
1165
1166        * examples/readhtoa.py:
1167          Fix example.
1168
11692009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1170
1171        * morituri/image/table.py:
1172        * morituri/test/test_image_table.py:
1173          Correctly calculate MusicBrainz disc id for enhanced cd's.
1174
11752009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1176
1177        * morituri/common/task.py:
1178          Log on runners too.
1179        * morituri/program/cdrdao.py:
1180          Abort if output has ERROR by killing and setting an exception.
1181
11822009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1183
1184        * examples/readdisc.py:
1185          filter out slashes when deciding on file names.
1186
11872009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1188
1189        * morituri/common/task.py:
1190        * morituri/image/image.py:
1191          Remove prints.  Describe tasks.
1192
11932009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1194
1195        * morituri/common/task.py:
1196          Add an exception ivar for tasks to set an exception on while
1197          running.  Make SyncRunner raise it during done()
1198        * morituri/program/cdparanoia.py:
1199          Set an exception if the ripped file doesn't match the expected size
1200          (for example when disc is full)
1201
12022009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1203
1204        * morituri/common/common.py:
1205          Set the object when we don't persist.
1206        * examples/readdisc.py:
1207          Small fixes.
1208
12092009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1210
1211        * examples/readdisc.py:
1212          Fix up cue file reading.
1213
12142009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1215
1216        * examples/readdisc.py:
1217          Add musicbrainz code for disc naming.
1218
12192009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1220
1221        * morituri/image/table.py:
1222        * morituri/image/toc.py:
1223          Delete old code.
1224
12252009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1226
1227        * morituri/image/toc.py:
1228        * morituri/test/test_image_toc.py:
1229        * morituri/test/test_program_cdrdao.py:
1230          After careful vetting, fix up the expected values after toc parsing.
1231          Fix (untested) INDEX handling.  Fix handling of START.
1232
12332009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1234
1235        * morituri/image/table.py:
1236        * morituri/test/test_image_table.py:
1237          Implement MusicBrainz disc id.  Works for audio-only discs,
1238          have to figure out why it fails for an Enhanced CD like the
1239          Ladyhawke one.
1240
12412009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1242
1243        * morituri/image/table.py:
1244          Add logging.
1245          Add methods to clear a table of files, and to absolutize indexes
1246          as long as the source is the same file, and to set a File on a
1247          given index, adjusting all following indexes that match the
1248          duration, and check if the IndexTable has all information for a TOC.
1249        * morituri/image/toc.py:
1250          Add logging.
1251          Use a counter for the source.
1252          Fix up index offset calculation.
1253        * morituri/program/cdrdao.py:
1254          Use a real IndexTable as the result, instead of a TocFile.
1255        * morituri/image/cue.py:
1256          Use a real IndexTable to store tracks.
1257        * morituri/test/test_image_toc.py:
1258          The toc file now has a table which has the tracks.
1259          Fix the tests to adjust for wrong index calculations.
1260        * morituri/test/test_image_cue.py:
1261        * morituri/test/test_image_image.py:
1262        * morituri/image/image.py:
1263          The cue file now has a table which has the tracks.
1264        * morituri/test/test_image_table.py:
1265          Add assertions to make sure when the table can serve as a TOC.
1266        * examples/readdisc.py:
1267          Adjust for changes.  Fix up to include AccurateRip results.
1268          First time we can do a complete normal rip including verifying
1269          against AccurateRip results!
1270
12712009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1272
1273        * examples/readdisc.py:
1274        * morituri/image/table.py:
1275        * morituri/test/test_image_table.py:
1276          Fix up and deprecate stuff.
1277
12782009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1279
1280        * examples/movecue.py:
1281        * examples/readcue.py:
1282        * morituri/image/cue.py:
1283        * morituri/image/image.py:
1284        * morituri/image/toc.py:
1285        * morituri/program/cdrdao.py:
1286        * morituri/test/test_image_cue.py:
1287        * morituri/test/test_image_toc.py:
1288          Cue -> CueFile
1289          TOC -> TocFile
1290
12912009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1292
1293        * examples/readdisc.py (added):
1294          Add an example to read a whole disc.  Doesn't work yet.
1295
12962009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1297
1298        * examples/readhtoa.py:
1299          Fix up readhtoa example.  Add offset option.
1300
13012009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1302
1303        * examples/ARcalibrate.py:
1304        * examples/readhtoa.py:
1305        * examples/readtoc.py:
1306        * morituri/program/cdrdao.py:
1307          Rename ReadTOCTask to ReadIndexTableTask.
1308          Rename ReadTableTask to ReadTOCTask.
1309
13102009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1311
1312        * morituri/program/cdrdao.py:
1313          Convert ReadTableTask to a CDRDAOTask subclass.
1314        * examples/ARcalibrate.py:
1315        * morituri/program/cdparanoia.py:
1316          Adapt.
1317
13182009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1319
1320        * morituri/program/cdrdao.py:
1321          Fix up index scanning's progress report.
1322          Add some debugging.
1323
13242009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1325
1326        * morituri/program/cdrdao.py:
1327        * morituri/test/test_program_cdrdao.py:
1328          Fix up tests.  Use an IndexTable.
1329
13302009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1331
1332        * morituri/program/cdrdao.py:
1333          Massage out a base class for running cdrdao.
1334
13352009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1336
1337        * morituri/program/cdrdao.py:
1338        * morituri/test/test_program_cdrdao.py (added):
1339          Split out the parser from the task.  Test the parser.
1340
13412009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1342
1343        * morituri/image/cue.py:
1344        * morituri/image/image.py:
1345        * morituri/image/table.py:
1346        * morituri/program/cdparanoia.py:
1347        * morituri/test/test_image_cue.py:
1348          Move to using a shared IndexTable for everything.
1349          Sadly mixed with a MultiTask rename.
1350
13512009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1352
1353        * morituri/common/checksum.py:
1354          Update debugging.  Add repr.
1355
13562009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1357
1358        * examples/ARcue.py:
1359          Handle case where we have no matching response.
1360
13612009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1362
1363        * morituri/common/task.py:
1364          Distinguish more clearly between MultiSeparateTask and
1365          MultiCombinedTask.
1366
13672009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1368
1369        * morituri/image/cue.py:
1370        * morituri/test/test_image_cue.py:
1371          Add dumping of .cue files.
1372
13732009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1374
1375        * morituri/program/cdparanoia.py:
1376          Use a temporary file to rip to.
1377
13782009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1379
1380        * examples/readtrack.py:
1381          Allow specifying the track to save.
1382
13832009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1384
1385        * morituri/common/task.py:
1386          Make SyncRunner clear previous description/progress task by
1387          tracking longest output given up to now.
1388
13892009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1390
1391        * morituri/program/cdparanoia.py:
1392          Add a task to read and verify a track.
1393        * examples/readtrack.py:
1394          Use it to clean up code.
1395        * morituri/common/task.py:
1396          describe a MultiTask better.
1397
1398
13992009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1400
1401        * morituri/common/common.py:
1402          Create a Persister class to wrap a possible pickle path.
1403        * examples/trm.py:
1404          Use it.
1405
14062009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1407
1408        * morituri/program/cdparanoia.py:
1409          Add table to __init__, so we can correctly calculate cdparanoia's
1410          strange ripping regions.
1411        * examples/ARcalibrate.py:
1412          When we found a positive match on a first track, match all the other
1413          tracks too for confirmation.
1414
14152009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1416
1417        * morituri/common/taskgtk.py:
1418          Bug fix.
1419
14202009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1421
1422        * morituri/common/task.py:
1423        * morituri/common/taskgtk.py:
1424          Split off GtkProgressRunner in separate module to not import gtk
1425          everywhere.
1426        * examples/ARcalibrate.py:
1427        * examples/ARcue.py:
1428        * examples/gtkchecksum.py:
1429        * examples/trm.py:
1430          Adapt.
1431
14322009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1433
1434        * examples/ARcalibrate.py (added):
1435          Add an example that calculates the read offset of your drive
1436          using AccurateRip.
1437
14382009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1439
1440        * morituri/program/cdrdao.py:
1441          Add a task to read the Table.
1442
14432009-05-02  Thomas Vander Stichele  <thomas at apestaart dot org>
1444
1445        * morituri/common/task.py:
1446        * morituri/image/image.py:
1447          Add some debugging.
1448
14492009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1450
1451        * examples/readhtoa.py (added):
1452          Add an example that detects and rips the Hidden Track One Audio.
1453
14542009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1455
1456        * examples/readtoc.py:
1457        * morituri/program/cdrdao.py (added):
1458          Move the ReadTocTask to the new cdrdao module.
1459
14602009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1461
1462        * examples/readtrack.py:
1463        * morituri/program/cdparanoia.py:
1464          Move ReadTrackTask to cdparanoia module.
1465
14662009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1467
1468        * examples/readtrack.py (added):
1469          Add an example that reads a track using cdparanoia.
1470
14712009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1472
1473        * morituri/test/cdparanoia.progress (added):
1474        * morituri/test/test_program_cdparanoia.py (added):
1475        * morituri/program/__init__.py (added):
1476        * morituri/program/cdparanoia.py (added):
1477          Add a module to wrap cdparanoia.  Add a test for parsing
1478          the progress report output.
1479
14802009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1481
1482        * morituri/common/checksum.py:
1483          Debug fixes.
1484
14852009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1486
1487        * morituri/common/common.py:
1488          Create some common functions to parse MSF and back.
1489        * morituri/image/toc.py:
1490          Use it here.
1491
14922009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1493
1494        * examples/trm.py:
1495          Allow loading and saving fingerprints from a pickle.
1496
14972009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1498
1499        * morituri/image/toc.py:
1500        * morituri/test/test_image_toc.py:
1501        * morituri/test/bloc.toc (added):
1502          Fix up .toc parsing to correct index 0 behaviour.
1503          Add Bloc Party's Silent Alarm .toc file to test HTOA.
1504
15052009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1506
1507        * examples/readtoc.py:
1508          Update to work on my desktop.
1509
15102009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1511
1512        * morituri/common/task.py:
1513          Make task subclass log.Log
1514
15152009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1516
1517        * morituri/common/log.py:
1518          Add external log module and use it.
1519
15202009-04-29  Thomas Vander Stichele  <thomas at apestaart dot org>
1521
1522        * morituri/test/cure.toc (added):
1523          Add an example .toc file for the test.
1524
15252009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1526
1527        * examples/readtoc.py:
1528          Extract and print TOC.
1529
15302009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1531
1532        * morituri/test/test_image_toc.py (added):
1533        * morituri/image/toc.py (added):
1534          Add first stab at .toc parsing.
1535
15362009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1537
1538        * examples/readtoc.py:
1539          get errors from output too.
1540
15412009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1542
1543        * morituri/image/image.py:
1544        * morituri/image/table.py:
1545        * morituri/test/test_image_image.py:
1546        * morituri/test/test_image_table.py:
1547          Rename toc.TOC to table.Table
1548
15492009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1550
1551        * morituri/test/test_image_table.py (added):
1552        * morituri/image/table.py (added):
1553        * morituri/test/test_image_toc.py (deleted):
1554        * morituri/image/toc.py (deleted):
1555          Move files around in preparation for the .toc file parsing.
1556
15572009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1558
1559        * examples/movecue.py (added):
1560          Add a script that moves a .cue file in its corresponding directory.
1561
15622009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1563
1564        * morituri/test/kanye.cue (added):
1565          Add a cue test with mixed mode.
1566        * morituri/image/cue.py:
1567        * morituri/test/test_image_cue.py:
1568          Handle it properly.
1569
15702009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1571
1572        * morituri/image/cue.py:
1573          getRealPath should be here, it doesn't need anything outside
1574          the .cue file
1575        * morituri/image/image.py:
1576          Proxy it here.
1577
15782009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1579
1580        * morituri/common/checksum.py:
1581          Add some debugging.
1582        * morituri/test/test_image_image.py:
1583          Run less verbose.
1584
15852009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1586
1587        * morituri/common/task.py:
1588          Allow a SyncRunner to be constructed with verbose too.
1589          Separate a 'running' verbose mode from that.
1590          Fixes unwanted test output.
1591        * morituri/test/test_image_image.py:
1592          Run without verbosity.
1593
15942009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1595
1596        * morituri/test/test_image_image.py:
1597          Fix name.
1598
15992009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1600
1601        * morituri/test/test_common_renamer.py (added):
1602        * morituri/common/renamer.py (added):
1603          Add a way of doing transactional file renames, as well as their
1604          metafile updates.
1605
16062009-04-21  Thomas Vander Stichele  <thomas at apestaart dot org>
1607
1608        * morituri/common/task.py:
1609          Add a 'described' method so listeners can get proper notification
1610          of description changes, and update their description in between
1611          progress changes.
1612          Add a MultiCombinedTask that reports on progress over all tasks
1613          combined.
1614        * examples/trm.py:
1615          Add a playlist option to the example.  Still needs to store results
1616          to pickles, preferably after each completed task.
1617        * morituri/common/checksum.py:
1618          Add audioconvert to make sure we can trm ogg files.
1619
16202009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1621
1622        * morituri/common/task.py:
1623        * morituri/image/image.py:
1624          Move MultiTask to the task module.
1625
16262009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1627
1628        * morituri/common/checksum.py:
1629          Add a task to calculate a trm fingerprint.
1630        * examples/trm.py (added):
1631          Add an example.
1632          Strangely enough it starts burstily, doing 10% directly, halting,
1633          then progressing quickly,
1634
16352009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1636
1637        * examples/ARcue.py:
1638          Fix a bug in the gtk example.
1639
16402009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1641
1642        * examples/readtoc.py:
1643          Read the toc using cdrdao.  Now sets progress based on which
1644          frame it is on.
1645
16462009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1647
1648        * morituri/common/task.py:
1649          Add a __main__ example using DummyTask.
1650
16512009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1652
1653        * morituri/common/task.py:
1654          Make sure we also show progress when it's 0%, at the start.
1655
16562009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1657
1658        * morituri/image/cue.py:
1659          Use names for matches in regexps.
1660
16612009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1662
1663        * examples/readtoc.py (added):
1664          Add an example to read the TOC, not finished yet.
1665
16662009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1667
1668        * morituri/extern (added):
1669        * morituri/extern/__init__.py (added):
1670        * morituri/extern/asyncsub.py (added):
1671          Add extern module; add asynchronous subprocess Popen from
1672          http://code.activestate.com/recipes/440554/
1673
16742009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1675
1676        * examples/gtkchecksum.py:
1677        * morituri/common/checksum.py:
1678          Final crc->checksum fixes.
1679
16802009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1681
1682        * examples/ARcue.py:
1683        * morituri/common/checksum.py:
1684        * morituri/image/image.py:
1685        * morituri/image/toc.py:
1686        * examples/gtkchecksum.py (added):
1687        * examples/gtkcrc.py (deleted):
1688          More crc->checksum changes.
1689
16902009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1691
1692        * examples/ARcue.py:
1693        * morituri/common/checksum.py:
1694        * morituri/image/image.py:
1695        * morituri/test/test_image_image.py:
1696          Change crc to checksum everywhere.
1697
16982009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1699
1700        * morituri/image/image.py:
1701        * morituri/image/toc.py:
1702        * morituri/common/checksum.py (added):
1703        * morituri/common/crc.py (deleted):
1704          Rename crc to checksum, because AccurateRip checksums are not CRC's.
1705
17062009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1707
1708        * examples/ARcue.py:
1709        * morituri/image/image.py:
1710        * morituri/test/test_image_image.py:
1711          Make everything use TOC for the id's.
1712
17132009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1714
1715        * morituri/image/image.py:
1716          Refactor to use TOC class.
1717        * morituri/image/toc.py:
1718          Fully document.
1719
17202009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1721
1722        * morituri/test/test_image_toc.py (added):
1723        * morituri/image/toc.py (added):
1724          Add an abstraction for a TOC.
1725          Take data tracks into account correctly for CDDB and AccurateRip
1726          disc ID's.
1727
17282009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1729
1730        * morituri/image/image.py:
1731        * morituri/test/test_image_image.py:
1732          AccurateRip binary files actually contain multiple responses, so
1733          parse all of them.
1734        * examples/ARcue.py:
1735          Handle case of not having a response, and having multiple responses.
1736
17372009-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1738
1739        * morituri/common/crc.py:
1740          Actually return the CRC when checking frame 5.
1741        * morituri/test/test_image_image.py:
1742          Update test for this fix.
1743
17442009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1745
1746        * morituri/image/image.py:
1747          Also look for audio file basename relative to cue file.
1748
17492009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1750
1751        * examples/ARcue.py:
1752          Make output a bit nicer, mentioning whether tracks were
1753          accurately ripped.
1754
17552009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1756
1757        * morituri/image/image.py:
1758          Add an object to parse the response of AccurateRip.
1759        * morituri/test/test_image_image.py:
1760        * morituri/test/dBAR-011-0010e284-009228a3-9809ff0b.bin (added):
1761          Add a test for it, based on my Kings Of Leon CD.
1762
17632009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1764
1765        * morituri/image/image.py:
1766          Add the 150 frames for the leadin only to the CDDB calculation.
1767          Add methods to calculate AccurateRip id's and URL.
1768        * morituri/test/test_image_image.py:
1769          Add tests for it.
1770        * examples/ARcue.py:
1771          Show AccurateRip URL.
1772
17732009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1774
1775        * examples/ARcue.py:
1776        * morituri/common/crc.py:
1777        * morituri/image/image.py:
1778        * morituri/test/test_image_image.py:
1779          Calculate CDDB disc id.
1780          Tested on my Kings Of Leon CD.
1781
17822009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1783
1784        * examples/ARcue.py:
1785        * morituri/image/image.py:
1786        * morituri/test/test_image_image.py:
1787          Add a task to verify a disk image, which also calculates
1788          track lengths for tracks the cue file doesn't know the length of.
1789
17902009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1791
1792        * examples/ARcue.py:
1793          Add option to run either command-line or gtk.
1794
17952009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1796
1797        * morituri/image/image.py:
1798          Create a MultiTask base class, and make AudioRipCRCTask
1799          use it.
1800
18012009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1802
1803        * morituri/image/image.py:
1804        * morituri/test/test_image_image.py:
1805          Add a task for calculating frame length of an audio file.
1806          Add a test for it.
1807
18082009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1809
1810        * morituri/common/task.py:
1811          Schedule the start from the main loop, otherwise the
1812          task might complete before we're in the main loop,
1813          and then the loop.quit() doesn't work.
1814
18152009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1816
1817        * examples/ARcue.py:
1818        * examples/gtkcrc.py:
1819          Rework both examples to look more similar.
1820
18212009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1822
1823        * examples/gtkcrc.py:
1824        * morituri/common/task.py:
1825          Move the gtk-based progress bar to task.
1826
18272009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1828
1829        * examples/gtkcrc.py:
1830        * morituri/common/crc.py:
1831        * morituri/common/task.py:
1832        * morituri/image/image.py:
1833          Add a 'schedule' call to the TaskRunner class, so that we can
1834          abstract things like gobject.timeout_add and reactor.callLater
1835          Pass the runner to the task in Task.start() so a task can call
1836          schedule.
1837
18382009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1839
1840        * morituri/common/task.py:
1841          Update the docs.
1842
18432009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1844
1845        * morituri/test/test_image_image.py (added):
1846          Add tests for AudioRip CRC'ing images.
1847
18482009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1849
1850        * morituri/test/track-separate.cue (added):
1851        * morituri/test/track.flac (added):
1852        * morituri/test/Makefile (added):
1853        * morituri/test/track-single.cue (added):
1854          Add a simple 10 frame flac file, and two .cue files
1855          using it.
1856
18572009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1858
1859        * morituri/image/image.py:
1860          If paths are relative, make them relative to cue file.
1861
18622009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1863
1864        * morituri/common/task.py:
1865          clear with whitespace.
1866
18672009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1868
1869        * examples/ARcue.py:
1870        * morituri/common/task.py:
1871        * morituri/image/image.py (added):
1872          Add an object for handling an Image based on a .cue file.
1873          Create a Task for CRC'ing the whole Image.
1874          Make the example use this new task instead.
1875
18762009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1877
1878        * examples/gtkcrc.py:
1879        * morituri/common/task.py:
1880          Add task object to listener interface methods.
1881
18822009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1883
1884        * morituri/common/task.py:
1885          Move methods around.
1886
18872009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1888
1889        * examples/ARcue.py:
1890        * examples/gtkcrc.py:
1891        * morituri/common/crc.py:
1892        * morituri/common/task.py:
1893          Split out generic task/runner from CRC tasks.
1894
18952009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1896
1897        * morituri/common/crc.py (added):
1898          Copy from task.py before splitting.
1899
19002009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1901
1902        * examples/gtkcrc.py:
1903        * morituri/common/task.py:
1904          Don't block the main loop by infinitely scheduling
1905          set_state.
1906
19072009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1908
1909        * examples/ARcue.py:
1910        * examples/gtkcrc.py:
1911        * morituri/common/task.py:
1912          Make a real Task interface and use it.
1913          Make runners reusable for multiple tasks.
1914          gtkcrc.py seems to be blocking updates however.
1915
19162009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1917
1918        * morituri/test (added):
1919        * morituri/test/test_image_cue.py (added):
1920        * morituri/test/kings-single.cue (added):
1921        * morituri/test/__init__.py (added):
1922        * morituri/test/kings-separate.cue (added):
1923          Add test suite.  Add Kings Of Leon cue files.
1924
19252009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1926
1927        * examples/ARcue.py:
1928          Error out when the file doesn't exist.
1929        * morituri/common/task.py:
1930          Drag the lake.
1931          Clean up prints.
1932
19332009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1934
1935        * morituri/common/task.py:
1936          Remove queue to avoid race.
1937          Remove prints.
1938          Clean up debug.
1939          Update progress after handling buffers.
1940
19412009-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1942
1943        * morituri/common/task.py:
1944          Introduce constants for FRAMES_PER_DISC_FRAME
1945        * examples/ARcue.py:
1946          Use the constant.
1947          Get the CRC right for the last track too.
1948
19492009-03-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1950
1951        * examples/ARcue.py:
1952        * morituri/common/task.py:
1953          Use an adapter to assemble CD frames.
1954          Take into account special rules for first and last track.
1955          Mention some bugs.
1956          Remember to drag the lake from the task.
1957
19582009-03-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1959
1960        * examples/ARcue.py:
1961        * morituri/common/task.py:
1962          First version that seems to get some AccurateRip checksums right.
1963
19642009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1965
1966        * morituri/image/cue.py:
1967          publicize CueFile.tracks
1968          Add a method to get track lengths
1969        * examples/readcue.py:
1970          Use it.
1971
19722009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1973
1974        * morituri/common/task.py (added):
1975          Add a task abstraction.
1976
Note: See TracBrowser for help on using the repository browser.