source: trunk/ChangeLog @ 364

Revision 364, 54.5 KB checked in by thomas, 3 years ago (diff)

patch by: Peter Oliver.

  • morituri/common/program.py: Allow using sortName for artist/track using %S/%s. Fixes #19.
Line 
12010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
2
3        patch by: Peter Oliver.
4
5        * morituri/common/program.py:
6          Allow using sortName for artist/track using %S/%s.
7          Fixes #19.
8
92010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
10
11        * doc/release:
12          Document having clean test run.
13        * morituri/common/encode.py:
14          Catch and properly stop on gst.QueryError.
15          Don't set peak in stop if we had an error.
16        * morituri/test/test_common_encode.py:
17        * morituri/test/test_common_renamer.py:
18        * morituri/test/test_image_cue.py:
19          Clean up after tests.
20
212010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
22
23        * morituri/common/task.py:
24        * morituri/image/cue.py:
25          Add logCategory.
26        * morituri/image/image.py:
27          If subtasks had an exception, retrigger the exception and stop.
28
292010-04-06  Thomas Vander Stichele  <thomas at apestaart dot org>
30
31        * morituri/image/image.py:
32          Fix AudioLengthTask for the case where we don't have the decoder,
33          by instead of doing get_state, waiting for an ASYNC_DONE or ERROR
34          message.  Properly raise a gst.GError in that case.
35        * morituri/common/task.py:
36          Add some debug.
37        * morituri/test/test_image_image.py:
38          After this fix, we now catch the TYPE_NOT_FOUND because of an
39          empty stream instead of the later gst.QueryError.
40        * morituri/test/test_common_encode.py:
41          Let us know what it is if not a gst.QueryError.
42
432010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
44
45        * doc/Makefile.am:
46          Don't put rip.1 manpage in subdir.
47
482010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
49
50        * morituri/common/common.py:
51          add quoteParse function to quote properly for gst.parse_launch()
52        * morituri/common/checksum.py:
53          Fix single quote problem.
54          use self.setException()
55        * morituri/common/encode.py:
56          Fix single quote problem.
57        * morituri/image/image.py:
58          Fix single quote problem.
59          Reraise gst.QueryError.
60        * morituri/test/test_common_encode.py:
61        * morituri/test/test_common_encode.py (added):
62          Add tests for unicode/single/double quote.
63        * morituri/test/test_image_image.py:
64        * morituri/test/test_common_checksum.py:
65          Add tests for single/double quote.
66        * morituri/test/common.py:
67          add twisted-like failUnlessRaises to TestCase that returns
68          the exception, so we can check wrapped exceptions in TaskException.
69          Fixes #16.
70
712010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
72
73        * morituri/common/task.py:
74          Wrap exceptions during tasks in a TaskException, storing the
75          message, for improved error reporting later on.
76
772010-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
78
79        * doc/Makefile.am:
80        * morituri.spec.in:
81        * morituri/extern/Makefile.am:
82          Use help2man.py to generate manpage.
83
842010-04-04  Thomas Vander Stichele  <thomas at apestaart dot org>
85
86        * morituri/common/encode.py:
87        * morituri/common/program.py:
88        * morituri/image/image.py:
89        * morituri/program/cdparanoia.py:
90        * morituri/rip/cd.py:
91        * morituri/rip/image.py:
92        * morituri/rip/offset.py:
93          Move all gst-using imports inside functions and classes
94          to avoid 'import gst' eating our options.
95          Fixes #12.
96
972010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
98
99        * bin/Makefile.am:
100          Install rip as the script.
101
1022010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
103
104        * morituri/common/Makefile.am:
105          Add missing result.py
106        * morituri/test/Makefile.am:
107        * morituri/test/test_image_toc.py:
108        * morituri/test/JoséGonzález.toc (added):
109        * morituri/test/José González.toc (deleted):
110          automake doesn't handle spaces in names, so move it.
111
1122010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
113
114        * bin/rip.in:
115          Add our PYTHONLIBDIR to sys.path if needed.  Should make this
116          work when doing ./configure; sudo checkinstall make install
117          on e.g. Ubuntu.
118
1192010-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
120
121        * configure.ac:
122        * bin/rip.in (added):
123        * bin/rip (deleted):
124          Generate bin/rip so we can do sys.path stuff.
125
1262010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
127
128        * morituri/rip/offset.py:
129          Add a more complete list of offsets, obtained using misc/offsets.py
130
1312010-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
132
133        * misc/offsets.py (added):
134          Add a script to calculate list of offsets based on AccurateRip's
135          online database, according to popularity.
136
1372010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
138
139        * morituri/common/encode.py:
140          Handle utf-8 properly.
141
1422010-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
143
144        * morituri/common/program.py:
145          Fix a problem with Arid's new album of not having an id.
146
1472010-01-31  Thomas Vander Stichele  <thomas at apestaart dot org>
148
149        * morituri/common/accurip.py:
150          The AccuRip cache dir could exist without the file; handle that
151          case.
152
1532009-12-28  Thomas Vander Stichele  <thomas at apestaart dot org>
154
155        * morituri/common/program.py:
156          For Various Artists releases, fall back to the release artist if
157          the track artist is None.
158
1592009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
160
161        * morituri/image/image.py:
162          Add ImageEncodeTask to encode a disk image to a different profile
163          and directory.
164        * morituri/common/encode.py:
165          Add lossy encoding profiles for mp3 and vorbis.
166          Rename muxer to tagger since that's what we use it for.
167          Do progress probe after level to make sure we get samples for
168          offsets.
169        * morituri/rip/image.py:
170          Add rip image encode command.
171
1722009-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
173
174        * morituri/test/José González.toc (added):
175          Add test file for a test.
176
1772009-10-16  Thomas Vander Stichele  <thomas at apestaart dot org>
178
179        * morituri/common/task.py:
180          Add exceptionMessage on Task to store the result of
181          log.getExceptionMessage when the stack is still valid.
182
1832009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
184
185        * configure.ac:
186          Back to TRUNK.
187
188=== release 0.1.0 ===
189
1902009-09-26  Thomas Vander Stichele  <thomas at apestaart dot org>
191
192        * NEWS:
193        * RELEASE:
194        * configure.ac:
195          Releasing 0.1.0, "Youngblood".
196
1972009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
198
199        * morituri/program/cdparanoia.py:
200          explicitize keyword args.
201          Break some 80+ lines.
202
2032009-09-19  Thomas Vander Stichele  <thomas at apestaart dot org>
204
205        * morituri/rip/offset.py:
206          Pass device parameter to ReadTrackTask.  Thanks to Alex B for
207          spotting this on my blog.
208
2092009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
210
211        * morituri/program/cdparanoia.py:
212        * morituri/rip/offset.py:
213          Another unicode fix.
214
2152009-09-12  Thomas Vander Stichele  <thomas at apestaart dot org>
216
217        * HACKING:
218          More unicode notes.
219        * morituri/common/program.py:
220        * morituri/image/table.py:
221        * morituri/image/toc.py:
222        * morituri/result/result.py:
223        * morituri/rip/cd.py:
224        * morituri/test/test_image_toc.py:
225          Further unicode fixes, for options, CD-Text, paths, ...
226
2272009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
228
229        * morituri/program/cdrdao.py:
230          Wrap read in an exception handler.
231        * morituri/common/task.py:
232          Debug exceptions more.
233
2342009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
235
236        * HACKING:
237          Note unicode handling.
238        * morituri/test/test_image_image.py:
239        * morituri/image/table.py:
240        * morituri/program/cdparanoia.py:
241        * morituri/common/checksum.py:
242          Use unicode for paths.
243          Use repr for path representation.
244        * morituri/test/test_common_checksum.py:
245          Add test for unicode audio file name.
246
2472009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
248
249        * morituri/image/cue.py:
250        * morituri/image/toc.py:
251        * morituri/test/test_image_cue.py:
252        * morituri/test/test_image_toc.py:
253          Read input file as utf-8.  Fix logging of paths.
254        * morituri/image/image.py:
255          Document and add asserts for unicodeness of paths.
256          Encode path in launch lines as utf-8
257
2582009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
259
260        * morituri/common/task.py:
261          Make SyncRunner wrap start() so we correctly handle any
262          exception being thrown.
263         
2642009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
265
266        * morituri/common/checksum.py:
267        * morituri/test/Makefile.am:
268        * morituri/test/test_common_checksum.py (added):
269          Add a check to make sure that checksumming an empty file doesn't
270          hang.  Fix the hang.
271
2722009-09-08  Thomas Vander Stichele  <thomas at apestaart dot org>
273
274        * morituri.spec.in:
275          Add pycdio as requirement.
276
2772009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
278
279        * morituri/common/program.py:
280          Fix getting AccurateRip results for albums with a HTOA.
281        * morituri/test/Makefile.am:
282        * morituri/test/test_common_program.py:
283        * morituri/test/silentalarm.result.pickle (added):
284          Add testcase for it, Bloc Party's Silent Alarm.
285
2862009-09-07  Thomas Vander Stichele  <thomas at apestaart dot org>
287
288        * morituri.spec.in:
289          Update requirements to work around known bugs.
290
2912009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
292
293        * morituri/rip/cd.py:
294          Fix warning against rebuilt package.
295
2962009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
297
298        * README:
299          Fix up dependencies.
300        * morituri.spec.in:
301          Fix dependencies and noarch install location.
302        * morituri/common/Makefile.am:
303          Add result.py to dist
304
3052009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
306
307        * configure.ac:
308        * m4/Makefile.am:
309        * m4/as-ac-expand.m4 (added):
310          Correctly set installation dir for noarch python files so that it
311          works on 64 bit.
312
3132009-09-06  Thomas Vander Stichele  <thomas at apestaart dot org>
314
315        * morituri/program/cdrdao.py:
316          Parse version number.
317        * morituri/rip/cd.py:
318          Warn about cdrdao versions with a bug.
319        * morituri/test/test_program_cdrdao.py:
320          Test that we can parse the version.
321
3222009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
323
324        * morituri/program/cdrdao.py:
325          Handle errors.  Tested by not having a CD in the drive.
326
3272009-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
328
329        * morituri/common/task.py:
330          Document better.
331          Create an ITaskListener interface where we can document.
332          Log some more.
333
3342009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
335
336        * morituri/test/test_common_program.py:
337        * morituri/common/program.py:
338          Extract a common method to get textual representation of
339          AccurateRip results, and test it.
340        * morituri/rip/cd.py:
341        * morituri/rip/image.py:
342          Use the method.
343
3442009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
345
346        * morituri/image/table.py:
347          Fix deprecationwarning for python 2.6
348
3492009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
350
351        * morituri/test/test_common_program.py (added):
352        * morituri/common/program.py:
353          Break verifyImage into two so we can test it.
354          Test it using an AccurateRip result for Luke Haines Is Dead
355          which had a wrongly ripped track 10.
356
357
3582009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
359
360        * morituri/result/result.py:
361          Document some more.
362
3632009-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
364
365        * morituri/test/Makefile.am:
366        * morituri/test/dBAR-020-002e5023-029d8e49-040eaa14.bin (added):
367          Add AR result for Luke Haines Is Dead disc 1
368
3692009-06-20  Thomas Vander Stichele  <thomas at apestaart dot org>
370
371        * Makefile.am:
372        * misc/pycheckerrc:
373        * morituri/common/accurip.py:
374        * morituri/common/checksum.py:
375        * morituri/common/encode.py:
376        * morituri/image/table.py:
377        * morituri/rip/drive.py:
378          Fix up for pychecker warnings for 2.6
379          Fix rip drive list, which forgot some modules.
380
3812009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
382
383        * morituri/rip/main.py:
384        * morituri/rip/image.py (added):
385          Add command to verify an image.
386        * morituri/common/program.py:
387        * morituri/rip/cd.py:
388          Fix AccurateRip checksum output.
389
3902009-06-16  Thomas Vander Stichele  <thomas at apestaart dot org>
391
392        * morituri/common/drive.py:
393          Really make pycdio and cdio optional.
394        * morituri/rip/drive.py:
395        * morituri/rip/offset.py:
396          Use drive.getAllDevicePaths()
397
3982009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
399
400        * morituri/result/result.py:
401          Add max confidence from database.
402        * morituri/common/program.py:
403        * morituri/rip/cd.py:
404          Move AccurateRip checking to program.py
405          Re-rip if verification failed when continuing a rip.
406
4072009-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
408
409        * morituri/image/cue.py:
410          Better debug.
411
4122009-06-09  Thomas Vander Stichele  <thomas at apestaart dot org>
413
414        * morituri/common/program.py:
415        * morituri/rip/cd.py:
416          Serialize the rip result after every rip, so we can pick up
417          where we left off with all result data.
418
4192009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
420
421        * morituri/common/program.py:
422          Move getPath to Program.
423          Remove arguments to ripTrack that can be gotten from
424          trackResult.
425        * morituri/rip/cd.py:
426          Continue without musicbrainz metadata.
427          Unify htoa and normal track ripping.
428        * morituri/result/result.py:
429          Add getTrackResult so it's easier to look up track results
430          when there's a HTOA.
431
4322009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
433
434        * morituri/common/program.py:
435        * morituri/rip/cd.py:
436          Move HTOA checking to program.
437
4382009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
439
440        * morituri/result/logger.py:
441          Fix for toctable->table
442        * morituri/common/program.py:
443        * morituri/rip/cd.py:
444          Move lots of functionality to program module.
445
4462009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
447
448        * morituri/result/result.py:
449          Change toctable to table since it's a full index table.
450        * morituri/common/Makefile.am:
451        * morituri/common/program.py (added):
452          Add module and class for program state.
453        * morituri/rip/cd.py:
454          Use the program state to clean up the do() function.
455
4562009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
457
458        * morituri/rip/cd.py:
459          Massage into 80 characters per line.
460          Make pycdio/cdio optional.
461
4622009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
463
464        * morituri/rip/drive.py:
465          Make pycdio and cdio optional.
466
4672009-06-07  Thomas Vander Stichele  <thomas at apestaart dot org>
468
469        * morituri/image/table.py:
470          Add getPregap() method.
471        * morituri/rip/cd.py:
472          Use artist.name, not getUniqueName, to avoid monstruous names for
473          Muse.
474          Pass mbdiscid to getPath, so Unknown Disc can be saved with it.
475          Don't set the date if the release doesn't have one.
476          Set pregap on trackResult using new Track.getPregap()
477          Write all log/cue/m3u files as utf-8.
478
4792009-06-06  Thomas Vander Stichele  <thomas at apestaart dot org>
480
481        * morituri/test/cdparanoia.progress:
482          Add a shorter test file, 23 seconds.
483        * morituri/test/test_program_cdparanoia.py:
484          Update the test to adapt.  Check for track quality.
485        * morituri/program/cdparanoia.py:
486          Add a measure of track quality based on the number of reads.
487          Use the [wrote] output for progress updates, a bit more
488          jittery in its output.
489        * morituri/rip/cd.py:
490          Set track quality on RipResult.
491
4922009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
493
494        * morituri/rip/cd.py:
495          Use RipResult to store result information.
496        * morituri/result/logger.py (added):
497          Add a Logger to handle the RipResult, much like
498          EAC's log file.
499
5002009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
501
502        * morituri/rip/cd.py:
503          Comment out number of track setting on tag for now.
504          MusicBrainz can give us dates in YYYY, YYYY-MM, and YYYY-MM-DD
505          format, so convert to YYYY-MM-DD always.
506          Unmount the data part of the CD we want to rip if it is mounted.
507          Adapt to peak level change.
508          Don't try to write data tracks to the m3u file.
509          Resolve the device path to the actual device path.
510
5112009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
512
513        * morituri/result/result.py:
514          Add a Logger base class.
515
5162009-06-05  Thomas Vander Stichele  <thomas at apestaart dot org>
517
518        * configure.ac:
519        * morituri/Makefile.am:
520        * morituri/result (added):
521        * morituri/result/result.py (added):
522        * morituri/result/__init__.py (added):
523        * morituri/result/Makefile.am (added):
524          Add classes to store track and rip results in.
525
5262009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
527
528        * morituri/common/common.py:
529          Add an argument for the delimiter in formatting.
530        * morituri/common/encode.py:
531          Most programs use peak volume, not power, so do this too.
532
5332009-06-04  Thomas Vander Stichele  <thomas at apestaart dot org>
534
535        * morituri/test/common.py:
536          Add a method for diffing multiline strings.
537
5382009-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
539
540        * morituri/common/encode.py:
541          Add a test() method to the profile so we can warn about bad
542          flacenc versions.
543          Encode track number and count, and release date, if possible.
544        * morituri/rip/cd.py:
545          Fix another off-by-one error in the tag encoding.
546
5472009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
548
549        * morituri/program/cdparanoia.py:
550        * morituri/rip/cd.py:
551          Handle another off-by-one error in the m3u handling.
552          Add a getTagList function.
553          Use it to encode tags.
554
5552009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
556
557        * morituri/common/encode.py:
558        * morituri/program/cdparanoia.py:
559        * morituri/rip/cd.py:
560          Clean up the temporary unencoded file.
561          Pass profile as objects to tasks, so that temp files have the right
562          extension.
563
5642009-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
565
566        * morituri/common/encode.py:
567        * morituri/program/cdparanoia.py:
568          Add encoding profiles, kept simple for now as a class and
569          subclasses.  Use them to encode.  Calculate peak level while
570          encoding, compared to EAC and replaygain's value.
571        * morituri/rip/cd.py:
572          Use the encoding profiles, ripping with the right extension.
573          Add a --profile parameter for it.
574
5752009-05-31  Thomas Vander Stichele  <thomas at apestaart dot org>
576
577        * morituri/rip/cd.py:
578          Clean up track numbering confusion.
579
5802009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
581
582        * morituri/common/encode.py (added):
583        * examples/encode.py (added):
584          Add an Encode Task, hardcoded to flac for now.
585          Add an example, that also sets tags.
586
5872009-05-26  Thomas Vander Stichele  <thomas at apestaart dot org>
588
589        * morituri/common/task.py:
590          Add debug.
591        * morituri/rip/drive.py:
592          Show all drives, not just the ones that happen to have an Audio CD
593          inserted.
594
5952009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
596
597        * morituri/rip/cd.py:
598          Add asserts for comparing id's between the simple toc and
599          the full table.
600          Create the output directory before ripping the htoa.
601          Ignore data tracks for now.
602          Don't fail if we have no AccurateRip responses.
603        * morituri/image/table.py:
604          Add a session ivar to Track.
605          Factor in session leadin when calculating track length
606          of last track in a session.
607          add getMusicBrainzSubmitURL()
608          add _getSessionGap() because the session gap size is different
609          for session 2 and all following.
610          Use it in merge() to get offsets right.
611          Fix getAccurateRipURL by only using the audio tracks for the
612          'length in tracks' number
613          Temporarily disable writing out data tracks to a .cue file,
614          since it's not implemented yet.
615          Add canCue to see if we can write a .cue file from the given table,
616          and debug why not if not.
617        * morituri/program/cdrdao.py:
618          Rework to rip each session separately instead of using session 9.
619          This fixes session 9 read-toc missing the pregap.
620          Add a simple LineParser for handling output from disk-info.
621          Count tracks relatively for the session, because the output for
622          session 2 for track numbers picks up where session 1 left off.
623          Don't set leadout from TOC printing since for the same reason
624          session 2's leadout is absolute, not relative to start of session.
625          Add a DiscInfoTask.
626          Convert Table and Toc reading tasks to multitasks, first getting the
627          number of sessions, then reading table/toc for each session.
628
629        * morituri/test/test_image_table.py:
630          Fix up MusicBrainz disc id for my Ladyhawke disc.
631          Add AccurateRip URL verification, compared against EAC's.
632        * morituri/test/test_image_toc.py:
633          Use two separate session read-toc output files to verify
634          the case of Das Capital.
635          Verify musicbrainz URL.
636
6372009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
638
639        * morituri/common/task.py:
640          Add documentation.
641          Use a _task counter instead of duplicating tasks to
642          __tasks; this allows us to add tasks after starting.
643          Catch Exceptions during next() so that we don't get
644          stuck in a main loop that doesn't exit.
645          Raise it later when we're done.
646
6472009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
648
649        * morituri/common/common.py:
650          Since the version was inherited from the current code
651          in unpickled objects, separate into classVersion and
652          an instanceVersion set from __init__.
653
6542009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
655
656        * morituri/image/toc.py:
657          Add a logName for debugging.
658
6592009-05-25  Thomas Vander Stichele  <thomas at apestaart dot org>
660
661        * morituri/program/cdparanoia.py:
662        * morituri/image/image.py:
663          Correctly chain up to parent __init__ for MultiTasks
664
6652009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
666
667        * morituri/test/capital.1.toc (added):
668        * morituri/test/capital.2.toc (added):
669          Add two .toc's for two sessions of a 2 session disc
670        * morituri/image/table.py:
671          Add a merge method to merge in a second session.
672        * morituri/test/Makefile.am:
673        * morituri/test/test_image_toc.py:
674          Add a test for merging the Das Capital sessions, gets
675          the CDDB disc id right.
676
6772009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
678
679        * morituri/common/common.py:
680          Add a persisted cache so that we can store pickles on discs.
681          Automatically delete them if the class version is newer than
682          the object's.
683        * morituri/rip/cd.py:
684          Use it.
685
6862009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
687
688        * morituri/image/table.py:
689          Add a version ivar to help with versioning pickled objects.
690
6912009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
692
693        * morituri/program/cdparanoia.py:
694          Add copy and test CRC's to object.
695
6962009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
697
698        * morituri/common/Makefile.am:
699        * morituri/common/drive.py (added):
700          Add drive module.
701
7022009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
703
704        * morituri/program/cdparanoia.py:
705        * morituri/program/cdrdao.py:
706        * morituri/rip/cd.py:
707        * morituri/rip/offset.py:
708          Add device argument to ripping/scanning tasks.
709
7102009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
711
712        * morituri/common/accurip.py:
713        * morituri/image/image.py:
714        * morituri/test/Makefile.am:
715        * morituri/test/test_image_image.py:
716        * morituri/test/test_common_accurip.py (added):
717          Move accuraterip stuff to the accurip module.
718          Move/create new test file.
719
7202009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
721
722        * morituri/rip/Makefile.am:
723        * morituri/rip/main.py:
724        * morituri/rip/drive.py (added):
725          Add 'rip drive list' command to list available drives.
726        * morituri/common/accurip.py:
727          Add force.
728        * morituri/rip/cd.py:
729          Add --output-directory argument.
730
7312009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
732
733        * morituri/common/Makefile.am:
734        * morituri/rip/cd.py:
735        * morituri/common/accurip.py (added):
736          Add a module for handling a cache of AccurateRip results.
737          Use it.
738
7392009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
740
741        * morituri/rip/Makefile.am:
742        * morituri/rip/main.py:
743        * morituri/rip/cd.py (added):
744          Add second command, 'rip cd rip' before factoring out functionality.
745
7462009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
747
748        * morituri/rip/Makefile.am:
749        * morituri/rip/main.py:
750        * morituri/rip/offset.py (added):
751          Add first command, 'rip offset find'
752
7532009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
754
755        * Makefile.am:
756        * morituri/test/Makefile.am:
757          Make distcheck work.
758
7592009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
760
761        * morituri/common/checksum.py:
762          More pychecker fixes.
763
7642009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
765
766        * morituri/common/common.py:
767        * morituri/common/renamer.py:
768          Pychecker fixes.
769
7702009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
771
772        * RELEASE:
773        * misc/pycheckerrc:
774        * misc/show-coverage.py:
775        * morituri/image/Makefile.am:
776        * morituri/program/Makefile.am:
777        * RELEASE (added):
778        * morituri/image/Makefile.am (added):
779        * morituri/program/Makefile.am (added):
780        * misc/show-coverage.py (added):
781        * misc/pycheckerrc (added):
782          more additions
783
7842009-05-22  Thomas Vander Stichele  <thomas at apestaart dot org>
785
786        * AUTHORS:
787        * Makefile.am:
788        * NEWS:
789        * TODO:
790        * autogen.sh:
791        * configure.ac:
792        * examples/ARcalibrate.py:
793        * misc/Makefile.am:
794        * misc/morituri-uninstalled:
795        * morituri.spec.in:
796        * morituri/Makefile.am:
797        * morituri/common/Makefile.am:
798        * morituri/common/logcommand.py:
799        * morituri/extern/Makefile.am:
800        * morituri/rip/Makefile.am:
801        * morituri/rip/__init__.py:
802        * morituri/rip/main.py:
803        * morituri/test/Makefile:
804        * morituri/test/Makefile.am:
805        * configure.ac (added):
806        * AUTHORS (added):
807        * morituri.spec.in (added):
808        * Makefile.am (added):
809        * morituri/test/Makefile.am (added):
810        * morituri/extern/Makefile.am (added):
811        * morituri/common/logcommand.py (added):
812        * morituri/common/Makefile.am (added):
813        * morituri/Makefile.am (added):
814        * morituri/rip (added):
815        * morituri/rip/__init__.py (added):
816        * morituri/rip/Makefile.am (added):
817        * morituri/rip/main.py (added):
818        * misc/Makefile.am (added):
819        * misc/morituri-uninstalled (added):
820        * autogen.sh (added):
821        * NEWS (added):
822          Start autotooling.  Add a command-line application.
823
8242009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
825
826        * morituri/program/cdrdao.py:
827          read all sessions by reading session 9.
828        * morituri/image/toc.py:
829          Parse ZERO statements properly.
830          Also set absolute offsets when we know them from the .toc file.
831          Properly set audio flag on tracks.
832          FIXME: probably doesn't work if the .toc does not have lengths.
833        * morituri/image/table.py:
834          Add some debug to cddb disc id calculation.
835          Fix absolutize function, it was going one index too far.
836          raise ValueError when overriding .absolute with a wrong value.
837        * examples/readdisc.py:
838          Show CDDB disc id at the start.
839          Assert when toc and table have different disc id's (to be fixed)
840        * morituri/test/test_image_cue.py:
841          Update for having the table already with absolute values.
842        * morituri/test/test_image_toc.py:
843          Add Ladyhawke CDDB test, it has a data track.
844
8452009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
846
847        * examples/readdisc.py:
848          Move constants to common
849
8502009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
851
852        * examples/readdisc.py:
853        * examples/readhtoa.py:
854        * examples/readtoc.py:
855          Rename IndexTable to Table.
856
8572009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
858
859        * morituri/image/cue.py:
860        * morituri/image/image.py:
861        * morituri/image/table.py:
862        * morituri/image/toc.py:
863        * morituri/program/cdparanoia.py:
864        * morituri/program/cdrdao.py:
865        * morituri/test/test_image_cue.py:
866        * morituri/test/test_image_table.py:
867          Rename IndexTable to Table.
868
8692009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
870
871        * morituri/image/cue.py:
872        * morituri/image/image.py:
873        * morituri/image/table.py:
874        * morituri/image/toc.py:
875        * morituri/program/cdrdao.py:
876        * morituri/test/test_image_cue.py:
877        * morituri/test/test_image_table.py:
878          Rename ITTrack to Track.
879
8802009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
881
882        * morituri/common/common.py:
883        * morituri/image/cue.py:
884          Use FRAMES_PER_SECOND where appropriate.
885
8862009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
887
888        * morituri/common/checksum.py:
889        * morituri/common/common.py:
890        * morituri/image/image.py:
891        * morituri/image/table.py:
892        * morituri/program/cdparanoia.py:
893          Move constants to common
894
8952009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
896
897        * examples/readdisc.py:
898          Get our metadata only from the toc.
899
9002009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
901
902        * examples/readdisc.py:
903          Also work for discs without htoa.
904
9052009-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
906
907        * examples/readdisc.py:
908          Write .m3u file.
909
9102009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
911
912        * examples/readdisc.py:
913          Rip HTOA as well.  Add disc-template parameter.
914
9152009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
916
917        * morituri/image/table.py:
918          Fix a subtle bug in our CDDB disc id calculation.
919          The length of the audio should be calculated as the delta
920          between leadout and start already converted (and truncated)
921          to seconds.
922        * morituri/test/bloc.cue:
923        * morituri/test/test_image_toc.py:
924          Fix up tests for this.
925
9262009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
927
928        * morituri/program/cdparanoia.py:
929          Fix up track counting so HTOA can be ripped again.
930        * examples/readhtoa.py:
931          Fix up example so it works again, tested on Silent Alarm.
932
9332009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
934
935        * morituri/test/test_image_toc.py:
936        * morituri/test/bloc.cue (added):
937          Add an expected .cue file for the bloc party toc.
938
9392009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
940
941        * morituri/image/toc.py:
942          Calculate the leadout from the sum of the track lengths.
943        * morituri/test/breeders.cue:
944        * morituri/test/cure.cue:
945          Adapt expected results for DISCID.
946        * morituri/image/table.py:
947          Add an assert for hasTOC() when doing .cue()
948        * morituri/test/test_image_toc.py:
949        * morituri/test/test_image_cue.py:
950          absolutize before cue()
951
9522009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
953
954        * morituri/image/table.py:
955          Only add DISCID if our table is a TOC (which it isn't
956          with our current .toc file parsing)
957        * morituri/test/test_image_cue.py:
958        * morituri/test/test_image_toc.py:
959          Fix up tests; testsuite passes again.
960
9612009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
962
963        * morituri/image/toc.py:
964          Add some debugging.
965
9662009-05-15  Thomas Vander Stichele  <thomas at apestaart dot org>
967
968        * morituri/image/table.py:
969          Update .cue writing:
970          - customise program name
971          - add DISCID
972          - use counter for FILE lines
973          - put FILE line before TRACK if track does not have INDEX 00
974          Take counter into account for setFile
975          Fix off-by-one in setFile
976        * examples/readdisc.py:
977          Add --track-template.
978          Pass counter to setFile.
979
9802009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
981
982        * morituri/image/table.py:
983          Add CDText writing to .cue() method.
984        * morituri/image/toc.py:
985          Add CDText parsing.
986        * morituri/test/test_image_toc.py:
987        * morituri/test/breeders.cue (added):
988          Add a test for cue'ing the breeders' toc.
989
9902009-05-14  Thomas Vander Stichele  <thomas at apestaart dot org>
991
992        * morituri/image/table.py:
993        * morituri/image/toc.py:
994          Add parsing of ISRC codes.
995          Add first part of CDTEXT stuff.
996        * morituri/test/test_image_toc.py:
997          Add test for converting .toc to .cue
998        * morituri/test/cure.cue
999          Add reference for converted cure.toc
1000
10012009-05-10  Thomas Vander Stichele  <thomas at apestaart dot org>
1002
1003        * examples/readhtoa.py:
1004          Fix example.
1005
10062009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1007
1008        * morituri/image/table.py:
1009        * morituri/test/test_image_table.py:
1010          Correctly calculate MusicBrainz disc id for enhanced cd's.
1011
10122009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1013
1014        * morituri/common/task.py:
1015          Log on runners too.
1016        * morituri/program/cdrdao.py:
1017          Abort if output has ERROR by killing and setting an exception.
1018
10192009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1020
1021        * examples/readdisc.py:
1022          filter out slashes when deciding on file names.
1023
10242009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1025
1026        * morituri/common/task.py:
1027        * morituri/image/image.py:
1028          Remove prints.  Describe tasks.
1029
10302009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1031
1032        * morituri/common/task.py:
1033          Add an exception ivar for tasks to set an exception on while
1034          running.  Make SyncRunner raise it during done()
1035        * morituri/program/cdparanoia.py:
1036          Set an exception if the ripped file doesn't match the expected size
1037          (for example when disc is full)
1038
10392009-05-07  Thomas Vander Stichele  <thomas at apestaart dot org>
1040
1041        * morituri/common/common.py:
1042          Set the object when we don't persist.
1043        * examples/readdisc.py:
1044          Small fixes.
1045
10462009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1047
1048        * examples/readdisc.py:
1049          Fix up cue file reading.
1050
10512009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1052
1053        * examples/readdisc.py:
1054          Add musicbrainz code for disc naming.
1055
10562009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1057
1058        * morituri/image/table.py:
1059        * morituri/image/toc.py:
1060          Delete old code.
1061
10622009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
1063
1064        * morituri/image/toc.py:
1065        * morituri/test/test_image_toc.py:
1066        * morituri/test/test_program_cdrdao.py:
1067          After careful vetting, fix up the expected values after toc parsing.
1068          Fix (untested) INDEX handling.  Fix handling of START.
1069
10702009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1071
1072        * morituri/image/table.py:
1073        * morituri/test/test_image_table.py:
1074          Implement MusicBrainz disc id.  Works for audio-only discs,
1075          have to figure out why it fails for an Enhanced CD like the
1076          Ladyhawke one.
1077
10782009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1079
1080        * morituri/image/table.py:
1081          Add logging.
1082          Add methods to clear a table of files, and to absolutize indexes
1083          as long as the source is the same file, and to set a File on a
1084          given index, adjusting all following indexes that match the
1085          duration, and check if the IndexTable has all information for a TOC.
1086        * morituri/image/toc.py:
1087          Add logging.
1088          Use a counter for the source.
1089          Fix up index offset calculation.
1090        * morituri/program/cdrdao.py:
1091          Use a real IndexTable as the result, instead of a TocFile.
1092        * morituri/image/cue.py:
1093          Use a real IndexTable to store tracks.
1094        * morituri/test/test_image_toc.py:
1095          The toc file now has a table which has the tracks.
1096          Fix the tests to adjust for wrong index calculations.
1097        * morituri/test/test_image_cue.py:
1098        * morituri/test/test_image_image.py:
1099        * morituri/image/image.py:
1100          The cue file now has a table which has the tracks.
1101        * morituri/test/test_image_table.py:
1102          Add assertions to make sure when the table can serve as a TOC.
1103        * examples/readdisc.py:
1104          Adjust for changes.  Fix up to include AccurateRip results.
1105          First time we can do a complete normal rip including verifying
1106          against AccurateRip results!
1107
11082009-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1109
1110        * examples/readdisc.py:
1111        * morituri/image/table.py:
1112        * morituri/test/test_image_table.py:
1113          Fix up and deprecate stuff.
1114
11152009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1116
1117        * examples/movecue.py:
1118        * examples/readcue.py:
1119        * morituri/image/cue.py:
1120        * morituri/image/image.py:
1121        * morituri/image/toc.py:
1122        * morituri/program/cdrdao.py:
1123        * morituri/test/test_image_cue.py:
1124        * morituri/test/test_image_toc.py:
1125          Cue -> CueFile
1126          TOC -> TocFile
1127
11282009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1129
1130        * examples/readdisc.py (added):
1131          Add an example to read a whole disc.  Doesn't work yet.
1132
11332009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1134
1135        * examples/readhtoa.py:
1136          Fix up readhtoa example.  Add offset option.
1137
11382009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1139
1140        * examples/ARcalibrate.py:
1141        * examples/readhtoa.py:
1142        * examples/readtoc.py:
1143        * morituri/program/cdrdao.py:
1144          Rename ReadTOCTask to ReadIndexTableTask.
1145          Rename ReadTableTask to ReadTOCTask.
1146
11472009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1148
1149        * morituri/program/cdrdao.py:
1150          Convert ReadTableTask to a CDRDAOTask subclass.
1151        * examples/ARcalibrate.py:
1152        * morituri/program/cdparanoia.py:
1153          Adapt.
1154
11552009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1156
1157        * morituri/program/cdrdao.py:
1158          Fix up index scanning's progress report.
1159          Add some debugging.
1160
11612009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1162
1163        * morituri/program/cdrdao.py:
1164        * morituri/test/test_program_cdrdao.py:
1165          Fix up tests.  Use an IndexTable.
1166
11672009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1168
1169        * morituri/program/cdrdao.py:
1170          Massage out a base class for running cdrdao.
1171
11722009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1173
1174        * morituri/program/cdrdao.py:
1175        * morituri/test/test_program_cdrdao.py (added):
1176          Split out the parser from the task.  Test the parser.
1177
11782009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1179
1180        * morituri/image/cue.py:
1181        * morituri/image/image.py:
1182        * morituri/image/table.py:
1183        * morituri/program/cdparanoia.py:
1184        * morituri/test/test_image_cue.py:
1185          Move to using a shared IndexTable for everything.
1186          Sadly mixed with a MultiTask rename.
1187
11882009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1189
1190        * morituri/common/checksum.py:
1191          Update debugging.  Add repr.
1192
11932009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
1194
1195        * examples/ARcue.py:
1196          Handle case where we have no matching response.
1197
11982009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1199
1200        * morituri/common/task.py:
1201          Distinguish more clearly between MultiSeparateTask and
1202          MultiCombinedTask.
1203
12042009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1205
1206        * morituri/image/cue.py:
1207        * morituri/test/test_image_cue.py:
1208          Add dumping of .cue files.
1209
12102009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1211
1212        * morituri/program/cdparanoia.py:
1213          Use a temporary file to rip to.
1214
12152009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1216
1217        * examples/readtrack.py:
1218          Allow specifying the track to save.
1219
12202009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1221
1222        * morituri/common/task.py:
1223          Make SyncRunner clear previous description/progress task by
1224          tracking longest output given up to now.
1225
12262009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1227
1228        * morituri/program/cdparanoia.py:
1229          Add a task to read and verify a track.
1230        * examples/readtrack.py:
1231          Use it to clean up code.
1232        * morituri/common/task.py:
1233          describe a MultiTask better.
1234
1235
12362009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1237
1238        * morituri/common/common.py:
1239          Create a Persister class to wrap a possible pickle path.
1240        * examples/trm.py:
1241          Use it.
1242
12432009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1244
1245        * morituri/program/cdparanoia.py:
1246          Add table to __init__, so we can correctly calculate cdparanoia's
1247          strange ripping regions.
1248        * examples/ARcalibrate.py:
1249          When we found a positive match on a first track, match all the other
1250          tracks too for confirmation.
1251
12522009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1253
1254        * morituri/common/taskgtk.py:
1255          Bug fix.
1256
12572009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1258
1259        * morituri/common/task.py:
1260        * morituri/common/taskgtk.py:
1261          Split off GtkProgressRunner in separate module to not import gtk
1262          everywhere.
1263        * examples/ARcalibrate.py:
1264        * examples/ARcue.py:
1265        * examples/gtkchecksum.py:
1266        * examples/trm.py:
1267          Adapt.
1268
12692009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1270
1271        * examples/ARcalibrate.py (added):
1272          Add an example that calculates the read offset of your drive
1273          using AccurateRip.
1274
12752009-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
1276
1277        * morituri/program/cdrdao.py:
1278          Add a task to read the Table.
1279
12802009-05-02  Thomas Vander Stichele  <thomas at apestaart dot org>
1281
1282        * morituri/common/task.py:
1283        * morituri/image/image.py:
1284          Add some debugging.
1285
12862009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1287
1288        * examples/readhtoa.py (added):
1289          Add an example that detects and rips the Hidden Track One Audio.
1290
12912009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1292
1293        * examples/readtoc.py:
1294        * morituri/program/cdrdao.py (added):
1295          Move the ReadTocTask to the new cdrdao module.
1296
12972009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1298
1299        * examples/readtrack.py:
1300        * morituri/program/cdparanoia.py:
1301          Move ReadTrackTask to cdparanoia module.
1302
13032009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1304
1305        * examples/readtrack.py (added):
1306          Add an example that reads a track using cdparanoia.
1307
13082009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1309
1310        * morituri/test/cdparanoia.progress (added):
1311        * morituri/test/test_program_cdparanoia.py (added):
1312        * morituri/program/__init__.py (added):
1313        * morituri/program/cdparanoia.py (added):
1314          Add a module to wrap cdparanoia.  Add a test for parsing
1315          the progress report output.
1316
13172009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1318
1319        * morituri/common/checksum.py:
1320          Debug fixes.
1321
13222009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1323
1324        * morituri/common/common.py:
1325          Create some common functions to parse MSF and back.
1326        * morituri/image/toc.py:
1327          Use it here.
1328
13292009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1330
1331        * examples/trm.py:
1332          Allow loading and saving fingerprints from a pickle.
1333
13342009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1335
1336        * morituri/image/toc.py:
1337        * morituri/test/test_image_toc.py:
1338        * morituri/test/bloc.toc (added):
1339          Fix up .toc parsing to correct index 0 behaviour.
1340          Add Bloc Party's Silent Alarm .toc file to test HTOA.
1341
13422009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1343
1344        * examples/readtoc.py:
1345          Update to work on my desktop.
1346
13472009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1348
1349        * morituri/common/task.py:
1350          Make task subclass log.Log
1351
13522009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
1353
1354        * morituri/common/log.py:
1355          Add external log module and use it.
1356
13572009-04-29  Thomas Vander Stichele  <thomas at apestaart dot org>
1358
1359        * morituri/test/cure.toc (added):
1360          Add an example .toc file for the test.
1361
13622009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1363
1364        * examples/readtoc.py:
1365          Extract and print TOC.
1366
13672009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1368
1369        * morituri/test/test_image_toc.py (added):
1370        * morituri/image/toc.py (added):
1371          Add first stab at .toc parsing.
1372
13732009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1374
1375        * examples/readtoc.py:
1376          get errors from output too.
1377
13782009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1379
1380        * morituri/image/image.py:
1381        * morituri/image/table.py:
1382        * morituri/test/test_image_image.py:
1383        * morituri/test/test_image_table.py:
1384          Rename toc.TOC to table.Table
1385
13862009-04-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1387
1388        * morituri/test/test_image_table.py (added):
1389        * morituri/image/table.py (added):
1390        * morituri/test/test_image_toc.py (deleted):
1391        * morituri/image/toc.py (deleted):
1392          Move files around in preparation for the .toc file parsing.
1393
13942009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1395
1396        * examples/movecue.py (added):
1397          Add a script that moves a .cue file in its corresponding directory.
1398
13992009-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1400
1401        * morituri/test/kanye.cue (added):
1402          Add a cue test with mixed mode.
1403        * morituri/image/cue.py:
1404        * morituri/test/test_image_cue.py:
1405          Handle it properly.
1406
14072009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1408
1409        * morituri/image/cue.py:
1410          getRealPath should be here, it doesn't need anything outside
1411          the .cue file
1412        * morituri/image/image.py:
1413          Proxy it here.
1414
14152009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1416
1417        * morituri/common/checksum.py:
1418          Add some debugging.
1419        * morituri/test/test_image_image.py:
1420          Run less verbose.
1421
14222009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1423
1424        * morituri/common/task.py:
1425          Allow a SyncRunner to be constructed with verbose too.
1426          Separate a 'running' verbose mode from that.
1427          Fixes unwanted test output.
1428        * morituri/test/test_image_image.py:
1429          Run without verbosity.
1430
14312009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1432
1433        * morituri/test/test_image_image.py:
1434          Fix name.
1435
14362009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>
1437
1438        * morituri/test/test_common_renamer.py (added):
1439        * morituri/common/renamer.py (added):
1440          Add a way of doing transactional file renames, as well as their
1441          metafile updates.
1442
14432009-04-21  Thomas Vander Stichele  <thomas at apestaart dot org>
1444
1445        * morituri/common/task.py:
1446          Add a 'described' method so listeners can get proper notification
1447          of description changes, and update their description in between
1448          progress changes.
1449          Add a MultiCombinedTask that reports on progress over all tasks
1450          combined.
1451        * examples/trm.py:
1452          Add a playlist option to the example.  Still needs to store results
1453          to pickles, preferably after each completed task.
1454        * morituri/common/checksum.py:
1455          Add audioconvert to make sure we can trm ogg files.
1456
14572009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1458
1459        * morituri/common/task.py:
1460        * morituri/image/image.py:
1461          Move MultiTask to the task module.
1462
14632009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1464
1465        * morituri/common/checksum.py:
1466          Add a task to calculate a trm fingerprint.
1467        * examples/trm.py (added):
1468          Add an example.
1469          Strangely enough it starts burstily, doing 10% directly, halting,
1470          then progressing quickly,
1471
14722009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1473
1474        * examples/ARcue.py:
1475          Fix a bug in the gtk example.
1476
14772009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1478
1479        * examples/readtoc.py:
1480          Read the toc using cdrdao.  Now sets progress based on which
1481          frame it is on.
1482
14832009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
1484
1485        * morituri/common/task.py:
1486          Add a __main__ example using DummyTask.
1487
14882009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1489
1490        * morituri/common/task.py:
1491          Make sure we also show progress when it's 0%, at the start.
1492
14932009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1494
1495        * morituri/image/cue.py:
1496          Use names for matches in regexps.
1497
14982009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1499
1500        * examples/readtoc.py (added):
1501          Add an example to read the TOC, not finished yet.
1502
15032009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
1504
1505        * morituri/extern (added):
1506        * morituri/extern/__init__.py (added):
1507        * morituri/extern/asyncsub.py (added):
1508          Add extern module; add asynchronous subprocess Popen from
1509          http://code.activestate.com/recipes/440554/
1510
15112009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1512
1513        * examples/gtkchecksum.py:
1514        * morituri/common/checksum.py:
1515          Final crc->checksum fixes.
1516
15172009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1518
1519        * examples/ARcue.py:
1520        * morituri/common/checksum.py:
1521        * morituri/image/image.py:
1522        * morituri/image/toc.py:
1523        * examples/gtkchecksum.py (added):
1524        * examples/gtkcrc.py (deleted):
1525          More crc->checksum changes.
1526
15272009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1528
1529        * examples/ARcue.py:
1530        * morituri/common/checksum.py:
1531        * morituri/image/image.py:
1532        * morituri/test/test_image_image.py:
1533          Change crc to checksum everywhere.
1534
15352009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1536
1537        * morituri/image/image.py:
1538        * morituri/image/toc.py:
1539        * morituri/common/checksum.py (added):
1540        * morituri/common/crc.py (deleted):
1541          Rename crc to checksum, because AccurateRip checksums are not CRC's.
1542
15432009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1544
1545        * examples/ARcue.py:
1546        * morituri/image/image.py:
1547        * morituri/test/test_image_image.py:
1548          Make everything use TOC for the id's.
1549
15502009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1551
1552        * morituri/image/image.py:
1553          Refactor to use TOC class.
1554        * morituri/image/toc.py:
1555          Fully document.
1556
15572009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1558
1559        * morituri/test/test_image_toc.py (added):
1560        * morituri/image/toc.py (added):
1561          Add an abstraction for a TOC.
1562          Take data tracks into account correctly for CDDB and AccurateRip
1563          disc ID's.
1564
15652009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
1566
1567        * morituri/image/image.py:
1568        * morituri/test/test_image_image.py:
1569          AccurateRip binary files actually contain multiple responses, so
1570          parse all of them.
1571        * examples/ARcue.py:
1572          Handle case of not having a response, and having multiple responses.
1573
15742009-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
1575
1576        * morituri/common/crc.py:
1577          Actually return the CRC when checking frame 5.
1578        * morituri/test/test_image_image.py:
1579          Update test for this fix.
1580
15812009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1582
1583        * morituri/image/image.py:
1584          Also look for audio file basename relative to cue file.
1585
15862009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1587
1588        * examples/ARcue.py:
1589          Make output a bit nicer, mentioning whether tracks were
1590          accurately ripped.
1591
15922009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1593
1594        * morituri/image/image.py:
1595          Add an object to parse the response of AccurateRip.
1596        * morituri/test/test_image_image.py:
1597        * morituri/test/dBAR-011-0010e284-009228a3-9809ff0b.bin (added):
1598          Add a test for it, based on my Kings Of Leon CD.
1599
16002009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
1601
1602        * morituri/image/image.py:
1603          Add the 150 frames for the leadin only to the CDDB calculation.
1604          Add methods to calculate AccurateRip id's and URL.
1605        * morituri/test/test_image_image.py:
1606          Add tests for it.
1607        * examples/ARcue.py:
1608          Show AccurateRip URL.
1609
16102009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1611
1612        * examples/ARcue.py:
1613        * morituri/common/crc.py:
1614        * morituri/image/image.py:
1615        * morituri/test/test_image_image.py:
1616          Calculate CDDB disc id.
1617          Tested on my Kings Of Leon CD.
1618
16192009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1620
1621        * examples/ARcue.py:
1622        * morituri/image/image.py:
1623        * morituri/test/test_image_image.py:
1624          Add a task to verify a disk image, which also calculates
1625          track lengths for tracks the cue file doesn't know the length of.
1626
16272009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1628
1629        * examples/ARcue.py:
1630          Add option to run either command-line or gtk.
1631
16322009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1633
1634        * morituri/image/image.py:
1635          Create a MultiTask base class, and make AudioRipCRCTask
1636          use it.
1637
16382009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1639
1640        * morituri/image/image.py:
1641        * morituri/test/test_image_image.py:
1642          Add a task for calculating frame length of an audio file.
1643          Add a test for it.
1644
16452009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1646
1647        * morituri/common/task.py:
1648          Schedule the start from the main loop, otherwise the
1649          task might complete before we're in the main loop,
1650          and then the loop.quit() doesn't work.
1651
16522009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1653
1654        * examples/ARcue.py:
1655        * examples/gtkcrc.py:
1656          Rework both examples to look more similar.
1657
16582009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1659
1660        * examples/gtkcrc.py:
1661        * morituri/common/task.py:
1662          Move the gtk-based progress bar to task.
1663
16642009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1665
1666        * examples/gtkcrc.py:
1667        * morituri/common/crc.py:
1668        * morituri/common/task.py:
1669        * morituri/image/image.py:
1670          Add a 'schedule' call to the TaskRunner class, so that we can
1671          abstract things like gobject.timeout_add and reactor.callLater
1672          Pass the runner to the task in Task.start() so a task can call
1673          schedule.
1674
16752009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1676
1677        * morituri/common/task.py:
1678          Update the docs.
1679
16802009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
1681
1682        * morituri/test/test_image_image.py (added):
1683          Add tests for AudioRip CRC'ing images.
1684
16852009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1686
1687        * morituri/test/track-separate.cue (added):
1688        * morituri/test/track.flac (added):
1689        * morituri/test/Makefile (added):
1690        * morituri/test/track-single.cue (added):
1691          Add a simple 10 frame flac file, and two .cue files
1692          using it.
1693
16942009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1695
1696        * morituri/image/image.py:
1697          If paths are relative, make them relative to cue file.
1698
16992009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1700
1701        * morituri/common/task.py:
1702          clear with whitespace.
1703
17042009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1705
1706        * examples/ARcue.py:
1707        * morituri/common/task.py:
1708        * morituri/image/image.py (added):
1709          Add an object for handling an Image based on a .cue file.
1710          Create a Task for CRC'ing the whole Image.
1711          Make the example use this new task instead.
1712
17132009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1714
1715        * examples/gtkcrc.py:
1716        * morituri/common/task.py:
1717          Add task object to listener interface methods.
1718
17192009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1720
1721        * morituri/common/task.py:
1722          Move methods around.
1723
17242009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1725
1726        * examples/ARcue.py:
1727        * examples/gtkcrc.py:
1728        * morituri/common/crc.py:
1729        * morituri/common/task.py:
1730          Split out generic task/runner from CRC tasks.
1731
17322009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1733
1734        * morituri/common/crc.py (added):
1735          Copy from task.py before splitting.
1736
17372009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1738
1739        * examples/gtkcrc.py:
1740        * morituri/common/task.py:
1741          Don't block the main loop by infinitely scheduling
1742          set_state.
1743
17442009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1745
1746        * examples/ARcue.py:
1747        * examples/gtkcrc.py:
1748        * morituri/common/task.py:
1749          Make a real Task interface and use it.
1750          Make runners reusable for multiple tasks.
1751          gtkcrc.py seems to be blocking updates however.
1752
17532009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1754
1755        * morituri/test (added):
1756        * morituri/test/test_image_cue.py (added):
1757        * morituri/test/kings-single.cue (added):
1758        * morituri/test/__init__.py (added):
1759        * morituri/test/kings-separate.cue (added):
1760          Add test suite.  Add Kings Of Leon cue files.
1761
17622009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1763
1764        * examples/ARcue.py:
1765          Error out when the file doesn't exist.
1766        * morituri/common/task.py:
1767          Drag the lake.
1768          Clean up prints.
1769
17702009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
1771
1772        * morituri/common/task.py:
1773          Remove queue to avoid race.
1774          Remove prints.
1775          Clean up debug.
1776          Update progress after handling buffers.
1777
17782009-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
1779
1780        * morituri/common/task.py:
1781          Introduce constants for FRAMES_PER_DISC_FRAME
1782        * examples/ARcue.py:
1783          Use the constant.
1784          Get the CRC right for the last track too.
1785
17862009-03-26  Thomas Vander Stichele  <thomas at apestaart dot org>
1787
1788        * examples/ARcue.py:
1789        * morituri/common/task.py:
1790          Use an adapter to assemble CD frames.
1791          Take into account special rules for first and last track.
1792          Mention some bugs.
1793          Remember to drag the lake from the task.
1794
17952009-03-22  Thomas Vander Stichele  <thomas at apestaart dot org>
1796
1797        * examples/ARcue.py:
1798        * morituri/common/task.py:
1799          First version that seems to get some AccurateRip checksums right.
1800
18012009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1802
1803        * morituri/image/cue.py:
1804          publicize CueFile.tracks
1805          Add a method to get track lengths
1806        * examples/readcue.py:
1807          Use it.
1808
18092009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
1810
1811        * morituri/common/task.py (added):
1812          Add a task abstraction.
1813
Note: See TracBrowser for help on using the repository browser.