# # This file is part of stov, written by Helmut Pozimski 2012-2015. # # stov is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 2 of the License. # # stov is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with stov. If not, see . # -*- coding: utf8 -*- """This module takes care of managing and downloading single videos.""" import os import logging from lib_stov import stov_exceptions from lib_stov import youtubedl_wrapper LOGGER = logging.getLogger("stov") class Video(object): """This class stores all the attributes of a single youtube video and is also able to download it using youtube-dl. """ def __init__(self, title, ytid, conf, downloaded, failcount=0, video_id=0): self._id = video_id self.title = title self.ytid = ytid self.__conf = conf self.downloaded = downloaded self.failcnt = int(failcount) def download_video(self, directory, itag_value, video_codec): """Downloads the video by calling youtube-dl as an external process""" targetdir = self.__conf.values["downloaddir"] + "/" + directory if not os.access(targetdir, os.F_OK): try: LOGGER.debug(_("Creating directory %s"), targetdir) os.makedirs(targetdir, 0o750) except os.error: raise stov_exceptions.DirectoryCreationFailedException() os.chdir(targetdir) if self.downloaded == 0: try: url = "http://www.youtube.com/watch?v=%s" % self.ytid youtubedl_wrapper.download_video(self.__conf, url, itag_value, video_codec) except stov_exceptions.YoutubeDlCallFailed: self.failcnt = int(self.failcnt) + 1 return False else: self.downloaded = 1 return True def get_id(self): """Resturns the id attribute assigned to the object.""" return self._id