def ProgramFirstContentScanner(DB_CONN, PROGRAM_ID, PROGRAM_WEB_LOC): _folderId = -1 _contentId = -1 _folderSearch = Database.Select(DB_CONN, SELECT = 'Folder_Id', FROM = dbManager.Db_ContFolder, WHERE = 'Program_Id = %i AND Folder_Location = "%s"' % (PROGRAM_ID, PROGRAM_WEB_LOC)) if(not _folderSearch): _folderSearch = Database.Select(DB_CONN, SELECT = 'Folder_Id', FROM = dbManager.Db_ContFolder, WHERE = 'Program_Id = %i' % PROGRAM_ID, ORDERBY = '%s.Folder_Name COLLATE NOCASE ASC' % dbManager.Db_ContFolder) if(_folderSearch): _folderId = _folderSearch[0] _contentSearch = Database.Select(DB_CONN, SELECT = 'Content_Id', FROM = dbManager.Db_Content, WHERE = 'Folder_Id = %i' % _folderId, ORDERBY = '%s.Content_Name COLLATE NOCASE ASC' % dbManager.Db_Content) if(_contentSearch): _contentId = _contentSearch[0] Database.Update(DB_CONN, dbManager.Db_Program, SET = 'First_Folder = %i, First_Content = %i' % (_folderId, _contentId), WHERE = 'Program_Id = %i' % PROGRAM_ID)
def UpdateDatabase(DB_CONN, DB_VERSION): if (DB_VERSION < 1): BuildDatabase(DB_CONN) DB_VERSION = dbManager.Db_Version if (DB_VERSION < 1.11): Database.AlterTable(DB_CONN, TABLE=dbManager.Db_Img, RENAMECOLUMN="Location TO Img_Location") if (DB_VERSION < 1.12): #SQLite doesn't support Drop Column while altering a table or Insert into a table. this is how we change a db if we need to remove a column Database.CreateTable( DB_CONN, TABLE='TEMP_DB', VALUES=[["Program_Id", "INTEGER PRIMARY KEY AUTOINCREMENT"], ["Program_Name", "TEXT UNIQUE NOT NULL"], ["Program_Desctiption", "TEXT"], ["Program_Location", "TEXT NOT NULL"], ["Program_Web_Location", "TEXT NOT NULL"], ["First_Content", "INTEGER"], ["First_Folder", "INTEGER"], ["Num_Content", "INTEGER NOT NULL"]]) Database.Insert( DB_CONN, INTO='TEMP_DB', SELECT= 'Program_Id, Program_Name, Program_Desctiption, Program_Location, Program_Web_Location, First_Content, First_Folder, Num_Content', FROM=dbManager.Db_Program) Database.Drop(DB_CONN, dbManager.Db_Program) Database.CreateTable( DB_CONN, TABLE=dbManager.Db_Program, VALUES=[["Program_Id", "INTEGER PRIMARY KEY AUTOINCREMENT"], ["Program_Name", "TEXT UNIQUE NOT NULL"], ["Program_Desctiption", "TEXT"], ["Program_Location", "TEXT NOT NULL"], ["Program_Web_Location", "TEXT NOT NULL"], ["First_Content", "INTEGER"], ["First_Folder", "INTEGER"], ["Num_Content", "INTEGER NOT NULL"]]) Database.Insert(DB_CONN, INTO=dbManager.Db_Program, SELECT='*', FROM='TEMP_DB') Database.Drop(DB_CONN, 'TEMP_DB') if (DB_VERSION < 1.13): metaFolders.RenameMeta() Database.AlterTable(DB_CONN, TABLE=dbManager.Db_Program, ADDCOLUMN="Program_Last_Updated DATETIME") Database.Update(DB_CONN, dbManager.Db_YourFlix, SET="Version = %s" % str(dbManager.Db_Version))
def AddContentToDb(DB_CONN, ROOT, FILE_LOC, FILE_NAME): _contentData = Database.Select(DB_CONN, SELECT='Content_Id', FROM=dbManager.Db_Content, WHERE='Content_Location = "%s"' % FILE_LOC) if (not _contentData): _folderLoc = os.path.dirname(FILE_LOC) _folderName = os.path.basename(_folderLoc) _folderRoot = os.path.dirname(_folderLoc) _folderId = None DebugLog( "ROOT: %s\nFOLDER_LOC: %s\n_folderLoc: %s\n_folderName: %s\n_folderRoot: %s\n" % (ROOT, FILE_LOC, _folderLoc, _folderName, _folderRoot)) _folderData = AddFolderToDb(DB_CONN, _folderRoot, _folderLoc, _folderName) if (_folderData): _folderId = _folderData[0] _programId = _folderData[1] if (debug): print("Added Content: %s in Location: %s" % (FILE_NAME, FILE_LOC)) _fileType = GetVideoType(DB_CONN, FILE_NAME) _split = os.path.splitext(FILE_NAME) _fileName = _split[0] _updateTime = datetime.datetime.now() _contentId = Database.Insert( DB_CONN, INTO=dbManager.Db_Content, ROW=[ 'Folder_Id', 'FileType_Id', 'Content_Name', 'Content_Location' ], VALUES=[_folderId, _fileType, _fileName, FILE_LOC]) Database.Update( DB_CONN, dbManager.Db_Program, SET='Num_Content = Num_Content + 1, Program_Last_Updated = "%s"' % (_updateTime), WHERE='Program_Id = %i' % _programId) programBuilder.BuildProgram(DB_CONN, _programId) DebugLog("Updated and rebuilt Program with Id: %i" % (_programId)) return _contentId else: DebugLog("Content: %s already exists" % (FILE_NAME)) return _contentData[0]
def UpdateContentLocation(DB_CONN, CONTENT_ID, NEW_LOC): Database.Update(DB_CONN, dbManager.Db_Content, 'Content_Location = "%s"' % (NEW_LOC), WHERE='Content_Id = %i' % CONTENT_ID) if (debug): print("AutoUpdateDB - Updating Content: %i to change Location to: %s" % (CONTENT_ID, NEW_LOC))
def UpdateProgramMetaImgLocation(DB_CONN, META_ID, NEW_LOC): Database.Update(DB_CONN, dbManager.Db_Img, 'Img_Location = "%s"' % (NEW_LOC), WHERE='ProgImg_Id = %i' % META_ID) if (debug): print( "AutoUpdateDB - Updating Program Meta: %i to change Location to: %s" % (META_ID, NEW_LOC))
def RemoveContentFromDb(DB_CONN, FILE_LOCATION = None, CONTENT_ID = None, FOLDER_ID = None): _contentId = CONTENT_ID _folderId = FOLDER_ID if(not _contentId): _contentData = Database.Select(DB_CONN, SELECT = 'Content_Id, Folder_Id', FROM = dbManager.Db_Content, WHERE = 'Content_Location = "%s"' % FILE_LOCATION) if(_contentData): _contentId = _contentData[0] _folderId = _contentData[1] if(_contentId and _folderId): Database.Delete(DB_CONN, FROM = dbManager.Db_Content, WHERE = 'Content_Id = %i' % _contentId) DebugLog("Content with ID: %i has been Removed" % _contentId) _contentData = Database.Select(DB_CONN, SELECT = 'Content_Id, Folder_Id', FROM = dbManager.Db_Content, WHERE = 'Content_Id = %i' % _contentId, fetchall = True) if(len(_contentData) >= 1): RemoveFolderFromDb(DB_CONN, FOLDER_ID = _folderId) _programData = Database.Select(DB_CONN, SELECT = 'Program_Id', FROM = dbManager.Db_ContFolder, WHERE = 'Folder_Id = %i' % _folderId) if(_programData): _programId = _programData[0] Database.Update(DB_CONN, dbManager.Db_Program, SET = 'Num_Content = Num_Content - 1', WHERE = 'Program_Id = %i' % _programId) DebugLog("Program with ID: %i is one less Content in it's DB" % _programId) programBuilder.BuildProgram(DB_CONN, _programId) else: DebugLog("Content Already Removed\nContent ID: %s\nFolder ID: %s" % (str(_contentId), str(_folderId)))
def RemoveFromDatabase(DB_CONN): changed = False for content in dbManager.Current_Content: print("Content %s Removed from Db" % str(content)) _contentId = content[0] _folderId = content[1] _programId = Database.Select(DB_CONN, SELECT='Program_Id', FROM=dbManager.Db_ContFolder, WHERE='Folder_Id = %i' % _folderId)[0] Database.Update(DB_CONN, dbManager.Db_Program, SET='Num_Content = Num_Content - 1', WHERE='Program_Id = %i' % _programId) Database.Delete(DB_CONN, FROM=dbManager.Db_Content, WHERE="Content_Id = %i" % _contentId) changed = True for contentFolder in dbManager.Current_ContFolder: print("Folder %s Removed from Db" % str(contentFolder)) _folderId = contentFolder[0] Database.Delete(DB_CONN, FROM=dbManager.Db_ContFolder, WHERE="Folder_Id = %i" % _folderId) changed = True for program in dbManager.Current_Program: print("Program %s Removed from Db" % str(program)) _programId = program[0] Database.Delete(DB_CONN, FROM=dbManager.Db_Program, WHERE="Program_Id = %i" % _programId) changed = True if changed: print("New items added to Db")
def BuildPrograms(DB_CONN): _programData = Database.Select(DB_CONN, SELECT = 'Program_Id, Program_Web_Location, Program_Location, Num_Content', FROM = dbManager.Db_Program, fetchall = True) _allChannelId = Database.Select(DB_CONN, SELECT = 'Channel_Id', FROM = dbManager.Db_Channel, WHERE = 'Channel_Name = "%s"' % dbManager.DefaultChannels[0])[0] _filmChannelId = Database.Select(DB_CONN, SELECT = 'Channel_Id', FROM = dbManager.Db_Channel, WHERE = 'Channel_Name = "%s"' % dbManager.DefaultChannels[1])[0] _showChannelId = Database.Select(DB_CONN, SELECT = 'Channel_Id', FROM = dbManager.Db_Channel, WHERE = 'Channel_Name = "%s"' % dbManager.DefaultChannels[2])[0] PullAllMetaData(DB_CONN) PullAllChannelPrograms(DB_CONN, _allChannelId, _filmChannelId, _showChannelId) for _program in _programData: _programId = _program[0] _programWeb = _program[1] _programLoc = _program[2] _numContent = _program[3] _hasUpdated = ScanProgramMetaFolder(DB_CONN, _programId, _programLoc, _programWeb) ProgramFirstContentScanner(DB_CONN, _programId, _programWeb) _hasUpdated = AddToDefaultChannel(DB_CONN, _programId, _numContent, _allChannelId, _filmChannelId, _showChannelId) or _hasUpdated if(_hasUpdated): _updateTime = datetime.datetime.now() DebugLog("Program: %i has been updated @ %s" % (_programId, _updateTime)) Database.Update(DB_CONN, dbManager.Db_Program, SET = 'Program_Last_Updated = "%s"' % (_updateTime), WHERE = 'Program_Id = %i' % _programId) RemoveUnusedMetaData(DB_CONN) RemoveUnusedChannelPrograms(DB_CONN)
def UpdateFolderLocation(DB_CONN, ORIG_LOC, NEW_LOC, FOLDER_ID=None): _folderId = None if (not FOLDER_ID): _folderData = Database.Select(DB_CONN, SELECT='Folder_Id', FROM=dbManager.Db_ContFolder, WHERE='Folder_Location = "%s"' % ORIG_LOC) if (_folderData): _folderId = _folderData[0] else: _folderId = FOLDER_ID if (_folderId): _folderContent = Database.Select(DB_CONN, SELECT='Content_Id, Content_Location', FROM=dbManager.Db_Content, WHERE='Folder_Id = %i' % _folderId, fetchall=True) for _content in _folderContent: _contentId = _content[0] _originalContentLoc = _content[1] _newContentLocation = os.path.join( NEW_LOC, _originalContentLoc.split(ORIG_LOC)[1][1:]) UpdateContentLocation(DB_CONN, _contentId, _newContentLocation) Database.Update(DB_CONN, dbManager.Db_ContFolder, 'Folder_Location = "%s"' % (NEW_LOC), WHERE='Folder_Id = %i' % _folderId) if (debug): print( "AutoUpdateDB - Updating Folder: %i to change Location to: %s" % (_folderId, NEW_LOC)) elif (debug): print("AutoUpdateDB - Folder missing from Location %s" % (ORIG_LOC))
def FindFolder(DB_CONN, PHYSICAL_PATH, WEB_PATH, FOLDER_NAME, PROGRAM_ID): DebugLog("Checking if Content Folder %s: is in Database" % FOLDER_NAME) _searchResult = Database.Select(DB_CONN, SELECT='Folder_Id, Program_Id', FROM=dbManager.Db_ContFolder, WHERE='Folder_Location == "%s"' % WEB_PATH) if (FOLDER_NAME not in dbManager.MetaFolder): if (_searchResult): DebugLog("Folder %s has been Found" % FOLDER_NAME) if (PROGRAM_ID == _searchResult[1]): DebugLog("Folder %s Information up to date" % FOLDER_NAME) dbManager.Current_ContFolder.remove(_searchResult) return _searchResult[0] else: DebugLog("Updating Folder %s with new Program ID: %i" % (FOLDER_NAME, PROGRAM_ID)) Database.Update(DB_CONN, dbManager.Db_ContFolder, SET='Program_Id = %i' % PROGRAM_ID, WHERE='Folder_Id = %i' % _searchResult[0]) return _searchResult[0] else: DebugLog("Adding Folder %s to Database" % FOLDER_NAME) _folderId = Database.Insert( DB_CONN, INTO=dbManager.Db_ContFolder, ROW=['Folder_Name', 'Folder_Location', 'Program_Id'], VALUES=[FOLDER_NAME, WEB_PATH, PROGRAM_ID]) return _folderId return None
def FindContent(DB_CONN, PHYSICAL_ROOT, WEB_ROOT, FOLDER_NAME, PROGRAM_ID): _currentPhysicalFolder = os.path.join(PHYSICAL_ROOT, FOLDER_NAME) _foundOrAddedContent = 0 if os.path.isdir(_currentPhysicalFolder): DebugLog("Checking DIR %s" % _currentPhysicalFolder) _currentWebFolder = os.path.join(WEB_ROOT, FOLDER_NAME) _currentFolderId = -1 for _item in os.listdir(_currentPhysicalFolder): DebugLog("Found %s" % _item) if (_item not in dbManager.ScannerIgnore): _physicalContent = os.path.join(_currentPhysicalFolder, _item) _webContent = os.path.join(_currentWebFolder, _item) if (os.path.isdir(_physicalContent)): _foundOrAddedContent += FindContent( DB_CONN, _currentPhysicalFolder, _currentWebFolder, _item, PROGRAM_ID) else: #Make Sure it has the same select data as the Pull data _searchResult = Database.Select( DB_CONN, SELECT='Content_Id, Folder_Id', FROM=dbManager.Db_Content, WHERE='Content_Location == "%s"' % _webContent) if (_currentFolderId == -1): _currentFolderId = FindFolder(DB_CONN, PHYSICAL_ROOT, _currentWebFolder, FOLDER_NAME, PROGRAM_ID) if (_currentFolderId): if (_searchResult): DebugLog("Content: %s is already in DB" % _item) dbManager.Current_Content.remove(_searchResult) _foundOrAddedContent += 1 else: _fileType = GetVideoType(DB_CONN, _physicalContent) _split = os.path.splitext(_item) _fileName = _split[0] _updateTime = datetime.datetime.now() if (_fileType != -1): DebugLog("Adding %s to Database" % _item) Database.Insert(DB_CONN, INTO=dbManager.Db_Content, ROW=[ 'Folder_Id', 'FileType_Id', 'Content_Name', 'Content_Location' ], VALUES=[ _currentFolderId, _fileType, _fileName, _webContent ]) Database.Update( DB_CONN, dbManager.Db_Program, SET= 'Num_Content = Num_Content + 1, Program_Last_Updated = "%s"' % (_updateTime), WHERE='Program_Id = %i' % PROGRAM_ID) _foundOrAddedContent += 1 return _foundOrAddedContent
def UpdateProgramLocation(DB_CONN, ORIG_LOC, NEW_LOC): _programId = None _programData = Database.Select(DB_CONN, SELECT='Program_Id', FROM=dbManager.Db_Program, WHERE='Program_Web_Location = "%s"' % ORIG_LOC) if (_programData): _programId = _programData[0] if (_programId): _programPhysicalLoc = os.path.join(dbManager.YF_Html, NEW_LOC) _programFolders = Database.Select(DB_CONN, SELECT='Folder_Id, Folder_Location', FROM=dbManager.Db_ContFolder, WHERE='Program_Id = %i' % _programId, fetchall=True) for _folder in _programFolders: print(_folder) _folderId = _folder[0] _originalFolderLoc = _folder[1] _newContentLocation = os.path.join( NEW_LOC, _originalFolderLoc.split(ORIG_LOC)[1][1:]) UpdateFolderLocation(DB_CONN, _originalFolderLoc, _newContentLocation, FOLDER_ID=_folderId) _programMeta = Database.Select(DB_CONN, SELECT='ProgImg_Id, Img_Location', FROM=dbManager.Db_Img, WHERE='Program_Id = %i' % _programId, fetchall=True) for _meta in _programMeta: _folderId = _meta[0] _originalMetaLoc = _meta[1] _newContentLocation = os.path.join( NEW_LOC, _originalMetaLoc.split(ORIG_LOC)[1][1:]) UpdateProgramMetaImgLocation(DB_CONN, _folderId, _newContentLocation) Database.Update( DB_CONN, dbManager.Db_Program, 'Program_Web_Location = "%s", Program_Location = "%s"' % (NEW_LOC, _programPhysicalLoc), WHERE='Program_Id = %i' % _programId) if (debug): print( "AutoUpdateDB - Updating Program: %i to change Location to: %s" % (_programId, NEW_LOC)) elif (debug): print("AutoUpdateDB - Program missing from Location %s" % (ORIG_LOC))