File indexing completed on 2024-05-12 16:16:10

0001 /*
0002   SPDX-FileCopyrightText: 2016-2023 Laurent Montel <montel@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "networkmanager.h"
0008 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0009 #include "texttranslator_debug.h"
0010 #include <QNetworkInformation>
0011 #else
0012 #include <QNetworkConfigurationManager>
0013 #endif
0014 using namespace TextTranslator;
0015 
0016 Q_GLOBAL_STATIC(NetworkManager, s_pNetworkManagerSelf)
0017 
0018 NetworkManager::NetworkManager(QObject *parent)
0019     : QObject(parent)
0020 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0021     , mNetworkConfigureManager(new QNetworkConfigurationManager())
0022 #endif
0023 {
0024 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0025     QT_WARNING_PUSH
0026     QT_WARNING_DISABLE_CLANG("-Wdeprecated-declarations")
0027     QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations")
0028     connect(mNetworkConfigureManager, &QNetworkConfigurationManager::onlineStateChanged, this, &NetworkManager::networkStatusChanged);
0029     QT_WARNING_POP
0030 #else
0031     QNetworkInformation::instance()->loadBackendByFeatures(QNetworkInformation::Feature::Reachability);
0032     connect(QNetworkInformation::instance(), &QNetworkInformation::reachabilityChanged, this, [this](QNetworkInformation::Reachability newReachability) {
0033         Q_EMIT networkStatusChanged(newReachability == QNetworkInformation::Reachability::Online);
0034     });
0035 #endif
0036 }
0037 
0038 NetworkManager::~NetworkManager()
0039 {
0040 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0041     delete mNetworkConfigureManager;
0042 #endif
0043 }
0044 
0045 NetworkManager *NetworkManager::self()
0046 {
0047     return s_pNetworkManagerSelf();
0048 }
0049 
0050 bool NetworkManager::isOnline() const
0051 {
0052 #if QT_VERSION >= QT_VERSION_CHECK(6, 1, 0)
0053     if (QNetworkInformation::loadBackendByFeatures(QNetworkInformation::Feature::Reachability)) {
0054         return QNetworkInformation::instance()->reachability() == QNetworkInformation::Reachability::Online;
0055     } else {
0056         qCWarning(TEXTTRANSLATOR_LOG) << "Couldn't find a working backend for QNetworkInformation";
0057         return false;
0058     }
0059 #else
0060     return mNetworkConfigureManager->isOnline();
0061 #endif
0062 }
0063 
0064 #include "moc_networkmanager.cpp"