mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-04 03:27:00 -05:00 
			
		
		
		
	iTunes driver: Retry automatically a few times when failing to send multiple book to iTunes. Fixes #1268058 [Error when trying to send multiple books to iBooks](https://bugs.launchpad.net/calibre/+bug/1268058)
Merge branch 'master' of https://github.com/GRiker/calibre
This commit is contained in:
		
						commit
						cc27dfd9ce
					
				@ -640,9 +640,11 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                    self.ejected = True
 | 
					                    self.ejected = True
 | 
				
			||||||
                    return False
 | 
					                    return False
 | 
				
			||||||
            except:
 | 
					            except:
 | 
				
			||||||
                # iTunes connection failed, probably not running anymore
 | 
					                # iTunes connection failed
 | 
				
			||||||
 | 
					                if self.verbose:
 | 
				
			||||||
                logger().error("%s.can_handle_windows():\n lost connection to iTunes" % self.__class__.__name__)
 | 
					                    logger().info("ERROR: %s.can_handle_windows():\n no connection to iTunes" % self.__class__.__name__)
 | 
				
			||||||
 | 
					                #import traceback
 | 
				
			||||||
 | 
					                #traceback.print_exc()
 | 
				
			||||||
                return False
 | 
					                return False
 | 
				
			||||||
            finally:
 | 
					            finally:
 | 
				
			||||||
                pythoncom.CoUninitialize()
 | 
					                pythoncom.CoUninitialize()
 | 
				
			||||||
@ -1544,7 +1546,7 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                                attempts -= 1
 | 
					                                attempts -= 1
 | 
				
			||||||
                                time.sleep(delay)
 | 
					                                time.sleep(delay)
 | 
				
			||||||
                                if self.verbose:
 | 
					                                if self.verbose:
 | 
				
			||||||
#                                     logger().warning("  iTunes automation interface reported an error"
 | 
					#                                     logger().info("  iTunes automation interface reported an error"
 | 
				
			||||||
#                                                      " adding artwork to '%s' in the iTunes Library" % metadata.title)
 | 
					#                                                      " adding artwork to '%s' in the iTunes Library" % metadata.title)
 | 
				
			||||||
                                    logger().info("  waiting %.1f seconds for artwork to become writable (attempt #%d)" %
 | 
					                                    logger().info("  waiting %.1f seconds for artwork to become writable (attempt #%d)" %
 | 
				
			||||||
                                                     (delay, (10 - attempts)))
 | 
					                                                     (delay, (10 - attempts)))
 | 
				
			||||||
@ -1578,7 +1580,7 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                            logger().info("   writing '%s' cover to iDevice" % metadata.title)
 | 
					                            logger().info("   writing '%s' cover to iDevice" % metadata.title)
 | 
				
			||||||
                        except:
 | 
					                        except:
 | 
				
			||||||
                            if self.verbose:
 | 
					                            if self.verbose:
 | 
				
			||||||
                                logger().warning("  iTunes automation interface reported an error"
 | 
					                                logger().info("  iTunes automation interface reported an error"
 | 
				
			||||||
                                                 " adding artwork to '%s' on the iDevice" % metadata.title)
 | 
					                                                 " adding artwork to '%s' on the iDevice" % metadata.title)
 | 
				
			||||||
                            #import traceback
 | 
					                            #import traceback
 | 
				
			||||||
                            #traceback.print_exc()
 | 
					                            #traceback.print_exc()
 | 
				
			||||||
@ -1601,7 +1603,7 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                                lb_added.AddArtworkFromFile(tc)
 | 
					                                lb_added.AddArtworkFromFile(tc)
 | 
				
			||||||
                        except:
 | 
					                        except:
 | 
				
			||||||
                            if self.verbose:
 | 
					                            if self.verbose:
 | 
				
			||||||
                                logger().warning("  iTunes automation interface reported an error"
 | 
					                                logger().info("  iTunes automation interface reported an error"
 | 
				
			||||||
                                                 " when adding artwork to '%s' in the iTunes Library" % metadata.title)
 | 
					                                                 " when adding artwork to '%s' in the iTunes Library" % metadata.title)
 | 
				
			||||||
                            pass
 | 
					                            pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2434,10 +2436,10 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                            break
 | 
					                            break
 | 
				
			||||||
                    else:
 | 
					                    else:
 | 
				
			||||||
                        if self.verbose:
 | 
					                        if self.verbose:
 | 
				
			||||||
                            logger().error("  no Library|Books playlist found")
 | 
					                            logger().info("  ERROR: no Library|Books playlist found")
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    if self.verbose:
 | 
					                    if self.verbose:
 | 
				
			||||||
                        logger().error("  no Library playlists found")
 | 
					                        logger().info("  ERROR: no Library playlists found")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    for book in lib_books:
 | 
					                    for book in lib_books:
 | 
				
			||||||
@ -2501,8 +2503,12 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
        elif iswindows:
 | 
					        elif iswindows:
 | 
				
			||||||
            # Assumes a pythoncom wrapper
 | 
					            # Assumes a pythoncom wrapper
 | 
				
			||||||
            it_sources = ['Unknown', 'Library', 'iPod', 'AudioCD', 'MP3CD', 'Device', 'RadioTuner', 'SharedLibrary']
 | 
					            it_sources = ['Unknown', 'Library', 'iPod', 'AudioCD', 'MP3CD', 'Device', 'RadioTuner', 'SharedLibrary']
 | 
				
			||||||
            names = [s.name for s in self.iTunes.sources]
 | 
					            try:
 | 
				
			||||||
            kinds = [it_sources[s.kind] for s in self.iTunes.sources]
 | 
					                names = [s.name for s in self.iTunes.sources]
 | 
				
			||||||
 | 
					                kinds = [it_sources[s.kind] for s in self.iTunes.sources]
 | 
				
			||||||
 | 
					            except:
 | 
				
			||||||
 | 
					                logger().info(" %s._launch_iTunes():ERROR reading iTunes.sources" % self.__class__.__name__)
 | 
				
			||||||
 | 
					                raise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # If more than one connected iDevice, remove all from list to prevent driver initialization
 | 
					        # If more than one connected iDevice, remove all from list to prevent driver initialization
 | 
				
			||||||
        if kinds.count('iPod') > 1:
 | 
					        if kinds.count('iPod') > 1:
 | 
				
			||||||
@ -3132,18 +3138,34 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                lb_added.Year = metadata_x.pubdate.year
 | 
					                lb_added.Year = metadata_x.pubdate.year
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if db_added:
 | 
					            if db_added:
 | 
				
			||||||
 | 
					                # Wait for db_added to become writeable
 | 
				
			||||||
                if self.verbose:
 | 
					                if self.verbose:
 | 
				
			||||||
                    logger().info("  waiting for db_added to become writable ")
 | 
					                    logger().info("  waiting for metadata to become writeable on iDevice")
 | 
				
			||||||
                time.sleep(1.0)
 | 
					
 | 
				
			||||||
                db_added.Name = metadata_x.title
 | 
					                WAIT_TIME = 0.50
 | 
				
			||||||
                db_added.Album = metadata_x.title
 | 
					                ATTEMPTS = attempts = 9
 | 
				
			||||||
                db_added.Artist = authors_to_string(metadata_x.authors)
 | 
					                while attempts:
 | 
				
			||||||
                db_added.Composer = metadata_x.uuid
 | 
					                    try:
 | 
				
			||||||
                db_added.Description = ("%s %s" % (self.description_prefix, strftime('%Y-%m-%d %H:%M:%S')))
 | 
					                        db_added.Name = metadata_x.title
 | 
				
			||||||
                db_added.Enabled = True
 | 
					                        db_added.Album = metadata_x.title
 | 
				
			||||||
                db_added.SortArtist = icu_title(metadata_x.author_sort)
 | 
					                        db_added.Artist = authors_to_string(metadata_x.authors)
 | 
				
			||||||
                db_added.SortName = metadata_x.title_sort
 | 
					                        db_added.Composer = metadata_x.uuid
 | 
				
			||||||
                db_added.Year = metadata_x.pubdate.year
 | 
					                        db_added.Description = ("%s %s" % (self.description_prefix, strftime('%Y-%m-%d %H:%M:%S')))
 | 
				
			||||||
 | 
					                        db_added.Enabled = True
 | 
				
			||||||
 | 
					                        db_added.SortArtist = icu_title(metadata_x.author_sort)
 | 
				
			||||||
 | 
					                        db_added.SortName = metadata_x.title_sort
 | 
				
			||||||
 | 
					                        db_added.Year = metadata_x.pubdate.year
 | 
				
			||||||
 | 
					                        break
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        time.sleep(WAIT_TIME)
 | 
				
			||||||
 | 
					                        attempts -= 1
 | 
				
			||||||
 | 
					                        if self.verbose:
 | 
				
			||||||
 | 
					                            logger().info("  waiting %.1f seconds for iDevice metadata to become writable (attempt #%d)" %
 | 
				
			||||||
 | 
					                                (WAIT_TIME, (ATTEMPTS - attempts + 1)))
 | 
				
			||||||
 | 
					                        if not attempts:
 | 
				
			||||||
 | 
					                            logger().info("  ERROR: Unable to set metadata in book")
 | 
				
			||||||
 | 
					                            raise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if metadata_x.comments:
 | 
					            if metadata_x.comments:
 | 
				
			||||||
                if lb_added:
 | 
					                if lb_added:
 | 
				
			||||||
@ -3160,7 +3182,7 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                        db_added.AlbumRating = (metadata_x.rating * 10)
 | 
					                        db_added.AlbumRating = (metadata_x.rating * 10)
 | 
				
			||||||
                except:
 | 
					                except:
 | 
				
			||||||
                    if self.verbose:
 | 
					                    if self.verbose:
 | 
				
			||||||
                        logger().warning("  iTunes automation interface reported an error"
 | 
					                        logger().info("  iTunes automation interface reported an error"
 | 
				
			||||||
                                         " setting AlbumRating on iDevice")
 | 
					                                         " setting AlbumRating on iDevice")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Set Genre from first alpha tag, overwrite with series if available
 | 
					            # Set Genre from first alpha tag, overwrite with series if available
 | 
				
			||||||
@ -3185,13 +3207,13 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                        lb_added.TrackNumber = metadata_x.series_index
 | 
					                        lb_added.TrackNumber = metadata_x.series_index
 | 
				
			||||||
                    except:
 | 
					                    except:
 | 
				
			||||||
                        if self.verbose:
 | 
					                        if self.verbose:
 | 
				
			||||||
                            logger().warning("  iTunes automation interface reported an error"
 | 
					                            logger().info("  iTunes automation interface reported an error"
 | 
				
			||||||
                                             " setting TrackNumber in iTunes")
 | 
					                                             " setting TrackNumber in iTunes")
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        lb_added.EpisodeNumber = metadata_x.series_index
 | 
					                        lb_added.EpisodeNumber = metadata_x.series_index
 | 
				
			||||||
                    except:
 | 
					                    except:
 | 
				
			||||||
                        if self.verbose:
 | 
					                        if self.verbose:
 | 
				
			||||||
                            logger().warning("  iTunes automation interface reported an error"
 | 
					                            logger().info("  iTunes automation interface reported an error"
 | 
				
			||||||
                                             " setting EpisodeNumber in iTunes")
 | 
					                                             " setting EpisodeNumber in iTunes")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    # If no plugboard transform applied to tags, change the Genre/Category to Series
 | 
					                    # If no plugboard transform applied to tags, change the Genre/Category to Series
 | 
				
			||||||
@ -3213,13 +3235,13 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                        db_added.TrackNumber = metadata_x.series_index
 | 
					                        db_added.TrackNumber = metadata_x.series_index
 | 
				
			||||||
                    except:
 | 
					                    except:
 | 
				
			||||||
                        if self.verbose:
 | 
					                        if self.verbose:
 | 
				
			||||||
                            logger().warning("  iTunes automation interface reported an error"
 | 
					                            logger().info("  iTunes automation interface reported an error"
 | 
				
			||||||
                                             " setting TrackNumber on iDevice")
 | 
					                                             " setting TrackNumber on iDevice")
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        db_added.EpisodeNumber = metadata_x.series_index
 | 
					                        db_added.EpisodeNumber = metadata_x.series_index
 | 
				
			||||||
                    except:
 | 
					                    except:
 | 
				
			||||||
                        if self.verbose:
 | 
					                        if self.verbose:
 | 
				
			||||||
                            logger().warning("  iTunes automation interface reported an error"
 | 
					                            logger().info("  iTunes automation interface reported an error"
 | 
				
			||||||
                                             " setting EpisodeNumber on iDevice")
 | 
					                                             " setting EpisodeNumber on iDevice")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    # If no plugboard transform applied to tags, change the Genre/Category to Series
 | 
					                    # If no plugboard transform applied to tags, change the Genre/Category to Series
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user