diff --git a/language/English/strings.xml b/language/English/strings.xml index c308219a06fd1..ea0eb21055822 100644 --- a/language/English/strings.xml +++ b/language/English/strings.xml @@ -701,7 +701,15 @@ Continuous repeat delay (ms) Maximum number of clients Internet access - + Connected to MySQL database successfully + Could not connect to MySQL database + Database + SQLite + MySQL + + Test Database Settings + - Name + Invalid port number entered Valid port range is 1-65535 Valid port range is 1024-65535 diff --git a/xbmc/dbwrappers/mysqldataset.cpp b/xbmc/dbwrappers/mysqldataset.cpp index 9364c0d24af00..12dc6f55543f2 100644 --- a/xbmc/dbwrappers/mysqldataset.cpp +++ b/xbmc/dbwrappers/mysqldataset.cpp @@ -27,6 +27,7 @@ #include "utils/log.h" #include "system.h" // for GetLastError() #include "mysql/errmsg.h" +#include "settings/GUISettings.h" #ifdef _WIN32 #pragma comment(lib, "mysqlclient.lib") #endif @@ -155,6 +156,8 @@ int MysqlDatabase::connect(bool create_new) { CLog::Log(LOGERROR, "Unable to open database: %s [%d](%s)", db.c_str(), mysql_errno(conn), mysql_error(conn)); + + g_guiSettings.SetInt("videolibrary.type", 0); //we cant connect, go back to sqlite return DB_CONNECTION_NONE; } catch(...) @@ -162,6 +165,7 @@ int MysqlDatabase::connect(bool create_new) { CLog::Log(LOGERROR, "Unable to open database: %s (%u)", db.c_str(), GetLastError()); } + g_guiSettings.SetInt("videolibrary.type", 0); //we cant connect, go back to sqlite return DB_CONNECTION_NONE; } diff --git a/xbmc/music/MusicDatabase.cpp b/xbmc/music/MusicDatabase.cpp index 298d919ef9812..efeb4d2814d3d 100644 --- a/xbmc/music/MusicDatabase.cpp +++ b/xbmc/music/MusicDatabase.cpp @@ -87,7 +87,20 @@ CMusicDatabase::~CMusicDatabase(void) bool CMusicDatabase::Open() { - return CDatabase::Open(g_advancedSettings.m_databaseMusic); + g_settings.m_databaseMusic.type = (CStdString*)g_guiSettings.GetInt("musiclibrary.type") > 0 ? "mysql" : "sqlite3"; + g_settings.m_databaseMusic.host = g_guiSettings.GetString("musiclibrary.host"); + g_settings.m_databaseMusic.port = g_guiSettings.GetString("musiclibrary.port"); + g_settings.m_databaseMusic.user = g_guiSettings.GetString("musiclibrary.user"); + g_settings.m_databaseMusic.pass = g_guiSettings.GetString("musiclibrary.pass"); + g_settings.m_databaseMusic.name = g_guiSettings.GetString("musiclibrary.name"); + + if (CDatabase::Open(g_settings.m_databaseMusic)) + { + CommitTransaction(); + return true; + } + g_guiSettings.SetInt("musiclibrary.type", 0); + return false; } bool CMusicDatabase::CreateTables() diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp index edad0b67fcf55..dfd5b3ebadcf5 100644 --- a/xbmc/settings/AdvancedSettings.cpp +++ b/xbmc/settings/AdvancedSettings.cpp @@ -872,28 +872,6 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file) XMLUtils::GetBoolean(pRootElement, "measurerefreshrate", m_measureRefreshrate); - TiXmlElement* pDatabase = pRootElement->FirstChildElement("videodatabase"); - if (pDatabase) - { - CLog::Log(LOGWARNING, "VIDEO database configuration is experimental."); - XMLUtils::GetString(pDatabase, "type", m_databaseVideo.type); - XMLUtils::GetString(pDatabase, "host", m_databaseVideo.host); - XMLUtils::GetString(pDatabase, "port", m_databaseVideo.port); - XMLUtils::GetString(pDatabase, "user", m_databaseVideo.user); - XMLUtils::GetString(pDatabase, "pass", m_databaseVideo.pass); - XMLUtils::GetString(pDatabase, "name", m_databaseVideo.name); - } - - pDatabase = pRootElement->FirstChildElement("musicdatabase"); - if (pDatabase) - { - XMLUtils::GetString(pDatabase, "type", m_databaseMusic.type); - XMLUtils::GetString(pDatabase, "host", m_databaseMusic.host); - XMLUtils::GetString(pDatabase, "port", m_databaseMusic.port); - XMLUtils::GetString(pDatabase, "user", m_databaseMusic.user); - XMLUtils::GetString(pDatabase, "pass", m_databaseMusic.pass); - XMLUtils::GetString(pDatabase, "name", m_databaseMusic.name); - } pElement = pRootElement->FirstChildElement("enablemultimediakeys"); if (pElement) diff --git a/xbmc/settings/AdvancedSettings.h b/xbmc/settings/AdvancedSettings.h index c3efc9a555574..e510e86a13534 100644 --- a/xbmc/settings/AdvancedSettings.h +++ b/xbmc/settings/AdvancedSettings.h @@ -26,16 +26,6 @@ class TiXmlElement; -struct DatabaseSettings -{ - CStdString type; - CStdString host; - CStdString port; - CStdString user; - CStdString pass; - CStdString name; -}; - struct TVShowRegexp { bool byDate; @@ -283,9 +273,6 @@ class CAdvancedSettings bool m_measureRefreshrate; //when true the videoreferenceclock will measure the refreshrate when direct3d is used //otherwise it will use the windows refreshrate - DatabaseSettings m_databaseMusic; // advanced music database setup - DatabaseSettings m_databaseVideo; // advanced video database setup - bool m_guiVisualizeDirtyRegions; int m_guiAlgorithmDirtyRegions; int m_guiDirtyRegionNoFlipTimeout; diff --git a/xbmc/settings/GUISettings.cpp b/xbmc/settings/GUISettings.cpp index ad05c689e4bad..94ee14b89859d 100644 --- a/xbmc/settings/GUISettings.cpp +++ b/xbmc/settings/GUISettings.cpp @@ -272,9 +272,23 @@ void CGUISettings::Initialize() AddBool(ml,"musiclibrary.downloadinfo", 20192, false); AddDefaultAddon(ml, "musiclibrary.albumsscraper", 20193, "metadata.albums.allmusic.com", ADDON_SCRAPER_ALBUMS); AddDefaultAddon(ml, "musiclibrary.artistsscraper", 20194, "metadata.artists.allmusic.com", ADDON_SCRAPER_ARTISTS); + + AddSeparator(ml,"musiclibrary.sep2"); + map musicDatabase; + musicDatabase.insert(make_pair(802,0)); + musicDatabase.insert(make_pair(803,1)); + + AddInt(ml, "musiclibrary.type", 801, 1, musicDatabase, SPIN_CONTROL_TEXT); + + AddString(ml,"musiclibrary.host", 706, "127.0.0.1", EDIT_CONTROL_INPUT); + AddString(ml,"musiclibrary.port", 730, "3306", EDIT_CONTROL_NUMBER_INPUT); + AddString(ml,"musiclibrary.user", 1048, "xbmc", EDIT_CONTROL_INPUT); + AddString(ml,"musiclibrary.pass", 733, "xbmc", EDIT_CONTROL_HIDDEN_INPUT); + AddString(ml,"musiclibrary.name", 806, "xbmc_music", EDIT_CONTROL_INPUT); + AddString(ml, "musiclibrary.test", 805, "", BUTTON_CONTROL_STANDARD); + AddSeparator(ml,"musiclibrary.sep3"); AddBool(ml, "musiclibrary.updateonstartup", 22000, false); AddBool(ml, "musiclibrary.backgroundupdate", 22001, false); - AddSeparator(ml,"musiclibrary.sep2"); AddString(ml, "musiclibrary.cleanup", 334, "", BUTTON_CONTROL_STANDARD); AddString(ml, "musiclibrary.export", 20196, "", BUTTON_CONTROL_STANDARD); AddString(ml, "musiclibrary.import", 20197, "", BUTTON_CONTROL_STANDARD); @@ -557,9 +571,23 @@ void CGUISettings::Initialize() AddBool(vdl, "videolibrary.actorthumbs", 20402, true); AddInt(vdl, "videolibrary.flattentvshows", 20412, 1, 0, 1, 2, SPIN_CONTROL_TEXT); AddBool(NULL, "videolibrary.flattenmoviesets", 22002, false); + + AddSeparator(vdl, "videolibrary.sep3"); + map videoDatabase; + videoDatabase.insert(make_pair(802,0)); + videoDatabase.insert(make_pair(803,1)); + + AddInt(vdl, "videolibrary.type", 801, 1, videoDatabase, SPIN_CONTROL_TEXT); + + AddString(vdl,"videolibrary.host", 706, "127.0.0.1", EDIT_CONTROL_INPUT); + AddString(vdl,"videolibrary.port", 730, "3306", EDIT_CONTROL_NUMBER_INPUT); + AddString(vdl,"videolibrary.user", 1048, "xbmc", EDIT_CONTROL_INPUT); + AddString(vdl,"videolibrary.pass", 733, "xbmc", EDIT_CONTROL_HIDDEN_INPUT); + AddString(vdl,"videolibrary.name", 806, "xbmc_video", EDIT_CONTROL_INPUT); + AddString(vdl, "videolibrary.test", 805, "", BUTTON_CONTROL_STANDARD); + AddSeparator(vdl, "videolibrary.sep4"); AddBool(vdl, "videolibrary.updateonstartup", 22000, false); AddBool(vdl, "videolibrary.backgroundupdate", 22001, false); - AddSeparator(vdl, "videolibrary.sep3"); AddString(vdl, "videolibrary.cleanup", 334, "", BUTTON_CONTROL_STANDARD); AddString(vdl, "videolibrary.export", 647, "", BUTTON_CONTROL_STANDARD); AddString(vdl, "videolibrary.import", 648, "", BUTTON_CONTROL_STANDARD); diff --git a/xbmc/settings/GUIWindowSettingsCategory.cpp b/xbmc/settings/GUIWindowSettingsCategory.cpp index d11a968184a37..8bf73d49579d6 100644 --- a/xbmc/settings/GUIWindowSettingsCategory.cpp +++ b/xbmc/settings/GUIWindowSettingsCategory.cpp @@ -1036,6 +1036,18 @@ void CGUIWindowSettingsCategory::UpdateSettings() pControl->SetEnabled(enabled); } } + else if (strSetting.Equals("videolibrary.host") || strSetting.Equals("videolibrary.port") || strSetting.Equals("videolibrary.test") || + strSetting.Equals("videolibrary.user") || strSetting.Equals("videolibrary.pass") || strSetting.Equals("videolibrary.name")) + { + CGUIControl *pControl = (CGUIControl *)GetControl(pSettingControl->GetID()); + if (pControl) pControl->SetVisible(g_guiSettings.GetInt("videolibrary.type") > 0); + } + else if (strSetting.Equals("musiclibrary.host") || strSetting.Equals("musiclibrary.port") || strSetting.Equals("musiclibrary.test") || + strSetting.Equals("musiclibrary.user") || strSetting.Equals("musiclibrary.pass") || strSetting.Equals("musiclibrary.name")) + { + CGUIControl *pControl = (CGUIControl *)GetControl(pSettingControl->GetID()); + if (pControl) pControl->SetVisible(g_guiSettings.GetInt("musiclibrary.type") > 0); + } else if (strSetting.Equals("weather.scriptsettings")) { AddonPtr addon; @@ -1124,7 +1136,42 @@ void CGUIWindowSettingsCategory::OnClick(CBaseSettingControl *pSettingControl) else return; } - + else if (strSetting.Equals("videolibrary.test")) + { + int msgLine = 799; + CVideoDatabase videoDatabase; + if (!videoDatabase.Open()) + { + msgLine = 800; + CGUISpinControlEx *pControl = (CGUISpinControlEx *)GetControl(GetSetting("videolibrary.type")->GetID()); + pControl->SetValue(0); + } + CGUIDialogOK::ShowAndGetInput(805, 20022, msgLine, 20022); + } + else if (strSetting.Equals("musiclibrary.test")) + { + int msgLine = 799; + CMusicDatabase musicDatabase; + if (!musicDatabase.Open()) + { + msgLine = 800; + CGUISpinControlEx *pControl = (CGUISpinControlEx *)GetControl(GetSetting("musiclibrary.type")->GetID()); + pControl->SetValue(0); + } + CGUIDialogOK::ShowAndGetInput(805, 20022, msgLine, 20022); + } + else if (strSetting.Equals("videolibrary.type")) + { + CVideoDatabase videoDatabase; + videoDatabase.Close(); + videoDatabase.Open(); + } + else if (strSetting.Equals("musiclibrary.type")) + { + CMusicDatabase musicDatabase; + musicDatabase.Close(); + musicDatabase.Open(); + } // if OnClick() returns false, the setting hasn't changed or doesn't // require immediate update if (!pSettingControl->OnClick()) diff --git a/xbmc/settings/Settings.h b/xbmc/settings/Settings.h index c64c861c24643..cc69b7439b77e 100644 --- a/xbmc/settings/Settings.h +++ b/xbmc/settings/Settings.h @@ -74,6 +74,16 @@ like special://masterprofile/ */ #define PROFILES_FILE "special://masterprofile/profiles.xml" +struct DatabaseSettings +{ + CStdString type; + CStdString host; + CStdString port; + CStdString user; + CStdString pass; + CStdString name; +}; + class CSkinString { public: @@ -127,6 +137,9 @@ class CSettings int TranslateSkinBool(const CStdString &setting); bool GetSkinBool(int setting) const; void SetSkinBool(int setting, bool set); + + DatabaseSettings m_databaseMusic; // music database setup + DatabaseSettings m_databaseVideo; // video database setup /*! \brief Retreive the watched mode for the given content type \param content Current content type diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp index d2caba2b6147c..5ad4aed33202e 100644 --- a/xbmc/video/VideoDatabase.cpp +++ b/xbmc/video/VideoDatabase.cpp @@ -70,7 +70,20 @@ CVideoDatabase::~CVideoDatabase(void) //******************************************************************************************************************************** bool CVideoDatabase::Open() { - return CDatabase::Open(g_advancedSettings.m_databaseVideo); + g_settings.m_databaseVideo.type = (CStdString*)g_guiSettings.GetInt("videolibrary.type") > 0 ? "mysql" : "sqlite3"; + g_settings.m_databaseVideo.host = g_guiSettings.GetString("videolibrary.host"); + g_settings.m_databaseVideo.port = g_guiSettings.GetString("videolibrary.port"); + g_settings.m_databaseVideo.user = g_guiSettings.GetString("videolibrary.user"); + g_settings.m_databaseVideo.pass = g_guiSettings.GetString("videolibrary.pass"); + g_settings.m_databaseVideo.name = g_guiSettings.GetString("videolibrary.name"); + + if (CDatabase::Open(g_settings.m_databaseVideo)) + { + CommitTransaction(); + return true; + } + g_guiSettings.SetInt("videolibrary.type", 0); + return false; } bool CVideoDatabase::CreateTables() diff --git a/xbmc/windows/GUIWindowHome.cpp b/xbmc/windows/GUIWindowHome.cpp index 72fb75fd001c8..f4d75487e0d86 100644 --- a/xbmc/windows/GUIWindowHome.cpp +++ b/xbmc/windows/GUIWindowHome.cpp @@ -25,7 +25,7 @@ #include "utils/RecentlyAddedJob.h" #include "interfaces/AnnouncementManager.h" #include "utils/log.h" -#include "settings/AdvancedSettings.h" +#include "settings/Settings.h" #include "utils/Variant.h" using namespace ANNOUNCEMENT; @@ -48,8 +48,8 @@ void CGUIWindowHome::OnInitWindow() { // for shared databases (ie mysql) always force an update on return to home // this is a temporary solution until remote announcements can be delivered - if ( g_advancedSettings.m_databaseVideo.type.Equals("mysql") || - g_advancedSettings.m_databaseMusic.type.Equals("mysql") ) + if ( g_settings.m_databaseVideo.type.Equals("mysql") || + g_settings.m_databaseMusic.type.Equals("mysql") ) m_updateRA = (Audio | Video | Totals); AddRecentlyAddedJobs( m_updateRA );