From b8acbcbdc164542b9f827f5bf3584b2cad29d4df Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Sat, 6 Jul 2013 20:18:52 +1000 Subject: [PATCH] finished initial coding --- TVEncoder.py | 11 ++++++-- libfilemanager.py | 13 ++++++---- libtvdatasource.py | 63 ++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 78 insertions(+), 9 deletions(-) diff --git a/TVEncoder.py b/TVEncoder.py index 18c2d77..3adb279 100644 --- a/TVEncoder.py +++ b/TVEncoder.py @@ -8,8 +8,9 @@ Created on Fri Jul 5 14:14:22 2013 import sys import getopt import libfilemanager -import libsettings +from libsettings import Settings import libhandbrake +import libtvdatasource TVRECORDINGSDIR = "/srv/storage2/videos/TVRecordings/" # TODO move this to settings @@ -22,6 +23,9 @@ def ShowHelp(): def PrintShowsToEncode(showData): print "/n".join(showData) +def PrintShowsToPrepare(showData): + print "/n".join(showData) + def main(argv): numFiles = 0 doEncode = False @@ -58,7 +62,8 @@ def main(argv): PrintShowsToEncode(showData) else: # Generate the list of files to process - files = GetFilesToPrepare(TVRECORDINGSDIR, numFiles, shows) + shows = GetFilesToPrepare(TVRECORDINGSDIR, numFiles, shows) + PrintShowsToPrepare(shows) else: if doEncode: #Encode the files and move them to their final destination @@ -73,6 +78,8 @@ def main(argv): PerformPostEncodeFileOperations(show.inputFile, show.outputFile) else: # TODO Process files for encoding + shows = GetFilesToPrepare(TVRECORDINGSDIR, numFiles, shows) + PrepareEpisodes(shows) if __name__ == "__main__": main(sys.argv[1:]) \ No newline at end of file diff --git a/libfilemanager.py b/libfilemanager.py index 9fbb3c0..55878cf 100644 --- a/libfilemanager.py +++ b/libfilemanager.py @@ -21,6 +21,7 @@ class EncodeData: def ToString(self): return "Input: {0}/tOutput: {2}".format(self.inputFile, self.outputFile) + def __GetInputFilesToEncode(shows): fileList = [] @@ -82,15 +83,17 @@ def GetFilesToPrepare(path, numberofFiles, shows): #files is now a list of unprocessed files, but contains shows other than those we are interested in - filesToProcess = [] + showsToProcess = [] i = 0 for file in files: # TODO get these from settings - if TVData.CheckTitleIsInList('localhost', 'script', 'script', 'mythconverg', file): - filesToProcess.append(file) + #if TVData.CheckTitleIsInList('localhost', 'script', 'script', 'mythconverg', file): + showData = TVData.RetrieveEpisodeData('localhost', 'script', 'script', 'mythconverg', file, shows) + if showData: + showsToProcess.append(showData) i = i + 1 if i == numberofFiles: - return filesToProcess + return showsToProcess - return filesToProcess #will reach here if there were less than numberofFiles found + return showsToProcess #will reach here if there were less than numberofFiles found \ No newline at end of file diff --git a/libtvdatasource.py b/libtvdatasource.py index 65c8c1b..767204b 100644 --- a/libtvdatasource.py +++ b/libtvdatasource.py @@ -7,6 +7,18 @@ Created on Fri Jul 5 14:42:47 2013 import libmythtv as MythTV from libsickbeard import Sickbeard +import os +import shutil + +# TODO Move these to settings +PROCESSDIR="/srv/storage2/files/VideoProcessing/" +THOMAS="Thomas" +CHUGGINGTON="Chuggington" +MIKE="MikeTheKnight" +OCTONAUTS="Octonauts" +NIGHTGARDEN="InTheNightGarden" +RAARAA="RaaRaa" +INPUTDIR="Input" class TVShow: def __init__(self, episode, season, title, subtitle, description, inputFile='', outputFile=''): @@ -23,11 +35,31 @@ def FixEpisodeSeasonNumber(number): return "0{0}".format(number) else: return str(number) + +def GetDirectory(title, season): + directory = "" + if title == "Thomas and Friends" or title == "Thomas the Tank Engine & Friends": + directory = THOMAS + elif title == "Chuggington": + directory = CHUGGINGTON + elif title == "Mike the Knight": + directory = MIKE + elif title == "Octonauts" or title == "The Octonauts": + directory = OCTONAUTS + elif title == "In the Night Garden": + directory = NIGHTGARDEN + elif title == "Raa Raa! The Noisy Lion": + directory = RAARAA + else: + print "Didn't match" + + return os.path.join(PROCESSDIR, directory, INPUTDIR, season) def RetrieveEpisodeData(serverAddress, user, password, database, inputFile, showsToProcess): + file = os.path.basename(inputFile) show = MythTV.RetrieveEpisodeData('localhost', 'script', 'script', 'mythconverg', file) - if show.title: + if show.title and show.title in showsToProcess: if show.subtitle: show.subtitle = GetEpisodeName(show.subtitle, show.title) @@ -48,9 +80,17 @@ def RetrieveEpisodeData(serverAddress, user, password, database, inputFile, show renamedFile = "{0}{1} - {2} - SD TV_.mpg".format(season, episode, show.subtitle) directory = GetDirectory(show.title, seasonFolder) + + show.outputFile = os.path.join(directory, inputFile[:-4], renamedFile) + show.inputFile = inputFile + + return show + else: + return None def CheckTitleIsInList(serverAddress, user, password, database, inputFile): """Check that inputFile is a recording of a show that is to be processed.""" + file = os.path.basename(inputFile) show = MythTV.RetrieveEpisodeData('localhost', 'script', 'script', 'mythconverg', file) # TODO get this from settings @@ -62,8 +102,27 @@ def CheckTitleIsInList(serverAddress, user, password, database, inputFile): else: return False +def DetermineTargetFilename(directory, filename, inputFilename): + dir = os.path.join(directory, inputFilename[:-4]) + + if not os.path.exists(dir): + os.makedirs(dir) + + return os.path.join(dir, filename) + def GetEpisodeName(subtitle, showName): if subtitle[:len(showName)].lower() == showName.lower(): return subtitle[len(showName + ' and the '):] else: - return subtitle \ No newline at end of file + return subtitle + +def ProcessEpisode(inputFile, outputFile): + outputdir = os.path.dirname(outputFile) + if not os.path.exists(outputdir): + os.makedirs(outputdir) + + shutil.move(inputFile, outputFile) + +def PrepareEpisodes(showsData): + for showData in showsData: + ProcessEpisode(showData.inputFile, showData.outputFile) \ No newline at end of file