Kstars

import_skycomp.cpp
1/*
2 SPDX-FileCopyrightText: 2021 Valentin Boettcher <hiro at protagon.space; @hiro98:tchncs.de>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "import_skycomp.h"
8
9QString db_path()
10{
11 return QDir(KSPaths::writableLocation(QStandardPaths::AppLocalDataLocation))
12 .filePath("skycomponents.sqlite");
13}
14
15std::pair<bool, QSqlDatabase> SkyComponentsImport::get_skycomp_db(const QString &path)
16{
17 if (!QFileInfo(path).exists())
18 return { false, {} };
19
20 auto db = QSqlDatabase::addDatabase("QSQLITE");
21 db.setDatabaseName(path);
22
23 if (!db.open())
24 return { false, {} };
25
26 return { true, db };
27}
28
29std::pair<bool, QSqlDatabase> SkyComponentsImport::get_skycomp_db()
30{
31 return get_skycomp_db(db_path());
32}
33
34std::tuple<bool, QString, CatalogsDB::CatalogObjectVector>
35SkyComponentsImport::get_objects(QSqlDatabase db, const std::list<int> &ids)
36{
37 QVector<QString> const placeholders(ids.size(), "?");
38 if (!db.open())
39 {
40 qDebug() << Q_FUNC_INFO << "here";
41 return { false, {}, {} };
42 }
43
44 QSqlQuery query{ db };
45 query.prepare(
46 QString("SELECT UID, RA, Dec, Type, Magnitude, PositionAngle, MajorAxis, "
47 "MinorAxis, "
48 "Flux, LongName, id_Catalog FROM DSO INNER JOIN ObjectDesignation ON "
49 "DSO.UID "
50 "= "
51 "ObjectDesignation.UID_DSO WHERE id_Catalog IN (%1)")
52 .arg(QStringList::fromVector(placeholders).join(", ")));
53
54 for (auto const &i : ids)
55 query.addBindValue(i);
56
57 query.setForwardOnly(true);
58
59 if (!query.exec())
60 return { false, query.lastError().text(), {} };
61
62 CatalogsDB::CatalogObjectVector objs{};
63 while (query.next())
64 {
65 const SkyObject::TYPE type = static_cast<SkyObject::TYPE>(query.value(3).toInt());
66
67 const double ra = query.value(1).toDouble();
68 const double dec = query.value(2).toDouble();
69 const float mag = query.isNull(4) ? NaN::f : query.value(4).toFloat();
70 const QString name = query.value(9).toString();
71 const QString long_name = "";
72 const QString catalog_identifier = "";
73 const float major = query.value(6).toFloat();
74 const float minor = query.value(7).toFloat();
75 const double position_angle = query.value(5).toDouble();
76 const float flux = query.value(8).toFloat();
77 const int catalog_id = 0;
78
79 objs.emplace_back(CatalogObject::oid{}, type, dms(ra), dms(dec), mag, name,
80 long_name, catalog_identifier, catalog_id, major, minor,
81 position_angle, flux, "");
82 }
83
84 db.close();
85 return { true, {}, objs };
86};
TYPE
The type classification of the SkyObject.
Definition skyobject.h:112
An angle, stored as degrees, but expressible in many ways.
Definition dms.h:38
std::pair< bool, QSqlDatabase > get_skycomp_db()
Get the skycomponent database from the standard path.
std::pair< bool, QSqlDatabase > get_skycomp_db(const QString &path)
Get the skycomponent database from the specified path.
std::tuple< bool, QString, CatalogsDB::CatalogObjectVector > get_objects(QSqlDatabase db, const std::list< int > &ids={ 1, 2 })
QString filePath(const QString &fileName) const const
QList< T > fromVector(const QList< T > &list)
T value(qsizetype i) const const
QSqlDatabase addDatabase(QSqlDriver *driver, const QString &connectionName)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Mon Nov 18 2024 12:16:42 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.