File indexing completed on 2024-05-12 16:23:41

0001 // SPDX-FileCopyrightText: 2021 Jonah BrĂ¼chert <jbb@kaidan.im>
0002 // SPDX-FileCopyrightText: 2020 Rinigus <rinigus.git@gmail.com>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #include "useragent.h"
0007 
0008 #include <QQuickWebEngineProfile>
0009 
0010 #include "settingshelper.h"
0011 
0012 UserAgent::UserAgent(QObject *parent)
0013     : QObject(parent)
0014     , m_defaultProfile(QQuickWebEngineProfile::defaultProfile())
0015     , m_defaultUserAgent(m_defaultProfile->httpUserAgent())
0016     , m_chromeVersion(extractValueFromAgent(u"Chrome"))
0017     , m_appleWebKitVersion(extractValueFromAgent(u"AppleWebKit"))
0018     , m_webEngineVersion(extractValueFromAgent(u"QtWebEngine"))
0019     , m_safariVersion(extractValueFromAgent(u"Safari"))
0020     , m_isMobile(SettingsHelper::isMobile())
0021 {
0022 }
0023 
0024 QString UserAgent::userAgent() const
0025 {
0026     return QStringView(
0027                u"Mozilla/5.0 (%1) AppleWebKit/%2 (KHTML, like Gecko) QtWebEngine/%3 "
0028                u"Chrome/%4 %5 Safari/%6")
0029         .arg(m_isMobile ? u"Linux; Plasma Mobile, like Android 9.0" : u"X11; Linux x86_64",
0030              m_appleWebKitVersion,
0031              m_webEngineVersion,
0032              m_chromeVersion,
0033              m_isMobile ? u"Mobile" : u"Desktop",
0034              m_safariVersion);
0035 }
0036 
0037 bool UserAgent::isMobile() const
0038 {
0039     return m_isMobile;
0040 }
0041 
0042 void UserAgent::setIsMobile(bool value)
0043 {
0044     if (m_isMobile != value) {
0045         m_isMobile = value;
0046 
0047         Q_EMIT isMobileChanged();
0048         Q_EMIT userAgentChanged();
0049     }
0050 }
0051 
0052 QStringView UserAgent::extractValueFromAgent(const QStringView key)
0053 {
0054     const int index = m_defaultUserAgent.indexOf(key) + key.length() + 1;
0055     int endIndex = m_defaultUserAgent.indexOf(u' ', index);
0056     if (endIndex == -1) {
0057         endIndex = m_defaultUserAgent.size();
0058     }
0059     return QStringView(m_defaultUserAgent).mid(index, endIndex - index);
0060 }
0061 
0062 #include "moc_useragent.cpp"