File indexing completed on 2024-05-12 16:21:30

0001 /**
0002  * SPDX-FileCopyrightText: 2023 Bart De Vries <bart@mogwai.be>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include "networkconnectionmanager.h"
0008 #include "networkconnectionmanagerlogging.h"
0009 
0010 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0011 #include <QNetworkInformation>
0012 #endif
0013 
0014 #include "settingsmanager.h"
0015 
0016 NetworkConnectionManager::NetworkConnectionManager(QObject *parent)
0017     : QObject(parent)
0018 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0019     , m_networkStatus(SolidExtras::NetworkStatus())
0020 #endif
0021 {
0022 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0023     m_backendAvailable = QNetworkInformation::loadDefaultBackend();
0024 
0025     if (m_backendAvailable) {
0026         connect(QNetworkInformation::instance(), &QNetworkInformation::reachabilityChanged, this, [this]() {
0027             Q_EMIT feedUpdatesAllowedChanged();
0028             Q_EMIT episodeDownloadsAllowedChanged();
0029             Q_EMIT imageDownloadsAllowedChanged();
0030             Q_EMIT streamingAllowedChanged();
0031         });
0032         connect(QNetworkInformation::instance(), &QNetworkInformation::isMeteredChanged, this, [this]() {
0033             Q_EMIT feedUpdatesAllowedChanged();
0034             Q_EMIT episodeDownloadsAllowedChanged();
0035             Q_EMIT imageDownloadsAllowedChanged();
0036             Q_EMIT streamingAllowedChanged();
0037         });
0038     }
0039 #else
0040     connect(&m_networkStatus, &SolidExtras::NetworkStatus::connectivityChanged, this, [this]() {
0041         Q_EMIT feedUpdatesAllowedChanged();
0042         Q_EMIT episodeDownloadsAllowedChanged();
0043         Q_EMIT imageDownloadsAllowedChanged();
0044         Q_EMIT streamingAllowedChanged();
0045     });
0046     connect(&m_networkStatus, &SolidExtras::NetworkStatus::meteredChanged, this, [this]() {
0047         Q_EMIT feedUpdatesAllowedChanged();
0048         Q_EMIT episodeDownloadsAllowedChanged();
0049         Q_EMIT imageDownloadsAllowedChanged();
0050         Q_EMIT streamingAllowedChanged();
0051     });
0052 #endif
0053 
0054     connect(SettingsManager::self(), &SettingsManager::allowMeteredFeedUpdatesChanged, this, &NetworkConnectionManager::feedUpdatesAllowedChanged);
0055     connect(SettingsManager::self(), &SettingsManager::allowMeteredEpisodeDownloadsChanged, this, &NetworkConnectionManager::episodeDownloadsAllowedChanged);
0056     connect(SettingsManager::self(), &SettingsManager::allowMeteredImageDownloadsChanged, this, &NetworkConnectionManager::imageDownloadsAllowedChanged);
0057     connect(SettingsManager::self(), &SettingsManager::allowMeteredStreamingChanged, this, &NetworkConnectionManager::streamingAllowedChanged);
0058 }
0059 
0060 bool NetworkConnectionManager::feedUpdatesAllowed() const
0061 {
0062 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0063     bool allowed = true;
0064     if (m_backendAvailable) {
0065         allowed = (!QNetworkInformation::instance()->isMetered() || SettingsManager::self()->allowMeteredFeedUpdates());
0066     }
0067 #else
0068     bool allowed = (m_networkStatus.metered() != SolidExtras::NetworkStatus::Yes || SettingsManager::self()->allowMeteredFeedUpdates());
0069 #endif
0070 
0071     qCDebug(kastsNetworkConnectionManager) << "FeedUpdatesAllowed()" << allowed;
0072 
0073     return allowed;
0074 }
0075 
0076 bool NetworkConnectionManager::episodeDownloadsAllowed() const
0077 {
0078 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0079     bool allowed = true;
0080     if (m_backendAvailable) {
0081         allowed = (!QNetworkInformation::instance()->isMetered() || SettingsManager::self()->allowMeteredEpisodeDownloads());
0082     }
0083 #else
0084     bool allowed = (m_networkStatus.metered() != SolidExtras::NetworkStatus::Yes || SettingsManager::self()->allowMeteredEpisodeDownloads());
0085 #endif
0086 
0087     qCDebug(kastsNetworkConnectionManager) << "EpisodeDownloadsAllowed()" << allowed;
0088 
0089     return allowed;
0090 }
0091 
0092 bool NetworkConnectionManager::imageDownloadsAllowed() const
0093 {
0094 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0095     bool allowed = true;
0096     if (m_backendAvailable) {
0097         allowed = (!QNetworkInformation::instance()->isMetered() || SettingsManager::self()->allowMeteredImageDownloads());
0098     }
0099 #else
0100     bool allowed = (m_networkStatus.metered() != SolidExtras::NetworkStatus::Yes || SettingsManager::self()->allowMeteredImageDownloads());
0101 #endif
0102 
0103     qCDebug(kastsNetworkConnectionManager) << "ImageDownloadsAllowed()" << allowed;
0104 
0105     return allowed;
0106 }
0107 
0108 bool NetworkConnectionManager::streamingAllowed() const
0109 {
0110 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0111     bool allowed = true;
0112     if (m_backendAvailable) {
0113         allowed = (!QNetworkInformation::instance()->isMetered() || SettingsManager::self()->allowMeteredStreaming());
0114     }
0115 #else
0116     bool allowed = (m_networkStatus.metered() != SolidExtras::NetworkStatus::Yes || SettingsManager::self()->allowMeteredStreaming());
0117 #endif
0118 
0119     qCDebug(kastsNetworkConnectionManager) << "StreamingAllowed()" << allowed;
0120 
0121     return allowed;
0122 }