From 88c150fd2e7a2dea2581213793d9f8213b42d141 Mon Sep 17 00:00:00 2001 From: GRiker Date: Sun, 3 Mar 2013 06:35:38 -0800 Subject: [PATCH] Added test for no existing playlists in response to lp:1141078. Driver is unable to add books to iTunes if Books playlist doesn't already exist. --- src/calibre/devices/apple/driver.py | 87 ++++++++++++++--------------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 2ab9a11daa..9bb8fa014e 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -20,8 +20,7 @@ from calibre.utils.config import config_dir, dynamic, prefs from calibre.utils.date import now, parse_date from calibre.utils.zipfile import ZipFile -DEBUG = False -#DEBUG = CALIBRE_DEBUG +DEBUG = CALIBRE_DEBUG def strftime(fmt='%Y/%m/%d %H:%M:%S', dt=None): @@ -862,7 +861,6 @@ class ITUNES(DriverBase): Note that most of the initialization is necessarily performed in can_handle(), as we need to talk to iTunes to discover if there's a connected iPod ''' - if self.iTunes is None: raise OpenFeedback(self.ITUNES_SANDBOX_LOCKOUT_MESSAGE) @@ -2157,27 +2155,28 @@ class ITUNES(DriverBase): if 'iPod' in self.sources: connected_device = self.sources['iPod'] device = self.iTunes.sources[connected_device] - dev_books = None - for pl in device.playlists(): - if pl.special_kind() == appscript.k.Books: - if DEBUG: - logger().info(" Book playlist: '%s'" % (pl.name())) - dev_books = pl.file_tracks() - break - else: - logger().error(" book_playlist not found") - - for book in dev_books: - if book.kind() in self.Audiobooks: - if DEBUG: - logger().info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) + if device.playlists() is not None: + dev_books = None + for pl in device.playlists(): + if pl.special_kind() == appscript.k.Books: + if DEBUG: + logger().info(" Book playlist: '%s'" % (pl.name())) + dev_books = pl.file_tracks() + break else: - if DEBUG: - logger().info(" %-40.40s %-30.30s %-40.40s [%s]" % - (book.name(), book.artist(), book.composer(), book.kind())) - device_books.append(book) - if DEBUG: - logger().info() + logger().error(" book_playlist not found") + + for book in dev_books: + if book.kind() in self.Audiobooks: + if DEBUG: + logger().info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) + else: + if DEBUG: + logger().info(" %-40.40s %-30.30s %-40.40s [%s]" % + (book.name(), book.artist(), book.composer(), book.kind())) + device_books.append(book) + if DEBUG: + logger().info() elif iswindows: import pythoncom @@ -2187,29 +2186,29 @@ class ITUNES(DriverBase): pythoncom.CoInitialize() connected_device = self.sources['iPod'] device = self.iTunes.sources.ItemByName(connected_device) - - dev_books = None - for pl in device.Playlists: - if pl.Kind == self.PlaylistKind.index('User') and \ - pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): - if DEBUG: - logger().info(" Books playlist: '%s'" % (pl.Name)) - dev_books = pl.Tracks - break - else: - if DEBUG: - logger().info(" no Books playlist found") - - for book in dev_books: - if book.KindAsString in self.Audiobooks: - if DEBUG: - logger().info(" ignoring '%s' of type '%s'" % (book.Name, book.KindAsString)) + if device.Playlists is not None: + dev_books = None + for pl in device.Playlists: + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): + if DEBUG: + logger().info(" Books playlist: '%s'" % (pl.Name)) + dev_books = pl.Tracks + break else: if DEBUG: - logger().info(" %-40.40s %-30.30s %-40.40s [%s]" % (book.Name, book.Artist, book.Composer, book.KindAsString)) - device_books.append(book) - if DEBUG: - logger().info() + logger().info(" no Books playlist found") + + for book in dev_books: + if book.KindAsString in self.Audiobooks: + if DEBUG: + logger().info(" ignoring '%s' of type '%s'" % (book.Name, book.KindAsString)) + else: + if DEBUG: + logger().info(" %-40.40s %-30.30s %-40.40s [%s]" % (book.Name, book.Artist, book.Composer, book.KindAsString)) + device_books.append(book) + if DEBUG: + logger().info() finally: pythoncom.CoUninitialize()