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); }
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; }