def download_movie(self, filmid, quality): """ Downloads a film as a movie in the movie download directory. This implies a specific naming scheme and the generation of a movie NFO file. Args: filmid(id): database id of the film to download quality(int): quality to download (0 = SD, 1 = Normal, 2 = HD) """ if not self._test_download_path(self.settings.downloadpathmv): return film = self.database.retrieve_film_info(filmid) if film is None: return (filmurl, suffix, extension, ) = self._get_film_url_and_extension(film, quality) # try to create a good name for the downloaded file namestem = mvutils.cleanup_filename(film.title)[:80] if not namestem: # try to take the show name instead... namestem = mvutils.cleanup_filename(film.show)[:64] if not namestem: namestem = u'Film' namestem = namestem + '-{}'.format(film.filmid) elif self.settings.movienamewithshow: showname = mvutils.cleanup_filename(film.show)[:64] if showname: namestem = showname + ' - ' + namestem # review name if self.settings.reviewname: (namestem, confirmed) = self.notifier.get_entered_text(namestem, 30986) namestem = mvutils.cleanup_filename(namestem.decode('utf-8')) if len(namestem) < 1 or confirmed is False: return # build year postfix year = self._matches('([12][0-9][0-9][0-9])', str(film.aired)) if year is not None: postfix = ' (%s)' % year else: postfix = '' # determine destination path and film filename if self.settings.moviefolders: pathname = self.settings.downloadpathmv + namestem + postfix + '/' filename = namestem + suffix else: pathname = self.settings.downloadpathmv filename = namestem + postfix + suffix # check for duplicate while xbmcvfs.exists(pathname + filename + extension): (filename, confirmed) = self.notifier.get_entered_text(filename, 30987) filename = mvutils.cleanup_filename(filename.decode('utf-8')) if len(filename) < 1 or confirmed is False: return # download the stuff if self._download_files(film, filmurl, pathname, filename, extension): self._make_movie_nfo_file(film, filmurl, pathname, filename)
def download_episode(self, filmid, quality): if not self.test_download_path(self.settings.downloadpathep): return film = self.database.RetrieveFilmInfo(filmid) if film is None: return ( filmurl, suffix, extension, ) = self.get_film_url_and_extension(film, quality) # detect season and episode ( season, episode, fninfo, ) = self.season_and_episode_detect(film) # determine names showname = mvutils.cleanup_filename(film.show)[:64] namestem = mvutils.cleanup_filename(film.title)[:80] if not namestem: namestem = u'Episode-{}'.format(film.id) if not showname: showname = namestem # review name if self.settings.reviewname: (namestem, confirmed) = self.notifier.GetEnteredText(namestem, 30986) namestem = mvutils.cleanup_filename(namestem.decode('utf-8')) if len(namestem) < 1 or confirmed is False: return # prepare download directory and determine sequence number pathname = self.settings.downloadpathep + showname + '/' sequence = 1 if xbmcvfs.exists(pathname): ( _, epfiles, ) = xbmcvfs.listdir(pathname) for epfile in epfiles: match = re.search(r'^.* - \(([0-9]*)\)\.[^/]*$', epfile) if match and match.groups(): if sequence <= int(match.group(1)): sequence = int(match.group(1)) + 1 else: xbmcvfs.mkdir(pathname) filename = showname + ' - ' + fninfo + namestem + (u' - (%04d)' % sequence) + suffix # download the stuff if self.download_files(film, filmurl, pathname, filename, extension): self.make_series_nfo_files(film, filmurl, pathname, filename, season, episode, sequence)
def download_episode(self, filmid, quality): """ Downloads a film as a series episode in the series download directory. This implies a specific naming scheme and the generation of a tvshow and episode NFO file. Args: filmid(id): database id of the film to download quality(int): quality to download (0 = SD, 1 = Normal, 2 = HD) """ if not self._test_download_path(self.settings.downloadpathep): return film = self.database.retrieve_film_info(filmid) if film is None: return (filmurl, suffix, extension, ) = self._get_film_url_and_extension(film, quality) # detect season and episode (season, episode, fninfo, ) = self._season_and_episode_detect(film) # determine names showname = mvutils.cleanup_filename(film.show)[:64] namestem = mvutils.cleanup_filename(film.title)[:80] if not namestem: namestem = u'Episode-{}'.format(film.filmid) if not showname: showname = namestem # review name if self.settings.reviewname: (namestem, confirmed) = self.notifier.get_entered_text(namestem, 30986) namestem = mvutils.cleanup_filename(namestem.decode('utf-8')) if len(namestem) < 1 or confirmed is False: return # prepare download directory and determine sequence number pathname = self.settings.downloadpathep + showname + '/' sequence = 1 if xbmcvfs.exists(pathname): (_, epfiles, ) = xbmcvfs.listdir(pathname) for epfile in epfiles: match = re.search(r'^.* - \(([0-9]*)\)\.[^/]*$', epfile) if match and match.groups(): if sequence <= int(match.group(1)): sequence = int(match.group(1)) + 1 else: xbmcvfs.mkdir(pathname) filename = showname + ' - ' + fninfo + \ namestem + (u' - (%04d)' % sequence) + suffix # download the stuff if self._download_files(film, filmurl, pathname, filename, extension): self._make_series_nfo_files( film, filmurl, pathname, filename, season, episode, sequence)
def download_movie(self, filmid, quality): if not self.test_download_path(self.settings.downloadpathmv): return film = self.database.RetrieveFilmInfo(filmid) if film is None: return ( filmurl, suffix, extension, ) = self.get_film_url_and_extension(film, quality) # try to create a good name for the downloaded file namestem = mvutils.cleanup_filename(film.title)[:80] if not namestem: # try to take the show name instead... namestem = mvutils.cleanup_filename(film.show)[:64] if not namestem: namestem = u'Film' namestem = namestem + '-{}'.format(film.id) elif self.settings.movienamewithshow: showname = mvutils.cleanup_filename(film.show)[:64] if showname: namestem = showname + ' - ' + namestem # review name if self.settings.reviewname: (namestem, confirmed) = self.notifier.GetEnteredText(namestem, 30986) namestem = mvutils.cleanup_filename(namestem.decode('utf-8')) if len(namestem) < 1 or confirmed is False: return # build year postfix year = self.matches('([12][0-9][0-9][0-9])', str(film.aired)) if year is not None: postfix = ' (%s)' % year else: postfix = '' # determine destination path and film filename if self.settings.moviefolders: pathname = self.settings.downloadpathmv + namestem + postfix + '/' filename = namestem + suffix else: pathname = self.settings.downloadpathmv filename = namestem + postfix + suffix # check for duplicate while xbmcvfs.exists(pathname + filename + extension): (filename, confirmed) = self.notifier.GetEnteredText(filename, 30987) filename = mvutils.cleanup_filename(filename.decode('utf-8')) if len(filename) < 1 or confirmed is False: return # download the stuff if self.download_files(film, filmurl, pathname, filename, extension): self.make_movie_nfo_file(film, filmurl, pathname, filename)
def download_movie(self, filmid): """ Downloads a film as a movie in the movie download directory. This implies a specific naming scheme and the generation of a movie NFO file. Args: filmid(id): database id of the film to download """ self.logger.debug('download_movie') if not self._test_download_path(self.settings.getDownloadPathMovie()): return film = self.database.retrieve_film_info(filmid) if film is None: return ( filmurl, extension, ) = self._get_film_url_and_extension(film) # try to create a good name for the downloaded file namestem = mvutils.cleanup_filename(film.title)[:80] if not namestem: # try to take the show name instead... namestem = mvutils.cleanup_filename(film.show)[:64] if not namestem: namestem = u'Film' namestem = namestem + '-{}'.format(film.filmid) elif self.settings.getMovieNameWithShow(): showname = mvutils.cleanup_filename(film.show)[:64] if showname: namestem = showname + ' - ' + namestem # review name if self.settings.getReviewName(): (namestem, confirmed) = self.notifier.get_entered_text(namestem, 30986) namestem = mvutils.cleanup_filename(namestem) if len(namestem) < 1 or confirmed is False: return # determine destination path and film filename if self.settings.getUseMovieFolder(): pathname = self.settings.getDownloadPathMovie() + namestem + '/' filename = namestem else: pathname = self.settings.getDownloadPathMovie() filename = namestem # check for duplicate # keep if self.settings.getFileExistsAction() == 1 and xbmcvfs.exists( pathname + filename + extension): return # prompt if self.settings.getFileExistsAction() == 0: while xbmcvfs.exists(pathname + filename + extension): (filename, confirmed) = self.notifier.get_entered_text(filename, 30987) filename = mvutils.cleanup_filename(filename) if len(filename) < 1 or confirmed is False: return # download the stuff if self._download_files(film, filmurl, pathname, filename, extension): self._make_movie_nfo_file(film, filmurl, pathname, filename) else: self.logger.debug('download_movie ERROR')
def doDownloadFilm(self, filmid, quality): if self.settings.downloadpath: film = self.db.RetrieveFilmInfo(filmid) if film is None: # film not found - should never happen return # check if the download path is reachable if not xbmcvfs.exists(self.settings.downloadpath): self.notifier.ShowError(self.language(30952), self.language(30979)) return # get the best url if quality == '0' and film.url_video_sd: videourl = film.url_video_sd elif quality == '2' and film.url_video_hd: videourl = film.url_video_hd else: videourl = film.url_video # prepare names showname = mvutils.cleanup_filename(film.show)[:64] filestem = mvutils.cleanup_filename(film.title)[:64] extension = os.path.splitext(videourl)[1] if not extension: extension = u'.mp4' if not filestem: filestem = u'Film-{}'.format(film.id) if not showname: showname = filestem # prepare download directory and determine episode number dirname = self.settings.downloadpath + showname + '/' episode = 1 if xbmcvfs.exists(dirname): ( _, epfiles, ) = xbmcvfs.listdir(dirname) for epfile in epfiles: match = re.search('^.* [eE][pP]([0-9]*)\.[^/]*$', epfile) if match and len(match.groups()) > 0: if episode <= int(match.group(1)): episode = int(match.group(1)) + 1 else: xbmcvfs.mkdir(dirname) # prepare resulting filenames fileepi = filestem + u' - EP%04d' % episode movname = dirname + fileepi + extension srtname = dirname + fileepi + u'.srt' ttmname = dirname + fileepi + u'.ttml' nfoname = dirname + fileepi + u'.nfo' # download video bgd = KodiBGDialog() bgd.Create(self.language(30974), fileepi + extension) try: bgd.Update(0) mvutils.url_retrieve_vfs(videourl, movname, bgd.UrlRetrieveHook) bgd.Close() self.notifier.ShowNotification( 30960, self.language(30976).format(videourl)) except Exception as err: bgd.Close() self.error('Failure downloading {}: {}', videourl, err) self.notifier.ShowError( 30952, self.language(30975).format(videourl, err)) # download subtitles if film.url_sub: bgd = KodiBGDialog() bgd.Create(30978, fileepi + u'.ttml') try: bgd.Update(0) mvutils.url_retrieve_vfs(film.url_sub, ttmname, bgd.UrlRetrieveHook) try: ttml2srt(xbmcvfs.File(ttmname, 'r'), xbmcvfs.File(srtname, 'w')) except Exception as err: self.info('Failed to convert to srt: {}', err) bgd.Close() except Exception as err: bgd.Close() self.error('Failure downloading {}: {}', film.url_sub, err) # create NFO Files self._make_nfo_files(film, episode, dirname, nfoname, videourl) else: self.notifier.ShowError(30952, 30958)
def doDownloadFilm( self, filmid, quality ): if self.settings.downloadpath: film = self.db.RetrieveFilmInfo( filmid ) if film is None: # film not found - should never happen return # check if the download path is reachable if not xbmcvfs.exists( self.settings.downloadpath ): self.notifier.ShowError( self.language( 30952 ), self.language( 30979 ) ) return # get the best url if quality == '0' and film.url_video_sd: videourl = film.url_video_sd elif quality == '2' and film.url_video_hd: videourl = film.url_video_hd else: videourl = film.url_video # prepare names showname = mvutils.cleanup_filename( film.show )[:64] filestem = mvutils.cleanup_filename( film.title )[:64] extension = os.path.splitext( videourl )[1] if not extension: extension = u'.mp4' if not filestem: filestem = u'Film-{}'.format( film.id ) if not showname: showname = filestem # prepare download directory and determine episode number dirname = self.settings.downloadpath + showname + '/' episode = 1 if xbmcvfs.exists( dirname ): ( _, epfiles, ) = xbmcvfs.listdir( dirname ) for epfile in epfiles: match = re.search( '^.* [eE][pP]([0-9]*)\.[^/]*$', epfile ) if match and len( match.groups() ) > 0: if episode <= int( match.group(1) ): episode = int( match.group(1) ) + 1 else: xbmcvfs.mkdir( dirname ) # prepare resulting filenames fileepi = filestem + u' - EP%04d' % episode movname = dirname + fileepi + extension srtname = dirname + fileepi + u'.srt' ttmname = dirname + fileepi + u'.ttml' nfoname = dirname + fileepi + u'.nfo' # download video bgd = KodiBGDialog() bgd.Create( self.language( 30974 ), fileepi + extension ) try: bgd.Update( 0 ) mvutils.url_retrieve_vfs( videourl, movname, bgd.UrlRetrieveHook ) bgd.Close() self.notifier.ShowNotification( 30960, self.language( 30976 ).format( videourl ) ) except Exception as err: bgd.Close() self.error( 'Failure downloading {}: {}', videourl, err ) self.notifier.ShowError( 30952, self.language( 30975 ).format( videourl, err ) ) # download subtitles if film.url_sub: bgd = KodiBGDialog() bgd.Create( 30978, fileepi + u'.ttml' ) try: bgd.Update( 0 ) mvutils.url_retrieve_vfs( film.url_sub, ttmname, bgd.UrlRetrieveHook ) try: ttml2srt( xbmcvfs.File( ttmname, 'r' ), xbmcvfs.File( srtname, 'w' ) ) except Exception as err: self.info( 'Failed to convert to srt: {}', err ) bgd.Close() except Exception as err: bgd.Close() self.error( 'Failure downloading {}: {}', film.url_sub, err ) # create NFO Files self._make_nfo_files( film, episode, dirname, nfoname, videourl ) else: self.notifier.ShowError( 30952, 30958 )