GwR wip apple driver

This commit is contained in:
GRiker 2010-10-03 16:08:21 -07:00
parent dbaad3ce28
commit 339181a621

View file

@ -17,7 +17,7 @@
from calibre.ebooks.metadata.book.base import Metadata
from calibre.ebooks.metadata.epub import set_metadata
from calibre.library.server.utils import strftime
from calibre.utils.config import config_dir
from calibre.utils.config import config_dir, prefs
from calibre.utils.date import isoformat, now, parse_date
from calibre.utils.localization import get_lang
from calibre.utils.logging import Log
@ -164,6 +164,7 @@ class ITUNES(DriverBase):
# Properties
cached_books = {}
cache_dir = os.path.join(config_dir, 'caches', 'itunes')
calibre_library_path = prefs['library_path']
archive_path = os.path.join(cache_dir, "thumbs.zip")
description_prefix = "added by calibre"
ejected = False
@ -173,6 +174,7 @@ class ITUNES(DriverBase):
log = Log()
manual_sync_mode = False
path_template = 'iTunes/%s - %s.%s'
plugboard = None
problem_titles = []
problem_msg = None
report_progress = None
@ -814,6 +816,15 @@ def set_progress_reporter(self, report_progress):
'''
self.report_progress = report_progress
def set_plugboard(self, pb):
# This method is called with the plugboard that matches the above
# format and the current device name.
if DEBUG:
self.log.info("ITUNES.set_plugboard()")
if pb is not None:
self.log.info(' using plugboard %s' % pb)
self.plugboard = pb
def sync_booklists(self, booklists, end_session=True):
'''
Update metadata on device.
@ -825,6 +836,10 @@ def sync_booklists(self, booklists, end_session=True):
if DEBUG:
self.log.info("ITUNES.sync_booklists()")
# booklists[0] should contain enough info to call
# self._update_iTunes_metadata(metadata[i], db_added, lb_added, this_book)
# from here using the plugboard data as the metadata
if self.update_needed:
if DEBUG:
self.log.info(' calling _update_device')
@ -860,7 +875,7 @@ def total_space(self, end_session=True):
return (capacity,-1,-1)
def upload_books(self, files, names, on_card=None, end_session=True,
metadata=None):
metadata=None, plugboards=None):
'''
Upload a list of books to the device. If a file already
exists on the device, it should be replaced.
@ -891,6 +906,7 @@ def upload_books(self, files, names, on_card=None, end_session=True,
self.log.info("ITUNES.upload_books()")
self._dump_files(files, header='upload_books()',indent=2)
self._dump_update_list(header='upload_books()',indent=2)
self.log.info(" plugboards: %s" % plugboards)
if isosx:
for (i,file) in enumerate(files):
@ -977,6 +993,13 @@ def upload_books(self, files, names, on_card=None, end_session=True,
self._dump_cached_books(header="after upload_books()",indent=2)
return (new_booklist, [], [])
def use_plugboard_ext(self):
''' Declare which plugboard extensions we care about '''
if DEBUG:
self.log.info("ITUNES.use_plugboard_ext()")
ext = 'epub'
return ext
# Private methods
def _add_device_book(self,fpath, metadata):
@ -1256,7 +1279,10 @@ def _cover_to_thumb(self, path, metadata, db_added, lb_added, format):
self.problem_titles.append("'%s' by %s" % (metadata.title, metadata.author[0]))
self.log.error(" error converting '%s' to thumb for '%s'" % (metadata.cover,metadata.title))
finally:
zfw.close()
try:
zfw.close()
except:
pass
else:
if DEBUG:
self.log.info(" no cover defined in metadata for '%s'" % metadata.title)
@ -1273,10 +1299,10 @@ def _create_new_book(self,fpath, metadata, path, db_added, lb_added, thumb, form
this_book.db_id = None
this_book.device_collections = []
this_book.format = format
this_book.library_id = lb_added
this_book.library_id = lb_added # ??? GR
this_book.path = path
this_book.thumbnail = thumb
this_book.iTunes_id = lb_added
this_book.iTunes_id = lb_added # ??? GR
this_book.uuid = metadata.uuid
if isosx:
@ -2213,6 +2239,7 @@ def _launch_iTunes(self):
(self.iTunes.name(), self.iTunes.version(), self.initial_status,
self.version[0],self.version[1],self.version[2]))
self.log.info(" iTunes_media: %s" % self.iTunes_media)
self.log.info(" calibre_library_path: %s" % self.calibre_library_path)
if iswindows:
'''
@ -2266,6 +2293,7 @@ def _launch_iTunes(self):
(self.iTunes.Windows[0].name, self.iTunes.Version, self.initial_status,
self.version[0],self.version[1],self.version[2]))
self.log.info(" iTunes_media: %s" % self.iTunes_media)
self.log.info(" calibre_library_path: %s" % self.calibre_library_path)
def _purge_orphans(self,library_books, cached_books):
'''
@ -2368,7 +2396,8 @@ def _remove_from_iTunes(self, cached_book):
'''
iTunes does not delete books from storage when removing from database
We only want to delete stored copies if the file is stored in iTunes
We don't want to delete files stored outside of iTunes
We don't want to delete files stored outside of iTunes.
Also confirm that storage_path does not point into calibre's storage.
'''
if DEBUG:
self.log.info(" ITUNES._remove_from_iTunes():")
@ -2376,7 +2405,8 @@ def _remove_from_iTunes(self, cached_book):
if isosx:
try:
storage_path = os.path.split(cached_book['lib_book'].location().path)
if cached_book['lib_book'].location().path.startswith(self.iTunes_media):
if cached_book['lib_book'].location().path.startswith(self.iTunes_media) and \
not storage_path[0].startswith(self.calibre_library_path):
title_storage_path = storage_path[0]
if DEBUG:
self.log.info(" removing title_storage_path: %s" % title_storage_path)
@ -2427,7 +2457,8 @@ def _remove_from_iTunes(self, cached_book):
path = book.Location
if book:
if self.iTunes_media and path.startswith(self.iTunes_media):
if self.iTunes_media and path.startswith(self.iTunes_media) and \
not path.startswith(self.calibre_library_path):
storage_path = os.path.split(path)
if DEBUG:
self.log.info(" removing '%s' at %s" %