def getSongs(self): format = "%Y-%m-%d %H:%M:%S" for trackid,attributes in self.il['Tracks'].items(): s = Song() s.name = attributes.get('Name') # Support classical music naming (Work+Movement Number+Movement Name) since iTunes 12.5 s.work = attributes.get('Work') s.movement_number = attributes.get('Movement Number') s.movement_count = attributes.get('Movement Count') s.movement_name = attributes.get('Movement Name') s.track_id = int(attributes.get('Track ID')) s.artist = attributes.get('Artist') s.album_artist = attributes.get('Album Artist') s.composer = attributes.get('Composer') s.album = attributes.get('Album') s.genre = attributes.get('Genre') s.kind = attributes.get('Kind') if attributes.get('Size'): s.size = int(attributes.get('Size')) s.total_time = attributes.get('Total Time') s.track_number = attributes.get('Track Number') if attributes.get('Track Count'): s.track_count = int(attributes.get('Track Count')) if attributes.get('Disc Number'): s.disc_number = int(attributes.get('Disc Number')) if attributes.get('Disc Count'): s.disc_count = int(attributes.get('Disc Count')) if attributes.get('Year'): s.year = int(attributes.get('Year')) if attributes.get('Date Modified'): s.date_modified = time.strptime(str(attributes.get('Date Modified')),format) if attributes.get('Date Added'): s.date_added = time.strptime(str(attributes.get('Date Added')),format) if attributes.get('Bit Rate'): s.bit_rate = int(attributes.get('Bit Rate')) if attributes.get('Sample Rate'): s.sample_rate = int(attributes.get('Sample Rate')) s.comments = attributes.get("Comments") if attributes.get('Rating'): s.rating = int(attributes.get('Rating')) s.rating_computed = 'Rating Computed' in attributes if attributes.get('Play Count'): s.play_count = int(attributes.get('Play Count')) if attributes.get('Album Rating'): s.album_rating = attributes.get('Album Rating') if attributes.get('Album Rating Computed'): s.album_rating_computed = attributes.get('Album Rating Computed') if attributes.get('Persistent ID'): s.persistent_id = attributes.get('Persistent ID') if attributes.get('Location'): s.location_escaped = attributes.get('Location') s.location = s.location_escaped s.location = urlparse.unquote(urlparse.urlparse(attributes.get('Location')).path[1:]) s.location = s.location.decode('utf-8') if PY2 else s.location # fixes bug #19 if ( self.musicPathXML is not None and self.musicPathSystem is not None ): s.location = s.location.replace(self.musicPathXML,self.musicPathSystem) s.compilation = 'Compilation' in attributes if attributes.get('Play Date UTC'): s.lastplayed = time.strptime(str(attributes.get('Play Date UTC')),format) if attributes.get('Skip Count'): s.skip_count = int(attributes.get('Skip Count')) if attributes.get('Skip Date'): s.skip_date = time.strptime(str(attributes.get('Skip Date')),format) if attributes.get('Total Time'): s.length = int(attributes.get('Total Time')) if attributes.get('Track Type'): s.track_type = attributes.get('Track Type') if attributes.get('Podcast'): s.podcast = attributes.get('Podcast') if attributes.get('Movie'): s.movie = attributes.get('Movie') if attributes.get('Has Video'): s.has_video = attributes.get('Has Video') if attributes.get('Grouping'): s.grouping = attributes.get('Grouping') if self.filesOnly==True and attributes.get('Track Type') == 'File': if self.legacymode: self.songs.append(s) else: self.songs[int(trackid)] = s elif self.filesOnly==False: if self.legacymode: self.songs.append(s) else: self.songs[int(trackid)] = s