mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-04 03:27:00 -05:00 
			
		
		
		
	Potential fix for lp:1268058, waiting for metadata to become writeable on iDevice.
This commit is contained in:
		
							parent
							
								
									0a84e0c56f
								
							
						
					
					
						commit
						e287cd6fc1
					
				@ -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()
 | 
				
			||||||
@ -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']
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
                names = [s.name 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]
 | 
					                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,9 +3138,14 @@ 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)
 | 
					
 | 
				
			||||||
 | 
					                WAIT_TIME = 0.50
 | 
				
			||||||
 | 
					                ATTEMPTS = attempts = 9
 | 
				
			||||||
 | 
					                while attempts:
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
                        db_added.Name = metadata_x.title
 | 
					                        db_added.Name = metadata_x.title
 | 
				
			||||||
                        db_added.Album = metadata_x.title
 | 
					                        db_added.Album = metadata_x.title
 | 
				
			||||||
                        db_added.Artist = authors_to_string(metadata_x.authors)
 | 
					                        db_added.Artist = authors_to_string(metadata_x.authors)
 | 
				
			||||||
@ -3144,6 +3155,17 @@ class ITUNES(DriverBase):
 | 
				
			|||||||
                        db_added.SortArtist = icu_title(metadata_x.author_sort)
 | 
					                        db_added.SortArtist = icu_title(metadata_x.author_sort)
 | 
				
			||||||
                        db_added.SortName = metadata_x.title_sort
 | 
					                        db_added.SortName = metadata_x.title_sort
 | 
				
			||||||
                        db_added.Year = metadata_x.pubdate.year
 | 
					                        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:
 | 
				
			||||||
@ -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