void CRapiFileDialog::UpdateDialog(void)
{
    m_pathname.MakeAbsolute();
    m_currentpaths.clear();
    m_currentsizes.clear();
    m_currentdates.clear();

    GetFileList()->ClearAll();

    if(m_mode==REPORTMODE)
    {
        GetFileList()->SetWindowStyle(wxLC_REPORT|wxLC_SINGLE_SEL);
        GetFileList()->InsertColumn(0,wxT("Name"),wxLIST_FORMAT_LEFT,160);
        GetFileList()->InsertColumn(1,wxT("Size"));
        GetFileList()->InsertColumn(2,wxT("Date"));
    }
    else if(m_mode==ICONMODE)
    {
        GetFileList()->SetWindowStyle(wxLC_ICON|wxLC_SINGLE_SEL);
    }
    else if(m_mode==SMALLICONMODE)
    {
        GetFileList()->SetWindowStyle(wxLC_SMALL_ICON|wxLC_SINGLE_SEL);
    }
    else if(m_mode==LISTMODE)
    {
        GetFileList()->SetWindowStyle(wxLC_LIST|wxLC_SINGLE_SEL);
    }

    // Ensure we have a file type selection
    if(GetFilesOfType()->GetCount()==0)
    {
        AddFileType(wxT("All Files (*.*)"),wxT("*"));
    }
    if(GetFilesOfType()->GetSelection()==wxNOT_FOUND)
    {
        GetFilesOfType()->SetSelection(0);
    }
    
    // Get item names
    DWORD dwFound;
    LPCE_FIND_DATA pFoundDataArray=NULL;
    if(!g_RAPI.CeFindAllFiles(m_pathname.GetPath(true)+wxT("*"),FAF_ATTRIBUTES|FAF_SIZE_HIGH|FAF_SIZE_LOW|FAF_NAME|FAF_LASTWRITE_TIME,&dwFound,&pFoundDataArray))
    {
        GetFileList()->Enable(false);
    }
    else
    {
        GetFileList()->Enable(true);
    }

    if(pFoundDataArray)
    {
        wxString strMatch=m_filetypes[GetFilesOfType()->GetSelection()];

        // Fill in file list
        for(DWORD dw=0;dw<dwFound;dw++)
        {
            if(pFoundDataArray[dw].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                // It's a folder
                wxFileName dname(m_pathname.GetPath(true)+pFoundDataArray[dw].cFileName,wxT(""));
                m_currentpaths.push_back(dname.GetPath(true));
                m_currentsizes.push_back(0);
                m_currentdates.push_back(pFoundDataArray[dw].ftLastWriteTime);
            }
            else
            {
                // It's a file
                wxFileName dname(m_pathname.GetPath(true)+pFoundDataArray[dw].cFileName);

                if(dname.GetFullName().Lower().Matches(strMatch.Lower()))
                {
                    m_currentpaths.push_back(dname.GetFullPath());
                    m_currentsizes.push_back(((wxUint64)pFoundDataArray[dw].nFileSizeLow)|(((wxUint64)pFoundDataArray[dw].nFileSizeHigh)<<32));
                    m_currentdates.push_back(pFoundDataArray[dw].ftLastWriteTime);
                }
            }
        }
        g_RAPI.CeRapiFreeBuffer(pFoundDataArray);
    }

    wxImageList *pilSmall=new wxImageList(16,16,true,1);
    pilSmall->Add(RapiFileDialogBitmapsFunc(0),wxColour(255,0,255));
    pilSmall->Add(RapiFileDialogBitmapsFunc(1),wxColour(255,0,255));
    pilSmall->Add(RapiFileDialogBitmapsFunc(2),wxColour(255,0,255));

    wxImageList *pilBig=new wxImageList(32,32,true,1);
    pilBig->Add(RapiFileDialogBitmapsLgFunc(0),wxColour(255,0,255));
    pilBig->Add(RapiFileDialogBitmapsLgFunc(1),wxColour(255,0,255));
    pilBig->Add(RapiFileDialogBitmapsLgFunc(2),wxColour(255,0,255));

    size_t i=0,count=m_currentpaths.size();
    for(i=0;i<count;i++)
    {
        if(m_currentpaths[i].Last()==wxT('\\'))
        {
            GetFileList()->InsertItem((long)i,wxFileName(m_currentpaths[i],wxT("")).GetDirs().Last(),0);
            GetFileList()->SetItemImage((long)i,0,1);
            if(m_mode==REPORTMODE)
            {
//              GetFileList()->SetItem((long)i,1,(const TCHAR *)GetSizeString(m_currentsizes[i]));
                GetFileList()->SetItem((long)i,2,(const TCHAR *)GetDateString(m_currentdates[i]));
            }

        }
        else
        {
            GetFileList()->InsertItem((long)i,wxFileName(m_currentpaths[i]).GetFullName(),2);
            if(m_mode==REPORTMODE)
            {
                GetFileList()->SetItem((long)i,1,(const TCHAR *)GetSizeString(m_currentsizes[i]));
                GetFileList()->SetItem((long)i,2,(const TCHAR *)GetDateString(m_currentdates[i]));
            }
        }

        if(m_currentpaths[i].Last()==m_pathname.GetFullPath())
        {
            GetFileList()->SetItemState((long)i,wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED,wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED);
        }
        GetFileList()->SetItemData((long)i,(long)i);
    }

    GetFileList()->AssignImageList(pilSmall,wxIMAGE_LIST_SMALL);
    GetFileList()->AssignImageList(pilBig,wxIMAGE_LIST_NORMAL);

    // Fill in Look-In Choice Box
    GetLookIn()->Clear();
    count=m_pathname.GetDirCount();
    
    wxString dir=wxT("\\");
    GetLookIn()->Append(dir);        

    for(i=0;i<count;i++)
    {
        dir=wxT("\\");
        for(size_t j=0;j<=i;j++)
        {
            dir+=m_pathname.GetDirs()[j];
            if(j!=i)
            {
                dir+=wxT("\\");
            }
        }
        GetLookIn()->Append(dir);
    }
    GetLookIn()->SetSelection((int)count);

    GetUp()->Enable(count>0);
    GetBack()->Enable(m_history.size()>1);
    GetOk()->Enable(m_pathname.GetFullPath().Last()!=wxT('\\'));

    GetFileList()->SortItems(ListCompareFunction,(long)this);
}
Beispiel #2
0
bool doUpgradeVideoDatabaseSchema(void)
{
    QString dbver = gCoreContext->GetSetting("mythvideo.DBSchemaVer");
    if (dbver == finalVideoDatabaseVersion)
    {
        return true;
    }

    QString olddbver = gCoreContext->GetSetting("VideoDBSchemaVer");
    QString dvddbver = gCoreContext->GetSetting("DVDDBSchemaVer");
    if (dbver.isEmpty() && olddbver.isEmpty() && dvddbver.isEmpty())
    {
        if (!InitializeVideoSchema())
            return false;
        dbver = gCoreContext->GetSetting("mythvideo.DBSchemaVer");
    }

    if (dbver.isEmpty() || dbver.toInt() <  minimumVideoDatabaseVersion.toInt())
    {
        LOG(VB_GENERAL, LOG_ERR,
            "Unrecognized video database schema version. "
            "Unable to upgrade database.");
        LOG(VB_GENERAL, LOG_ERR, QString("mythvideo.DBSchemaVer: '%1', "
            "VideoDBSchemaVer: '%2', DVDDBSchemaVer: '%3'").arg(dbver)
                .arg(olddbver).arg(dvddbver));
        return false;
    }

    if (dbver == "1016")
    {
        const QString updates[] = {
"ALTER TABLE dvdbookmark"
"  MODIFY serialid varbinary(16) NOT NULL default '',"
"  MODIFY name varbinary(32) default NULL;",
"ALTER TABLE dvdinput"
"  MODIFY v_format varbinary(16) default NULL;",
"ALTER TABLE dvdtranscode"
"  MODIFY name varbinary(128) NOT NULL,"
"  MODIFY codec varbinary(128) NOT NULL,"
"  MODIFY codec_param varbinary(128) default NULL,"
"  MODIFY tc_param varbinary(128) default NULL;",
"ALTER TABLE filemarkup"
"  MODIFY filename blob NOT NULL;",
"ALTER TABLE videocast"
"  MODIFY cast varbinary(128) NOT NULL;",
"ALTER TABLE videocategory"
"  MODIFY category varbinary(128) NOT NULL;",
"ALTER TABLE videocountry"
"  MODIFY country varbinary(128) NOT NULL;",
"ALTER TABLE videogenre"
"  MODIFY genre varbinary(128) NOT NULL;",
"ALTER TABLE videometadata"
"  MODIFY title varbinary(128) NOT NULL,"
"  MODIFY director varbinary(128) NOT NULL,"
"  MODIFY plot blob,"
"  MODIFY rating varbinary(128) NOT NULL,"
"  MODIFY inetref varbinary(255) NOT NULL,"
"  MODIFY filename blob NOT NULL,"
"  MODIFY coverfile blob NOT NULL,"
"  MODIFY playcommand varbinary(255) default NULL;",
"ALTER TABLE videotypes"
"  MODIFY extension varbinary(128) NOT NULL,"
"  MODIFY playcommand varbinary(255) NOT NULL;",
""
};

        if (!performActualUpdate(updates, "1017", dbver,
                                 MythVideoVersionName))
            return false;
    }


    if (dbver == "1017")
    {
        const QString updates[] = {
"ALTER TABLE dvdbookmark"
"  DEFAULT CHARACTER SET default,"
"  MODIFY serialid varchar(16) CHARACTER SET utf8 NOT NULL default '',"
"  MODIFY name varchar(32) CHARACTER SET utf8 default NULL;",
"ALTER TABLE dvdinput"
"  DEFAULT CHARACTER SET default,"
"  MODIFY v_format varchar(16) CHARACTER SET utf8 default NULL;",
"ALTER TABLE dvdtranscode"
"  DEFAULT CHARACTER SET default,"
"  MODIFY name varchar(128) CHARACTER SET utf8 NOT NULL,"
"  MODIFY codec varchar(128) CHARACTER SET utf8 NOT NULL,"
"  MODIFY codec_param varchar(128) CHARACTER SET utf8 default NULL,"
"  MODIFY tc_param varchar(128) CHARACTER SET utf8 default NULL;",
"ALTER TABLE filemarkup"
"  DEFAULT CHARACTER SET default,"
"  MODIFY filename text CHARACTER SET utf8 NOT NULL;",
"ALTER TABLE videocast"
"  DEFAULT CHARACTER SET default,"
"  MODIFY cast varchar(128) CHARACTER SET utf8 NOT NULL;",
"ALTER TABLE videocategory"
"  DEFAULT CHARACTER SET default,"
"  MODIFY category varchar(128) CHARACTER SET utf8 NOT NULL;",
"ALTER TABLE videocountry"
"  DEFAULT CHARACTER SET default,"
"  MODIFY country varchar(128) CHARACTER SET utf8 NOT NULL;",
"ALTER TABLE videogenre"
"  DEFAULT CHARACTER SET default,"
"  MODIFY genre varchar(128) CHARACTER SET utf8 NOT NULL;",
"ALTER TABLE videometadata"
"  DEFAULT CHARACTER SET default,"
"  MODIFY title varchar(128) CHARACTER SET utf8 NOT NULL,"
"  MODIFY director varchar(128) CHARACTER SET utf8 NOT NULL,"
"  MODIFY plot text CHARACTER SET utf8,"
"  MODIFY rating varchar(128) CHARACTER SET utf8 NOT NULL,"
"  MODIFY inetref varchar(255) CHARACTER SET utf8 NOT NULL,"
"  MODIFY filename text CHARACTER SET utf8 NOT NULL,"
"  MODIFY coverfile text CHARACTER SET utf8 NOT NULL,"
"  MODIFY playcommand varchar(255) CHARACTER SET utf8 default NULL;",
"ALTER TABLE videometadatacast"
"  DEFAULT CHARACTER SET default;",
"ALTER TABLE videometadatacountry"
"  DEFAULT CHARACTER SET default;",
"ALTER TABLE videometadatagenre"
"  DEFAULT CHARACTER SET default;",
"ALTER TABLE videotypes"
"  DEFAULT CHARACTER SET default,"
"  MODIFY extension varchar(128) CHARACTER SET utf8 NOT NULL,"
"  MODIFY playcommand varchar(255) CHARACTER SET utf8 NOT NULL;",
""
};

        if (!performActualUpdate(updates, "1018", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1018")
    {
        QStringList updates;
        updates += "DELETE FROM settings WHERE value="
                   "'MovieListCommandLine' AND data LIKE '%imdb%';";
        updates += "DELETE FROM settings WHERE value="
                   "'MovieDataCommandLine' AND data LIKE '%imdb%';";
        updates += "DELETE FROM settings WHERE value="
                   "'MoviePosterCommandLine' AND data LIKE '%imdb%';";
        if (!performActualUpdate(updates, "1019", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1019")
    {
        QStringList updates(
                "ALTER TABLE videometadata ADD `trailer` TEXT;");
        if (!performActualUpdate(updates, "1020", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1020")
    {
        LOG(VB_GENERAL, LOG_NOTICE,
            "Upgrading to MythVideo schema version 1021");

        AddFileType("mkv");
        AddFileType("mp4");
        AddFileType("m2ts");
        AddFileType("evo");
        AddFileType("divx");
        AddFileType("mov");
        AddFileType("qt");
        AddFileType("wmv");
        AddFileType("3gp");
        AddFileType("asf");
        AddFileType("ogg");
        AddFileType("ogm");
        AddFileType("flv");

        if (!UpdateDBVersionNumber(MythVideoVersionName, "1021"))
            return false;

        dbver = "1021";
    }

    if (dbver == "1021")
    {
         QStringList updates;
         updates += "ALTER TABLE videometadata ADD host text CHARACTER SET utf8 NOT NULL;";

         if (!performActualUpdate(updates, "1022", dbver,
                                  MythVideoVersionName))
            return false;
     }

    if (dbver == "1022")
    {
        QStringList updates;
        updates += "ALTER TABLE videometadata ADD `screenshot` TEXT;";
        updates += "ALTER TABLE videometadata ADD `banner` TEXT;";
        updates += "ALTER TABLE videometadata ADD `fanart` TEXT;";
        if (!performActualUpdate(updates, "1023", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1023")
    {
        QStringList updates;
        updates += "ALTER TABLE videometadata ADD `subtitle` TEXT "
                   "NOT NULL AFTER `title`;";
        updates += "ALTER TABLE videometadata ADD `season` SMALLINT "
                   "UNSIGNED NOT NULL DEFAULT '0' AFTER `length`;";
        updates += "ALTER TABLE videometadata ADD `episode` SMALLINT "
                   "UNSIGNED NOT NULL DEFAULT '0' AFTER `season`;";
        if (!performActualUpdate(updates, "1024", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1024")
    {
        QStringList updates;
        updates += "ALTER TABLE videometadata ADD watched BOOL "
                   "NOT NULL DEFAULT 0 AFTER browse;";
        if (!performActualUpdate(updates, "1025", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1025")
    {
        QStringList updates;
        updates += "ALTER TABLE videometadata ADD `insertdate` TIMESTAMP "
                   "NULL DEFAULT CURRENT_TIMESTAMP AFTER `fanart`;";
        if (!performActualUpdate(updates, "1026", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1026")
    {
        QStringList updates;
        updates += "DELETE FROM keybindings "
                   " WHERE action = 'DELETE' AND context = 'Video';";
        if (!performActualUpdate(updates, "1027", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1027")
    {
        LOG(VB_GENERAL, LOG_NOTICE,
            "Upgrading to MythVideo schema version 1028");
        LOG(VB_GENERAL, LOG_INFO,
            "Converting filenames in filemarkup table "
            "from absolute to relative paths.  This may take a long "
            "time if you have a large number of MythVideo seektables.");

        bool ok = true;
        MSqlQuery query(MSqlQuery::InitCon());
        MSqlQuery update(MSqlQuery::InitCon());

        query.prepare("SELECT DISTINCT filename FROM filemarkup;");
        update.prepare("UPDATE filemarkup SET filename = :RELPATH "
                       "    WHERE filename = :FULLPATH;");
        if (query.exec())
        {
            QString origPath;
            QString relPath;
            while (query.next())
            {
                origPath = query.value(0).toString();
                if (origPath.startsWith("dvd:"))
                    continue;

                relPath = StorageGroup::GetRelativePathname(origPath);
                if ((!relPath.isEmpty()) &&
                    (relPath != origPath))
                {
                    update.bindValue(":RELPATH", relPath);
                    update.bindValue(":FULLPATH", origPath);
                    if (!update.exec())
                    {
                        LOG(VB_GENERAL, LOG_ERR,
                            QString("ERROR converting '%1' to '%2' in "
                                    "filemarkup table.")
                                .arg(origPath).arg(relPath));
                        ok = false;
                    }
                }
            }
        }
        else
            ok = false;

        if (!ok)
            return false;

        if (!UpdateDBVersionNumber(MythVideoVersionName, "1028"))
            return false;

        dbver = "1028";
    }

    if (dbver == "1028")
    {
        QStringList updates;
        updates += "ALTER TABLE videometadata ADD `releasedate` DATE "
                   "NOT NULL AFTER `year`;";
        updates += "ALTER TABLE videometadata ADD `homepage` TEXT "
                   "NOT NULL AFTER `inetref`;";
        if (!performActualUpdate(updates, "1029", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1029")
    {
        QStringList updates;
        updates += "ALTER TABLE videometadata ADD `hash` VARCHAR(128) "
                   "NOT NULL AFTER `filename`;";
        if (!performActualUpdate(updates, "1030", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1030")
    {
        UpdateHashes();
        if (!UpdateDBVersionNumber(MythVideoVersionName, "1031"))
            return false;

        dbver = "1031";
    }

    if (dbver == "1031")
    {
        MSqlQuery query(MSqlQuery::InitCon());
        query.prepare("SHOW INDEX FROM videometadata");

        if (!query.exec())
        {
            MythDB::DBError("Unable to retrieve current indices on "
                            "videometadata.", query);
        }
        else
        {
            while (query.next())
            {
                QString index_name = query.value(2).toString();

                if ("title_2" == index_name)
                {
                    MSqlQuery update(MSqlQuery::InitCon());
                    update.prepare("ALTER TABLE videometadata "
                                   " DROP INDEX title_2");

                    if (!update.exec())
                         MythDB::DBError("Unable to drop duplicate index "
                                         "on videometadata. Ignoring.",
                                         update);
                    break;
                }
            }
        }

        if (!UpdateDBVersionNumber(MythVideoVersionName, "1032"))
            return false;

        dbver = "1032";
    }

    if (dbver == "1032")
    {
        QStringList updates;
        updates += "CREATE TEMPORARY TABLE bad_videometadatacast"
                    "       AS SELECT * FROM videometadatacast;";
        updates += "CREATE TEMPORARY TABLE bad_videometadatagenre"
                   "       AS SELECT * FROM videometadatagenre;";
        updates += "CREATE TEMPORARY TABLE bad_videometadatacountry"
                   "       AS SELECT * FROM videometadatacountry;";
        updates += "TRUNCATE TABLE videometadatacast;";
        updates += "TRUNCATE TABLE videometadatagenre;";
        updates += "TRUNCATE TABLE videometadatacountry;";
        updates += "INSERT videometadatacast SELECT idvideo,idcast"
                   "       FROM bad_videometadatacast GROUP BY idvideo,idcast;";
        updates += "INSERT videometadatagenre SELECT idvideo,idgenre"
                   "       FROM bad_videometadatagenre GROUP BY idvideo,idgenre;";
        updates += "INSERT videometadatacountry SELECT idvideo,idcountry"
                   "       FROM bad_videometadatacountry GROUP BY idvideo,idcountry;";
        updates += "DROP TEMPORARY TABLE bad_videometadatacast;";
        updates += "DROP TEMPORARY TABLE bad_videometadatagenre;";
        updates += "DROP TEMPORARY TABLE bad_videometadatacountry;";
        updates += "ALTER TABLE videometadatacast ADD UNIQUE INDEX (`idvideo`,`idcast`);";
        updates += "ALTER TABLE videometadatagenre ADD UNIQUE INDEX (`idvideo`,`idgenre`);";
        updates +="ALTER TABLE videometadatacountry ADD UNIQUE INDEX (`idvideo`,`idcountry`);";
        if (!performActualUpdate(updates, "1033", dbver,
                                 MythVideoVersionName))
            return false;

        dbver = "1033";
    }

    if (dbver == "1033")
    {
        AddFileType("ogv");
        AddFileType("BDMV");
        AddFileType("nut");
        AddFileType("mxf");
        AddFileType("m4v");
        AddFileType("rm");
        AddFileType("ts");
        AddFileType("swf");
        AddFileType("f4v");
        AddFileType("nuv");

        if (!UpdateDBVersionNumber(MythVideoVersionName, "1034"))
            return false;

        dbver = "1034";
    }

    if (dbver == "1034")
    {
        QStringList updates;
        updates += "ALTER TABLE videometadata ADD `tagline` VARCHAR (255) "
                   "AFTER `subtitle`;";

        if (!performActualUpdate(updates, "1035", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1035")
    {
        QStringList updates;
        updates += "ALTER TABLE videometadata ADD processed BOOL "
                   "NOT NULL DEFAULT 0 AFTER watched;";
        if (!performActualUpdate(updates, "1036", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1036")
    {
        QStringList updates;
        updates += "ALTER TABLE  videometadata ADD  `studio` VARCHAR( 128 ) "
                   "AFTER `director`;";
        if (!performActualUpdate(updates, "1037", dbver,
                                 MythVideoVersionName))
            return false;
    }

    if (dbver == "1037")
    {
        QStringList updates;
        updates += "DELETE FROM videotypes WHERE extension = 'VIDEO_TS';";
        updates += "DELETE FROM videotypes WHERE extension = 'BDMV';";
        if (!performActualUpdate(updates, "1038", dbver,
                                 MythVideoVersionName))
            return false;
    }

    return true;
}