Files
seasonedShows/modules/classedStray.py

133 lines
3.3 KiB
Python
Executable File

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: KevinMidboe
# @Date: 2017-04-05 18:40:11
# @Last Modified by: KevinMidboe
# @Last Modified time: 2017-04-05 23:49:40
import os.path, hashlib, time, glob, sqlite3, re
from functools import reduce
from fuzzywuzzy import process
from time import sleep
import env
dirHash = None
childList = []
class mediaItem(object):
def __init__(self, parent, childrenList):
self.parent = parent
self.children = childrenList
self.seriesName = self.findSeriesName()
self.season = self.getSeasonNumber()
self.episode = self.getEpisodeNumber()
self.videoFiles = []
self.subtitles = []
self.trash = []
self.getMediaItems()
def findSeriesName(self):
find = re.compile("^[a-zA-Z. ]*")
m = re.match(find, self.parent)
if m:
name, hit = process.extractOne(m.group(0), getShowNames().keys())
if hit >= 90:
return name
def getSeasonNumber(self):
m = re.search('[sS][0-9]{1,2}', self.parent)
if m:
return re.sub('[sS]', '', m.group(0))
def getEpisodeNumber(self):
m = re.search('[eE][0-9]{1,2}', self.parent)
if m:
return re.sub('[eE]', '', m.group(0))
def removeSignature(self, file):
match = re.search('-[a-zA-Z\[\]\-]*.[a-z]{3}', file)
if match:
uploader = match.group(0)[:-4]
if 'sdh' in uploader.lower():
return re.sub(uploader, '.sdh', file)
return re.sub(uploader, '', file)
return ''
def getMediaItems(self):
for child in self.children:
if child[-3:] in env.mediaExt and child[:-4] not in env.mediaExcluders:
self.videoFiles.append([child, self.removeSignature(child)])
elif child[-3:] in env.subExt:
# print([child, removeSignature(child), getLanguage(showDir + folder + '/', child)])
self.subtitles.append([child, self.removeSignature(child)])
print(self.subtitles)
else:
self.trash.append(child)
def getDirContent(dir=env.show_dir):
try:
return [d for d in os.listdir(dir) if d[0] != '.']
except FileNotFoundError:
print('Error: "' + dir + '" is not a directory.')
# Hashes the contents of media folder to easily check for changes.
def directoryChecksum():
dirList = getDirContent()
# Creates a string of all the list items.
dirConcat = reduce(lambda x, y: x + y, dirList, "")
m = hashlib.md5()
m.update(bytes(dirConcat, 'utf-16be')) # String to byte conversion.
global dirHash
if dirHash != m.digest():
dirHash = m.digest()
return True
return False
def getShowNames():
conn = sqlite3.connect(env.db_path)
c = conn.cursor()
c.execute('SELECT show_names, date_added, date_modified FROM shows')
returnList = {}
for name, added, modified in c.fetchall():
returnList[name] = [added, modified]
conn.close()
return returnList
def XOR(list1, list2):
return set(list1) ^ set(list2)
def filterChildItems(parent):
try:
children = getDirContent(env.show_dir + parent)
if children:
childList.append(mediaItem(parent, children))
except FileNotFoundError:
# Log to error file
print('"' + env.show_dir + parent + '" is not a valid directory.')
def getNewItems():
newItems = XOR(getDirContent(), getShowNames())
for item in newItems:
filterChildItems(item)
def main():
# TODO Verify env variables (showDir)
start_time = time.time()
if directoryChecksum():
getNewItems()
print("--- %s seconds ---" % (time.time() - start_time))
if __name__ == '__main__':
while True:
main()
sleep(2)