31 #if !defined(Q_OS_WIN32) 32 #include <sys/utsname.h> 36 #include <QTextStream> 47 OSInfo::OSInfo (
const QString& arch,
const QString& name,
const QString& version)
48 :
OSInfo { arch, name, name, version }
53 const QString& name,
const QString& version)
64 return info.Name_ +
' ' + info.Version_;
73 proc.start (QString (
"/bin/sh"),
74 QStringList (
"-c") <<
"lsb_release -ds", QIODevice::ReadOnly);
75 if (proc.waitForStarted ())
77 QTextStream stream (&proc);
79 while (proc.waitForReadyRead ())
80 ret += stream.readAll ();
83 return ret.remove (
'"').trimmed ();
91 if (!QFile::exists (
"/etc/os-release"))
94 QSettings relFile {
"/etc/os-release", QSettings::IniFormat };
95 relFile.setIniCodec (
"UTF-8");
97 const auto& prettyName = relFile.value (
"PRETTY_NAME").toString ();
98 const auto& name = relFile.value (
"NAME").toString ();
99 const auto& version = relFile.value (
"VERSION").toString ();
100 return !prettyName.isEmpty () ? prettyName : (name +
" " + version);
111 {
"/etc/mandrake-release",
"Mandrake Linux" },
112 {
"/etc/debian_version",
"Debian GNU/Linux" },
113 {
"/etc/gentoo-release",
"Gentoo Linux" },
114 {
"/etc/exherbo-release",
"Exherbo" },
115 {
"/etc/arch-release",
"Arch Linux" },
116 {
"/etc/slackware-version",
"Slackware Linux" },
117 {
"/etc/pld-release",
"" },
118 {
"/etc/lfs-release",
"LFS" },
119 {
"/etc/SuSE-release",
"SuSE linux" },
120 {
"/etc/conectiva-release",
"Connectiva" },
121 {
"/etc/.installed",
"" },
122 {
"/etc/redhat-release",
"" },
125 OsInfo_t *osptr = OsInfo;
126 while (!osptr->path.isEmpty ())
128 QFileInfo fi (osptr->path);
131 QFile f (osptr->path);
132 f.open (QIODevice::ReadOnly);
133 QString data = QString (f.read (1024)).trimmed ();
134 if (osptr->name.isEmpty ())
137 return QString (
"%1 (%2)")
151 void Normalize (QString& osName)
153 auto trimQuotes = [&osName]
155 if (osName.startsWith (
'"') && osName.endsWith (
'"'))
156 osName = osName.mid (1, osName.size () - 1);
161 const QString nameMarker (
"NAME=");
162 if (osName.startsWith (nameMarker))
163 osName = osName.mid (nameMarker.size ());
172 #if defined(Q_OS_MAC) 173 const auto retVer = [] (
const QString& version)
176 return OSInfo {
"x86_64",
"Mac OS X", version };
179 switch (QSysInfo::MacintoshVersion)
181 case QSysInfo::MV_10_3:
182 return retVer (
"10.3");
183 case QSysInfo::MV_10_4:
184 return retVer (
"10.4");
185 case QSysInfo::MV_10_5:
186 return retVer (
"10.5");
187 case QSysInfo::MV_10_6:
188 return retVer (
"10.6");
189 case QSysInfo::MV_10_7:
190 return retVer (
"10.7");
191 case QSysInfo::MV_10_8:
192 return retVer (
"10.8");
193 case QSysInfo::MV_10_9:
194 return retVer (
"10.9");
196 return retVer (
"10.10");
198 return retVer (
"Unknown version");
200 #elif defined(Q_OS_WIN32) 201 const auto retVer = [] (
const QString& version)
205 QSysInfo::WordSize == 64 ?
"x86_64" :
"x86",
211 switch (QSysInfo::WindowsVersion)
213 case QSysInfo::WV_95:
214 return retVer (
"95");
215 case QSysInfo::WV_98:
216 return retVer (
"98");
217 case QSysInfo::WV_Me:
218 return retVer (
"Me");
219 case QSysInfo::WV_DOS_based:
220 return retVer (
"9x/Me");
221 case QSysInfo::WV_NT:
222 return retVer (
"NT 4.x");
223 case QSysInfo::WV_2000:
224 return retVer (
"2000");
225 case QSysInfo::WV_XP:
226 return retVer (
"XP");
227 case QSysInfo::WV_2003:
228 return retVer (
"2003");
229 case QSysInfo::WV_VISTA:
230 return retVer (
"Vista");
231 case QSysInfo::WV_WINDOWS7:
236 return retVer (
"8.1");
238 return retVer (
"10");
239 case QSysInfo::WV_NT_based:
240 return retVer (
"NT-based");
245 if (osName.isEmpty ())
248 if (osName.isEmpty ())
260 osName.isEmpty () ? u.sysname : osName,
261 QString (
"%1 %2 %3").arg (u.machine, u.release, u.version)
265 return {
"Unknown arch",
"Unknown OS",
"Unknown version" };
QString GetOSName()
Returns a string of OS name and version joined together.
QString Version_
The full version of the OS.
Describes the OS running LeechCraft.
QString Name_
The name of the OS, including the distribution.
QString Flavour_
The OS flavour, or name of the OS without any distribution.
OSInfo GetOSInfo()
Returns more precise information about OS name and version.
QString Arch_
Describes the CPU architecture of the OS.
UTIL_SYS_API OSInfo(const QString &arch, const QString &name, const QString &version)
Constructs the OSInfo object.