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 }