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 }