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