|
MythTV
0.26-pre
|
00001 // Qt 00002 #include <QSqlError> 00003 00004 // myth 00005 #include <mythcontext.h> 00006 #include <mythdb.h> 00007 00008 // mythbrowser 00009 #include "browserdbutil.h" 00010 #include "bookmarkmanager.h" 00011 00012 const QString currentDatabaseVersion = "1002"; 00013 00014 static bool UpdateDBVersionNumber(const QString &newnumber) 00015 { 00016 00017 if (!gCoreContext->SaveSettingOnHost("BrowserDBSchemaVer", newnumber, NULL)) 00018 { 00019 LOG(VB_GENERAL, LOG_ERR, 00020 QString("DB Error (Setting new DB version number): %1\n") 00021 .arg(newnumber)); 00022 00023 return false; 00024 } 00025 00026 return true; 00027 } 00028 00029 static bool performActualUpdate(const QString updates[], QString version, 00030 QString &dbver) 00031 { 00032 MSqlQuery query(MSqlQuery::InitCon()); 00033 00034 LOG(VB_GENERAL, LOG_NOTICE, 00035 "Upgrading to MythBrowser schema version " + version); 00036 00037 int counter = 0; 00038 QString thequery = updates[counter]; 00039 00040 while (thequery != "") 00041 { 00042 if (!query.exec(thequery)) 00043 { 00044 QString msg = 00045 QString("DB Error (Performing database upgrade): \n" 00046 "Query was: %1 \nError was: %2 \nnew version: %3") 00047 .arg(thequery) 00048 .arg(MythDB::DBErrorMessage(query.lastError())) 00049 .arg(version); 00050 LOG(VB_GENERAL, LOG_ERR, msg); 00051 return false; 00052 } 00053 00054 counter++; 00055 thequery = updates[counter]; 00056 } 00057 00058 if (!UpdateDBVersionNumber(version)) 00059 return false; 00060 00061 dbver = version; 00062 return true; 00063 } 00064 00065 bool UpgradeBrowserDatabaseSchema(void) 00066 { 00067 QString dbver = gCoreContext->GetSetting("BrowserDBSchemaVer"); 00068 00069 if (dbver == currentDatabaseVersion) 00070 return true; 00071 00072 if (dbver == "") 00073 { 00074 LOG(VB_GENERAL, LOG_NOTICE, 00075 "Inserting MythBrowser initial database information."); 00076 00077 const QString updates[] = 00078 { 00079 "DROP TABLE IF EXISTS websites;", 00080 "CREATE TABLE websites (" 00081 "id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, " 00082 "category VARCHAR(100) NOT NULL, " 00083 "name VARCHAR(100) NOT NULL, " 00084 "url VARCHAR(255) NOT NULL);", 00085 "" 00086 }; 00087 if (!performActualUpdate(updates, "1000", dbver)) 00088 return false; 00089 } 00090 00091 if (dbver == "1000") 00092 { 00093 const QString updates[] = 00094 { 00095 "UPDATE settings SET data = 'Internal' WHERE data LIKE '%mythbrowser' AND value = 'WebBrowserCommand';", 00096 "" 00097 }; 00098 if (!performActualUpdate(updates, "1001", dbver)) 00099 return false; 00100 } 00101 00102 if (dbver == "1001") 00103 { 00104 const QString updates[] = 00105 { 00106 "DELETE FROM keybindings " 00107 " WHERE action = 'DELETETAB' AND context = 'Browser';", 00108 "" 00109 }; 00110 if (!performActualUpdate(updates, "1002", dbver)) 00111 return false; 00112 } 00113 00114 return true; 00115 } 00116 00117 bool FindInDB(const QString &category, const QString& name) 00118 { 00119 MSqlQuery query(MSqlQuery::InitCon()); 00120 query.prepare("SELECT name FROM websites " 00121 "WHERE category = :CATEGORY AND name = :NAME ;"); 00122 query.bindValue(":CATEGORY", category); 00123 query.bindValue(":NAME", name); 00124 if (!query.exec()) 00125 { 00126 MythDB::DBError("mythbrowser: find in db", query); 00127 return false; 00128 } 00129 00130 return (query.size() > 0); 00131 } 00132 00133 bool InsertInDB(Bookmark* site) 00134 { 00135 if (!site) 00136 return false; 00137 00138 return InsertInDB(site->category, site->name, site->url); 00139 } 00140 00141 bool InsertInDB(const QString &category, 00142 const QString &name, const QString &url) 00143 { 00144 if (category.isEmpty() || name.isEmpty() || url.isEmpty()) 00145 return false; 00146 00147 if (FindInDB(category, name)) 00148 return false; 00149 00150 QString _url = url.trimmed(); 00151 if (!_url.startsWith("http://") && !_url.startsWith("https://") && 00152 !_url.startsWith("file:/")) 00153 _url.prepend("http://"); 00154 00155 _url.replace("&","&"); 00156 00157 MSqlQuery query(MSqlQuery::InitCon()); 00158 query.prepare("INSERT INTO websites (category, name, url) " 00159 "VALUES(:CATEGORY, :NAME, :URL);"); 00160 query.bindValue(":CATEGORY", category); 00161 query.bindValue(":NAME", name); 00162 query.bindValue(":URL", _url); 00163 if (!query.exec()) 00164 { 00165 MythDB::DBError("mythbrowser: inserting in DB", query); 00166 return false; 00167 } 00168 00169 return (query.numRowsAffected() > 0); 00170 } 00171 00172 bool RemoveFromDB(Bookmark *site) 00173 { 00174 if (!site) 00175 return false; 00176 00177 return RemoveFromDB(site->category, site->name); 00178 } 00179 00180 bool RemoveFromDB(const QString &category, const QString &name) 00181 { 00182 MSqlQuery query(MSqlQuery::InitCon()); 00183 query.prepare("DELETE FROM websites " 00184 "WHERE category = :CATEGORY AND name = :NAME;"); 00185 query.bindValue(":CATEGORY", category); 00186 query.bindValue(":NAME", name); 00187 if (!query.exec()) 00188 { 00189 MythDB::DBError("mythbrowser: delete from db", query); 00190 return false; 00191 } 00192 00193 return (query.numRowsAffected() > 0); 00194 } 00195 00196 int GetCategoryList(QStringList &list) 00197 { 00198 MSqlQuery query(MSqlQuery::InitCon()); 00199 query.prepare("SELECT DISTINCT category FROM websites " 00200 "ORDER BY category;"); 00201 00202 if (!query.exec()) 00203 { 00204 MythDB::DBError("mythbrowser: get category list", query); 00205 return false; 00206 } 00207 else 00208 { 00209 while (query.next()) 00210 { 00211 list << query.value(0).toString(); 00212 } 00213 } 00214 00215 return list.size(); 00216 } 00217 00218 int GetSiteList(QList<Bookmark*> &siteList) 00219 { 00220 while (!siteList.isEmpty()) 00221 delete siteList.takeFirst(); 00222 00223 MSqlQuery query(MSqlQuery::InitCon()); 00224 00225 if (!query.exec("SELECT category, name, url FROM websites " 00226 "ORDER BY category, name")) 00227 { 00228 LOG(VB_GENERAL, LOG_ERR, "BookmarkManager: Error in loading from DB"); 00229 } 00230 else 00231 { 00232 while (query.next()) 00233 { 00234 Bookmark *site = new Bookmark(); 00235 site->category = query.value(0).toString(); 00236 site->name = query.value(1).toString(); 00237 site->url = query.value(2).toString(); 00238 site->selected = false; 00239 siteList.append(site); 00240 } 00241 } 00242 00243 return siteList.size(); 00244 }
1.7.6.1