2009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/checksum.py:
	  Add some debugging.
	* morituri/test/test_image_image.py:
	  Run less verbose.

2009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/task.py:
	  Allow a SyncRunner to be constructed with verbose too.
	  Separate a 'running' verbose mode from that.
	  Fixes unwanted test output.
	* morituri/test/test_image_image.py:
	  Run without verbosity.

2009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/test/test_image_image.py:
	  Fix name.

2009-04-25  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/test/test_common_renamer.py (added):
	* morituri/common/renamer.py (added):
	  Add a way of doing transactional file renames, as well as their
	  metafile updates.

2009-04-21  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/task.py:
	  Add a 'described' method so listeners can get proper notification
	  of description changes, and update their description in between
	  progress changes.
	  Add a MultiCombinedTask that reports on progress over all tasks
	  combined.
	* examples/trm.py:
	  Add a playlist option to the example.  Still needs to store results
	  to pickles, preferably after each completed task.
	* morituri/common/checksum.py:
	  Add audioconvert to make sure we can trm ogg files.

2009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/task.py:
	* morituri/image/image.py:
	  Move MultiTask to the task module.

2009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/checksum.py:
	  Add a task to calculate a trm fingerprint.
	* examples/trm.py (added):
	  Add an example.
	  Strangely enough it starts burstily, doing 10% directly, halting,
	  then progressing quickly,

2009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>

	* examples/ARcue.py:
	  Fix a bug in the gtk example.

2009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>

	* examples/readtoc.py:
	  Read the toc using cdrdao.  Now sets progress based on which
	  frame it is on.

2009-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/task.py:
	  Add a __main__ example using DummyTask.

2009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/task.py:
	  Make sure we also show progress when it's 0%, at the start.

2009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/image/cue.py:
	  Use names for matches in regexps.

2009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>

	* examples/readtoc.py (added):
	  Add an example to read the TOC, not finished yet.

2009-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* examples/gtkchecksum.py:
	* morituri/common/checksum.py:
	  Final crc->checksum fixes.

2009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* morituri/image/image.py:
	  Refactor to use TOC class.
	* morituri/image/toc.py:
	  Fully document.

2009-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* morituri/image/image.py:
	  Also look for audio file basename relative to cue file.

2009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>

	* examples/ARcue.py:
	  Make output a bit nicer, mentioning whether tracks were
	  accurately ripped.

2009-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* examples/ARcue.py:
	  Add option to run either command-line or gtk.

2009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/image/image.py:
	  Create a MultiTask base class, and make AudioRipCRCTask
	  use it.

2009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* examples/ARcue.py:
	* examples/gtkcrc.py:
	  Rework both examples to look more similar.

2009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>

	* examples/gtkcrc.py:
	* morituri/common/task.py:
	  Move the gtk-based progress bar to task.

2009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* morituri/common/task.py:
	  Update the docs.

2009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/test/test_image_image.py (added):
	  Add tests for AudioRip CRC'ing images.

2009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* morituri/image/image.py:
	  If paths are relative, make them relative to cue file.

2009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/task.py:
	  clear with whitespace.

2009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* examples/gtkcrc.py:
	* morituri/common/task.py:
	  Add task object to listener interface methods.

2009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>

	* morituri/common/task.py:
	  Move methods around.

2009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* morituri/common/crc.py (added):
	  Copy from task.py before splitting.

2009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>

	* examples/gtkcrc.py:
	* morituri/common/task.py:
	  Don't block the main loop by infinitely scheduling
	  set_state.

2009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* examples/ARcue.py:
	* morituri/common/task.py:
	  First version that seems to get some AccurateRip checksums right.

2009-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>

	* 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  <thomas at apestaart dot org>

	* morituri/common/task.py (added):
	  Add a task abstraction.

