2009-04-19 Thomas Vander Stichele * morituri/image/cue.py: Use names for matches in regexps. 2009-04-19 Thomas Vander Stichele * examples/readtoc.py (added): Add an example to read the TOC, not finished yet. 2009-04-19 Thomas Vander Stichele * morituri/extern (added): * morituri/extern/__init__.py (added): * morituri/extern/asyncsub.py (added): Add extern module; add asynchronous subprocess Popen from http://code.activestate.com/recipes/440554/ 2009-04-15 Thomas Vander Stichele * examples/gtkchecksum.py: * morituri/common/checksum.py: Final crc->checksum fixes. 2009-04-15 Thomas Vander Stichele * examples/ARcue.py: * morituri/common/checksum.py: * morituri/image/image.py: * morituri/image/toc.py: * examples/gtkchecksum.py (added): * examples/gtkcrc.py (deleted): More crc->checksum changes. 2009-04-15 Thomas Vander Stichele * examples/ARcue.py: * morituri/common/checksum.py: * morituri/image/image.py: * morituri/test/test_image_image.py: Change crc to checksum everywhere. 2009-04-15 Thomas Vander Stichele * morituri/image/image.py: * morituri/image/toc.py: * morituri/common/checksum.py (added): * morituri/common/crc.py (deleted): Rename crc to checksum, because AccurateRip checksums are not CRC's. 2009-04-15 Thomas Vander Stichele * examples/ARcue.py: * morituri/image/image.py: * morituri/test/test_image_image.py: Make everything use TOC for the id's. 2009-04-15 Thomas Vander Stichele * morituri/image/image.py: Refactor to use TOC class. * morituri/image/toc.py: Fully document. 2009-04-15 Thomas Vander Stichele * morituri/test/test_image_toc.py (added): * morituri/image/toc.py (added): Add an abstraction for a TOC. Take data tracks into account correctly for CDDB and AccurateRip disc ID's. 2009-04-15 Thomas Vander Stichele * morituri/image/image.py: * morituri/test/test_image_image.py: AccurateRip binary files actually contain multiple responses, so parse all of them. * examples/ARcue.py: Handle case of not having a response, and having multiple responses. 2009-04-14 Thomas Vander Stichele * morituri/common/crc.py: Actually return the CRC when checking frame 5. * morituri/test/test_image_image.py: Update test for this fix. 2009-04-13 Thomas Vander Stichele * morituri/image/image.py: Also look for audio file basename relative to cue file. 2009-04-13 Thomas Vander Stichele * examples/ARcue.py: Make output a bit nicer, mentioning whether tracks were accurately ripped. 2009-04-13 Thomas Vander Stichele * morituri/image/image.py: Add an object to parse the response of AccurateRip. * morituri/test/test_image_image.py: * morituri/test/dBAR-011-0010e284-009228a3-9809ff0b.bin (added): Add a test for it, based on my Kings Of Leon CD. 2009-04-13 Thomas Vander Stichele * morituri/image/image.py: Add the 150 frames for the leadin only to the CDDB calculation. Add methods to calculate AccurateRip id's and URL. * morituri/test/test_image_image.py: Add tests for it. * examples/ARcue.py: Show AccurateRip URL. 2009-04-12 Thomas Vander Stichele * examples/ARcue.py: * morituri/common/crc.py: * morituri/image/image.py: * morituri/test/test_image_image.py: Calculate CDDB disc id. Tested on my Kings Of Leon CD. 2009-04-12 Thomas Vander Stichele * examples/ARcue.py: * morituri/image/image.py: * morituri/test/test_image_image.py: Add a task to verify a disk image, which also calculates track lengths for tracks the cue file doesn't know the length of. 2009-04-12 Thomas Vander Stichele * examples/ARcue.py: Add option to run either command-line or gtk. 2009-04-12 Thomas Vander Stichele * morituri/image/image.py: Create a MultiTask base class, and make AudioRipCRCTask use it. 2009-04-12 Thomas Vander Stichele * morituri/image/image.py: * morituri/test/test_image_image.py: Add a task for calculating frame length of an audio file. Add a test for it. 2009-04-12 Thomas Vander Stichele * morituri/common/task.py: Schedule the start from the main loop, otherwise the task might complete before we're in the main loop, and then the loop.quit() doesn't work. 2009-04-12 Thomas Vander Stichele * examples/ARcue.py: * examples/gtkcrc.py: Rework both examples to look more similar. 2009-04-12 Thomas Vander Stichele * examples/gtkcrc.py: * morituri/common/task.py: Move the gtk-based progress bar to task. 2009-04-12 Thomas Vander Stichele * examples/gtkcrc.py: * morituri/common/crc.py: * morituri/common/task.py: * morituri/image/image.py: Add a 'schedule' call to the TaskRunner class, so that we can abstract things like gobject.timeout_add and reactor.callLater Pass the runner to the task in Task.start() so a task can call schedule. 2009-04-12 Thomas Vander Stichele * morituri/common/task.py: Update the docs. 2009-04-12 Thomas Vander Stichele * morituri/test/test_image_image.py (added): Add tests for AudioRip CRC'ing images. 2009-04-11 Thomas Vander Stichele * morituri/test/track-separate.cue (added): * morituri/test/track.flac (added): * morituri/test/Makefile (added): * morituri/test/track-single.cue (added): Add a simple 10 frame flac file, and two .cue files using it. 2009-04-11 Thomas Vander Stichele * morituri/image/image.py: If paths are relative, make them relative to cue file. 2009-04-11 Thomas Vander Stichele * morituri/common/task.py: clear with whitespace. 2009-04-11 Thomas Vander Stichele * examples/ARcue.py: * morituri/common/task.py: * morituri/image/image.py (added): Add an object for handling an Image based on a .cue file. Create a Task for CRC'ing the whole Image. Make the example use this new task instead. 2009-04-11 Thomas Vander Stichele * examples/gtkcrc.py: * morituri/common/task.py: Add task object to listener interface methods. 2009-04-11 Thomas Vander Stichele * morituri/common/task.py: Move methods around. 2009-04-11 Thomas Vander Stichele * examples/ARcue.py: * examples/gtkcrc.py: * morituri/common/crc.py: * morituri/common/task.py: Split out generic task/runner from CRC tasks. 2009-04-11 Thomas Vander Stichele * morituri/common/crc.py (added): Copy from task.py before splitting. 2009-04-11 Thomas Vander Stichele * examples/gtkcrc.py: * morituri/common/task.py: Don't block the main loop by infinitely scheduling set_state. 2009-04-11 Thomas Vander Stichele * examples/ARcue.py: * examples/gtkcrc.py: * morituri/common/task.py: Make a real Task interface and use it. Make runners reusable for multiple tasks. gtkcrc.py seems to be blocking updates however. 2009-04-11 Thomas Vander Stichele * morituri/test (added): * morituri/test/test_image_cue.py (added): * morituri/test/kings-single.cue (added): * morituri/test/__init__.py (added): * morituri/test/kings-separate.cue (added): Add test suite. Add Kings Of Leon cue files. 2009-04-11 Thomas Vander Stichele * examples/ARcue.py: Error out when the file doesn't exist. * morituri/common/task.py: Drag the lake. Clean up prints. 2009-04-11 Thomas Vander Stichele * morituri/common/task.py: Remove queue to avoid race. Remove prints. Clean up debug. Update progress after handling buffers. 2009-04-05 Thomas Vander Stichele * morituri/common/task.py: Introduce constants for FRAMES_PER_DISC_FRAME * examples/ARcue.py: Use the constant. Get the CRC right for the last track too. 2009-03-26 Thomas Vander Stichele * examples/ARcue.py: * morituri/common/task.py: Use an adapter to assemble CD frames. Take into account special rules for first and last track. Mention some bugs. Remember to drag the lake from the task. 2009-03-22 Thomas Vander Stichele * examples/ARcue.py: * morituri/common/task.py: First version that seems to get some AccurateRip checksums right. 2009-02-28 Thomas Vander Stichele * morituri/image/cue.py: publicize CueFile.tracks Add a method to get track lengths * examples/readcue.py: Use it. 2009-02-28 Thomas Vander Stichele * morituri/common/task.py (added): Add a task abstraction.