9#include "artificialhorizoncomponent.h"
11#include "kstarsdata.h"
14#include "oal/dslrlens.h"
15#include "imageoverlaycomponent.h"
17#include "tools/imagingplanner.h"
22#include <QSqlTableModel>
24#include <QJsonDocument>
26#include <kstars_debug.h>
40 QString backup_dbfile = QDir(KSPaths::writableLocation(
60 bool const first_run = !dbfile.
exists() && !backup_file.
exists();
61 m_ConnectionName = dbfile.
filePath();
66 db.setDatabaseName(m_ConnectionName);
70 qCCritical(KSTARS) <<
"Unable to prepare database of type sqlite!";
79 qCCritical(KSTARS) <<
QString(
"Failed opening user database '%1'.").
arg(dbfile.
filePath());
80 qCCritical(KSTARS) << db.lastError();
86 if (db.isOpen() && first_run)
88 qCInfo(KSTARS) <<
"User DB does not exist. New User DB will be created.";
93 if (db.tables().empty())
98 qCWarning(KSTARS) <<
"Detected corrupted database. Attempting to recover from backup...";
104 else if (!FirstRun())
106 qCCritical(KSTARS) <<
QString(
"Failed initializing user database '%1.").
arg(dbfile.
filePath());
111 qCDebug(KSTARS) <<
"Opened the User DB. Ready.";
115 version.setTable(
"Version");
125 if (currentDBVersion != SCHEMA_VERSION)
128 QString versionQuery =
QString(
"UPDATE Version SET Version=%1").
arg(SCHEMA_VERSION);
129 if (!query.exec(versionQuery))
130 qCWarning(KSTARS) << query.lastError();
134 if (currentDBVersion < 294)
138 qCWarning(KSTARS) <<
"Detected old format filter table, re-creating...";
139 if (!query.exec(
"DROP table filter"))
140 qCWarning(KSTARS) << query.lastError();
141 if (!query.exec(
"CREATE TABLE filter ( "
142 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
143 "Vendor TEXT DEFAULT NULL, "
144 "Model TEXT DEFAULT NULL, "
145 "Type TEXT DEFAULT NULL, "
146 "Color TEXT DEFAULT NULL,"
147 "Exposure REAL DEFAULT 1.0,"
148 "Offset INTEGER DEFAULT 0,"
149 "UseAutoFocus INTEGER DEFAULT 0,"
150 "LockedFilter TEXT DEFAULT '--',"
151 "AbsoluteFocusPosition INTEGER DEFAULT 0)"))
152 qCWarning(KSTARS) << query.lastError();
156 if (currentDBVersion < 295)
160 if (!query.exec(
"CREATE TABLE effectivefov ( "
161 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
162 "Profile TEXT DEFAULT NULL, "
163 "Width INTEGER DEFAULT NULL, "
164 "Height INTEGER DEFAULT NULL, "
165 "PixelW REAL DEFAULT 5.0,"
166 "PixelH REAL DEFAULT 5.0,"
167 "FocalLength REAL DEFAULT 0.0,"
168 "FovW REAL DEFAULT 0.0,"
169 "FovH REAL DEFAULT 0.0)"))
170 qCWarning(KSTARS) << query.lastError();
173 if (currentDBVersion < 300)
176 QString columnQuery =
QString(
"ALTER TABLE profile ADD COLUMN remotedrivers TEXT DEFAULT NULL");
177 if (!query.exec(columnQuery))
178 qCWarning(KSTARS) << query.lastError();
180 if (db.tables().contains(
"customdrivers") ==
false)
182 if (!query.exec(
"CREATE TABLE customdrivers ( "
183 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
184 "Name TEXT DEFAULT NULL, "
185 "Label TEXT DEFAULT NULL UNIQUE, "
186 "Manufacturer TEXT DEFAULT NULL, "
187 "Family TEXT DEFAULT NULL, "
188 "Exec TEXT DEFAULT NULL, "
189 "Version TEXT DEFAULT 1.0)"))
190 qCWarning(KSTARS) << query.lastError();
195 if (currentDBVersion < 305)
198 QString columnQuery =
QString(
"ALTER TABLE customdrivers ADD COLUMN Manufacturer TEXT DEFAULT NULL");
199 if (!query.exec(columnQuery))
200 qCWarning(KSTARS) << query.lastError();
204 if (currentDBVersion < 306)
207 QString columnQuery =
QString(
"ALTER TABLE profile ADD COLUMN indihub INTEGER DEFAULT 0");
208 if (!query.exec(columnQuery))
209 qCWarning(KSTARS) << query.lastError();
213 if (currentDBVersion < 307)
218 if (!query.exec(clearQuery))
219 qCWarning(KSTARS) << query.lastError();
220 QString columnQuery =
QString(
"ALTER TABLE darkframe ADD COLUMN defectmap TEXT DEFAULT NULL");
221 if (!query.exec(columnQuery))
222 qCWarning(KSTARS) << query.lastError();
226 if (currentDBVersion < 308)
229 QString columnQuery =
QString(
"ALTER TABLE profile ADD COLUMN portselector INTEGER DEFAULT 0");
230 if (!query.exec(columnQuery))
231 qCWarning(KSTARS) << query.lastError();
235 if (currentDBVersion < 309)
238 QString columnQuery =
QString(
"ALTER TABLE darkframe ADD COLUMN gain INTEGER DEFAULT -1");
239 if (!query.exec(columnQuery))
240 qCWarning(KSTARS) << query.lastError();
241 columnQuery =
QString(
"ALTER TABLE darkframe ADD COLUMN iso TEXT DEFAULT NULL");
242 if (!query.exec(columnQuery))
243 qCWarning(KSTARS) << query.lastError();
247 if (currentDBVersion < 310)
250 QString columnQuery =
QString(
"ALTER TABLE profile ADD COLUMN scripts TEXT DEFAULT NULL");
251 if (!query.exec(columnQuery))
252 qCWarning(KSTARS) << query.lastError();
256 if (currentDBVersion < 311)
259 if (!query.exec(
"CREATE TABLE opticaltrains ( "
260 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
261 "profile INTEGER DEFAULT NULL, "
262 "name TEXT DEFAULT NULL, "
263 "mount TEXT DEFAULT NULL, "
264 "dustcap TEXT DEFAULT NULL, "
265 "lightbox TEXT DEFAULT NULL, "
266 "scope TEXT DEFAULT NULL, "
267 "reducer REAL DEFAULT 1, "
268 "rotator TEXT DEFAULT NULL, "
269 "focuser TEXT DEFAULT NULL, "
270 "filterwheel TEXT DEFAULT NULL, "
271 "camera TEXT DEFAULT NULL, "
272 "guider TEXT DEFAULT NULL)"))
273 qCWarning(KSTARS) << query.lastError();
275 if (!query.exec(
"CREATE TABLE profilesettings ( "
276 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
277 "profile INTEGER DEFAULT NULL, "
278 "settings TEXT DEFAULT NULL)"))
279 qCWarning(KSTARS) << query.lastError();
281 if (!query.exec(
"CREATE TABLE opticaltrainsettings ( "
282 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
283 "opticaltrain INTEGER DEFAULT NULL, "
284 "settings TEXT DEFAULT NULL)"))
285 qCWarning(KSTARS) << query.lastError();
288 if (!query.exec(
"CREATE TABLE dslrlens ( "
289 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
290 "Vendor TEXT DEFAULT NULL, "
291 "Model TEXT DEFAULT NULL, "
292 "FocalLength REAL DEFAULT NULL, "
293 "FocalRatio REAL DEFAULT NULL)"))
294 qCWarning(KSTARS) << query.lastError();
297 if (!query.exec(
"UPDATE SQLITE_SEQUENCE SET seq = 100000 WHERE name ='dslrlens'"))
298 qCWarning(KSTARS) << query.lastError();
302 if (currentDBVersion < 312)
306 if (!query.exec(
"ALTER TABLE effectivefov ADD COLUMN Train TEXT DEFAULT NULL"))
307 qCWarning(KSTARS) << query.lastError();
308 if (!query.exec(
"ALTER TABLE effectivefov ADD COLUMN FocalReducer REAL DEFAULT 0.0"))
309 qCWarning(KSTARS) << query.lastError();
310 if (!query.exec(
"ALTER TABLE effectivefov ADD COLUMN FocalRatio REAL DEFAULT 0.0"))
311 qCWarning(KSTARS) << query.lastError();
315 if (currentDBVersion < 313)
319 if (!query.exec(
"ALTER TABLE filter ADD COLUMN FocusTemperature REAL DEFAULT NULL"))
320 qCWarning(KSTARS) << query.lastError();
321 if (!query.exec(
"ALTER TABLE filter ADD COLUMN FocusAltitude REAL DEFAULT NULL"))
322 qCWarning(KSTARS) << query.lastError();
323 if (!query.exec(
"ALTER TABLE filter ADD COLUMN FocusTicksPerTemp REAL DEFAULT 0.0"))
324 qCWarning(KSTARS) << query.lastError();
325 if (!query.exec(
"ALTER TABLE filter ADD COLUMN FocusTicksPerAlt REAL DEFAULT 0.0"))
326 qCWarning(KSTARS) << query.lastError();
327 if (!query.exec(
"ALTER TABLE filter ADD COLUMN Wavelength REAL DEFAULT 500.0"))
328 qCWarning(KSTARS) << query.lastError();
332 if (currentDBVersion < 314)
336 if (!query.exec(
"CREATE TABLE collimationoverlayelements ( "
337 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
338 "Name TEXT DEFAULT NULL, "
339 "Enabled INTEGER DEFAULT 0, "
340 "Type INTEGER DEFAULT NULL, "
341 "SizeX INTEGER DEFAULT NULL, "
342 "SizeY INTEGER DEFAULT NULL, "
343 "OffsetX INTEGER DEFAULT NULL, "
344 "OffsetY INTEGER DEFAULT NULL, "
345 "Count INTEGER DEFAULT 1, "
346 "PCD INTEGER DEFAULT 100, "
347 "Rotation REAL DEFAULT 0.0, "
348 "Colour TEXT DEFAULT NULL, "
349 "Thickness INTEGER DEFAULT 1)"))
350 qCWarning(KSTARS) << query.lastError();
357 if (currentDBVersion < 315)
361 bool ok = query.exec(
"CREATE TABLE tempfilter ( "
362 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT , "
363 "Vendor TEXT DEFAULT NULL, "
364 "Model TEXT DEFAULT NULL, "
365 "Type TEXT DEFAULT NULL, "
366 "Color TEXT DEFAULT NULL,"
367 "Exposure REAL DEFAULT 1.0,"
368 "Offset INTEGER DEFAULT 0,"
369 "UseAutoFocus INTEGER DEFAULT 0,"
370 "LockedFilter TEXT DEFAULT '--',"
371 "AbsoluteFocusPosition INTEGER DEFAULT 0,"
372 "FocusTemperature REAL DEFAULT NULL,"
373 "FocusAltitude REAL DEFAULT NULL,"
374 "FocusDatetime TEXT DEFAULT NULL,"
375 "FocusTicksPerTemp REAL DEFAULT 0.0,"
376 "FocusTicksPerAlt REAL DEFAULT 0.0,"
377 "Wavelength INTEGER DEFAULT 500)");
380 ok = query.exec(
"INSERT INTO tempfilter (id, Vendor, Model, Type, Color, Exposure, Offset, "
381 "UseAutoFocus, LockedFilter, AbsoluteFocusPosition, FocusTemperature, "
382 "FocusAltitude, FocusTicksPerTemp, FocusTicksPerAlt, Wavelength) "
383 "SELECT id, Vendor, Model, Type, Color, Exposure, Offset, "
384 "UseAutoFocus, LockedFilter, AbsoluteFocusPosition, FocusTemperature, "
385 "FocusAltitude, FocusTicksPerTemp, FocusTicksPerAlt, Wavelength FROM filter");
388 ok = query.exec(
"DROP TABLE filter");
391 ok = query.exec(
"ALTER TABLE tempfilter RENAME to filter");
394 qCWarning(KSTARS) << query.lastError();
402bool KSUserDB::FirstRun()
412bool KSUserDB::RebuildDB()
415 qCInfo(KSTARS) <<
"Rebuilding User Database";
417 QVector<QString> tables;
418 tables.
append(
"CREATE TABLE Version ("
419 "Version CHAR DEFAULT NULL)");
420 tables.
append(
"INSERT INTO Version VALUES (\"" KSTARS_VERSION
"\")");
421 tables.
append(
"CREATE TABLE user ( "
422 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
423 "Name TEXT NOT NULL DEFAULT 'NULL', "
424 "Surname TEXT NOT NULL DEFAULT 'NULL', "
425 "Contact TEXT DEFAULT NULL)");
427 tables.
append(
"CREATE TABLE telescope ( "
428 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
429 "Vendor TEXT DEFAULT NULL, "
430 "Aperture REAL NOT NULL DEFAULT NULL, "
431 "Model TEXT DEFAULT NULL, "
432 "Type TEXT DEFAULT NULL, "
433 "FocalLength REAL DEFAULT NULL)");
435 tables.
append(
"INSERT INTO telescope (Vendor, Aperture, Model, Type, FocalLength) VALUES "
436 "('Sample', 120, 'Primary', 'Refractor', 700)");
438 tables.
append(
"INSERT INTO telescope (Vendor, Aperture, Model, Type, FocalLength) VALUES "
439 "('Sample', 50, 'Guide', 'Refractor', 300)");
441 tables.
append(
"CREATE TABLE flags ( "
442 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
443 "RA TEXT NOT NULL DEFAULT NULL, "
444 "Dec TEXT NOT NULL DEFAULT NULL, "
445 "Icon TEXT NOT NULL DEFAULT 'NULL', "
446 "Label TEXT NOT NULL DEFAULT 'NULL', "
447 "Color TEXT DEFAULT NULL, "
448 "Epoch TEXT DEFAULT NULL)");
450 tables.
append(
"CREATE TABLE lens ( "
451 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
452 "Vendor TEXT NOT NULL DEFAULT 'NULL', "
453 "Model TEXT DEFAULT NULL, "
454 "Factor REAL NOT NULL DEFAULT NULL)");
456 tables.
append(
"CREATE TABLE dslrlens ( "
457 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
458 "Vendor TEXT DEFAULT NULL, "
459 "Model TEXT DEFAULT NULL, "
460 "FocalLength REAL DEFAULT NULL, "
461 "FocalRatio REAL DEFAULT NULL)");
463 tables.
append(
"CREATE TABLE eyepiece ( "
464 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
465 "Vendor TEXT DEFAULT NULL, "
466 "Model TEXT DEFAULT NULL, "
467 "FocalLength REAL NOT NULL DEFAULT NULL, "
468 "ApparentFOV REAL NOT NULL DEFAULT NULL, "
469 "FOVUnit TEXT NOT NULL DEFAULT NULL)");
471 tables.
append(
"CREATE TABLE filter ( "
472 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
473 "Vendor TEXT DEFAULT NULL, "
474 "Model TEXT DEFAULT NULL, "
475 "Type TEXT DEFAULT NULL, "
476 "Color TEXT DEFAULT NULL,"
477 "Exposure REAL DEFAULT 1.0,"
478 "Offset INTEGER DEFAULT 0,"
479 "UseAutoFocus INTEGER DEFAULT 0,"
480 "LockedFilter TEXT DEFAULT '--',"
481 "AbsoluteFocusPosition INTEGER DEFAULT 0,"
482 "FocusTemperature REAL DEFAULT NULL,"
483 "FocusAltitude REAL DEFAULT NULL,"
484 "FocusDatetime TEXT DEFAULT NULL,"
485 "FocusTicksPerTemp REAL DEFAULT 0.0,"
486 "FocusTicksPerAlt REAL DEFAULT 0.0,"
487 "Wavelength INTEGER DEFAULT 500)");
489 tables.
append(
"CREATE TABLE wishlist ( "
490 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
491 "Date NUMERIC NOT NULL DEFAULT NULL, "
492 "Type TEXT DEFAULT NULL, "
493 "UIUD TEXT DEFAULT NULL)");
495 tables.
append(
"CREATE TABLE fov ( "
496 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
497 "name TEXT NOT NULL DEFAULT 'NULL', "
498 "color TEXT DEFAULT NULL, "
499 "sizeX NUMERIC DEFAULT NULL, "
500 "sizeY NUMERIC DEFAULT NULL, "
501 "shape TEXT DEFAULT NULL)");
503 tables.
append(
"CREATE TABLE logentry ( "
504 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
505 "content TEXT NOT NULL DEFAULT 'NULL', "
506 "UIUD TEXT DEFAULT NULL, "
507 "DateTime NUMERIC NOT NULL DEFAULT NULL, "
508 "User INTEGER DEFAULT NULL REFERENCES user (id), "
509 "Location TEXT DEFAULT NULL, "
510 "Telescope INTEGER DEFAULT NULL REFERENCES telescope (id),"
511 "Filter INTEGER DEFAULT NULL REFERENCES filter (id), "
512 "lens INTEGER DEFAULT NULL REFERENCES lens (id), "
513 "Eyepiece INTEGER DEFAULT NULL REFERENCES eyepiece (id), "
514 "FOV INTEGER DEFAULT NULL REFERENCES fov (id))");
518 tables.
append(
"CREATE TABLE horizons ( "
519 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
520 "name TEXT NOT NULL,"
521 "label TEXT NOT NULL,"
522 "enabled INTEGER NOT NULL)");
524 tables.
append(
"CREATE TABLE profile (id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, host "
525 "TEXT, port INTEGER, city TEXT, province TEXT, country TEXT, indiwebmanagerport INTEGER DEFAULT "
526 "NULL, autoconnect INTEGER DEFAULT 1, guidertype INTEGER DEFAULT 0, guiderhost TEXT, guiderport INTEGER,"
527 "indihub INTEGER DEFAULT 0, portselector INTEGER DEFAULT 1, remotedrivers TEXT DEFAULT NULL, "
528 "scripts TEXT DEFAULT NULL)");
531 tables.
append(
"INSERT INTO profile (name, host, port) VALUES ('Simulators', 'localhost', 7624)");
533 tables.
append(
"INSERT INTO profile (name, portselector) VALUES ('Simulators', 0)");
536 tables.
append(
"CREATE TABLE driver (id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, label TEXT NOT NULL, role "
537 "TEXT NOT NULL, profile INTEGER NOT NULL, FOREIGN KEY(profile) REFERENCES profile(id))");
540 tables.
append(
"INSERT INTO driver (label, role, profile) VALUES ('Telescope Simulator', 'Mount', 1)");
541 tables.
append(
"INSERT INTO driver (label, role, profile) VALUES ('CCD Simulator', 'CCD', 1)");
542 tables.
append(
"INSERT INTO driver (label, role, profile) VALUES ('Focuser Simulator', 'Focuser', 1)");
544 tables.
append(
"CREATE TABLE profilesettings (id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
545 "profile INTEGER DEFAULT NULL, settings TEXT DEFAULT NULL)");
547 tables.
append(
"CREATE TABLE opticaltrains (id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
548 "profile INTEGER DEFAULT NULL, name TEXT DEFAULT NULL, mount TEXT DEFAULT NULL, "
549 "dustcap TEXT DEFAULT NULL, lightbox TEXT DEFAULT NULL, scope TEXT DEFAULT NULL, reducer REAL DEFAULT 1, "
550 "rotator TEXT DEFAULT NULL, focuser TEXT DEFAULT NULL, filterwheel TEXT DEFAULT NULL, camera TEXT DEFAULT NULL, "
551 "guider TEXT DEFAULT NULL)");
553 tables.
append(
"CREATE TABLE opticaltrainsettings (id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
554 "opticaltrain INTEGER DEFAULT NULL, settings TEXT DEFAULT NULL)");
556 tables.
append(
"CREATE TABLE IF NOT EXISTS darkframe (id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, ccd TEXT "
557 "NOT NULL, chip INTEGER DEFAULT 0, binX INTEGER, binY INTEGER, temperature REAL, gain INTEGER DEFAULT -1, "
558 "iso TEXT DEFAULT NULL, duration REAL, filename TEXT NOT NULL, defectmap TEXT DEFAULT NULL, timestamp "
559 "DATETIME DEFAULT CURRENT_TIMESTAMP)");
561 tables.
append(
"CREATE TABLE IF NOT EXISTS hips (ID TEXT NOT NULL UNIQUE,"
562 "obs_title TEXT NOT NULL, obs_description TEXT NOT NULL, hips_order TEXT NOT NULL,"
563 "hips_frame TEXT NOT NULL, hips_tile_width TEXT NOT NULL, hips_tile_format TEXT NOT NULL,"
564 "hips_service_url TEXT NOT NULL, moc_sky_fraction TEXT NOT NULL)");
566 tables.
append(
"INSERT INTO hips (ID, obs_title, obs_description, hips_order, hips_frame, hips_tile_width, hips_tile_format, hips_service_url, moc_sky_fraction)"
567 "VALUES ('CDS/P/DSS2/color', 'DSS Colored', 'Color composition generated by CDS. This HiPS survey is based on 2 others HiPS surveys,"
568 " respectively DSS2-red and DSS2-blue HiPS, both of them directly generated from original scanned plates downloaded"
569 " from STScI site. The red component has been built from POSS-II F, AAO-SES,SR and SERC-ER plates. The blue component"
570 " has been build from POSS-II J and SERC-J,EJ. The green component is based on the mean of other components. Three"
571 " missing plates from red survey (253, 260, 359) has been replaced by pixels from the DSSColor STScI jpeg survey."
572 " The 11 missing blue plates (mainly in galactic plane) have not been replaced (only red component).',"
573 "'9', 'equatorial', '512', 'jpeg fits', 'http://alasky.u-strasbg.fr/DSS/DSSColor','1')");
575 tables.
append(
"INSERT INTO hips (ID, obs_title, obs_description, hips_order, hips_frame, hips_tile_width, hips_tile_format, hips_service_url, moc_sky_fraction)"
576 "VALUES ('CDS/P/2MASS/color', '2MASS Color J (1.23 microns), H (1.66 microns), K (2.16 microns)',"
577 "'2MASS has uniformly scanned the entire sky in three near-infrared bands to detect and characterize point sources"
578 " brighter than about 1 mJy in each band, with signal-to-noise ratio (SNR) greater than 10, using a pixel size of"
579 " 2.0\". This has achieved an 80,000-fold improvement in sensitivity relative to earlier surveys. 2MASS used two"
580 " highly-automated 1.3-m telescopes, one at Mt. Hopkins, AZ, and one at CTIO, Chile. Each telescope was equipped with"
581 " a three-channel camera, each channel consisting of a 256x256 array of HgCdTe detectors, capable of observing the"
582 " sky simultaneously at J (1.25 microns), H (1.65 microns), and Ks (2.17 microns). The University of Massachusetts"
583 " (UMass) was responsible for the overall management of the project, and for developing the infrared cameras and"
584 " on-site computing systems at both facilities. The Infrared Processing and Analysis Center (IPAC) is responsible"
585 " for all data processing through the Production Pipeline, and construction and distribution of the data products."
586 " Funding is provided primarily by NASA and the NSF',"
587 "'9', 'equatorial', '512', 'jpeg fits', 'http://alaskybis.u-strasbg.fr/2MASS/Color', '1')");
589 tables.
append(
"INSERT INTO hips (ID, obs_title, obs_description, hips_order, hips_frame, hips_tile_width, hips_tile_format, hips_service_url, moc_sky_fraction)"
590 "VALUES ('CDS/P/Fermi/color', 'Fermi Color HEALPix Survey', 'Launched on June 11, 2008, the Fermi Gamma-ray Space Telescope observes the cosmos using the"
591 " highest-energy form of light. This survey sums all data observed by the Fermi mission up to week 396. This version"
592 " of the Fermi survey are intensity maps where the summed counts maps are divided by the exposure for each pixel"
593 ". We anticipate using the HEASARC Hera capabilities to update this survey on a roughly quarterly basis. Data is"
594 " broken into 5 energy bands : 30-100 MeV Band 1, 100-300 MeV Band 2, 300-1000 MeV Band 3, 1-3 GeV Band 4 ,"
595 " 3-300 GeV Band 5. The SkyView data are based upon a Cartesian projection of the counts divided by the exposure maps."
596 " In the Cartesian projection pixels near the pole have a much smaller area than pixels on the equator, so these"
597 " pixels have smaller integrated flux. When creating large scale images in other projections users may wish to make"
598 " sure to compensate for this effect the flux conserving clip-resampling option.', '9', 'equatorial', '512', 'jpeg fits',"
599 "'http://alaskybis.u-strasbg.fr/Fermi/Color', '1')");
601 tables.
append(
"CREATE TABLE dslr (id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
602 "Model TEXT DEFAULT NULL, "
603 "Width INTEGER DEFAULT NULL, "
604 "Height INTEGER DEFAULT NULL, "
605 "PixelW REAL DEFAULT 5.0,"
606 "PixelH REAL DEFAULT 5.0)");
608 tables.
append(
"CREATE TABLE effectivefov ( "
609 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
610 "Train TEXT DEFAULT NULL, "
611 "Profile TEXT DEFAULT NULL, "
612 "Width INTEGER DEFAULT NULL, "
613 "Height INTEGER DEFAULT NULL, "
614 "PixelW REAL DEFAULT 5.0,"
615 "PixelH REAL DEFAULT 5.0,"
616 "FocalLength REAL DEFAULT 0.0,"
617 "FocalReducer REAL DEFAULT 0.0,"
618 "FocalRatio REAL DEFAULT 0.0,"
619 "FovW REAL DEFAULT 0.0,"
620 "FovH REAL DEFAULT 0.0)");
622 tables.
append(
"CREATE TABLE customdrivers ( "
623 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
624 "Name TEXT DEFAULT NULL, "
625 "Label TEXT DEFAULT NULL UNIQUE, "
626 "Manufacturer TEXT DEFAULT NULL, "
627 "Family TEXT DEFAULT NULL, "
628 "Exec TEXT DEFAULT NULL, "
629 "Version TEXT DEFAULT 1.0)");
631 tables.
append(
"CREATE TABLE IF NOT EXISTS collimationoverlayelements ( "
632 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
633 "Name TEXT DEFAULT NULL, "
634 "Enabled INTEGER DEFAULT 0, "
635 "Type INTEGER DEFAULT NULL, "
636 "SizeX INTEGER DEFAULT NULL, "
637 "SizeY INTEGER DEFAULT NULL, "
638 "OffsetX INTEGER DEFAULT NULL, "
639 "OffsetY INTEGER DEFAULT NULL, "
640 "Count INTEGER DEFAULT 1, "
641 "PCD INTEGER DEFAULT 100, "
642 "Rotation REAL DEFAULT 0.0, "
643 "Colour TEXT DEFAULT NULL, "
644 "Thickness INTEGER DEFAULT 1)");
647 tables.
append(
"UPDATE SQLITE_SEQUENCE SET seq = 100000 WHERE name ='dslrlens'");
649 for (
int i = 0; i < tables.
count(); ++i)
652 if (!
query.exec(tables[i]))
654 qCDebug(KSTARS) <<
query.lastError();
655 qCDebug(KSTARS) <<
query.executedQuery();
674 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
680 users.
setFilter(
"Name LIKE \'" + name +
"\' AND Surname LIKE \'" + surname +
"\'");
687 record.
setValue(
"Surname", surname);
688 record.
setValue(
"Contact", contact);
713 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
719 users.
setFilter(
"Name LIKE \'" + name +
"\' AND Surname LIKE \'" + surname +
"\'");
722 int observer_count = users.
rowCount();
725 return (observer_count > 0);
736 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
748 int observer_count = users.
rowCount();
751 return (observer_count > 0);
763 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
767 observer_list.
clear();
772 for (
int i = 0; i < users.
rowCount(); ++i)
799 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
811 for (QVariantMap::const_iterator iter = oneFrame.begin(); iter != oneFrame.end(); ++iter)
812 record.
setValue(iter.key(), iter.value());
828 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
838 for (QVariantMap::const_iterator iter = oneFrame.begin(); iter != oneFrame.end(); ++iter)
839 record.
setValue(iter.key(), iter.value());
856 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
862 darkframe.
setFilter(
"filename = \'" + filename +
"\'");
880 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
886 QSqlTableModel darkframe(
nullptr, db);
887 darkframe.setTable(
"darkframe");
890 for (
int i = 0; i < darkframe.rowCount(); ++i)
892 QVariantMap recordMap;
893 QSqlRecord record = darkframe.record(i);
894 for (
int j = 0; j < record.
count(); j++)
897 darkFrames.
append(recordMap);
908bool KSUserDB::AddEffectiveFOV(
const QVariantMap &oneFOV)
913 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
917 QSqlTableModel effectivefov(
nullptr, db);
918 effectivefov.setTable(
"effectivefov");
919 effectivefov.select();
921 QSqlRecord record = effectivefov.record();
926 for (QVariantMap::const_iterator iter = oneFOV.begin(); iter != oneFOV.end(); ++iter)
927 record.
setValue(iter.key(), iter.value());
929 effectivefov.insertRecord(-1, record);
931 effectivefov.submitAll();
939bool KSUserDB::DeleteEffectiveFOV(
const QString &
id)
944 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
948 QSqlTableModel effectivefov(
nullptr, db);
949 effectivefov.setTable(
"effectivefov");
950 effectivefov.setFilter(
"id = \'" +
id +
"\'");
952 effectivefov.select();
954 effectivefov.removeRows(0, 1);
955 effectivefov.submitAll();
967 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
971 effectiveFOVs.
clear();
973 QSqlTableModel effectivefov(
nullptr, db);
974 effectivefov.setTable(
"effectivefov");
975 effectivefov.select();
977 for (
int i = 0; i < effectivefov.rowCount(); ++i)
979 QVariantMap recordMap;
980 QSqlRecord record = effectivefov.record(i);
981 for (
int j = 0; j < record.
count(); j++)
984 effectiveFOVs.
append(recordMap);
1000 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1005 opticalTrain.
setTable(
"opticaltrains");
1013 for (QVariantMap::const_iterator iter = oneTrain.begin(); iter != oneTrain.end(); ++iter)
1014 record.
setValue(iter.key(), iter.value());
1020 qCWarning(KSTARS) << opticalTrain.
lastError();
1035 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1040 opticalTrain.
setTable(
"opticaltrains");
1046 for (QVariantMap::const_iterator iter = oneTrain.begin(); iter != oneTrain.end(); ++iter)
1047 record.
setValue(iter.key(), iter.value());
1053 qCWarning(KSTARS) << opticalTrain.
lastError();
1063bool KSUserDB::DeleteOpticalTrain(
int id)
1068 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1072 QSqlTableModel opticalTrain(
nullptr, db);
1073 opticalTrain.setTable(
"opticaltrains");
1074 opticalTrain.setFilter(QString(
"id=%1").arg(
id));
1076 opticalTrain.select();
1078 opticalTrain.removeRows(0, 1);
1079 opticalTrain.submitAll();
1091 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1095 opticalTrains.
clear();
1098 opticalTrain.
setTable(
"opticaltrains");
1102 for (
int i = 0; i < opticalTrain.
rowCount(); ++i)
1104 QVariantMap recordMap;
1106 for (
int j = 0; j < record.
count(); j++)
1109 opticalTrains.
append(recordMap);
1120bool KSUserDB::AddCustomDriver(
const QVariantMap &oneDriver)
1125 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1129 QSqlTableModel CustomDriver(
nullptr, db);
1130 CustomDriver.setTable(
"customdrivers");
1131 CustomDriver.select();
1133 QSqlRecord record = CustomDriver.record();
1138 for (QVariantMap::const_iterator iter = oneDriver.begin(); iter != oneDriver.end(); ++iter)
1139 record.
setValue(iter.key(), iter.value());
1141 bool rc = CustomDriver.insertRecord(-1, record);
1145 rc = CustomDriver.submitAll();
1153bool KSUserDB::DeleteCustomDriver(
const QString &
id)
1158 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1162 QSqlTableModel CustomDriver(
nullptr, db);
1163 CustomDriver.setTable(
"customdrivers");
1164 CustomDriver.setFilter(
"id = \'" +
id +
"\'");
1166 CustomDriver.select();
1168 CustomDriver.removeRows(0, 1);
1169 CustomDriver.submitAll();
1182 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1186 CustomDrivers.
clear();
1187 QSqlTableModel CustomDriver(
nullptr, db);
1188 CustomDriver.setTable(
"customdrivers");
1189 CustomDriver.select();
1191 for (
int i = 0; i < CustomDriver.rowCount(); ++i)
1193 QVariantMap recordMap;
1194 QSqlRecord record = CustomDriver.record(i);
1195 for (
int j = 0; j < record.
count(); j++)
1198 CustomDrivers.
append(recordMap);
1214 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1218 QSqlTableModel HIPSSource(
nullptr, db);
1219 HIPSSource.setTable(
"hips");
1220 HIPSSource.select();
1222 QSqlRecord record = HIPSSource.record();
1224 for (QMap<QString, QString>::const_iterator iter = oneSource.
begin(); iter != oneSource.
end(); ++iter)
1225 record.
setValue(iter.key(), iter.value());
1227 HIPSSource.insertRecord(-1, record);
1228 HIPSSource.submitAll();
1236bool KSUserDB::DeleteHIPSSource(
const QString &ID)
1241 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1245 QSqlTableModel HIPSSource(
nullptr, db);
1246 HIPSSource.setTable(
"hips");
1247 HIPSSource.setFilter(
"ID = \'" + ID +
"\'");
1249 HIPSSource.select();
1251 HIPSSource.removeRows(0, 1);
1252 HIPSSource.submitAll();
1265 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1269 HIPSSources.clear();
1270 QSqlTableModel HIPSSource(
nullptr, db);
1271 HIPSSource.setTable(
"hips");
1272 HIPSSource.select();
1274 for (
int i = 0; i < HIPSSource.rowCount(); ++i)
1276 QMap<QString, QString> recordMap;
1277 QSqlRecord record = HIPSSource.record(i);
1278 for (
int j = 1; j < record.
count(); j++)
1281 HIPSSources.
append(recordMap);
1297 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1301 QSqlTableModel DSLRInfo(
nullptr, db);
1302 DSLRInfo.setTable(
"dslr");
1305 QSqlRecord record = DSLRInfo.record();
1307 for (QMap<QString, QVariant>::const_iterator iter = oneInfo.
begin(); iter != oneInfo.
end(); ++iter)
1308 record.
setValue(iter.key(), iter.value());
1310 DSLRInfo.insertRecord(-1, record);
1311 DSLRInfo.submitAll();
1319bool KSUserDB::DeleteAllDSLRInfo()
1324 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1328 QSqlTableModel DSLRInfo(
nullptr, db);
1329 DSLRInfo.setTable(
"dslr");
1332 DSLRInfo.removeRows(0, DSLRInfo.rowCount());
1333 DSLRInfo.submitAll();
1341bool KSUserDB::DeleteDSLRInfo(
const QString &model)
1346 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1350 QSqlTableModel DSLRInfo(
nullptr, db);
1351 DSLRInfo.setTable(
"dslr");
1352 DSLRInfo.setFilter(
"model = \'" + model +
"\'");
1356 DSLRInfo.removeRows(0, 1);
1357 DSLRInfo.submitAll();
1370 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1376 QSqlTableModel DSLRInfo(
nullptr, db);
1377 DSLRInfo.setTable(
"dslr");
1380 for (
int i = 0; i < DSLRInfo.rowCount(); ++i)
1382 QMap<QString, QVariant> recordMap;
1383 QSqlRecord record = DSLRInfo.record(i);
1384 for (
int j = 1; j < record.
count(); j++)
1387 DSLRInfos.append(recordMap);
1405 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1431 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1460 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1468 for (
int i = 0; i < flags.
rowCount(); ++i)
1485 flagList.
append(flagEntry);
1504 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1528 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1552 const double &focalLength)
1557 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1566 record.
setValue(
"Aperture", aperture);
1569 record.
setValue(
"FocalLength", focalLength);
1585 const double &aperture,
const double &focalLength,
const QString &
id)
1590 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1603 record.
setValue(
"Aperture", aperture);
1606 record.
setValue(
"FocalLength", focalLength);
1624 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1628 qDeleteAll(scope_list);
1635 for (
int i = 0; i < equip.
rowCount(); ++i)
1643 double focalLength = record.
value(
"FocalLength").
toDouble();
1665 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1694 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1728 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1732 eyepiece_list.
clear();
1738 for (
int i = 0; i < equip.
rowCount(); ++i)
1744 double focalLength = record.
value(
"FocalLength").
toDouble();
1748 OAL::Eyepiece *o =
new OAL::Eyepiece(
id, model, vendor, fov, fovUnit, focalLength);
1768 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1794 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1824 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1828 qDeleteAll(lens_list);
1835 for (
int i = 0; i < equip.
rowCount(); ++i)
1862 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1870 record.
setValue(
"Vendor", fp->vendor);
1871 record.
setValue(
"Model", fp->model);
1873 record.
setValue(
"Color", fp->color);
1874 record.
setValue(
"Offset", fp->offset);
1875 record.
setValue(
"Exposure", fp->exposure);
1876 record.
setValue(
"UseAutoFocus", fp->useAutoFocus ? 1 : 0);
1877 record.
setValue(
"LockedFilter", fp->lockedFilter);
1878 record.
setValue(
"AbsoluteFocusPosition", fp->absFocusPos);
1879 record.
setValue(
"FocusTemperature", fp->focusTemperature);
1880 record.
setValue(
"FocusAltitude", fp->focusAltitude);
1881 record.
setValue(
"FocusDatetime", fp->focusDatetime);
1882 record.
setValue(
"FocusTicksPerTemp", fp->focusTicksPerTemp);
1883 record.
setValue(
"FocusTicksPerAlt", fp->focusTicksPerAlt);
1884 record.
setValue(
"Wavelength", fp->wavelength);
1887 qCritical() << __FUNCTION__ << equip.
lastError();
1890 qCritical() <<
"AddFilter:" << equip.
lastError();
1904 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1916 record.
setValue(
"Vendor", fp->vendor);
1917 record.
setValue(
"Model", fp->model);
1919 record.
setValue(
"Color", fp->color);
1920 record.
setValue(
"Offset", fp->offset);
1921 record.
setValue(
"Exposure", fp->exposure);
1922 record.
setValue(
"UseAutoFocus", fp->useAutoFocus ? 1 : 0);
1923 record.
setValue(
"LockedFilter", fp->lockedFilter);
1924 record.
setValue(
"AbsoluteFocusPosition", fp->absFocusPos);
1925 record.
setValue(
"FocusTemperature", fp->focusTemperature);
1926 record.
setValue(
"FocusAltitude", fp->focusAltitude);
1927 record.
setValue(
"FocusDatetime", fp->focusDatetime);
1928 record.
setValue(
"FocusTicksPerTemp", fp->focusTicksPerTemp);
1929 record.
setValue(
"FocusTicksPerAlt", fp->focusTicksPerAlt);
1930 record.
setValue(
"Wavelength", fp->wavelength);
1933 qCritical() <<
"AddFilter:" << equip.
lastError();
1949 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
1953 filter_list.
clear();
1958 filterProperties *fp =
new filterProperties(
"",
"",
"",
"");
1960 for (
int i = 0; i < equip.
rowCount(); ++i)
1971 fp->useAutoFocus = record.
value(
"UseAutoFocus").
toInt() == 1;
1972 fp->absFocusPos = record.
value(
"AbsoluteFocusPosition").
toInt();
1973 fp->focusTemperature = record.
value(
"FocusTemperature").
toDouble();
1974 fp->focusAltitude = record.
value(
"FocusAltitude").
toDouble();
1975 fp->focusDatetime = record.
value(
"FocusDatetime").
toString();
1976 fp->focusTicksPerTemp = record.
value(
"FocusTicksPerTemp").
toDouble();
1977 fp->focusTicksPerAlt = record.
value(
"FocusTicksPerAlt").
toDouble();
1991void KSUserDB::readScopes()
1993 while (!reader_->
atEnd())
2011void KSUserDB::readEyepieces()
2013 while (!reader_->atEnd())
2015 reader_->readNext();
2017 if (reader_->isEndElement())
2020 if (reader_->isStartElement())
2022 if (reader_->name().toString() ==
"eyepiece")
2031void KSUserDB::readLenses()
2033 while (!reader_->atEnd())
2035 reader_->readNext();
2037 if (reader_->isEndElement())
2040 if (reader_->isStartElement())
2042 if (reader_->name().toString() ==
"lens")
2051void KSUserDB::readFilters()
2053 while (!reader_->atEnd())
2055 reader_->readNext();
2057 if (reader_->isEndElement())
2060 if (reader_->isStartElement())
2062 if (reader_->name().toString() ==
"filter")
2071void KSUserDB::readScope()
2073 QString model, vendor,
type;
2074 double aperture = 0, focalLength = 0;
2076 while (!reader_->atEnd())
2078 reader_->readNext();
2080 if (reader_->isEndElement())
2083 if (reader_->isStartElement())
2085 if (reader_->name().toString() ==
"model")
2087 model = reader_->readElementText();
2089 else if (reader_->name().toString() ==
"vendor")
2091 vendor = reader_->readElementText();
2093 else if (reader_->name().toString() ==
"type")
2095 type = reader_->readElementText();
2103 type =
"Schmidt-Cassegrain";
2105 type =
"Kutter (Schiefspiegler)";
2107 type =
"Cassegrain";
2109 type =
"Ritchey-Chretien";
2111 else if (reader_->name().toString() ==
"focalLength")
2113 focalLength = (reader_->readElementText()).toDouble();
2115 else if (reader_->name().toString() ==
"aperture")
2116 aperture = (reader_->readElementText()).toDouble();
2120 AddScope(model, vendor, type, focalLength, aperture);
2126void KSUserDB::readEyepiece()
2128 QString model, focalLength, vendor, fov, fovUnit;
2129 while (!reader_->atEnd())
2131 reader_->readNext();
2133 if (reader_->isEndElement())
2136 if (reader_->isStartElement())
2138 if (reader_->name().toString() ==
"model")
2140 model = reader_->readElementText();
2142 else if (reader_->name().toString() ==
"vendor")
2144 vendor = reader_->readElementText();
2146 else if (reader_->name().toString() ==
"apparentFOV")
2148 fov = reader_->readElementText();
2149 fovUnit = reader_->attributes().value(
"unit").toString();
2151 else if (reader_->name().toString() ==
"focalLength")
2153 focalLength = reader_->readElementText();
2164void KSUserDB::readLens()
2166 QString model, factor, vendor;
2167 while (!reader_->atEnd())
2169 reader_->readNext();
2171 if (reader_->isEndElement())
2174 if (reader_->isStartElement())
2176 if (reader_->name().toString() ==
"model")
2178 model = reader_->readElementText();
2180 else if (reader_->name().toString() ==
"vendor")
2182 vendor = reader_->readElementText();
2184 else if (reader_->name().toString() ==
"factor")
2186 factor = reader_->readElementText();
2197void KSUserDB::readFilter()
2199 filterProperties *fp =
new filterProperties(
"",
"",
"",
"");
2201 while (!reader_->atEnd())
2203 reader_->readNext();
2205 if (reader_->isEndElement())
2208 if (reader_->isStartElement())
2210 if (reader_->name().toString() ==
"model")
2212 fp->model = reader_->readElementText();
2214 else if (reader_->name().toString() ==
"vendor")
2216 fp->vendor = reader_->readElementText();
2218 else if (reader_->name().toString() ==
"type")
2220 fp->type = reader_->readElementText();
2222 else if (reader_->name().toString() ==
"offset")
2224 fp->offset = reader_->readElementText().toInt();
2226 else if (reader_->name().toString() ==
"color")
2228 fp->color = reader_->readElementText();
2230 else if (reader_->name().toString() ==
"exposure")
2232 fp->exposure = reader_->readElementText().toDouble();
2234 else if (reader_->name().toString() ==
"lockedFilter")
2236 fp->lockedFilter = reader_->readElementText();
2238 else if (reader_->name().toString() ==
"useAutoFocus")
2240 fp->useAutoFocus = (reader_->readElementText() ==
"1");
2242 else if (reader_->name().toString() ==
"AbsoluteAutoFocus")
2244 fp->absFocusPos = (reader_->readElementText().toInt());
2246 else if (reader_->name().toString() ==
"FocusTemperature")
2248 fp->focusTemperature = (reader_->readElementText().toDouble());
2250 else if (reader_->name().toString() ==
"FocusAltitude")
2252 fp->focusAltitude = (reader_->readElementText().toDouble());
2254 else if (reader_->name().toString() ==
"FocusDatetime")
2256 fp->focusDatetime = (reader_->readElementText());
2258 else if (reader_->name().toString() ==
"FocusTicksPerTemp")
2260 fp->focusTicksPerTemp = (reader_->readElementText().toDouble());
2262 else if (reader_->name().toString() ==
"FocusTicksPerAlt")
2264 fp->focusTicksPerAlt = (reader_->readElementText().toDouble());
2266 else if (reader_->name().toString() ==
"Wavelength")
2268 fp->wavelength = (reader_->readElementText().toDouble());
2280 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2284 qDeleteAll(horizonList);
2285 horizonList.
clear();
2292 for (
int i = 0; i < regions.
rowCount(); ++i)
2298 const int flags = record.
value(
"enabled").
toInt();
2299 const bool enabled = flags & 0x1 ? true :
false;
2300 const bool ceiling = flags & 0x2 ? true :
false;
2305 std::shared_ptr<LineList> skyList(
new LineList());
2307 ArtificialHorizonEntity *horizon =
new ArtificialHorizonEntity;
2309 horizon->setRegion(regionName);
2310 horizon->setEnabled(enabled);
2311 horizon->setCeiling(ceiling);
2312 horizon->setList(skyList);
2314 horizonList.
append(horizon);
2316 for (
int j = 0; j < points.
rowCount(); j++)
2318 std::shared_ptr<SkyPoint> p(
new SkyPoint());
2320 record = points.
record(j);
2323 p->HorizontalToEquatorial(KStarsData::Instance()->lst(), KStarsData::Instance()->geo()->lat());
2324 skyList->
append(std::move(p));
2340 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2351 for (
int i = 0; i < regions.
rowCount(); ++i)
2355 if (!query.exec(tableQuery))
2356 qCWarning(KSTARS) << query.lastError().text();
2371 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2383 regions.
setData(regions.
index(0, 2), horizon->region());
2385 if (horizon->enabled()) flags |= 0x1;
2386 if (horizon->ceiling()) flags |= 0x2;
2391 QString tableQuery =
QString(
"CREATE TABLE %1 (Az REAL NOT NULL, Alt REAL NOT NULL)").
arg(tableName);
2393 query.exec(tableQuery);
2399 SkyList *skyList = horizon->list()->points();
2401 for (
const auto &item : *skyList)
2406 rec.
setValue(
"Az", item->az().Degrees());
2407 rec.
setValue(
"Alt", item->alt().Degrees());
2416void KSUserDB::CreateImageOverlayTableIfNecessary()
2419 QString command =
"CREATE TABLE IF NOT EXISTS imageOverlays ( "
2420 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
2421 "filename TEXT NOT NULL,"
2422 "enabled INTEGER DEFAULT 0,"
2423 "nickname TEXT DEFAULT NULL,"
2424 "status INTEGER DEFAULT 0,"
2425 "orientation REAL DEFAULT 0.0,"
2426 "ra REAL DEFAULT 0.0,"
2427 "dec REAL DEFAULT 0.0,"
2428 "pixelsPerArcsec REAL DEFAULT 0.0,"
2429 "eastToTheRight INTEGER DEFAULT 0,"
2430 "width INTEGER DEFAULT 0,"
2431 "height INTEGER DEFAULT 0)";
2433 if (!query.exec(command))
2435 qCDebug(KSTARS) << query.lastError();
2436 qCDebug(KSTARS) << query.executedQuery();
2442 CreateImageOverlayTableIfNecessary();
2446 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2451 overlays.
setTable(
"imageOverlays");
2459 if (!query.exec(dropQuery))
2460 qCWarning(KSTARS) << query.lastError().text();
2467 CreateImageOverlayTableIfNecessary();
2471 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2476 overlays.
setTable(
"imageOverlays");
2477 overlays.
setFilter(
"filename LIKE \'" + overlay.m_Filename +
"\'");
2483 record.
setValue(
"filename", overlay.m_Filename);
2484 record.
setValue(
"enabled",
static_cast<int>(overlay.m_Enabled));
2485 record.
setValue(
"nickname", overlay.m_Nickname);
2486 record.
setValue(
"status",
static_cast<int>(overlay.m_Status));
2487 record.
setValue(
"orientation", overlay.m_Orientation);
2488 record.
setValue(
"ra", overlay.m_RA);
2489 record.
setValue(
"dec", overlay.m_DEC);
2490 record.
setValue(
"pixelsPerArcsec", overlay.m_ArcsecPerPixel);
2491 record.
setValue(
"eastToTheRight",
static_cast<int>(overlay.m_EastToTheRight));
2492 record.
setValue(
"width", overlay.m_Width);
2493 record.
setValue(
"height", overlay.m_Height);
2502 overlays.
setData(overlays.
index(row, 1), overlay.m_Filename);
2503 overlays.
setData(overlays.
index(row, 2),
static_cast<int>(overlay.m_Enabled));
2504 overlays.
setData(overlays.
index(row, 3), overlay.m_Nickname);
2505 overlays.
setData(overlays.
index(row, 4),
static_cast<int>(overlay.m_Status));
2506 overlays.
setData(overlays.
index(row, 5), overlay.m_Orientation);
2507 overlays.
setData(overlays.
index(row, 6), overlay.m_RA);
2508 overlays.
setData(overlays.
index(row, 7), overlay.m_DEC);
2509 overlays.
setData(overlays.
index(row, 8), overlay.m_ArcsecPerPixel);
2510 overlays.
setData(overlays.
index(row, 9),
static_cast<int>(overlay.m_EastToTheRight));
2511 overlays.
setData(overlays.
index(row, 10), overlay.m_Width);
2512 overlays.
setData(overlays.
index(row, 11), overlay.m_Height);
2520 CreateImageOverlayTableIfNecessary();
2524 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2528 imageOverlayList->
clear();
2530 overlays.
setTable(
"imageOverlays");
2533 for (
int i = 0; i < overlays.
rowCount(); ++i)
2538 const bool enabled =
static_cast<bool>(record.
value(
"enabled").toInt());
2540 const ImageOverlay::Status status
2541 =
static_cast<ImageOverlay::Status
>(record.
value(
"status").toInt());
2542 const double orientation = record.
value(
"orientation").
toDouble();
2545 const double pixelsPerArcsec = record.
value(
"pixelsPerArcsec").
toDouble();
2546 const bool eastToTheRight =
static_cast<bool>(record.
value(
"eastToTheRight").toInt());
2547 const int width = record.
value(
"width").
toInt();
2548 const int height = record.
value(
"height").
toInt();
2549 ImageOverlay o(filename, enabled, nickname, status, orientation, ra, dec, pixelsPerArcsec,
2550 eastToTheRight, width, height);
2551 imageOverlayList->
append(o);
2558void KSUserDB::CreateImagingPlannerTableIfNecessary()
2561 QString command =
"CREATE TABLE IF NOT EXISTS imagingPlanner ( "
2562 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
2563 "name TEXT NOT NULL,"
2564 "flags INTEGER DEFAULT 0,"
2565 "notes TEXT DEFAULT NULL)";
2567 if (!query.exec(command))
2569 qCDebug(KSTARS) << query.lastError();
2570 qCDebug(KSTARS) << query.executedQuery();
2576 CreateImagingPlannerTableIfNecessary();
2580 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2585 entries.
setTable(
"imagingPlanner");
2593 if (!query.exec(dropQuery))
2594 qCWarning(KSTARS) << query.lastError().text();
2602 CreateImagingPlannerTableIfNecessary();
2606 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2611 entries.
setTable(
"imagingPlanner");
2612 entries.
setFilter(
"name LIKE \'" + entry.m_Name +
"\'");
2618 record.
setValue(
"name", entry.m_Name);
2619 record.
setValue(
"flags",
static_cast<int>(entry.m_Flags));
2620 record.
setValue(
"notes", entry.m_Notes);
2629 entries.
setData(entries.
index(row, 2),
static_cast<int>(entry.m_Flags));
2640 CreateImagingPlannerTableIfNecessary();
2644 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2650 entries.
setTable(
"imagingPlanner");
2653 for (
int i = 0; i < entries.
rowCount(); ++i)
2657 const int flags = record.
value(
"flags").
toInt();
2659 ImagingPlannerDBEntry e(name, flags, notes);
2668void KSUserDB::CreateSkyMapViewTableIfNecessary()
2671 QString command =
"CREATE TABLE IF NOT EXISTS SkyMapViews ( "
2672 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
2673 "name TEXT NOT NULL UNIQUE, "
2676 if (!query.exec(command))
2678 qCDebug(KSTARS) << query.lastError();
2679 qCDebug(KSTARS) << query.executedQuery();
2685 CreateSkyMapViewTableIfNecessary();
2689 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2702 if (!query.exec(dropQuery))
2703 qCWarning(KSTARS) << query.lastError().text();
2710 CreateSkyMapViewTableIfNecessary();
2714 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2720 views.
setFilter(
"name LIKE \'" + view.name +
"\'");
2726 record.
setValue(
"name", view.name);
2745 CreateSkyMapViewTableIfNecessary();
2749 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2753 skyMapViewList.
clear();
2758 for (
int i = 0; i < views.
rowCount(); ++i)
2767 qCCritical(KSTARS) <<
"Data associated with sky map view " << name <<
" is invalid!";
2771 skyMapViewList.
append(o);
2778int KSUserDB::AddProfile(
const QString &name)
2783 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2789 QSqlQuery
query(db);
2790 bool rc =
query.exec(QString(
"INSERT INTO profile (name) VALUES('%1')").arg(name));
2793 qCWarning(KSTARS) <<
query.lastQuery() <<
query.lastError().text();
2795 id =
query.lastInsertId().toInt();
2805 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2809 QSqlQuery
query(db);
2815 qCWarning(KSTARS) <<
query.lastQuery() <<
query.lastError().text();
2825 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2829 QSqlQuery
query(db);
2834 qCWarning(KSTARS) <<
query.lastQuery() <<
query.lastError().text();
2837 qCWarning(KSTARS) <<
query.lastQuery() <<
query.lastError().text();
2838 rc =
query.exec(
"DELETE FROM opticaltrainsettings WHERE opticaltrain IN (select id FROM opticaltrains WHERE profile=" +
2841 qCWarning(KSTARS) <<
query.lastQuery() <<
query.lastError().text();
2844 qCWarning(KSTARS) <<
query.lastQuery() <<
query.lastError().text();
2854 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2859 DeleteProfileDrivers(pi);
2861 QSqlQuery
query(db);
2864 if (!
query.exec(QString(
"UPDATE profile SET "
2865 "host=null,port=null,city=null,province=null,country=null,indiwebmanagerport=NULL,"
2866 "autoconnect=NULL,portselector=NULL,indihub=0 WHERE id=%1")
2868 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2871 if (!
query.exec(QString(
"UPDATE profile SET name='%1' WHERE id=%2").arg(pi->name).arg(pi->id)))
2872 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2875 if (pi->host.isEmpty() ==
false)
2878 QString(
"UPDATE profile SET host='%1',port=%2 WHERE id=%3").arg(pi->host).arg((pi->port)).arg(pi->id)))
2879 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2881 if (pi->INDIWebManagerPort != -1)
2883 if (!
query.exec(QString(
"UPDATE profile SET indiwebmanagerport='%1' WHERE id=%2")
2884 .arg(pi->INDIWebManagerPort)
2886 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2891 if (pi->city.isEmpty() ==
false)
2893 if (!
query.exec(QString(
"UPDATE profile SET city='%1',province='%2',country='%3' WHERE id=%4")
2894 .arg(pi->city, pi->province, pi->country)
2897 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2902 if (!
query.exec(QString(
"UPDATE profile SET autoconnect=%1 WHERE id=%2").arg(pi->autoConnect ? 1 : 0).arg(pi->id)))
2903 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2906 if (!
query.exec(QString(
"UPDATE profile SET portselector=%1 WHERE id=%2").arg(pi->portSelector ? 1 : 0).arg(pi->id)))
2907 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2910 if (!
query.exec(QString(
"UPDATE profile SET guidertype=%1 WHERE id=%2").arg(pi->guidertype).arg(pi->id)))
2911 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2914 if (!
query.exec(QString(
"UPDATE profile SET indihub=%1 WHERE id=%2").arg(pi->indihub).arg(pi->id)))
2915 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2918 if (pi->guidertype != 0)
2920 if (!
query.exec(QString(
"UPDATE profile SET guiderhost='%1' WHERE id=%2").arg(pi->guiderhost).arg(pi->id)))
2921 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2922 if (!
query.exec(QString(
"UPDATE profile SET guiderport=%1 WHERE id=%2").arg(pi->guiderport).arg(pi->id)))
2923 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2927 if (!
query.exec(QString(
"UPDATE profile SET remotedrivers='%1' WHERE id=%2").arg(pi->remotedrivers).arg(pi->id)))
2928 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2933 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2935 QMapIterator<QString, QString> i(pi->drivers);
2939 if (!
query.exec(QString(
"INSERT INTO driver (label, role, profile) VALUES('%1','%2',%3)")
2940 .arg(i.value(), i.key())
2943 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
2958 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
2967 for (
int i = 0; i < profile.
rowCount(); ++i)
2984 pi->INDIWebManagerPort = record.
value(
"indiwebmanagerport").
toInt();
2985 pi->autoConnect = (record.
value(
"autoconnect").toInt() == 1);
2986 pi->portSelector = (record.
value(
"portselector").toInt() == 1);
2988 pi->indihub = record.
value(
"indihub").
toInt();
2990 pi->guidertype = record.
value(
"guidertype").
toInt();
2991 if (pi->guidertype != 0)
2994 pi->guiderport = record.
value(
"guiderport").
toInt();
2997 pi->remotedrivers = record.
value(
"remotedrivers").
toString();
3001 GetProfileDrivers(pi);
3003 profiles.append(std::move(pi));
3014 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3018 QSqlTableModel driver(
nullptr, db);
3019 driver.setTable(
"driver");
3021 if (driver.select() ==
false)
3022 qCWarning(KSTARS) <<
"Driver select error:" << driver.lastError().text();
3024 for (
int i = 0; i < driver.rowCount(); ++i)
3026 QSqlRecord record = driver.record(i);
3030 pi->drivers[role] =
label;
3058 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3062 QSqlQuery
query(db);
3068 qCWarning(KSTARS) <<
query.executedQuery() <<
query.lastError().text();
3081 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3091 record.
setValue(
"FocalLength", focalLength);
3092 record.
setValue(
"FocalRatio", focalRatio);
3095 qCritical() << __FUNCTION__ << equip.
lastError();
3109 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3123 record.
setValue(
"FocalLength", focalLength);
3124 record.
setValue(
"FocalRatio", focalRatio);
3135 dslrlens_list.
clear();
3140 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3148 for (
int i = 0; i < equip.
rowCount(); ++i)
3154 double focalLength = record.
value(
"FocalLength").
toDouble();
3166bool KSUserDB::getOpticalElementByID(
int id,
QJsonObject &element)
3171 KStarsData::Instance()->userdb()->GetAllScopes(scopeList);
3172 KStarsData::Instance()->userdb()->GetAllDSLRLenses(dslrlensList);
3174 for (
auto &oneScope : scopeList)
3176 if (oneScope->id().toInt() ==
id)
3178 element = oneScope->toJson();
3183 for (
auto &oneLens : dslrlensList)
3185 if (oneLens->id().toInt() ==
id)
3187 element = oneLens->toJson();
3200 KStarsData::Instance()->userdb()->GetAllScopes(scopeList);
3201 KStarsData::Instance()->userdb()->GetAllDSLRLenses(dslrlensList);
3203 if (!scopeList.
empty())
3205 element = scopeList.
last()->toJson();
3209 if (!dslrlensList.
empty())
3211 element = dslrlensList.
last()->toJson();
3223 KStarsData::Instance()->userdb()->GetAllScopes(scopeList);
3224 KStarsData::Instance()->userdb()->GetAllDSLRLenses(dslrlensList);
3226 for (
auto &oneScope : scopeList)
3228 if (oneScope->name() == name)
3230 element = oneScope->toJson();
3235 for (
auto &oneLens : dslrlensList)
3237 if (oneLens->name() == name)
3239 element = oneLens->toJson();
3252 QList<OAL::Scope *> scopeList;
3253 QList<OAL::DSLRLens *> dslrlensList;
3257 for (
auto &oneValue : scopeList)
3258 names << oneValue->name();
3260 for (
auto &oneValue : dslrlensList)
3261 names << oneValue->name();
3270 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3273 profileSettings.
setTable(
"profilesettings");
3274 profileSettings.
select();
3277 record.
setValue(
"profile", profile);
3278 record.
setValue(
"settings", settings);
3282 qCWarning(KSTARS) << profileSettings.
lastError();
3286void KSUserDB::UpdateProfileSettings(uint32_t profile,
const QByteArray &settings)
3290 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3293 profileSettings.setTable(
"profilesettings");
3294 profileSettings.setFilter(
QString(
"profile=%1").arg(profile));
3295 profileSettings.select();
3297 QSqlRecord record = profileSettings.record(0);
3298 record.
setValue(
"settings", settings);
3299 profileSettings.setRecord(0, record);
3301 if (!profileSettings.submitAll())
3302 qCWarning(KSTARS) << profileSettings.lastError();
3305void KSUserDB::DeleteProfileSettings(uint32_t profile)
3309 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3311 QSqlTableModel profileSettings(
nullptr, db);
3312 profileSettings.setTable(
"profilesettings");
3313 profileSettings.setFilter(QString(
"profile=%1").arg(profile));
3315 profileSettings.select();
3316 profileSettings.removeRows(0, profileSettings.rowCount() - 1);
3317 profileSettings.submitAll();
3325 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3332 profileSettings.
setTable(
"profilesettings");
3334 profileSettings.
select();
3336 if (profileSettings.
rowCount() > 0)
3344 settings = doc.object().toVariantMap();
3358 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3363 OpticalTrainSettings.
setTable(
"opticaltrainsettings");
3364 OpticalTrainSettings.
select();
3367 record.
setValue(
"opticaltrain", train);
3368 record.
setValue(
"settings", settings);
3373 qCWarning(KSTARS) << OpticalTrainSettings.
lastError();
3380bool KSUserDB::UpdateOpticalTrainSettings(uint32_t train,
const QByteArray &settings)
3385 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3389 QSqlTableModel OpticalTrainSettings(
nullptr, db);
3390 OpticalTrainSettings.setTable(
"opticaltrainsettings");
3391 OpticalTrainSettings.setFilter(QString(
"opticaltrain=%1").arg(train));
3392 OpticalTrainSettings.select();
3394 QSqlRecord record = OpticalTrainSettings.record(0);
3395 record.
setValue(
"settings", settings);
3396 OpticalTrainSettings.setRecord(0, record);
3398 if (!OpticalTrainSettings.submitAll())
3399 qCWarning(KSTARS) << OpticalTrainSettings.lastError();
3404bool KSUserDB::DeleteOpticalTrainSettings(uint32_t train)
3409 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3413 QSqlQuery
query(db);
3414 return query.exec(QString(
"DELETE FROM opticaltrainsettings WHERE opticaltrain=%1").arg(train));
3422 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3429 OpticalTrainSettings.
setTable(
"OpticalTrainsettings");
3431 OpticalTrainSettings.
select();
3433 if (OpticalTrainSettings.
rowCount() > 0)
3441 settings = doc.object().toVariantMap();
3460 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3465 collimationOverlayElement.
setTable(
"collimationoverlayelements");
3466 collimationOverlayElement.
select();
3473 for (QVariantMap::const_iterator iter = oneElement.begin(); iter != oneElement.end(); ++iter)
3474 record.
setValue(iter.key(), iter.value());
3478 if (!collimationOverlayElement.
submitAll())
3480 qCWarning(KSTARS) << collimationOverlayElement.
lastError();
3495 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3500 collimationOverlayElement.
setTable(
"collimationoverlayelements");
3502 collimationOverlayElement.
select();
3506 for (QVariantMap::const_iterator iter = oneElement.begin(); iter != oneElement.end(); ++iter)
3507 record.
setValue(iter.key(), iter.value());
3509 collimationOverlayElement.
setRecord(0, record);
3511 if (!collimationOverlayElement.
submitAll())
3513 qCWarning(KSTARS) << collimationOverlayElement.
lastError();
3523bool KSUserDB::DeleteCollimationOverlayElement(
int id)
3528 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3532 QSqlTableModel collimationOverlayElement(
nullptr, db);
3533 collimationOverlayElement.setTable(
"collimationoverlayelements");
3534 collimationOverlayElement.setFilter(QString(
"id=%1").arg(
id));
3536 collimationOverlayElement.select();
3538 collimationOverlayElement.removeRows(0, 1);
3539 collimationOverlayElement.submitAll();
3551 qCCritical(KSTARS) <<
"Failed to open database:" << db.lastError();
3555 collimationOverlayElements.
clear();
3558 collimationOverlayElement.
setTable(
"collimationoverlayelements");
3559 collimationOverlayElement.
select();
3561 for (
int i = 0; i < collimationOverlayElement.
rowCount(); ++i)
3563 QVariantMap recordMap;
3565 for (
int j = 0; j < record.
count(); j++)
3568 collimationOverlayElements.
append(recordMap);
Handles adding new drivers to database.
bool GetAllImageOverlays(QList< ImageOverlay > *imageOverlayList)
Gets all the image overlay rows from the database.
bool UpdateCollimationOverlayElement(const QVariantMap &oneElement, int id)
Update an existing collimation overlay element.
bool AddOpticalTrain(const QVariantMap &oneTrain)
Add a new optical train to the database.
bool AddFilter(const filterProperties *fp)
Add a new filter to the database.
bool AddSkyMapView(const SkyMapView &view)
Adds a new sky map view row in the database.
bool DeleteAllFlags()
Erases all the flags from the database.
bool AddCollimationOverlayElement(const QVariantMap &oneElement)
Add a new collimation overlay element to the database.
bool AddObserver(const QString &name, const QString &surname, const QString &contact)
Adds a new observer into the database.
bool AddLens(const QString &vendor, const QString &model, const double &factor)
Add a new lens to the database.
bool GetAllScopes(QList< OAL::Scope * > &m_scopeList)
updates the scope list with all scopes from database List is cleared and then filled with content.
bool GetAllHorizons(QList< ArtificialHorizonEntity * > &horizonList)
Gets all the artificial horizon rows from the database.
bool AddDSLRLens(const QString &model, const QString &vendor, const double focalLength, const double focalRatio)
Appends the DSLR lens with given details in the database.
bool getLastOpticalElement(QJsonObject &element)
getLastOpticalElement Return last inserted scope or lens
void AddProfileSettings(uint32_t profile, const QByteArray &settings)
Add new profile settings to the database.
bool AddImagingPlannerEntry(const ImagingPlannerDBEntry &entry)
Adds a new Imaging Planner row into the database.
bool GetAllObservers(QList< OAL::Observer * > &observer_list)
Updates the passed reference of observer_list with all observers The original content of the list is ...
bool AddFlag(const QString &ra, const QString &dec, const QString &epoch, const QString &image_name, const QString &label, const QString &labelColor)
Add a new Flag with given parameters.
bool GetAllFlags(QList< QStringList > &flagList)
Returns a QList populated with all stored flags Order: const QString &ra, const QString &dec,...
bool GetAllSkyMapViews(QList< SkyMapView > &skyMapViewList)
Gets all the sky map view rows from the database.
bool AddHorizon(ArtificialHorizonEntity *horizon)
Adds a new artificial horizon row into the database.
bool DeleteDarkFrame(const QString &filename)
KSUserDB::DeleteDarkFrame Delete from database a dark frame record that matches the filename field.
bool GetAllLenses(QList< OAL::Lens * > &m_lensList)
Populate the reference passed with all lenses.
bool DeleteAllSkyMapViews()
Deletes all the sky map views stored in the database.
bool GetAllFilters(QList< OAL::Filter * > &m_filterList)
Populate the reference passed with all filters.
bool AddDarkFrame(const QVariantMap &oneFrame)
KSUserDB::AddDarkFrame Saves a new dark frame data to the database.
bool AddImageOverlay(const ImageOverlay &overlay)
Adds a new image overlay row into the database.
bool GetProfileSettings(uint32_t profile, QVariantMap &settings)
Populate the reference passed with settings for one paritcular profile.
bool DeleteObserver(const QString &id)
Removes the user with unique id as given by FindObserver Returns false if the user is not found.
bool Initialize()
Initialize KStarsDB while running splash screen.
bool GetCollimationOverlayElements(QList< QVariantMap > &collimationOverlayElements)
Populate the reference passed with all collimation overlay elements.
bool AddScope(const QString &model, const QString &vendor, const QString &type, const double &aperture, const double &focalLength)
Appends the scope with given details in the database.
bool DeleteEquipment(const QString &type, const QString &id)
Erase the equipment with given type and unique id Valid equipment types: "telescope",...
bool DeleteAllEquipment(const QString &type)
Erases the whole equipment table of given type.
bool UpdateDarkFrame(const QVariantMap &oneFrame)
KSUserDB::UpdateDarkFrame Updates an existing dark frame record in the data, replace all values match...
bool GetOpticalTrains(uint32_t profileID, QList< QVariantMap > &opticalTrains)
Populate the reference passed with all optical trains.
bool UpdateOpticalTrain(const QVariantMap &oneTrain, int id)
Update an existing optical train.
bool FindObserver(const QString &name, const QString &surname)
Returns the unique id of the user with given name & surname.
bool GetAllDSLRLenses(QList< OAL::DSLRLens * > &dslrlens_list)
updates the dslr list with all DSLR lenses from database List is cleared and then filled with content...
bool GetOpticalTrainSettings(uint32_t train, QVariantMap &settings)
Populate the reference passed with settings for one paritcular Train.
bool AddEyepiece(const QString &vendor, const QString &model, const double &focalLength, const double &fov, const QString &fovunit)
Add new eyepiece to database.
bool DeleteAllImagingPlannerEntries()
Deletes all Imaging Planner rows from the database.
bool DeleteAllImageOverlays()
Deletes all image overlay rows from the database.
bool GetAllProfiles(QList< QSharedPointer< ProfileInfo > > &profiles)
GetAllProfiles Return all profiles in a QList.
bool GetAllEyepieces(QList< OAL::Eyepiece * > &m_eyepieceList)
Populate the reference passed with all eyepieces.
bool AddOpticalTrainSettings(uint32_t train, const QByteArray &settings)
Add new Train settings to the database.
bool DeleteAllHorizons()
Deletes all artificial horizon rows from the database.
bool GetAllImagingPlannerEntries(QList< ImagingPlannerDBEntry > *entryList)
Gets all the Imaging Planner rows from the database.
A simple data container used by LineListIndex.
Information on DSLR lens used in astrophotography.
Information of user filters.
Information of lens utilized in the observation.
FIXME: why not just use a QHash?
Information on telescope used in observation.
The sky coordinates of a point in the sky.
KSERVICE_EXPORT KService::List query(FilterFunc filterFunc)
VehicleSection::Type type(QStringView coachNumber, QStringView coachClassification)
QString label(StandardShortcut id)
bool insertRow(int row, const QModelIndex &parent)
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const const override
bool copy(const QString &fileName, const QString &newName)
bool exists(const QString &path)
QString filePath() const const
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error)
bool isNull() const const
bool isObject() const const
QJsonObject object() const const
QByteArray toJson(JsonFormat format) const const
void append(QList< T > &&value)
qsizetype count() const const
QSqlDatabase addDatabase(QSqlDriver *driver, const QString &connectionName)
QSqlDatabase database(const QString &connectionName, bool open)
QString text() const const
QSqlError lastError() const const
void append(const QSqlField &field)
QString fieldName(int index) const const
void setValue(const QString &name, const QVariant &val)
QVariant value(const QString &name) const const
virtual void clear() override
bool insertRecord(int row, const QSqlRecord &record)
virtual bool insertRows(int row, int count, const QModelIndex &parent) override
QSqlRecord record() const const
virtual bool removeRows(int row, int count, const QModelIndex &parent) override
virtual int rowCount(const QModelIndex &parent) const const override
virtual bool setData(const QModelIndex &index, const QVariant &value, int role) override
virtual void setEditStrategy(EditStrategy strategy)
virtual void setFilter(const QString &filter)
bool setRecord(int row, const QSqlRecord &values)
virtual void setTable(const QString &tableName)
QString & append(QChar ch)
QString arg(Args &&... args) const const
QString fromLocal8Bit(QByteArrayView str)
QString number(double n, char format, int precision)
QString & remove(QChar ch, Qt::CaseSensitivity cs)
double toDouble(bool *ok) const const
int toInt(bool *ok, int base) const const
QByteArray toUtf8() const const
QString toString() const const
QByteArray toByteArray() const const
double toDouble(bool *ok) const const
int toInt(bool *ok) const const
QString toString() const const
bool isEndElement() const const
bool isStartElement() const const
QStringView name() const const
Carries parameters of a sky map view.