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 }