From 33aefef362e9f8b79212788c02d5852743346c47 Mon Sep 17 00:00:00 2001 From: Kevin Midboe Date: Wed, 27 Sep 2017 21:55:21 +0200 Subject: [PATCH] This was for some reason removed, now added again. --- app/moveSeasoned.py | 97 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100755 app/moveSeasoned.py diff --git a/app/moveSeasoned.py b/app/moveSeasoned.py new file mode 100755 index 0000000..709495a --- /dev/null +++ b/app/moveSeasoned.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# @Author: KevinMidboe +# @Date: 2017-04-12 23:27:51 +# @Last Modified by: KevinMidboe +# @Last Modified time: 2017-06-27 15:58:09 + +import sys, sqlite3, json, os.path +import logging +import env_variables as env + +class episode(object): + def __init__(self, id): + self.id = id + self.getVarsFromDB() + + def getVarsFromDB(self): + c = sqlite3.connect(env.db_path).cursor() + c.execute('SELECT parent, name, season, episode, video_files, subtitles, trash FROM stray_eps WHERE id = ?', (self.id,)) + returnMsg = c.fetchone() + self.parent = returnMsg[0] + self.name = returnMsg[1] + self.season = returnMsg[2] + self.episode = returnMsg[3] + self.video_files = json.loads(returnMsg[4]) + self.subtitles = json.loads(returnMsg[5]) + self.trash = json.loads(returnMsg[6]) + c.close() + + self.queries = { + 'parent': [env.show_dir, self.parent], + 'season': [env.show_dir, self.name, self.name + ' Season ' + "%02d" % self.season], + 'episode': [env.show_dir, self.name, self.name + ' Season ' + "%02d" % self.season, \ + self.name + ' S' + "%02d" % self.season + 'E' + "%02d" % self.episode], + } + + def typeDir(self, dType, create=False, mergeItem=None): + url = '/'.join(self.queries[dType]) + if create and not os.path.isdir(url): + os.makedirs(url) + fix_ownership(url) + if mergeItem: + return '/'.join([url, str(mergeItem)]) + return url + + +def fix_ownership(path): + # TODO find this from username from config + uid = 1000 + gid = 113 + os.chown(path, uid, gid) + +def moveStray(strayId): + ep = episode(strayId) + + for item in ep.video_files: + try: + old_dir = ep.typeDir('parent', mergeItem=item[0]) + new_dir = ep.typeDir('episode', mergeItem=item[1], create=True) + os.rename(old_dir, new_dir) + except FileNotFoundError: + logging.warning(old_dir + ' does not exits, cannot be moved.') + + for item in ep.subtitles: + try: + old_dir = ep.typeDir('parent', mergeItem=item[0]) + new_dir = ep.typeDir('episode', mergeItem=item[1], create=True) + os.rename(old_dir, new_dir) + except FileNotFoundError: + logging.warning(old_dir + ' does not exits, cannot be moved.') + + for item in ep.trash: + try: + os.remove(ep.typeDir('parent', mergeItem=item)) + except FileNotFoundError: + logging.warning(ep.typeDir('parent', mergeItem=item) + 'does not exist, cannot be removed.') + + fix_ownership(ep.typeDir('episode')) + for root, dirs, files in os.walk(ep.typeDir('episode')): + for item in files: + fix_ownership(os.path.join(ep.typeDir('episode'), item)) + + + # TODO because we might jump over same files, the dir might no longer + # be empty and cannot remove dir like this. + try: + os.rmdir(ep.typeDir('parent')) + except FileNotFoundError: + logging.warning('Cannot remove ' + ep.typeDir('parent') + ', file no longer exists.') + +if __name__ == '__main__': + if (os.path.exists(env.logfile)): + logging.basicConfig(filename=env.logfile, level=logging.INFO) + else: + print('Logfile could not be found at ' + env.logfile + '. Verifiy presence or disable logging in config.') + + moveStray(sys.argv[-1])