From c16183418290abc5f50cb258e28b0d4b0ce29ef3 Mon Sep 17 00:00:00 2001 From: Artem Baguinski Date: Wed, 2 Apr 2008 13:19:44 +0200 Subject: [PATCH] iTunesStats via Records --- shuffle.py | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/shuffle.py b/shuffle.py index 01ffdf7..f0565c6 100644 --- a/shuffle.py +++ b/shuffle.py @@ -350,6 +350,7 @@ class ShuffleDB: Field(Uint24(), '%reclen%', check=True), Skip(9)], BIG_ENDIAN) + iTunesSD_track = Record([ Field(Uint24(), '%reclen%', check=True), Skip(3), @@ -384,38 +385,35 @@ class ShuffleDB: self.close_file() return tracks + iTunesStats_hdr = Record([ + Field( Uint24(), 'tracks'), + Skip(3)], + LITTLE_ENDIAN) + + iTunesStats_track = Record([ + Field( Uint24(), '%reclen%', check = True), + Field( Int24(), 'bookmarktime'), + Skip(6), + Field( Uint24(), 'playcount'), + Field( Uint24(), 'skippedcount')], + LITTLE_ENDIAN) + def write_iTunesStats(self, tracks): self.open_file('iTunesStats', LITTLE_ENDIAN, WRITE) - self.write_u24( len(tracks) ) - self.skip(3) + self.iTunesStats_hdr.write(self.file, {'tracks':len(tracks)}) for t in tracks: - self.write_iTunesStats_track(t) + self.iTunesStats_track.write(self.file, t.__dict__) self.close_file() - def write_iTunesStats_track(self, t): - self.write_u24( 18 ) # record length - self.write_i24( t.bookmarktime ) - self.skip(6) - self.write_u24( t.playcount ) - self.write_u24( t.skippedcount ) - def read_iTunesStats(self, tracks): self.open_file('iTunesStats', LITTLE_ENDIAN) - num_tracks = self.read_u24() + num_tracks = self.iTunesStats_hdr.read(self.file)['tracks'] if num_tracks != len(tracks): - raise "Inconsistent iTunesSD and iTunesStats" - self.skip(3) + raise "Inconsistent number of songs in iTunesSD and iTunesStats" for t in tracks: - self.read_iTunesStats_track(t) + self.iTunesStats_track.read(self.file, t.__dict__) self.close_file() - def read_iTunesStats_track(self, t): - self.read_u24( 18 ) # sanity check (record length) - t.bookmarktime = self.read_i24() - self.skip(6) - t.playcount = self.read_u24() - t.skippedcount = self.read_u24() - def write_iTunesPState(self, pstate): mode = WRITE if os.path.exists('iTunesPState'): -- 2.11.4.GIT