#include "settings/MediaSettings.h"
#include "settings/MediaSourceSettings.h"
#include "settings/SkinSettings.h"
-#include "settings/Settings.h"
#include "guilib/LocalizeStrings.h"
#include "utils/CPUInfo.h"
#include "utils/RssManager.h"
#include "utils/Weather.h"
#include "DatabaseManager.h"
-#include "settings/DisplaySettings.h"
-#include "settings/MediaSettings.h"
-#include "settings/SkinSettings.h"
-#include "view/ViewStateSettings.h"
-
#ifdef TARGET_POSIX
#include "XHandle.h"
#endif
CProfilesManager::Get().Load();
CLog::Log(LOGNOTICE, "-----------------------------------------------------------------------");
- CLog::Log(LOGNOTICE, "Starting XBMC (%s). Platform: %s", g_infoManager.GetVersion().c_str(), g_sysinfo.GetBuildTargetPlatformName().c_str());
+ CLog::Log(LOGNOTICE, "Starting XBMC (%s). Platform: %s %s %d-bit", g_infoManager.GetVersion().c_str(), g_sysinfo.GetBuildTargetCpuFamily().c_str(),
+ g_sysinfo.GetBuildTargetPlatformName().c_str(), g_sysinfo.GetXbmcBitness());
/* Expand macro before stringify */
#define STR_MACRO(x) #x
#else
buildType = "Unknown";
#endif
- CLog::Log(LOGNOTICE, "Using %s XBMC build, compiled " __DATE__ " by %s for %s %s", buildType.c_str(), compilerStr.c_str(), g_sysinfo.GetBuildTargetPlatformName().c_str(), g_sysinfo.GetBuildTargetPlatformVersion().c_str());
+ CLog::Log(LOGNOTICE, "Using %s XBMC x%d build, compiled " __DATE__ " by %s for %s %s %d-bit %s", buildType.c_str(), g_sysinfo.GetXbmcBitness(), compilerStr.c_str(),
+ g_sysinfo.GetBuildTargetCpuFamily().c_str(), g_sysinfo.GetBuildTargetPlatformName().c_str(), g_sysinfo.GetXbmcBitness(), g_sysinfo.GetBuildTargetPlatformVersion().c_str());
#if defined(TARGET_DARWIN_OSX)
- CLog::Log(LOGNOTICE, "Running on Darwin OSX %s", g_sysinfo.GetUnameVersion().c_str());
+ CLog::Log(LOGNOTICE, "Running on Darwin OSX %d-bit %s", g_sysinfo.GetKernelBitness(), g_sysinfo.GetUnameVersion().c_str());
#elif defined(TARGET_DARWIN_IOS)
- CLog::Log(LOGNOTICE, "Running on Darwin iOS%s %s", g_sysinfo.IsAppleTV2() ? " (AppleTV2)" : "", g_sysinfo.GetUnameVersion().c_str());
+ CLog::Log(LOGNOTICE, "Running on Darwin iOS %d-bit %s%s", g_sysinfo.GetKernelBitness(), g_sysinfo.IsAppleTV2() ? "(AppleTV2) " : "", g_sysinfo.GetUnameVersion().c_str());
#elif defined(TARGET_FREEBSD)
- CLog::Log(LOGNOTICE, "Running on FreeBSD %s", g_sysinfo.GetUnameVersion().c_str());
+ CLog::Log(LOGNOTICE, "Running on FreeBSD %d-bit %s", g_sysinfo.GetKernelBitness(), g_sysinfo.GetUnameVersion().c_str());
#elif defined(TARGET_POSIX)
- CLog::Log(LOGNOTICE, "Running on Linux (%s, %s)", g_sysinfo.GetLinuxDistro().c_str(), g_sysinfo.GetUnameVersion().c_str());
+ CLog::Log(LOGNOTICE, "Running on Linux %d-bit (%s, %s)", g_sysinfo.GetKernelBitness(), g_sysinfo.GetLinuxDistro().c_str(), g_sysinfo.GetUnameVersion().c_str());
#elif defined(TARGET_WINDOWS)
CLog::Log(LOGNOTICE, "Running on %s", g_sysinfo.GetKernelVersion().c_str());
#endif
- CLog::Log(LOGNOTICE, "Host CPU: %s", g_cpuInfo.getCPUModel().c_str());
+ CLog::Log(LOGNOTICE, "Host CPU: %s, %d core%s available", g_cpuInfo.getCPUModel().c_str(), g_cpuInfo.getCPUCount(), (g_cpuInfo.getCPUCount()==1) ? "" : "s");
#if defined(TARGET_WINDOWS)
CLog::Log(LOGNOTICE, "%s", CWIN32Util::GetResInfoString().c_str());
CLog::Log(LOGNOTICE, "Running with %s rights", (CWIN32Util::IsCurrentUserLocalAdministrator() == TRUE) ? "administrator" : "restricted");
CLog::Log(LOGINFO, "load language info file: %s", strLangInfoPath.c_str());
g_langInfo.Load(strLangInfoPath);
+ g_langInfo.SetAudioLanguage(CSettings::Get().GetString("locale.audiolanguage"));
+ g_langInfo.SetSubtitleLanguage(CSettings::Get().GetString("locale.subtitlelanguage"));
CStdString strLanguagePath = "special://xbmc/language/";
if (settingId == "lookandfeel.skin" ||
settingId == "lookandfeel.font" ||
settingId == "lookandfeel.skincolors")
- ReloadSkin();
+ CApplicationMessenger::Get().ExecBuiltIn("ReloadSkin");
else if (settingId == "lookandfeel.skintheme")
{
// also set the default color theme
if (!StringUtils::EqualsNoCase(colorTheme, CSettings::Get().GetString("lookandfeel.skincolors")))
CSettings::Get().SetString("lookandfeel.skincolors", colorTheme);
else
- ReloadSkin();
+ CApplicationMessenger::Get().ExecBuiltIn("ReloadSkin");
}
else if (settingId == "lookandfeel.skinzoom")
g_windowManager.SendMessage(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_WINDOW_RESIZE);
- else if (StringUtils::StartsWith(settingId, "audiooutput."))
+ else if (StringUtils::StartsWithNoCase(settingId, "audiooutput."))
{
if (settingId == "audiooutput.guisoundmode")
{
if (!skin)
{
CLog::Log(LOGERROR, "failed to load requested skin, fallback to \"%s\" skin", defaultSkin.c_str());
- CSettings::Get().SetString("lookandfeel.skin", defaultSkin);
+ CSettings::Get().GetSetting("lookandfeel.skin")->Reset();
return ;
}
if (strcmpi(skin->ID().c_str(), defaultSkin.c_str()) != 0)
{
CLog::Log(LOGERROR, "home.xml doesn't exist in skin: %s, fallback to \"%s\" skin", skin->ID().c_str(), defaultSkin.c_str());
- CSettings::Get().SetString("lookandfeel.skin", defaultSkin);
- LoadSkin(defaultSkin);
+ CSettings::Get().GetSetting("lookandfeel.skin")->Reset();
CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(24102), g_localizeStrings.Get(24103));
return ;
}
m_idleTimer.StartZero();
bool processKey = AlwaysProcess(action);
- if (StringUtils::StartsWith(action.GetName(),"CECToggleState") || StringUtils::StartsWith(action.GetName(),"CECStandby"))
+ if (StringUtils::StartsWithNoCase(action.GetName(),"CECToggleState") || StringUtils::StartsWithNoCase(action.GetName(),"CECStandby"))
{
bool ret = true;
CLog::Log(LOGDEBUG, "%s: action %s [%d], toggling state of playing device", __FUNCTION__, action.GetName().c_str(), action.GetID());
// do not wake up the screensaver right after switching off the playing device
- if (StringUtils::StartsWith(action.GetName(),"CECToggleState"))
+ if (StringUtils::StartsWithNoCase(action.GetName(),"CECToggleState"))
ret = CApplicationMessenger::Get().CECToggleState();
else
ret = CApplicationMessenger::Get().CECStandby();
SaveFileState(true);
- // cancel any jobs from the jobmanager
- CJobManager::GetInstance().CancelJobs();
-
g_alarmClock.StopThread();
if( m_bSystemScreenSaverEnable )
m_ExitCode = exitCode;
CLog::Log(LOGNOTICE, "stop all");
+ // cancel any jobs from the jobmanager
+ CJobManager::GetInstance().CancelJobs();
+
// stop scanning before we kill the network and so on
if (m_musicInfoScanner->IsScanning())
m_musicInfoScanner->Stop();
#include "powermanagement/PowerManager.h"
#include "utils/StringUtils.h"
#include "utils/XMLUtils.h"
+#if defined(TARGET_ANDROID)
+#include "android/jni/Build.h"
+#endif
/* Target identification */
#if defined(TARGET_DARWIN)
return "Serial: " + g_cpuInfo.getCPUSerial();
}
+CStdString CSysInfo::GetManufacturer()
+{
+ CStdString manufacturer = "";
+#if defined(TARGET_ANDROID)
+ manufacturer = CJNIBuild::MANUFACTURER;
+#endif
+ return manufacturer;
+}
+
+CStdString CSysInfo::GetModel()
+{
+ CStdString model = "";
+#if defined(TARGET_ANDROID)
+ model = CJNIBuild::MODEL;
+#endif
+ return model;
+}
+
+CStdString CSysInfo::GetProduct()
+{
+ CStdString product = "";
+#if defined(TARGET_ANDROID)
+ product = CJNIBuild::PRODUCT;
+#endif
+ return product;
+}
+
bool CSysInfo::IsAeroDisabled()
{
#ifdef TARGET_WINDOWS
- if (IsWindowsVersionAtLeast(CSysInfo::WindowsVersionVista))
- {
- BOOL aeroEnabled = FALSE;
- HRESULT res = DwmIsCompositionEnabled(&aeroEnabled);
- if (SUCCEEDED(res))
- return !aeroEnabled;
- }
- else
- {
- return true;
- }
+ BOOL aeroEnabled = FALSE;
+ HRESULT res = DwmIsCompositionEnabled(&aeroEnabled);
+ if (SUCCEEDED(res))
+ return !aeroEnabled;
#endif
return false;
}
return m_WinVer;
}
- bool CSysInfo::IsOS64bit()
+ int CSysInfo::GetKernelBitness(void)
{
#ifdef TARGET_WINDOWS
SYSTEM_INFO si;
GetSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
- return true;
+ return 64;
BOOL (WINAPI *ptrIsWow64) (HANDLE, PBOOL);
HMODULE hKernel32 = GetModuleHandleA("kernel32");
if (hKernel32 == NULL)
- return false; // Can't detect OS
+ return 0; // Can't detect OS
ptrIsWow64 = (BOOL (WINAPI *) (HANDLE, PBOOL)) GetProcAddress(hKernel32, "IsWow64Process");
BOOL wow64proc = FALSE;
if (ptrIsWow64 == NULL || ptrIsWow64(GetCurrentProcess(), &wow64proc) == FALSE)
- return false; // Can't detect OS
- return wow64proc != FALSE;
- #else // TARGET_WINDOWS
- // TODO: Implement Linux, FreeBSD, Android, OSX
- return false;
- #endif // TARGET_WINDOWS
+ return 0; // Can't detect OS
+ return (wow64proc == FALSE) ? 32 : 64;
+ #elif defined(TARGET_POSIX)
+ struct utsname un;
+ if (uname(&un) == 0)
+ {
+ std::string machine(un.machine);
+ if (machine == "x86_64" || machine == "amd64" || machine == "arm64" || machine == "aarch64" || machine == "ppc64" || machine == "ia64")
+ return 64;
+ return 32;
+ }
+ return 0; // can't detect
+ #else
+ return 0; // unknown
+ #endif
+ }
+
+ int CSysInfo::GetXbmcBitness(void)
+ {
+ #if defined (__aarch64__) || defined(__arm64__) || defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) || defined(__ppc64__)
+ return 64;
+ #elif defined(__thumb__) || defined(_M_ARMT) || defined(__arm__) || defined(_M_ARM) || defined(__mips__) || defined(mips) || defined(__mips) || defined(i386) || \
+ defined(__i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86) || defined(_X86_) || defined(__powerpc) || \
+ defined(__powerpc__) || defined(__ppc__) || defined(_M_PPC)
+ return 32;
+ #else
+ return 0; // Unknown
+ #endif
}
CStdString CSysInfo::GetKernelVersion()
strKernel.append(" Storage Server 2003");
else if (osvi.wSuiteMask & VER_SUITE_WH_SERVER)
strKernel.append(" Home Server");
- else if (osvi.wProductType == VER_NT_WORKSTATION && IsOS64bit())
+ else if (osvi.wProductType == VER_NT_WORKSTATION && GetKernelBitness() == 64)
strKernel.append(" XP Professional");
else if (osvi.wProductType != VER_NT_WORKSTATION)
strKernel.append(" Server 2003");
}
}
- if (IsOS64bit())
- strKernel.append(" 64-bit");
- else
- strKernel.append(" 32-bit");
+ strKernel.append(StringUtils::Format(" %d-bit", GetKernelBitness()));
strKernel.append(StringUtils::Format(", build %d", osvi.dwBuildNumber));
}
else
{
strKernel.append(" unknown");
- if (IsOS64bit())
- strKernel.append(" 64-bit");
- else
- strKernel.append(" 32-bit");
+ strKernel.append(StringUtils::Format(" %d-bit", GetKernelBitness()));
}
return strKernel;
#endif
}
+ std::string CSysInfo::GetBuildTargetCpuFamily(void)
+ {
+ #if defined(__thumb__) || defined(_M_ARMT)
+ return "ARM (Thumb)";
+ #elif defined(__arm__) || defined(_M_ARM) || defined (__aarch64__)
+ return "ARM";
+ #elif defined(__mips__) || defined(mips) || defined(__mips)
+ return "MIPS";
+ #elif defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) || \
+ defined(i386) || defined(__i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86) || defined(_X86_)
+ return "x86";
+ #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__) || defined(_M_PPC)
+ return "PowerPC";
+ #else
+ return "unknown CPU family";
+ #endif
+ }
+
CJob *CSysInfo::GetJob() const
{