34 userdb_ = QSqlDatabase::addDatabase(
"QSQLITE",
"userdb");
35 QString dbfile = KStandardDirs::locateLocal(
"appdata",
"userdb.sqlite");
37 bool first_run =
false;
38 if (!testdb.exists()) {
39 kDebug()<< i18n(
"User DB does not exist! New User DB will be "
43 userdb_.setDatabaseName(dbfile);
44 if (!userdb_.open()) {
45 kWarning() << i18n(
"Unable to open user database file!");
46 kWarning() << LastError();
48 kDebug() << i18n(
"Opened the User DB. Ready!");
49 if (first_run ==
true) {
61 QSqlError KSUserDB::LastError() {
63 return userdb_.lastError();
66 bool KSUserDB::FirstRun() {
78 bool KSUserDB::RebuildDB() {
79 kWarning() << i18n(
"Rebuilding User Database");
80 QVector<QString> tables;
81 tables.append(
"CREATE TABLE Version ("
82 "Version CHAR DEFAULT NULL)");
83 tables.append(
"INSERT INTO Version VALUES (\"" KSTARS_VERSION
"\")");
84 tables.append(
"CREATE TABLE user ( "
85 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
86 "Name TEXT NOT NULL DEFAULT 'NULL', "
87 "Surname TEXT NOT NULL DEFAULT 'NULL', "
88 "Contact TEXT DEFAULT NULL)");
90 tables.append(
"CREATE TABLE telescope ( "
91 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
92 "Vendor TEXT DEFAULT NULL, "
93 "Aperture REAL NOT NULL DEFAULT NULL, "
94 "Model TEXT DEFAULT NULL, "
95 "Driver TEXT DEFAULT NULL, "
96 "Type TEXT DEFAULT NULL, "
97 "FocalLength REAL DEFAULT NULL)");
99 tables.append(
"CREATE TABLE flags ( "
100 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
101 "RA TEXT NOT NULL DEFAULT NULL, "
102 "Dec TEXT NOT NULL DEFAULT NULL, "
103 "Icon TEXT NOT NULL DEFAULT 'NULL', "
104 "Label TEXT NOT NULL DEFAULT 'NULL', "
105 "Color TEXT DEFAULT NULL, "
106 "Epoch TEXT DEFAULT NULL)");
108 tables.append(
"CREATE TABLE lens ( "
109 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
110 "Vendor TEXT NOT NULL DEFAULT 'NULL', "
111 "Model TEXT DEFAULT NULL, "
112 "Factor REAL NOT NULL DEFAULT NULL)");
114 tables.append(
"CREATE TABLE eyepiece ( "
115 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
116 "Vendor TEXT DEFAULT NULL, "
117 "Model TEXT DEFAULT NULL, "
118 "FocalLength REAL NOT NULL DEFAULT NULL, "
119 "ApparentFOV REAL NOT NULL DEFAULT NULL, "
120 "FOVUnit TEXT NOT NULL DEFAULT NULL)");
122 tables.append(
"CREATE TABLE filter ( "
123 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
124 "Vendor TEXT DEFAULT NULL, "
125 "Model TEXT DEFAULT NULL, "
126 "Type TEXT DEFAULT NULL, "
127 "Color TEXT DEFAULT NULL)");
129 tables.append(
"CREATE TABLE wishlist ( "
130 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
131 "Date NUMERIC NOT NULL DEFAULT NULL, "
132 "Type TEXT DEFAULT NULL, "
133 "UIUD TEXT DEFAULT NULL)");
135 tables.append(
"CREATE TABLE fov ( "
136 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
137 "name TEXT NOT NULL DEFAULT 'NULL', "
138 "color TEXT DEFAULT NULL, "
139 "sizeX NUMERIC DEFAULT NULL, "
140 "sizeY NUMERIC DEFAULT NULL, "
141 "shape TEXT DEFAULT NULL)");
143 tables.append(
"CREATE TABLE logentry ( "
144 "id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT, "
145 "content TEXT NOT NULL DEFAULT 'NULL', "
146 "UIUD TEXT DEFAULT NULL, "
147 "DateTime NUMERIC NOT NULL DEFAULT NULL, "
148 "User INTEGER DEFAULT NULL REFERENCES user (id), "
149 "Location TEXT DEFAULT NULL, "
150 "Telescope INTEGER DEFAULT NULL REFERENCES telescope (id),"
151 "Filter INTEGER DEFAULT NULL REFERENCES filter (id), "
152 "lens INTEGER DEFAULT NULL REFERENCES lens (id), "
153 "Eyepiece INTEGER DEFAULT NULL REFERENCES eyepiece (id), "
154 "FOV INTEGER DEFAULT NULL REFERENCES fov (id))");
156 for (
int i = 0; i < tables.count(); ++i) {
157 QSqlQuery query(userdb_);
158 if (!query.exec(tables[i])) {
159 kDebug() << query.lastError();
169 const QString& contact) {
171 QSqlTableModel users(0, userdb_);
172 users.setTable(
"user");
173 users.setFilter(
"Name LIKE \'" + name +
"\' AND Surname LIKE \'" +
177 if (users.rowCount() > 0) {
178 QSqlRecord record = users.record(0);
179 record.setValue(
"Name", name);
180 record.setValue(
"Surname", surname);
181 record.setValue(
"Contact", contact);
182 users.setRecord(0, record);
186 users.insertRows(row, 1);
187 users.setData(users.index(row, 1), name);
188 users.setData(users.index(row, 2), surname);
189 users.setData(users.index(row, 3), contact);
198 QSqlTableModel users(0, userdb_);
199 users.setTable(
"user");
200 users.setFilter(
"Name LIKE \'" + name +
"\' AND Surname LIKE \'" +
204 int observer_count = users.rowCount();
208 return (observer_count > 0);
214 QSqlTableModel users(0, userdb_);
215 users.setTable(
"user");
216 users.setFilter(
"id = \'"+
id+
"\'");
219 users.removeRows(0, 1);
222 int observer_count = users.rowCount();
226 return (observer_count > 0);
231 observer_list.clear();
232 QSqlTableModel users(0, userdb_);
233 users.setTable(
"user");
236 for (
int i =0; i < users.rowCount(); ++i) {
237 QSqlRecord record = users.record(i);
238 QString
id = record.value(
"id").toString();
239 QString name = record.value(
"Name").toString();
240 QString surname = record.value(
"Surname").toString();
241 QString contact = record.value(
"Contact").toString();
243 observer_list.append(o);
256 QSqlTableModel flags(0, userdb_);
257 flags.setTable(
"flags");
260 flags.removeRows(0, flags.rowCount());
268 const QString &epoch,
const QString &image_name,
269 const QString &label,
const QString &labelColor) {
271 QSqlTableModel flags(0, userdb_);
272 flags.setTable(
"flags");
275 flags.insertRows(row, 1);
276 flags.setData(flags.index(row, 1), ra);
277 flags.setData(flags.index(row, 2), dec);
278 flags.setData(flags.index(row, 3), image_name);
279 flags.setData(flags.index(row, 4), label);
280 flags.setData(flags.index(row, 5), labelColor);
281 flags.setData(flags.index(row, 6), epoch);
292 QSqlTableModel flags(0, userdb_);
293 flags.setTable(
"flags");
296 for (
int i =0; i < flags.rowCount(); ++i) {
297 QStringList flagEntry;
298 QSqlRecord record = flags.record(i);
306 flagEntry.append(record.value(1).toString());
307 flagEntry.append(record.value(2).toString());
308 flagEntry.append(record.value(6).toString());
309 flagEntry.append(record.value(3).toString());
310 flagEntry.append(record.value(4).toString());
311 flagEntry.append(record.value(5).toString());
312 flagList.append(flagEntry);
325 QSqlTableModel equip(0, userdb_);
326 equip.setTable(type);
327 equip.setFilter(
"id = " + QString::number(
id));
330 equip.removeRows(0, equip.rowCount());
339 QSqlTableModel equip(0, userdb_);
340 equip.setTable(type);
341 equip.setFilter(
"id >= 1");
343 equip.removeRows(0, equip.rowCount());
354 const QString &driver,
const QString &type,
355 const double & focalLength,
const double &aperture) {
357 QSqlTableModel equip(0, userdb_);
358 equip.setTable(
"telescope");
361 equip.insertRows(row, 1);
362 equip.setData(equip.index(row, 1), vendor);
363 equip.setData(equip.index(row, 2), aperture);
364 equip.setData(equip.index(row, 3), model);
365 equip.setData(equip.index(row, 4), driver);
366 equip.setData(equip.index(row, 5), type);
367 equip.setData(equip.index(row, 6), focalLength);
375 const QString &driver,
const QString &type,
376 const double &focalLength,
const double &aperture,
379 QSqlTableModel equip(0, userdb_);
380 equip.setTable(
"telescope");
381 equip.setFilter(
"id = " +
id);
384 if (equip.rowCount() > 0) {
385 QSqlRecord record = equip.record(0);
386 record.setValue(1, vendor);
387 record.setValue(2, aperture);
388 record.setValue(3, model);
389 record.setValue(4, driver);
390 record.setValue(5, type);
391 record.setValue(6, focalLength);
392 equip.setRecord(0, record);
403 QSqlTableModel equip(0, userdb_);
404 equip.setTable(
"telescope");
407 for (
int i =0; i < equip.rowCount(); ++i) {
408 QSqlRecord record = equip.record(i);
409 QString
id = record.value(
"id").toString();
410 QString vendor = record.value(
"Vendor").toString();
411 double aperture = record.value(
"Aperture").toDouble();
412 QString model = record.value(
"Model").toString();
413 QString driver = record.value(
"Driver").toString();
414 QString type = record.value(
"Type").toString();
415 double focalLength = record.value(
"FocalLength").toDouble();
417 focalLength, aperture);
419 scope_list.append(o);
430 const double &focalLength,
const double &fov,
431 const QString &fovunit) {
433 QSqlTableModel equip(0, userdb_);
434 equip.setTable(
"eyepiece");
437 equip.insertRows(row, 1);
438 equip.setData(equip.index(row, 1), vendor);
439 equip.setData(equip.index(row, 2), model);
440 equip.setData(equip.index(row, 3), focalLength);
441 equip.setData(equip.index(row, 4), fov);
442 equip.setData(equip.index(row, 5), fovunit);
450 const double &focalLength,
const double &fov,
451 const QString &fovunit,
const QString &
id) {
453 QSqlTableModel equip(0, userdb_);
454 equip.setTable(
"eyepiece");
455 equip.setFilter(
"id = " +
id);
458 if (equip.rowCount()>0) {
459 QSqlRecord record = equip.record(0);
460 record.setValue(1, vendor);
461 record.setValue(2, model);
462 record.setValue(3, focalLength);
463 record.setValue(4, fov);
464 record.setValue(5, fovunit);
465 equip.setRecord(0, record);
473 eyepiece_list.clear();
476 QSqlTableModel equip(0, userdb_);
477 equip.setTable(
"eyepiece");
480 for (
int i =0; i < equip.rowCount(); ++i) {
481 QSqlRecord record = equip.record(i);
482 QString
id = record.value(
"id").toString();
483 QString vendor = record.value(
"Vendor").toString();
484 QString model = record.value(
"Model").toString();
485 double focalLength = record.value(
"FocalLength").toDouble();
486 double fov = record.value(
"ApparentFOV").toDouble();
487 QString fovUnit = record.value(
"FOVUnit").toString();
490 fovUnit, focalLength);
491 eyepiece_list.append(o);
502 const double &factor) {
504 QSqlTableModel equip(0, userdb_);
505 equip.setTable(
"lens");
508 equip.insertRows(row, 1);
509 equip.setData(equip.index(row, 1), vendor);
510 equip.setData(equip.index(row, 2), model);
511 equip.setData(equip.index(row, 3), factor);
519 const double &factor,
const QString &
id) {
521 QSqlTableModel equip(0, userdb_);
522 equip.setTable(
"lens");
523 equip.setFilter(
"id = "+
id);
526 if (equip.rowCount()>0) {
527 QSqlRecord record = equip.record(0);
528 record.setValue(1, vendor);
529 record.setValue(2, model);
530 record.setValue(3, factor);
541 QSqlTableModel equip(0, userdb_);
542 equip.setTable(
"lens");
545 for (
int i =0; i < equip.rowCount(); ++i) {
546 QSqlRecord record = equip.record(i);
547 QString
id = record.value(
"id").toString();
548 QString vendor = record.value(
"Vendor").toString();
549 QString model = record.value(
"Model").toString();
550 double factor = record.value(
"Factor").toDouble();
563 const QString &type,
const QString &color) {
565 QSqlTableModel equip(0, userdb_);
566 equip.setTable(
"filter");
569 equip.insertRows(row, 1);
570 equip.setData(equip.index(row, 1), vendor);
571 equip.setData(equip.index(row, 2), model);
572 equip.setData(equip.index(row, 3), type);
573 equip.setData(equip.index(row, 4), color);
581 const QString &type,
const QString &color,
584 QSqlTableModel equip(0, userdb_);
585 equip.setTable(
"filter");
586 equip.setFilter(
"id = " +
id);
589 if (equip.rowCount() > 0) {
590 QSqlRecord record = equip.record(0);
591 record.setValue(1, vendor);
592 record.setValue(2, model);
593 record.setValue(3, type);
594 record.setValue(4, color);
604 QSqlTableModel equip(0, userdb_);
605 equip.setTable(
"filter");
608 for (
int i =0; i < equip.rowCount(); ++i) {
609 QSqlRecord record = equip.record(i);
610 QString
id = record.value(
"id").toString();
611 QString vendor = record.value(
"Vendor").toString();
612 QString model = record.value(
"Model").toString();
613 QString type = record.value(
"Type").toString();
614 QString color = record.value(
"Color").toString();
616 filter_list.append(o);
624 bool KSUserDB::ImportFlags() {
625 QString flagfilename = KStandardDirs::locateLocal(
"appdata",
"flags.dat");
626 QFile flagsfile(flagfilename);
627 if (!flagsfile.exists()) {
638 KSParser flagparser(flagfilename,
'#',flag_file_sequence,
' ');
640 QHash<QString, QVariant> row_content;
641 while (flagparser.HasNextRow()){
642 row_content = flagparser.ReadNextRow();
643 QString ra = row_content[
"RA"].toString();
644 QString dec = row_content[
"Dec"].toString();
645 QString epoch = row_content[
"epoch"].toString();
646 QString icon = row_content[
"icon"].toString();
647 QString label = row_content[
"label"].toString();
648 QString color = row_content[
"color"].toString();
650 AddFlag(ra,dec,epoch,icon,label,color);
655 bool KSUserDB::ImportUsers() {
656 QString usersfilename = KStandardDirs::locateLocal(
"appdata",
"observerlist.xml");
657 QFile usersfile(usersfilename);
659 if (!usersfile.exists()) {
663 if( ! usersfile.open( QIODevice::ReadOnly ) )
666 QXmlStreamReader *reader =
new QXmlStreamReader(&usersfile);
668 while( ! reader->atEnd() ) {
671 if( reader->isEndElement() )
674 if( reader->isStartElement() ) {
675 if (reader->name() !=
"observers")
679 while( ! reader->atEnd() ) {
682 if( reader->isEndElement() )
685 if( reader->isStartElement() ) {
687 if( reader->name() ==
"observer" ) {
688 QString name, surname, contact;
689 while( ! reader->atEnd() ) {
692 if( reader->isEndElement() )
695 if( reader->isStartElement() ) {
696 if( reader->name() ==
"name" ) {
697 name = reader->readElementText();
698 }
else if( reader->name() ==
"surname" ) {
699 surname = reader->readElementText();
700 }
else if( reader->name() ==
"contact" ) {
701 contact = reader->readElementText();
716 bool KSUserDB::ImportEquipment() {
717 QString equipfilename = KStandardDirs::locateLocal(
"appdata",
"equipmentlist.xml");
718 QFile equipfile(equipfilename);
720 if (!equipfile.exists()) {
724 if( ! equipfile.open( QIODevice::ReadOnly ) )
727 reader_ =
new QXmlStreamReader(&equipfile);
728 while( ! reader_->atEnd() ) {
730 if( reader_->isStartElement() ) {
731 while( ! reader_->atEnd() ) {
734 if( reader_->isEndElement() )
737 if( reader_->isStartElement() ) {
738 if( reader_->name() ==
"scopes" )
740 else if( reader_->name() ==
"eyepieces" )
742 else if( reader_->name() ==
"lenses" )
744 else if( reader_->name() ==
"filters" )
755 void KSUserDB::readScopes() {
756 while( ! reader_->atEnd() ) {
759 if( reader_->isEndElement() )
762 if( reader_->isStartElement() ) {
763 if( reader_->name() ==
"scope" )
764 readScope( reader_->attributes().value(
"id" ).toString() );
769 void KSUserDB::readEyepieces() {
770 while( ! reader_->atEnd() ) {
773 if( reader_->isEndElement() )
776 if( reader_->isStartElement() ) {
777 if( reader_->name() ==
"eyepiece" )
778 readEyepiece( reader_->attributes().value(
"id" ).toString() );
783 void KSUserDB::readLenses() {
784 while( ! reader_->atEnd() ) {
787 if( reader_->isEndElement() )
790 if( reader_->isStartElement() ) {
791 if( reader_->name() ==
"lens" )
792 readLens( reader_->attributes().value(
"id" ).toString() );
797 void KSUserDB::readFilters() {
798 while( ! reader_->atEnd() ) {
801 if( reader_->isEndElement() )
804 if( reader_->isStartElement() ) {
805 if( reader_->name() ==
"filter" )
806 readFilter( reader_->attributes().value(
"id" ).toString() );
811 void KSUserDB::readScope( QString
id ) {
812 QString model, vendor, type, driver = i18n(
"None");
813 double aperture, focalLength;
814 while( ! reader_->atEnd() ) {
817 if( reader_->isEndElement() )
820 if( reader_->isStartElement() ) {
821 if( reader_->name() ==
"model" ) {
822 model = reader_->readElementText();
823 }
else if( reader_->name() ==
"vendor" ) {
824 vendor = reader_->readElementText() ;
825 }
else if( reader_->name() ==
"type" ) {
826 type = reader_->readElementText() ;
827 if( type ==
"N" ) type =
"Newtonian";
828 if( type ==
"R" ) type =
"Refractor";
829 if( type ==
"M" ) type =
"Maksutov";
830 if( type ==
"S" ) type =
"Schmidt-Cassegrain";
831 if( type ==
"K" ) type =
"Kutter (Schiefspiegler)";
832 if( type ==
"C" ) type =
"Cassegrain";
833 }
else if( reader_->name() ==
"focalLength" ) {
834 focalLength = (reader_->readElementText()).toDouble() ;
835 }
else if( reader_->name() ==
"aperture" )
836 aperture = (reader_->readElementText()).toDouble() ;
837 else if ( reader_->name() ==
"driver")
838 driver = reader_->readElementText();
842 AddScope(model, vendor, driver, type, focalLength, aperture);
845 void KSUserDB::readEyepiece( QString
id ) {
846 QString model, focalLength, vendor, fov, fovUnit;
847 while( ! reader_->atEnd() ) {
850 if( reader_->isEndElement() )
853 if( reader_->isStartElement() ) {
854 if( reader_->name() ==
"model" ) {
855 model = reader_->readElementText();
856 }
else if( reader_->name() ==
"vendor" ) {
857 vendor = reader_->readElementText() ;
858 }
else if( reader_->name() ==
"apparentFOV" ) {
859 fov = reader_->readElementText();
860 fovUnit = reader_->attributes().value(
"unit" ).toString();
861 }
else if( reader_->name() ==
"focalLength" ) {
862 focalLength = reader_->readElementText() ;
867 AddEyepiece(vendor, model, focalLength.toDouble(), fov.toDouble(), fovUnit);
870 void KSUserDB::readLens( QString
id ) {
871 QString model, factor, vendor;
872 while( ! reader_->atEnd() ) {
875 if( reader_->isEndElement() )
878 if( reader_->isStartElement() ) {
879 if( reader_->name() ==
"model" ) {
880 model = reader_->readElementText();
881 }
else if( reader_->name() ==
"vendor" ) {
882 vendor = reader_->readElementText() ;
883 }
else if( reader_->name() ==
"factor" ) {
884 factor = reader_->readElementText() ;
889 AddLens(vendor, model, factor.toDouble());
892 void KSUserDB::readFilter( QString
id ) {
893 QString model, vendor, type, color;
894 while( ! reader_->atEnd() ) {
897 if( reader_->isEndElement() )
900 if( reader_->isStartElement() ) {
901 if( reader_->name() ==
"model" ) {
902 model = reader_->readElementText();
903 }
else if( reader_->name() ==
"vendor" ) {
904 vendor = reader_->readElementText() ;
905 }
else if( reader_->name() ==
"type" ) {
906 type = reader_->readElementText() ;
907 }
else if( reader_->name() ==
"color" ) {
908 color = reader_->readElementText() ;
int FindObserver(const QString &name, const QString &surname)
Returns the unique id of the user with given name & surname.
void AddScope(const QString &model, const QString &vendor, const QString &driver, const QString &type, const double &focalLength, const double &aperture)
Appends the scope with given details in the database.
void EraseAllEquipment(const QString &type)
Erases the whole equipment table of given type.
QList< QStringList > ReturnAllFlags()
Returns a QList populated with all stored flags Order: const QString &ra, const QString &dec...
Generic class for text file parsers used in KStars.
void GetAllObservers(QList< OAL::Observer * > &observer_list)
Updates the passed reference of observer_list with all observers The original content of the list is ...
void GetAllFilters(QList< OAL::Filter * > &m_filterList)
Populate the reference passed with all filters.
bool Initialize()
Initialize KStarsDB while running splash screen.
void EraseAllFlags()
Erases all the flags from the database.
void GetAllScopes(QList< OAL::Scope * > &m_scopeList)
updates the scope list with all scopes from database List is cleared and then filled with content...
void AddFilter(const QString &vendor, const QString &model, const QString &type, const QString &color)
Add a new filter to the database.
void AddLens(const QString &vendor, const QString &model, const double &factor)
Add a new lens to the database.
void GetAllEyepieces(QList< OAL::Eyepiece * > &m_eyepieceList)
Populate the reference passed with all eyepieces.
void setINDIDriver(const QString &driver)
void AddEyepiece(const QString &vendor, const QString &model, const double &focalLength, const double &fov, const QString &fovunit)
Add new eyepiece to database.
void GetAllLenses(QList< OAL::Lens * > &m_lensList)
Populate the reference passed with all lenses.
bool DeleteObserver(const QString &id)
Removes the user with unique id as given by FindObserver Returns false if the user is not found...
void AddObserver(const QString &name, const QString &surname, const QString &contact)
Adds a new observer into the database.
void EraseEquipment(const QString &type, const int &id)
Erase the equipment with given type and unique id Valid equipment types: "telescope","lens","filter".
void 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.