#pragma once
/*
* Copyright (C) 2005-2013 Team XBMC
* http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* .
*
*/
#include "md5.h"
#include "InfoLoader.h"
#include "settings/lib/ISubSettings.h"
#include
#define KB (1024) // 1 KiloByte (1KB) 1024 Byte (2^10 Byte)
#define MB (1024*KB) // 1 MegaByte (1MB) 1024 KB (2^10 KB)
#define GB (1024*MB) // 1 GigaByte (1GB) 1024 MB (2^10 MB)
#define TB (1024*GB) // 1 TerraByte (1TB) 1024 GB (2^10 GB)
#define MAX_KNOWN_ATTRIBUTES 46
class CSysData
{
public:
enum INTERNET_STATE { UNKNOWN, CONNECTED, DISCONNECTED };
CSysData()
{
Reset();
};
void Reset()
{
internetState = UNKNOWN;
};
std::string systemUptime;
std::string systemTotalUptime;
INTERNET_STATE internetState;
std::string videoEncoder;
std::string cpuFrequency;
std::string osVersionInfo;
std::string macAddress;
std::string batteryLevel;
};
class CSysInfoJob : public CJob
{
public:
CSysInfoJob();
virtual bool DoWork();
const CSysData &GetData() const;
static CSysData::INTERNET_STATE GetInternetState();
private:
static bool SystemUpTime(int iInputMinutes, int &iMinutes, int &iHours, int &iDays);
static double GetCPUFrequency();
static std::string GetSystemUpTime(bool bTotalUptime);
static std::string GetCPUFreqInfo();
static std::string GetMACAddress();
static std::string GetVideoEncoder();
static std::string GetBatteryLevel();
CSysData m_info;
};
class CSysInfo : public CInfoLoader, public ISubSettings
{
public:
enum WindowsVersion
{
WindowsVersionUnknown = -1, // Undetected, unsupported Windows version or OS in not Windows
WindowsVersionVista, // Windows Vista, Windows Server 2008
WindowsVersionWin7, // Windows 7, Windows Server 2008 R2
WindowsVersionWin8, // Windows 8, Windows Server 2012
WindowsVersionWin8_1, // Windows 8.1
/* Insert new Windows versions here, when they'll be known */
WindowsVersionFuture = 100 // Future Windows version, not known to code
};
CSysInfo(void);
virtual ~CSysInfo();
virtual bool Load(const TiXmlNode *settings);
virtual bool Save(TiXmlNode *settings) const;
char MD5_Sign[32 + 1];
static const std::string& GetAppName(void); // the same name as CCompileInfo::GetAppName(), but const ref to std::string
static std::string GetKernelName(bool emptyIfUnknown = false);
static std::string GetKernelVersionFull(void); // full version string, including "-generic", "-RELEASE" etc.
static std::string GetKernelVersion(void); // only digits with dots
static std::string GetOsName(bool emptyIfUnknown = false);
static std::string GetOsVersion(void);
static std::string GetOsPrettyNameWithVersion(void);
static std::string GetUserAgent();
bool HasInternet();
bool IsAppleTV2();
bool HasVideoToolBoxDecoder();
bool IsAeroDisabled();
bool HasHW3DInterlaced();
static bool IsWindowsVersion(WindowsVersion ver);
static bool IsWindowsVersionAtLeast(WindowsVersion ver);
static WindowsVersion GetWindowsVersion();
static int GetKernelBitness(void);
static int GetXbmcBitness(void);
static const std::string& GetKernelCpuFamily(void);
std::string GetCPUModel();
std::string GetCPUBogoMips();
std::string GetCPUHardware();
std::string GetCPURevision();
std::string GetCPUSerial();
static std::string GetManufacturerName(void);
static std::string GetModelName(void);
bool GetDiskSpace(const std::string& drive,int& iTotal, int& iTotalFree, int& iTotalUsed, int& iPercentFree, int& iPercentUsed);
std::string GetHddSpaceInfo(int& percent, int drive, bool shortText=false);
std::string GetHddSpaceInfo(int drive, bool shortText=false);
int GetTotalUptime() const { return m_iSystemTimeTotalUp; }
void SetTotalUptime(int uptime) { m_iSystemTimeTotalUp = uptime; }
static std::string GetBuildTargetPlatformName(void);
static std::string GetBuildTargetPlatformVersion(void);
static std::string GetBuildTargetPlatformVersionDecoded(void);
static std::string GetBuildTargetCpuFamily(void);
static std::string GetUsedCompilerNameAndVer(void);
protected:
virtual CJob *GetJob() const;
virtual std::string TranslateInfo(int info) const;
virtual void OnJobComplete(unsigned int jobID, bool success, CJob *job);
private:
CSysData m_info;
static WindowsVersion m_WinVer;
int m_iSystemTimeTotalUp; // Uptime in minutes!
void Reset();
};
extern CSysInfo g_sysinfo;