import yaml import os from .Logger import Logger class Setting: SETTING_FILE = 'conf/settings.yml' DOWNLOADED_FILE = 'temp/downloaded.yml' def __init__(self): self.settings = None self.downloaded = None if not os.path.exists('temp'): os.mkdir('temp') self.load() pass def load_settings(self): if not os.path.isfile(self.SETTING_FILE): Logger.log('There is no {}'.format(self.SETTING_FILE)) exit() with open(self.SETTING_FILE, encoding='utf-8') as setting_file: try: self.settings = yaml.load(setting_file) except ValueError as e: Logger.log(e) exit() if 'video' not in self.settings: Logger.log('video key is need in settings.json') exit() for i, video in enumerate(self.settings['video']): if 'title' not in video: Logger.log('title key is need in video({})'.format(i)) exit() if 'keyword' not in video: video['keyword'] = video['title'] if 'ignore_ep_under' not in video: video['ignore_ep_under'] = 0 if 'keyword_append' not in self.settings: self.settings['keyword_append'] = '' if 'download_path' not in self.settings: self.settings['download_path'] = '.' if self.settings['download_path'][-1] != '/': self.settings['download_path'] += '/' if not os.path.exists(self.settings['download_path']): try: os.makedirs(self.settings['download_path']) except Exception as e: Logger.log(e) exit() video['keyword'] += self.settings['keyword_append'] def load_downloaded(self): if os.path.isfile(self.DOWNLOADED_FILE): with open(self.DOWNLOADED_FILE, 'r', encoding='utf-8') as stream: try: self.downloaded = yaml.load(stream) except yaml.YAMLError as e: Logger.log(e) else: self.downloaded = {} for video in self.settings['video']: if video['title'] not in self.downloaded.keys(): self.downloaded[video['title']] = [] self.save() def load(self): self.load_settings() self.load_downloaded() @staticmethod def dump_settings_example(): settings_ex = { 'urls': [ 'https://todaum.com/bbs/board.php?bo_table=torrent_kortv_ent&device=pc&page=', 'https://todaum.com/bbs/board.php?bo_table=torrent_kortv_ent&device=pc&page=', ], 'max_page': 2, 'video': [ { 'title': '무한도전', 'ignore_ep_under': 325 }, { 'title': '라디오스타' } ], 'keyword_append': '.*720p.*NEXT', 'download_path': '.', } with open('settings_example.yml', 'w', encoding='utf-8') as outfile: yaml.dump(settings_ex, outfile, allow_unicode=True, default_flow_style=False) @staticmethod def dump_downloaded_example(): downloaded_ex = {'무한도전': [1, 2, 3], '라디오스타': [1, 2, 3]} with open('downloaded_example.yml', 'w', encoding='utf-8') as outfile: yaml.dump(downloaded_ex, outfile, allow_unicode=True) def save(self): with open(self.DOWNLOADED_FILE, 'w', encoding='utf-8') as outfile: yaml.dump(self.downloaded, outfile, allow_unicode=True) pass