File indexing completed on 2024-05-19 05:37:50
0001 /* 0002 SPDX-FileCopyrightText: 2009 Aaron Seigo <aseigo@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "geolocationprovider.h" 0008 0009 GeolocationProvider::GeolocationProvider(QObject *parent) 0010 : QObject(parent) 0011 , m_sharedData(nullptr) 0012 , m_sharedAccuracies(nullptr) 0013 , m_accuracy(1000) 0014 , m_updateTriggers(SourceEvent) 0015 , m_available(true) 0016 , m_updating(false) 0017 { 0018 m_updateTimer.setSingleShot(true); 0019 m_updateTimer.setInterval(0); 0020 qRegisterMetaType<Plasma5Support::DataEngine::Data>("Plasma5Support::DataEngine::Data"); 0021 connect(&m_updateTimer, &QTimer::timeout, this, &GeolocationProvider::updated); 0022 } 0023 0024 void GeolocationProvider::init(Plasma5Support::DataEngine::Data *data, EntryAccuracy *accuracies) 0025 { 0026 m_sharedData = data; 0027 m_sharedAccuracies = accuracies; 0028 init(); 0029 } 0030 0031 int GeolocationProvider::accuracy() const 0032 { 0033 return m_accuracy; 0034 } 0035 0036 bool GeolocationProvider::isAvailable() const 0037 { 0038 return m_available; 0039 } 0040 0041 bool GeolocationProvider::requestUpdate(GeolocationProvider::UpdateTriggers triggers) 0042 { 0043 if (m_available && !m_updating && (triggers == ForcedUpdate || triggers & m_updateTriggers)) { 0044 m_updating = true; 0045 update(); 0046 return true; 0047 } 0048 0049 return false; 0050 } 0051 0052 GeolocationProvider::UpdateTriggers GeolocationProvider::updateTriggers() const 0053 { 0054 return m_updateTriggers; 0055 } 0056 0057 bool GeolocationProvider::populateSharedData() 0058 { 0059 Plasma5Support::DataEngine::Data::const_iterator it = m_data.constBegin(); 0060 bool changed = false; 0061 0062 while (it != m_data.constEnd()) { 0063 if (!m_sharedData->contains(it.key()) || m_sharedAccuracies->value(it.key()) < m_accuracy) { 0064 m_sharedData->insert(it.key(), it.value()); 0065 m_sharedAccuracies->insert(it.key(), m_accuracy); 0066 changed = true; 0067 } 0068 0069 ++it; 0070 } 0071 0072 return changed; 0073 } 0074 0075 void GeolocationProvider::setAccuracy(int accuracy) 0076 { 0077 m_accuracy = accuracy; 0078 } 0079 0080 void GeolocationProvider::setIsAvailable(bool available) 0081 { 0082 if (m_available == available) { 0083 return; 0084 } 0085 0086 m_available = available; 0087 Q_EMIT availabilityChanged(this); 0088 } 0089 0090 void GeolocationProvider::setData(const Plasma5Support::DataEngine::Data &data) 0091 { 0092 m_updating = false; 0093 m_data = data; 0094 if (populateSharedData()) { 0095 m_updateTimer.start(); 0096 } 0097 } 0098 0099 void GeolocationProvider::setData(const QString &key, const QVariant &value) 0100 { 0101 m_updating = false; 0102 m_data.insert(key, value); 0103 0104 if (!m_sharedData->contains(key) || m_sharedAccuracies->value(QStringLiteral("key")) < m_accuracy) { 0105 m_sharedData->insert(key, value); 0106 m_sharedAccuracies->insert(key, accuracy()); 0107 m_updateTimer.start(); 0108 } 0109 } 0110 0111 void GeolocationProvider::setUpdateTriggers(UpdateTriggers triggers) 0112 { 0113 m_updateTriggers = triggers; 0114 } 0115 0116 void GeolocationProvider::init() 0117 { 0118 } 0119 0120 void GeolocationProvider::update() 0121 { 0122 }