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)
示例#2
0
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))
示例#3
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 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))