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 for (
auto minor = 7; minor < 16; ++minor)
178 if (QSysInfo::MacintoshVersion == Q_MV_OSX (10, minor))
179 return retVer (
"10." + QString::number (minor));
181 return retVer (
"Unknown version");
182 #elif defined(Q_OS_WIN32) 183 const auto retVer = [] (
const QString& version)
187 QSysInfo::WordSize == 64 ?
"x86_64" :
"x86",
193 switch (QSysInfo::WindowsVersion)
195 case QSysInfo::WV_95:
196 return retVer (
"95");
197 case QSysInfo::WV_98:
198 return retVer (
"98");
199 case QSysInfo::WV_Me:
200 return retVer (
"Me");
201 case QSysInfo::WV_DOS_based:
202 return retVer (
"9x/Me");
203 case QSysInfo::WV_NT:
204 return retVer (
"NT 4.x");
205 case QSysInfo::WV_2000:
206 return retVer (
"2000");
207 case QSysInfo::WV_XP:
208 return retVer (
"XP");
209 case QSysInfo::WV_2003:
210 return retVer (
"2003");
211 case QSysInfo::WV_VISTA:
212 return retVer (
"Vista");
213 case QSysInfo::WV_WINDOWS7:
218 return retVer (
"8.1");
220 return retVer (
"10");
221 case QSysInfo::WV_NT_based:
222 return retVer (
"NT-based");
227 if (osName.isEmpty ())
230 if (osName.isEmpty ())
242 osName.isEmpty () ? u.sysname : osName,
243 QString (
"%1 %2 %3").arg (u.machine, u.release, u.version)
247 return {
"Unknown arch",
"Unknown OS",
"Unknown version" };
constexpr detail::ExprTree< detail::ExprType::LeafStaticPlaceholder, detail::MemberPtrs< Ptr > > f
QString GetOSName()
Returns a string of OS name and version joined together.
Describes the OS running LeechCraft.
UTIL_SYS_API OSInfo(const QString &arch, const QString &name, const QString &version)
Constructs the OSInfo object.
OSInfo GetOSInfo()
Returns more precise information about OS name and version.