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)
Example #5
0
    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')
Example #6
0
    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)
Example #7
0
	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 )