File indexing completed on 2025-01-26 04:25:02

0001 //
0002 // Created by gabridc on 5/6/21.
0003 //
0004 #include "cities.h"
0005 
0006 #include <QStringList>
0007 
0008 #include <QCoreApplication>
0009 
0010 #include "city.h"
0011 #include "citiesdb.h"
0012 
0013 Cities *Cities::m_instance = nullptr;
0014 KDTree *Cities::m_citiesTree = nullptr;
0015 
0016 Cities::Cities(QObject * parent) : QObject(parent)
0017 {
0018     qDebug() << "Setting up Cities instance";
0019 
0020     connect(qApp, &QCoreApplication::aboutToQuit, [this]()
0021     {
0022         qDebug() << "Lets remove Tagging singleton instance";
0023 
0024         qDeleteAll(m_dbs);
0025         m_dbs.clear();
0026 
0027         delete m_instance;
0028         m_instance = nullptr;
0029     });
0030 
0031     parseCities();
0032 }
0033 
0034 Cities::~Cities()
0035 {
0036     delete Cities::m_citiesTree;
0037 }
0038 
0039 City* Cities::findCity(double latitude, double longitude)
0040 {
0041     qDebug() << "Latitude: " << latitude << "Longitud: " << longitude;
0042     auto pointNear = Cities::m_citiesTree->nearest_point({latitude, longitude});
0043     qDebug()  << pointNear[0] << pointNear[1];
0044 
0045    return db()->findCity(pointNear[0], pointNear[1]);
0046 }
0047 
0048 City *Cities::city(const QString &id)
0049 {
0050     return db()->city(id);
0051 }
0052 
0053 void Cities::parseCities()
0054 {    
0055     if(!Cities::m_citiesTree || Cities::m_citiesTree->empty())
0056     {
0057         qDebug() << "KDE TREE EMPTY FILLING IT";
0058 
0059         Cities::m_citiesTree = new KDTree(db()->cities());
0060         Q_EMIT citiesReady();
0061     }
0062 }
0063 
0064 CitiesDB *Cities::db()
0065 {
0066     if(m_dbs.contains(QThread::currentThreadId()))
0067     {
0068         qDebug() << "Using existing CITIESDB instance" << QThread::currentThreadId();
0069 
0070         return m_dbs[QThread::currentThreadId()];
0071     }
0072 
0073     qDebug() << "Creating new CITIESDB instance" << QThread::currentThreadId();
0074 
0075     auto new_db = new CitiesDB;
0076     m_dbs.insert(QThread::currentThreadId(), new_db);
0077     return new_db;
0078 }