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)
55 , Version_ { version }
56 , Flavour_ { flavour }
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 QFile
f (osptr->path);
129 if (
f.open (QIODevice::ReadOnly))
131 QString data = QString (
f.read (1024)).trimmed ();
132 if (osptr->name.isEmpty ())
135 return QString (
"%1 (%2)")
149 void Normalize (QString& osName)
151 auto trimQuotes = [&osName]
153 if (osName.startsWith (
'"') && osName.endsWith (
'"'))
154 osName = osName.mid (1, osName.size () - 1);
159 const QString nameMarker (
"NAME=");
160 if (osName.startsWith (nameMarker))
161 osName = osName.mid (nameMarker.size ());
170 #if defined(Q_OS_MAC) 171 const auto retVer = [] (
const QString& version)
174 return OSInfo {
"x86_64",
"Mac OS X", version };
177 switch (QSysInfo::MacintoshVersion)
179 case QSysInfo::MV_10_3:
180 return retVer (
"10.3");
181 case QSysInfo::MV_10_4:
182 return retVer (
"10.4");
183 case QSysInfo::MV_10_5:
184 return retVer (
"10.5");
185 case QSysInfo::MV_10_6:
186 return retVer (
"10.6");
187 case QSysInfo::MV_10_7:
188 return retVer (
"10.7");
189 case QSysInfo::MV_10_8:
190 return retVer (
"10.8");
191 case QSysInfo::MV_10_9:
192 return retVer (
"10.9");
194 return retVer (
"10.10");
196 return retVer (
"Unknown version");
198 #elif defined(Q_OS_WIN32) 199 const auto retVer = [] (
const QString& version)
203 QSysInfo::WordSize == 64 ?
"x86_64" :
"x86",
209 switch (QSysInfo::WindowsVersion)
211 case QSysInfo::WV_95:
212 return retVer (
"95");
213 case QSysInfo::WV_98:
214 return retVer (
"98");
215 case QSysInfo::WV_Me:
216 return retVer (
"Me");
217 case QSysInfo::WV_DOS_based:
218 return retVer (
"9x/Me");
219 case QSysInfo::WV_NT:
220 return retVer (
"NT 4.x");
221 case QSysInfo::WV_2000:
222 return retVer (
"2000");
223 case QSysInfo::WV_XP:
224 return retVer (
"XP");
225 case QSysInfo::WV_2003:
226 return retVer (
"2003");
227 case QSysInfo::WV_VISTA:
228 return retVer (
"Vista");
229 case QSysInfo::WV_WINDOWS7:
234 return retVer (
"8.1");
236 return retVer (
"10");
237 case QSysInfo::WV_NT_based:
238 return retVer (
"NT-based");
243 if (osName.isEmpty ())
246 if (osName.isEmpty ())
258 osName.isEmpty () ? u.sysname : osName,
259 QString (
"%1 %2 %3").arg (u.machine, u.release, u.version)
263 return {
"Unknown arch",
"Unknown OS",
"Unknown version" };
QString GetOSName()
Returns a string of OS name and version joined together.
constexpr detail::ExprTree< detail::ExprType::LeafStaticPlaceholder, detail::MemberPtrs< Ptr > > f
Describes the OS running LeechCraft.
OSInfo GetOSInfo()
Returns more precise information about OS name and version.
UTIL_SYS_API OSInfo(const QString &arch, const QString &name, const QString &version)
Constructs the OSInfo object.