def RemoveFolderFromDb(DB_CONN, FOLDER_LOCATION = None, FOLDER_ID = None):
    _folderId = FOLDER_ID

    if(not _folderId):
        _folderData = Database.Select(DB_CONN,
            SELECT = 'Folder_Id',
            FROM = dbManager.Db_ContFolder,
            WHERE = 'Folder_Location = "%s"' % FOLDER_LOCATION)
        
        if(_folderData):
            _folderId = _folderData[0]
    
    if(_folderId):
        _folderContents = Database.Select(DB_CONN,
            SELECT = 'Content_Id',
            FROM = dbManager.Db_Content,
            WHERE = 'Folder_id = %i' % _folderId,
            fetchall = True)

        if(_folderContents):
            
            for _content in _folderContents:
                _contentId = _content[0]
                RemoveContentFromDb(DB_CONN, CONTENT_ID = _contentId, FOLDER_ID = _folderId)
                
        Database.Delete(DB_CONN,
            FROM = dbManager.Db_ContFolder,
            WHERE = 'Folder_Id = %i' % _folderId)
    
    else:
        DebugLog("Folder Already Removed")
Пример #2
0
def CheckDatabase(DB_CONN):
    checkStruct = True
    _updateVersion = False
    _dbVersion = -1.0

    #Checks to see if an DB Exists if a DB isn't present or has been updated we update or rebuild
    for db in dbManager.Db_List:
        _returned = Database.Select(DB_CONN,
                                    SELECT="name",
                                    FROM="sqlite_master",
                                    WHERE="type='table' AND name='%s'" % db)

        checkStruct = _returned != None and checkStruct

        if (db == dbManager.Db_YourFlix and checkStruct):
            _versionReturned = Database.Select(DB_CONN,
                                               SELECT="Version",
                                               FROM=db)
            print(_versionReturned[0])
            if (_versionReturned):
                _dbVersion = _versionReturned[0]
                _updateVersion = _dbVersion != dbManager.Db_Version

    if (not checkStruct):
        print(
            "Db Builder - Database is Missing Data, Dropping All Tables and Rebuilding"
        )
        BuildDatabase(DB_CONN)

    elif (_updateVersion):
        print("Db Builder - Database Needs and Update")
        UpdateDatabase(DB_CONN, _dbVersion)
    else:
        print("Db Builder - Database is setup Correctly")
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 RemoveProgramFromDb(DB_CONN, PROGRAM_WEB_LOCATION):
    _programData = Database.Select(DB_CONN,
        SELECT = 'Program_Id',
        FROM = dbManager.Db_Program,
        WHERE = 'Program_Web_Location = "%s"' % PROGRAM_WEB_LOCATION)

    if(_programData):
        _programId = _programData[0]
        _programFolders = Database.Select(DB_CONN,
            SELECT = 'Folder_Id',
            FROM = dbManager.Db_ContFolder,
            WHERE = 'Program_Id = %i' % _programId,
            fetchall = True)
        
        if(_programFolders):
            DebugLog("%i Porgam Folders Found Removing them" % len(_programFolders)) 

            for _folder in _programFolders:
                _folderId = _folder[0]
                RemoveFolderFromDb(DB_CONN, FOLDER_ID = _folderId)

        _programMetaImg = Database.Select(DB_CONN,
            SELECT = 'ProgImg_Id',
            FROM = dbManager.Db_Img,
            WHERE = 'Program_Id = %i' % _programId,
            fetchall = True)

        if(_programMetaImg):
            DebugLog("%i Meta Images Found Removing them" % len(_programMetaImg)) 

            for _metaImg in _programMetaImg:
                _metaId = _metaImg[0]
                RemoveMetaImgFromDb(DB_CONN, META_ID = _metaId)

        _channelPrograms = Database.Select(DB_CONN,
            SELECT = 'ChProg_Id',
            FROM = dbManager.Db_ChProgram,
            WHERE = 'Program_Id = %i' % _programId,
            fetchall = True)

        if(_channelPrograms):
            DebugLog("%i Channel Programs Found Removing them" % len(_channelPrograms)) 

            for _channelProgram in _channelPrograms:
                _channelPorgramId = _channelProgram[0]

                RemoveChannelProgramFroDb(DB_CONN, _channelPorgramId)

        Database.Delete(DB_CONN,
            FROM = dbManager.Db_Program,
            WHERE = 'Program_Id = %i' % _programId)

        DebugLog("Program with ID: %i has been removed" % _programId)

    DebugLog("Program Already Removed")
def AddToDefaultChannel(DB_CONN, PROGRAM_ID, NUMBER_OF_CONTENT, ALL_CHANNEL_ID, FILM_CHANNEL_ID, SHOW_CHANNEL_ID):
    _updated = False

    #Add Program to All Channel
    _channelResult = Database.Select(DB_CONN,
        SELECT = 'ChProg_Id, Channel_Id, Program_Id',
        FROM = dbManager.Db_ChProgram,
        WHERE = 'Program_Id = %i AND Channel_Id = %i' % (PROGRAM_ID, ALL_CHANNEL_ID))

    if(_channelResult):
        dbManager.Current_AllChannel.remove(_channelResult)
    else:
        Database.Insert(DB_CONN, 
            INTO = dbManager.Db_ChProgram, 
            ROW = ['Channel_Id, Program_Id'],
            VALUES = [ALL_CHANNEL_ID, PROGRAM_ID])
        _updated = True

    #Add Program to Film Channel
    if(NUMBER_OF_CONTENT == 1):
        _channelResult = Database.Select(DB_CONN,
            SELECT = 'ChProg_Id, Channel_Id, Program_Id',
            FROM = dbManager.Db_ChProgram,
            WHERE = 'Program_Id = %i AND Channel_Id = %i' % (PROGRAM_ID, FILM_CHANNEL_ID))

        if(_channelResult):
            dbManager.Current_FilmsChannel.remove(_channelResult)
        else:
            Database.Insert(DB_CONN, 
                INTO = dbManager.Db_ChProgram, 
                ROW = ['Channel_Id, Program_Id'],
                VALUES = [FILM_CHANNEL_ID, PROGRAM_ID])
            _updated = True

    #Add Program to Show Channel
    elif(NUMBER_OF_CONTENT > 1):
        _channelResult = Database.Select(DB_CONN,
            SELECT = 'ChProg_Id, Channel_Id, Program_Id',
            FROM = dbManager.Db_ChProgram,
            WHERE = 'Program_Id = %i AND Channel_Id = %i' % (PROGRAM_ID, SHOW_CHANNEL_ID))

        if(_channelResult):
            dbManager.Current_ShowsChannel.remove(_channelResult)
        else:
            Database.Insert(DB_CONN, 
                INTO = dbManager.Db_ChProgram, 
                ROW = ['Channel_Id, Program_Id'],
                VALUES = [SHOW_CHANNEL_ID, PROGRAM_ID])
            _updated = True
    
    return _updated
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 PullFromDatabase(DB_CONN):
    dbManager.Current_Program = Database.Select(DB_CONN,
                                                SELECT='Program_Id',
                                                FROM=dbManager.Db_Program,
                                                fetchall=True)

    dbManager.Current_ContFolder = Database.Select(
        DB_CONN,
        SELECT='Folder_Id, Program_Id',
        FROM=dbManager.Db_ContFolder,
        fetchall=True)

    dbManager.Current_Content = Database.Select(DB_CONN,
                                                SELECT='Content_Id, Folder_Id',
                                                FROM=dbManager.Db_Content,
                                                fetchall=True)
Пример #8
0
def AddProgramToDb(DB_CONN, PROGAM_WEB_LOC, PROGRAM_NAME):
    _programData = Database.Select(DB_CONN,
                                   SELECT='Program_Id',
                                   FROM=dbManager.Db_Program,
                                   WHERE='Program_Web_Location = "%s"' %
                                   PROGAM_WEB_LOC)

    if (_programData):
        DebugLog("Found Program in Location: %s" % PROGAM_WEB_LOC)
        return _programData[0]

    else:
        DebugLog("Adding Program %s" % PROGRAM_NAME)

        _programName = PROGRAM_NAME
        _programWebLoc = PROGAM_WEB_LOC
        _programPhysLoc = os.path.join(dbManager.YF_Html, _programWebLoc[1:])

        _programId = _programId = Database.Insert(
            DB_CONN,
            INTO=dbManager.Db_Program,
            ROW=[
                'Program_Name', 'Program_Location', 'Program_Web_Location',
                'Num_Content'
            ],
            VALUES=[PROGRAM_NAME, _programPhysLoc, _programWebLoc, 0])

        DebugLog("Adding Program %s in Physical Loc: %s - Web Loc: %s" %
                 (_programName, _programPhysLoc, _programWebLoc))

        return _programId
Пример #9
0
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 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 GetImageType(DB_CONN, IMG_TYPE):
    _searchResult = Database.Select(DB_CONN, 
        SELECT = 'ImgType_Id',
        FROM = dbManager.Db_ImageType,
        WHERE = 'Image_Type == "%s"' % IMG_TYPE)

    if _searchResult:
        return _searchResult[0]

    return -1
def GetProgramId(DB_CONN, FOLDER_LOC):
    _programData = Database.Select(DB_CONN,
                                   SELECT='Program_Id',
                                   FROM=dbManager.Db_Program,
                                   WHERE='Program_Web_Location = "%s"' %
                                   FOLDER_LOC)

    if (_programData):
        return _programData[0]

    raise Exception("FindProgram ERROR: No Program Exists @ %s" + FOLDER_LOC)
def PullAllMetaData(DB_CONN, PROGRAM_ID = None):
    _where = ''
    
    if(PROGRAM_ID):
        _where = 'Program_Id = %i' %PROGRAM_ID

    dbManager.Current_MetaImages = Database.Select(DB_CONN,
        SELECT = 'ProgImg_Id',
        FROM = dbManager.Db_Img,
        WHERE = _where,
        fetchall = True)
def PullAllChannelPrograms(DB_CONN, ALL_CHANNEL_ID, FILM_CHANNEL_ID, SHOW_CHANNEL_ID, PROGRAM_ID = None):
    _programContition = ''

    if(PROGRAM_ID):
        _programContition = ' AND Program_Id = %i' % PROGRAM_ID

    dbManager.Current_AllChannel = Database.Select(DB_CONN,
        SELECT = 'ChProg_Id, Channel_Id, Program_Id',
        FROM = dbManager.Db_ChProgram,
        WHERE = 'Channel_Id = %i%s' % (ALL_CHANNEL_ID, _programContition),
        fetchall = True)

    dbManager.Current_FilmsChannel = Database.Select(DB_CONN,
        SELECT = 'ChProg_Id, Channel_Id, Program_Id',
        FROM = dbManager.Db_ChProgram,
        WHERE = 'Channel_Id = %i%s' % (FILM_CHANNEL_ID, _programContition),
        fetchall = True)

    dbManager.Current_ShowsChannel = Database.Select(DB_CONN,
        SELECT = 'ChProg_Id, Channel_Id, Program_Id',
        FROM = dbManager.Db_ChProgram,
        WHERE = 'Channel_Id = %i%s' % (SHOW_CHANNEL_ID, _programContition),
        fetchall = True)
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")
Пример #17
0
def CheckFileType(DB_CONN, FILE):

    _split = os.path.splitext(FILE)
    _search = (_split[len(_split)-1]).lower()
        
    if(_search != None):

        DebugLog("Extention is: %s" % _search)
        _searchResult = Database.Select(DB_CONN,
            SELECT = 'FileType',
            FROM = dbManager.Db_File,
            WHERE = 'FileType_Extention = "%s"' % (_search))

        if _searchResult:
            return _searchResult[0]

    return dbManager.FolderType
def GetPhotoType(DB_CONN, PATH):
    _search = None
    
    if os.path.isfile(PATH):
        _split = os.path.splitext(PATH)
        _search = (_split[len(_split)-1]).lower()
        
    if(_search != None):
        _searchResult = Database.Select(DB_CONN,
            SELECT = 'FileType_Id',
            FROM = dbManager.Db_File,
            WHERE = 'FileType = "%s" AND FileType_Extention = "%s"' % (dbManager.ImageType, _search))

        if _searchResult:
            return _searchResult[0]

    return -1
Пример #19
0
def AddFolderToDb(DB_CONN, ROOT, FOLDER_LOC, FOLDER_NAME):
    if (FOLDER_NAME not in dbManager.ScannerIgnore):
        _folderData = Database.Select(DB_CONN,
                                      SELECT='Folder_Id, Program_Id',
                                      FROM=dbManager.Db_ContFolder,
                                      WHERE='Folder_Location = "%s"' %
                                      FOLDER_LOC)

        if (_folderData):
            DebugLog("Folder %s exists at location %s" %
                     (FOLDER_NAME, FOLDER_LOC))
            return (_folderData[0], _folderData[1])

        elif (FOLDER_NAME not in dbManager.ScannerIgnore):
            _programId = None
            _programId = FindProgram(DB_CONN, ROOT, FOLDER_LOC, FOLDER_NAME)

            if (_programId != -1):
                _folderId = 0

                _folderId = Database.Insert(
                    DB_CONN,
                    INTO=dbManager.Db_ContFolder,
                    ROW=['Folder_Name', 'Folder_Location', 'Program_Id'],
                    VALUES=[FOLDER_NAME, FOLDER_LOC, _programId])

                DebugLog("Adding Folder: %s to Location: %s" %
                         (FOLDER_NAME, FOLDER_LOC))

                return (_folderId, _programId)

            elif (debug):
                raise Exception(
                    "Program not found for Folder: %s in Location: %s" %
                    (FOLDER_NAME, FOLDER_LOC))

        else:
            DebugLog("Folder %s has been ignored at location %s" %
                     (FOLDER_NAME, FOLDER_LOC))
            return None

    DebugLog("Folder %s is being skipped" % (FOLDER_NAME))
Пример #20
0
def GetVideoType(DB_CONN, PATH):
    _search = None

    _split = os.path.splitext(PATH)
    _search = (_split[len(_split) - 1]).lower()

    if (_search != None):

        DebugLog("Looking for File Extention %s" % _search)

        _searchResult = Database.Select(
            DB_CONN,
            SELECT='FileType_Id',
            FROM=dbManager.Db_File,
            WHERE='FileType = "%s" AND FileType_Extention = "%s"' %
            (dbManager.VideoType, _search))

        if _searchResult:
            return _searchResult[0]

    return -1
def RemoveMetaImgFromDb(DB_CONN, FILE_LOCATION = None, META_ID = None):
    _metaImgData = META_ID

    if(not _metaImgData):
        _metaImgData = Database.Select(DB_CONN,
            SELECT = 'ProgImg_Id',
            FROM = dbManager.Db_Img,
            WHERE = 'Img_Location = "%s"' % FILE_LOCATION)
        
        if(_metaImgData):
            _programId = _metaImgData[0]

    if(_metaImgData):
        Database.Delete(DB_CONN,
            FROM = dbManager.Db_Img,
            WHERE = 'ProgImg_Id = %i' % _metaImgData)

        DebugLog("Meta with ID: %i has been removed" % _metaImgData)
    
    else:
        DebugLog("MetaImg Removal Error, No Meta with ID %s" % str(_metaImgData))
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 ScanProgramMetaFolder(DB_CONN, PROGRAM_ID, PROGRAM_LOC, PROGRAM_WEB_LOC):
    _programMetaLoc = os.path.join(PROGRAM_LOC, dbManager.MetaFolder)
    _programWebLoc = os.path.join(PROGRAM_WEB_LOC, dbManager.MetaFolder)
    _updated = False
    
    DebugLog("Scanning %s for MetaData" % _programMetaLoc)

    if(os.path.exists(_programMetaLoc)):
        for _item in os.listdir(_programMetaLoc):
            DebugLog("Found Meta Data %s" % _item)

            _physicalLoc = os.path.join(_programMetaLoc, _item)
            _webLoc = os.path.join(_programWebLoc, _item)
            _fileType = GetPhotoType(DB_CONN, _physicalLoc)
            _imageType = GetImageType(DB_CONN, "Default")

            DebugLog("%s File type is %i" % (_item, _fileType))

            if(_fileType != -1):
                _searchResult = Database.Select(DB_CONN,
                    SELECT = 'ProgImg_Id',
                    FROM = dbManager.Db_Img,
                    WHERE = 'Img_Location = "%s"' % _webLoc)

                if(_searchResult):
                    DebugLog("%s Exists in Database" % (_item))
                    dbManager.Current_MetaImages.remove(_searchResult)
                
                else:
                    DebugLog("%s is being added to Database" % (_item))
                    Database.Insert(DB_CONN,
                        INTO = dbManager.Db_Img,
                        ROW = ['Program_Id', 'Image_Type', 'File_Type', 'Img_Location'],
                        VALUES = [PROGRAM_ID, _imageType, _fileType, _webLoc])
                    _updated = True
    else:
        DebugLog("Meta Data Folder Does not Exist for Program with ID = %i" % PROGRAM_ID)

    return _updated
def AddProgram(DB_CONN, ITEM, PHYSICAL_ROOT, WEB_ROOT):

    DebugLog("Adding Program %s to Database" % ITEM)

    _physicalLoc = os.path.join(PHYSICAL_ROOT, ITEM)
    _webLoc = os.path.join(WEB_ROOT, ITEM)

    if (ITEM not in dbManager.ScannerIgnore and os.path.isdir(_physicalLoc)):
        _programId = -1
        _searchResult = Database.Select(DB_CONN,
                                        SELECT='Program_Id',
                                        FROM=dbManager.Db_Program,
                                        WHERE='Program_Location == "%s"' %
                                        _physicalLoc)

        if (_searchResult):
            _programId = _searchResult[0]
            dbManager.Current_Program.remove(_searchResult)

        else:
            DebugLog("Adding Program at %s" % _physicalLoc)

            _programId = Database.Insert(
                DB_CONN,
                INTO=dbManager.Db_Program,
                ROW=[
                    'Program_Name', 'Program_Location', 'Program_Web_Location',
                    'Num_Content'
                ],
                VALUES=[ITEM, _physicalLoc, _webLoc, 0])

        if (_programId == -1):
            raise Exception("ERROR: No Program Id Created")

        ContentManager.FindContent(DB_CONN, PHYSICAL_ROOT, WEB_ROOT, ITEM,
                                   _programId)
Пример #25
0
def BuildDatabase(DB_CONN):
    #Checks to see if Database exists and if it does drop it
    listOfDb = dbManager.Db_Old + dbManager.Db_List

    for db in listOfDb:
        if (Database.Select(DB_CONN,
                            SELECT="name",
                            FROM="sqlite_master",
                            WHERE="type='table' AND name='%s'" % db) != None):
            Database.Drop(DB_CONN, db)

    #Building YourFlix Table and Setting Version
    Database.CreateTable(DB_CONN,
                         TABLE=dbManager.Db_YourFlix,
                         VALUES=[["Version", "REAL NOT NULL"]])

    Database.Insert(DB_CONN,
                    INTO=dbManager.Db_YourFlix,
                    VALUES=[dbManager.Db_Version])

    #Building Channel Table
    Database.CreateTable(
        DB_CONN,
        TABLE=dbManager.Db_Channel,
        VALUES=[["Channel_Id", "INTEGER PRIMARY KEY AUTOINCREMENT"],
                ["Channel_Name", "TEXT UNIQUE NOT NULL"],
                ["Channel_Desctiption", "TEXT"]])

    for _channelName in dbManager.DefaultChannels:
        Database.Insert(DB_CONN,
                        INTO=dbManager.Db_Channel,
                        ROW=["Channel_Name"],
                        VALUES=[_channelName])

    #Building Channel Program Table
    Database.CreateTable(
        DB_CONN,
        TABLE=dbManager.Db_ChProgram,
        VALUES=[["ChProg_Id", "INTEGER PRIMARY KEY AUTOINCREMENT"],
                ["Channel_Id", "INTEGER"], ["Program_Id", "INTEGER"]])

    #Building Program Table
    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"],
                ["Program_Last_Updated", "DATETIME"]])

    #Building Program Image Table
    Database.CreateTable(
        DB_CONN,
        TABLE=dbManager.Db_Img,
        VALUES=[["ProgImg_Id", "INTEGER PRIMARY KEY AUTOINCREMENT"],
                ["Program_Id", "INTEGER NOT NULL"],
                ["Image_Type", "INTEGER NOT NULL"],
                ["File_Type", "INTEGER NOT NULL"],
                ["Img_Location", "TEXT UNIQUE NOT NULL"]])

    #Building Image Type Table
    Database.CreateTable(
        DB_CONN,
        TABLE=dbManager.Db_ImageType,
        VALUES=[["ImgType_Id", "INTEGER PRIMARY KEY AUTOINCREMENT"],
                ["Image_Type", "TEXT UNIQUE NOT NULL"]])

    Database.Insert(DB_CONN,
                    INTO=dbManager.Db_ImageType,
                    ROW=["Image_Type"],
                    VALUES=['Default'])

    #Building FileType Table and Setting Set Media Types
    Database.CreateTable(
        DB_CONN,
        TABLE=dbManager.Db_File,
        VALUES=[["FileType_Id", "INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL"],
                ["FileType", "TEXT NOT NULL"],
                ["FileType_Extention", "TEXT UNIQUE NOT NULL"]])

    #adding Folder to DB
    Database.Insert(DB_CONN,
                    INTO=dbManager.Db_File,
                    ROW=["FileType", "FileType_Extention"],
                    VALUES=[dbManager.FolderType, ''])

    #Adding Supported Images
    for _type in dbManager.SupportedImg:
        fileExtention = "." + _type.lower()
        Database.Insert(DB_CONN,
                        INTO=dbManager.Db_File,
                        ROW=["FileType", "FileType_Extention"],
                        VALUES=[dbManager.ImageType, fileExtention])

    #Adding Supported Videos
    for _type in dbManager.SupportedVideos:
        fileExtention = "." + _type.lower()
        Database.Insert(DB_CONN,
                        INTO=dbManager.Db_File,
                        ROW=["FileType", "FileType_Extention"],
                        VALUES=[dbManager.VideoType, fileExtention])

    #Building Program Folder Table
    Database.CreateTable(
        DB_CONN,
        TABLE=dbManager.Db_ContFolder,
        VALUES=[["Folder_Id", "INTEGER PRIMARY KEY AUTOINCREMENT"],
                ["Folder_Name", "TEXT NOT NULL"],
                ["Folder_Location", "TEXT NOT NULL"],
                ["Program_Id", "INTEGER NOT NULL"]])

    #Building Content Table
    Database.CreateTable(
        DB_CONN,
        TABLE=dbManager.Db_Content,
        VALUES=[["Content_Id", "INTEGER PRIMARY KEY AUTOINCREMENT"],
                ["Folder_Id", "INTEGER NOT NULL"],
                ["FileType_Id", "INTEGER NOT NULL"],
                ["Content_Name", "TEXT NOT NULL"],
                ["Content_Location", "TEXT UNIQUE NOT NULL"]])
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))
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