File indexing completed on 2025-01-19 09:45:51
0001 /* 0002 SPDX-FileCopyrightText: 2009 Prakash Mohan <prakash.mohan@kdemail.net> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "log.h" 0008 0009 #include "kstars.h" 0010 #include "kstarsdata.h" 0011 #include "kstarsdatetime.h" 0012 #include "ksutils.h" 0013 #include "observinglist.h" 0014 #include "skymap.h" 0015 #include "skycomponents/constellationboundarylines.h" 0016 #include "skycomponents/skymapcomposite.h" 0017 #include "skyobjects/skyobject.h" 0018 #include "skyobjects/starobject.h" 0019 0020 #include "kstars_debug.h" 0021 0022 OAL::Log::~Log() 0023 { 0024 //qDeleteAll(m_targetList); 0025 qDeleteAll(m_observerList); 0026 qDeleteAll(m_eyepieceList); 0027 qDeleteAll(m_lensList); 0028 qDeleteAll(m_filterList); 0029 qDeleteAll(m_siteList); 0030 qDeleteAll(m_sessionList); 0031 qDeleteAll(m_scopeList); 0032 qDeleteAll(m_dslrLensList); 0033 qDeleteAll(m_observationList); 0034 } 0035 0036 void OAL::Log::writeBegin() 0037 { 0038 output = ""; 0039 //m_targetList = KSUtils::makeVanillaPointerList(KStarsData::Instance()->observingList()->sessionList()); 0040 m_targetList = KStarsData::Instance()->observingList()->sessionList(); 0041 writer = new QXmlStreamWriter(&output); 0042 writer->setAutoFormatting(true); 0043 writer->writeStartDocument(); 0044 writer->writeNamespace("http://observation.sourceforge.net/openastronomylog", "oal"); 0045 writer->writeNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi"); 0046 writer->writeNamespace("http://observation.sourceforge.net/openastronomylog oal20.xsd", "schemaLocation"); 0047 writer->writeStartElement("oal:observations"); 0048 writer->writeAttribute("version", "2.0"); 0049 } 0050 0051 QString OAL::Log::writeLog(bool _native) 0052 { 0053 native = _native; 0054 writeBegin(); 0055 if (native) 0056 writeGeoDate(); 0057 writeObservers(); 0058 writeSites(); 0059 writeSessions(); 0060 writeTargets(); 0061 writeScopes(); 0062 writeDSLRLenses(); 0063 writeEyepieces(); 0064 writeLenses(); 0065 writeFilters(); 0066 writeImagers(); 0067 writeObservations(); 0068 writeEnd(); 0069 return output; 0070 } 0071 0072 void OAL::Log::writeEnd() 0073 { 0074 writer->writeEndDocument(); 0075 delete writer; 0076 } 0077 0078 void OAL::Log::writeObservers() 0079 { 0080 writer->writeStartElement("observers"); 0081 foreach (OAL::Observer *o, m_observerList) 0082 writeObserver(o); 0083 writer->writeEndElement(); 0084 } 0085 0086 void OAL::Log::writeSites() 0087 { 0088 writer->writeStartElement("sites"); 0089 foreach (OAL::Site *o, m_siteList) 0090 writeSite(o); 0091 writer->writeEndElement(); 0092 } 0093 0094 void OAL::Log::writeSessions() 0095 { 0096 writer->writeStartElement("sessions"); 0097 foreach (OAL::Session *o, m_sessionList) 0098 writeSession(o); 0099 writer->writeEndElement(); 0100 } 0101 0102 void OAL::Log::writeTargets() 0103 { 0104 writer->writeStartElement("targets"); 0105 //foreach (SkyObject *o, m_targetList) 0106 for (auto &o : m_targetList) 0107 { 0108 writeTarget(o.data()); 0109 } 0110 writer->writeEndElement(); 0111 } 0112 0113 void OAL::Log::writeScopes() 0114 { 0115 writer->writeStartElement("scopes"); 0116 foreach (OAL::Scope *o, m_scopeList) 0117 writeScope(o); 0118 writer->writeEndElement(); 0119 } 0120 0121 void OAL::Log::writeDSLRLenses() 0122 { 0123 writer->writeStartElement("dslrlenses"); 0124 for (const auto &o : m_dslrLensList) 0125 writeDSLRLenses(o); 0126 writer->writeEndElement(); 0127 } 0128 0129 void OAL::Log::writeEyepieces() 0130 { 0131 writer->writeStartElement("eyepieces"); 0132 foreach (OAL::Eyepiece *o, m_eyepieceList) 0133 writeEyepiece(o); 0134 writer->writeEndElement(); 0135 } 0136 0137 void OAL::Log::writeLenses() 0138 { 0139 writer->writeStartElement("lenses"); 0140 foreach (OAL::Lens *o, m_lensList) 0141 writeLens(o); 0142 writer->writeEndElement(); 0143 } 0144 0145 void OAL::Log::writeFilters() 0146 { 0147 writer->writeStartElement("filters"); 0148 foreach (OAL::Filter *o, m_filterList) 0149 writeFilter(o); 0150 writer->writeEndElement(); 0151 } 0152 0153 void OAL::Log::writeImagers() 0154 { 0155 writer->writeStartElement("imagers"); 0156 writer->writeEndElement(); 0157 } 0158 0159 void OAL::Log::writeObservations() 0160 { 0161 foreach (OAL::Observation *o, m_observationList) 0162 writeObservation(o); 0163 } 0164 0165 void OAL::Log::writeTarget(SkyObject *o) 0166 { 0167 writer->writeStartElement("target"); 0168 writer->writeAttribute("id", o->name().remove(' ')); 0169 QString typeString; 0170 if (native) 0171 writer->writeAttribute("type", o->typeName()); 0172 else 0173 { 0174 switch (o->type()) 0175 { 0176 case 0: 0177 typeString = "oal:starTargetType"; 0178 break; 0179 case 1: 0180 typeString = "oal:starTargetType"; 0181 break; 0182 case 2: 0183 typeString = "oal:PlanetTargetType"; 0184 break; 0185 case 3: 0186 typeString = "oal:deepSkyOC"; 0187 break; 0188 case 4: 0189 typeString = "oal:deepSkyGC"; 0190 break; 0191 case 5: 0192 typeString = "oal:deepSkyGN"; 0193 break; 0194 case 6: 0195 typeString = "oal:deepSkyPN"; 0196 break; 0197 case 8: 0198 typeString = "oal:deepSkyGX"; 0199 break; 0200 case 9: 0201 typeString = "oal:CometTargetType"; 0202 break; 0203 case 12: 0204 typeString = "oal:MoonTargetType"; 0205 break; 0206 case 13: 0207 typeString = "oal:deepSkyAS"; 0208 break; 0209 case 14: 0210 typeString = "oal:deepSkyCG"; 0211 break; 0212 case 15: 0213 typeString = "oal:deepSkyDN"; 0214 break; 0215 case 16: 0216 typeString = "oal:deepSkyQS"; 0217 break; 0218 case 17: 0219 typeString = "oal:deepSkyMS"; 0220 break; 0221 default: 0222 typeString = "oal:deepSkyNA"; 0223 break; 0224 } 0225 writer->writeAttribute("xsi:type", typeString); 0226 } 0227 writer->writeStartElement("datasource"); 0228 writer->writeCDATA("KStars"); 0229 writer->writeEndElement(); 0230 writer->writeStartElement("name"); 0231 QString name = o->name(); 0232 if (name == "star") 0233 { 0234 if (((StarObject *)o)->getHDIndex() != 0) 0235 name = QString("HD %1").arg(((StarObject *)o)->getHDIndex()); 0236 } 0237 writer->writeCDATA(name); 0238 writer->writeEndElement(); 0239 writer->writeStartElement("position"); 0240 writer->writeStartElement("ra"); 0241 writer->writeAttribute("unit", "rad"); 0242 writer->writeCharacters(QString::number(o->ra().radians())); 0243 writer->writeEndElement(); 0244 writer->writeStartElement("dec"); 0245 writer->writeAttribute("unit", "rad"); 0246 writer->writeCharacters(QString::number(o->dec().radians())); 0247 writer->writeEndElement(); 0248 writer->writeEndElement(); 0249 if (native && !KStarsData::Instance()->observingList()->getTime(o).isEmpty()) 0250 { 0251 writer->writeStartElement("time"); 0252 writer->writeCDATA(KStarsData::Instance()->observingList()->getTime(o)); 0253 writer->writeEndElement(); 0254 } 0255 writer->writeStartElement("constellation"); 0256 writer->writeCDATA(KStarsData::Instance() 0257 ->skyComposite() 0258 ->constellationBoundary() 0259 ->constellationName(o)); 0260 writer->writeEndElement(); 0261 writer->writeStartElement("notes"); 0262 writer->writeCDATA(KStarsData::Instance()->getUserData(o->name()).userLog); 0263 writer->writeEndElement(); 0264 writer->writeEndElement(); 0265 } 0266 0267 void OAL::Log::writeObserver(OAL::Observer *o) 0268 { 0269 writer->writeStartElement("observer"); 0270 writer->writeAttribute("id", o->id()); 0271 writer->writeStartElement("name"); 0272 writer->writeCDATA(o->name()); 0273 writer->writeEndElement(); 0274 writer->writeStartElement("surname"); 0275 writer->writeCDATA(o->surname()); 0276 writer->writeEndElement(); 0277 writer->writeStartElement("contact"); 0278 writer->writeCDATA(o->contact()); 0279 writer->writeEndElement(); 0280 writer->writeEndElement(); 0281 } 0282 0283 void OAL::Log::writeSite(OAL::Site *s) 0284 { 0285 writer->writeStartElement("site"); 0286 writer->writeAttribute("id", s->id()); 0287 writer->writeStartElement("name"); 0288 writer->writeCDATA(s->name()); 0289 writer->writeEndElement(); 0290 writer->writeStartElement("latitude"); 0291 writer->writeAttribute("unit", s->latUnit()); 0292 writer->writeCharacters(QString::number(s->latitude())); 0293 writer->writeStartElement("longitude"); 0294 writer->writeAttribute("unit", s->lonUnit()); 0295 writer->writeCharacters(QString::number(s->longitude())); 0296 writer->writeEndElement(); 0297 writer->writeEndElement(); 0298 } 0299 0300 void OAL::Log::writeSession(OAL::Session *s) 0301 { 0302 writer->writeStartElement("session"); 0303 writer->writeAttribute("id", s->id()); 0304 writer->writeStartElement("begin"); 0305 writer->writeCharacters(s->begin().date().toString("yyyy-MM-dd") + 'T' + s->begin().time().toString("hh:mm:ss")); 0306 writer->writeEndElement(); 0307 writer->writeStartElement("end"); 0308 writer->writeCharacters(s->end().date().toString("yyyy-MM-dd") + 'T' + s->end().time().toString("hh:mm:ss")); 0309 writer->writeEndElement(); 0310 writer->writeStartElement("site"); 0311 writer->writeCharacters(s->site()); 0312 writer->writeEndElement(); 0313 writer->writeStartElement("weather"); 0314 writer->writeCDATA(s->weather()); 0315 writer->writeEndElement(); 0316 writer->writeStartElement("equipment"); 0317 writer->writeCDATA(s->equipment()); 0318 writer->writeEndElement(); 0319 writer->writeStartElement("comments"); 0320 writer->writeCDATA(s->comments()); 0321 writer->writeEndElement(); 0322 writer->writeEndElement(); 0323 } 0324 0325 void OAL::Log::writeScope(OAL::Scope *s) 0326 { 0327 writer->writeStartElement("scope"); 0328 writer->writeAttribute("id", s->id()); 0329 writer->writeStartElement("model"); 0330 writer->writeCDATA(s->model()); 0331 writer->writeEndElement(); 0332 writer->writeStartElement("type"); 0333 writer->writeCDATA(s->type().at(0)); 0334 writer->writeEndElement(); 0335 writer->writeStartElement("vendor"); 0336 writer->writeCDATA(s->vendor()); 0337 writer->writeEndElement(); 0338 writer->writeStartElement("aperture"); 0339 writer->writeCharacters(QString::number(s->aperture())); 0340 writer->writeEndElement(); 0341 writer->writeStartElement("focalLength"); 0342 writer->writeCharacters(QString::number(s->focalLength())); 0343 writer->writeEndElement(); 0344 writer->writeEndElement(); 0345 writer->writeEndElement(); 0346 } 0347 0348 void OAL::Log::writeDSLRLenses(OAL::DSLRLens *s) 0349 { 0350 writer->writeStartElement("dslrlens"); 0351 writer->writeAttribute("id", s->id()); 0352 writer->writeStartElement("model"); 0353 writer->writeCDATA(s->model()); 0354 writer->writeEndElement(); 0355 writer->writeStartElement("vendor"); 0356 writer->writeCDATA(s->vendor()); 0357 writer->writeEndElement(); 0358 writer->writeStartElement("focalLength"); 0359 writer->writeCharacters(QString::number(s->focalLength())); 0360 writer->writeEndElement(); 0361 writer->writeStartElement("focalRatio"); 0362 writer->writeCharacters(QString::number(s->focalRatio())); 0363 writer->writeEndElement(); 0364 writer->writeEndElement(); 0365 } 0366 0367 void OAL::Log::writeEyepiece(OAL::Eyepiece *ep) 0368 { 0369 writer->writeStartElement("eyepiece"); 0370 writer->writeAttribute("id", ep->id()); 0371 writer->writeStartElement("model"); 0372 writer->writeCDATA(ep->model()); 0373 writer->writeEndElement(); 0374 writer->writeStartElement("vendor"); 0375 writer->writeCDATA(ep->vendor()); 0376 writer->writeEndElement(); 0377 writer->writeStartElement("focalLength"); 0378 writer->writeCharacters(QString::number(ep->focalLength())); 0379 writer->writeEndElement(); 0380 writer->writeStartElement("apparantFOV"); 0381 writer->writeAttribute("unit", ep->fovUnit()); 0382 writer->writeCharacters(QString::number(ep->appFov())); 0383 writer->writeEndElement(); 0384 writer->writeEndElement(); 0385 } 0386 0387 void OAL::Log::writeLens(OAL::Lens *l) 0388 { 0389 writer->writeStartElement("lens"); 0390 writer->writeAttribute("id", l->id()); 0391 writer->writeStartElement("model"); 0392 writer->writeCDATA(l->model()); 0393 writer->writeEndElement(); 0394 writer->writeStartElement("vendor"); 0395 writer->writeCDATA(l->vendor()); 0396 writer->writeEndElement(); 0397 writer->writeStartElement("factor"); 0398 writer->writeCharacters(QString::number(l->factor())); 0399 writer->writeEndElement(); 0400 writer->writeEndElement(); 0401 } 0402 0403 void OAL::Log::writeFilter(OAL::Filter *f) 0404 { 0405 writer->writeStartElement("filter"); 0406 writer->writeAttribute("id", f->id()); 0407 0408 // Model 0409 writer->writeStartElement("model"); 0410 writer->writeCDATA(f->model()); 0411 writer->writeEndElement(); 0412 // Vendor 0413 writer->writeStartElement("vendor"); 0414 writer->writeCDATA(f->vendor()); 0415 writer->writeEndElement(); 0416 // Type 0417 writer->writeStartElement("type"); 0418 writer->writeCDATA(f->type()); 0419 writer->writeEndElement(); 0420 // Color 0421 writer->writeStartElement("color"); 0422 writer->writeCDATA(f->color()); 0423 writer->writeEndElement(); 0424 // Offset 0425 writer->writeStartElement("offset"); 0426 writer->writeCDATA(QString::number(f->offset())); 0427 writer->writeEndElement(); 0428 // Exposure 0429 writer->writeStartElement("exposure"); 0430 writer->writeCDATA(QString::number(f->exposure())); 0431 writer->writeEndElement(); 0432 // AutoFocus 0433 writer->writeStartElement("autofocus"); 0434 writer->writeCDATA(QString::number(f->useAutoFocus() ? 1 : 0)); 0435 writer->writeEndElement(); 0436 // Locked Filter 0437 writer->writeStartElement("lockedfilter"); 0438 writer->writeCDATA(f->lockedFilter()); 0439 writer->writeEndElement(); 0440 0441 writer->writeEndElement(); 0442 } 0443 0444 void OAL::Log::writeObservation(OAL::Observation *o) 0445 { 0446 writer->writeStartElement("observation"); 0447 writer->writeStartElement("observer"); 0448 writer->writeCharacters(o->observer()); 0449 writer->writeEndElement(); 0450 writer->writeStartElement("site"); 0451 writer->writeCharacters(o->site()); 0452 writer->writeEndElement(); 0453 writer->writeStartElement("session"); 0454 writer->writeCharacters(o->session()); 0455 writer->writeEndElement(); 0456 writer->writeStartElement("target"); 0457 writer->writeCharacters(o->target().remove(' ')); 0458 writer->writeEndElement(); 0459 writer->writeStartElement("begin"); 0460 writer->writeCharacters(o->begin().date().toString("yyyy-MM-dd") + 'T' + o->begin().time().toString("hh:mm:ss")); 0461 writer->writeEndElement(); 0462 writer->writeStartElement("faintestStar"); 0463 writer->writeCharacters(QString::number(o->faintestStar())); 0464 writer->writeEndElement(); 0465 writer->writeStartElement("seeing"); 0466 writer->writeCharacters(QString::number(o->seeing())); 0467 writer->writeEndElement(); 0468 writer->writeStartElement("scope"); 0469 writer->writeCharacters(o->scope()); 0470 writer->writeEndElement(); 0471 writer->writeStartElement("eyepiece"); 0472 writer->writeCharacters(o->eyepiece()); 0473 writer->writeEndElement(); 0474 writer->writeStartElement("lens"); 0475 writer->writeCharacters(o->lens()); 0476 writer->writeEndElement(); 0477 writer->writeStartElement("filter"); 0478 writer->writeCharacters(o->filter()); 0479 writer->writeEndElement(); 0480 writer->writeStartElement("result"); 0481 writer->writeAttribute("xsi:type", "oal:findingsType"); 0482 writer->writeAttribute("lang", o->lang()); 0483 writer->writeStartElement("description"); 0484 writer->writeCDATA(o->result()); 0485 writer->writeEndElement(); 0486 writer->writeEndElement(); 0487 writer->writeEndElement(); 0488 } 0489 0490 void OAL::Log::writeGeoDate() 0491 { 0492 writer->writeStartElement("geodate"); 0493 writer->writeStartElement("name"); 0494 writer->writeCDATA(KStarsData::Instance()->observingList()->geoLocation()->name()); 0495 writer->writeEndElement(); 0496 writer->writeStartElement("province"); 0497 writer->writeCDATA(KStarsData::Instance()->observingList()->geoLocation()->province()); 0498 writer->writeEndElement(); 0499 writer->writeStartElement("country"); 0500 writer->writeCDATA(KStarsData::Instance()->observingList()->geoLocation()->country()); 0501 writer->writeEndElement(); 0502 writer->writeStartElement("date"); 0503 writer->writeCDATA(KStarsData::Instance()->observingList()->dateTime().date().toString("ddMMyyyy")); 0504 writer->writeEndElement(); 0505 writer->writeEndElement(); 0506 } 0507 0508 void OAL::Log::readBegin(QString input) 0509 { 0510 reader = new QXmlStreamReader(input); 0511 while (!reader->atEnd()) 0512 { 0513 reader->readNext(); 0514 if (reader->isStartElement()) 0515 { 0516 // if( reader->name() == "oal:observations" && reader->attributes().value("version") == "2.0" ) 0517 readLog(); 0518 } 0519 } 0520 } 0521 0522 void OAL::Log::readUnknownElement() 0523 { 0524 while (!reader->atEnd()) 0525 { 0526 reader->readNext(); 0527 0528 if (reader->isEndElement()) 0529 break; 0530 0531 if (reader->isStartElement()) 0532 readUnknownElement(); 0533 } 0534 } 0535 0536 void OAL::Log::readLog() 0537 { 0538 while (!reader->atEnd()) 0539 { 0540 reader->readNext(); 0541 0542 if (reader->isEndElement()) 0543 break; 0544 0545 if (reader->isStartElement()) 0546 { 0547 if (reader->name() == "targets") 0548 readTargets(); 0549 else if (reader->name() == "sites") 0550 readSites(); 0551 else if (reader->name() == "sessions") 0552 readSessions(); 0553 else if (reader->name() == "observation") 0554 readObservation(reader->attributes().value("id").toString()); 0555 else if (reader->name() == "geodate") 0556 readGeoDate(); 0557 else 0558 readUnknownElement(); 0559 } 0560 } 0561 } 0562 0563 void OAL::Log::readTargets() 0564 { 0565 while (!reader->atEnd()) 0566 { 0567 reader->readNext(); 0568 0569 if (reader->isEndElement()) 0570 break; 0571 0572 if (reader->isStartElement()) 0573 { 0574 if (reader->name() == "target") 0575 readTarget(); 0576 else 0577 readUnknownElement(); 0578 } 0579 } 0580 } 0581 0582 void OAL::Log::readObservers() 0583 { 0584 KStars::Instance()->data()->userdb()->GetAllObservers(m_observerList); 0585 } 0586 0587 void OAL::Log::readSites() 0588 { 0589 while (!reader->atEnd()) 0590 { 0591 reader->readNext(); 0592 0593 if (reader->isEndElement()) 0594 break; 0595 0596 if (reader->isStartElement()) 0597 { 0598 if (reader->name() == "site") 0599 readSite(reader->attributes().value("id").toString()); 0600 else 0601 readUnknownElement(); 0602 } 0603 } 0604 } 0605 0606 void OAL::Log::readSessions() 0607 { 0608 while (!reader->atEnd()) 0609 { 0610 reader->readNext(); 0611 0612 if (reader->isEndElement()) 0613 break; 0614 0615 if (reader->isStartElement()) 0616 { 0617 if (reader->name() == "session") 0618 readSession(reader->attributes().value("id").toString(), reader->attributes().value("lang").toString()); 0619 else 0620 readUnknownElement(); 0621 } 0622 } 0623 } 0624 0625 void OAL::Log::readScopes() 0626 { 0627 KStars::Instance()->data()->userdb()->GetAllScopes(m_scopeList); 0628 } 0629 0630 void OAL::Log::readDSLRLenses() 0631 { 0632 KStars::Instance()->data()->userdb()->GetAllDSLRLenses(m_dslrLensList); 0633 } 0634 0635 void OAL::Log::readEyepieces() 0636 { 0637 KStars::Instance()->data()->userdb()->GetAllEyepieces(m_eyepieceList); 0638 } 0639 0640 void OAL::Log::readLenses() 0641 { 0642 KStars::Instance()->data()->userdb()->GetAllLenses(m_lensList); 0643 } 0644 0645 void OAL::Log::readFilters() 0646 { 0647 KStars::Instance()->data()->userdb()->GetAllFilters(m_filterList); 0648 } 0649 0650 void OAL::Log::readTarget() 0651 { 0652 SkyObject *o = nullptr; 0653 SkyPoint pos; 0654 bool posOK = false; 0655 QString name, time, notes; 0656 while (!reader->atEnd()) 0657 { 0658 reader->readNext(); 0659 0660 if (reader->isEndElement()) 0661 break; 0662 0663 if (reader->isStartElement()) 0664 { 0665 if (reader->name() == "name") 0666 { 0667 name = reader->readElementText(); 0668 if (name != "star") 0669 { 0670 o = KStarsData::Instance()->objectNamed(name); 0671 if (!o) 0672 o = KStarsData::Instance() 0673 ->skyComposite() 0674 ->findStarByGenetiveName(name); 0675 if (o) 0676 targetList().append(QSharedPointer<SkyObject>(o->clone())); 0677 } 0678 } 0679 else if (!o && reader->name() == "position") 0680 { 0681 pos = readPosition(posOK); 0682 if (posOK) 0683 { 0684 double maxrd = 0.5; 0685 while (!o && maxrd <= 2.0) 0686 { 0687 o = KStarsData::Instance()->skyComposite()->starNearest(&pos, 0688 maxrd); 0689 if (!o) 0690 maxrd += 0.5; 0691 } 0692 0693 if (o) 0694 targetList().append(QSharedPointer<SkyObject>(o->clone())); 0695 } 0696 } 0697 else if (reader->name() == "time") 0698 { 0699 time = reader->readElementText(); 0700 if (o) 0701 TimeHash.insert(o->name(), QTime::fromString(time, "h:mm:ss AP")); 0702 } 0703 else if (reader->name() == "notes") 0704 { 0705 notes = reader->readElementText(); 0706 if (o) 0707 { 0708 KStarsData::Instance()->updateUserLog(o->name(), notes); 0709 } 0710 } 0711 // else if( reader->name() == "datasource" ) 0712 // qDebug() << reader->readElementText(); 0713 // else if( reader->name() == "position" ) 0714 // readPosition(); 0715 // else if( reader->name() == "constellation" ) 0716 // qDebug() << reader->readElementText(); 0717 else 0718 readUnknownElement(); 0719 } 0720 } 0721 } 0722 0723 void OAL::Log::readSite(const QString &id) 0724 { 0725 QString name, latUnit, lonUnit, lat, lon; 0726 while (!reader->atEnd()) 0727 { 0728 reader->readNext(); 0729 0730 if (reader->isEndElement()) 0731 break; 0732 0733 if (reader->isStartElement()) 0734 { 0735 if (reader->name() == "name") 0736 { 0737 name = reader->readElementText(); 0738 } 0739 else if (reader->name() == "latitude") 0740 { 0741 lat = reader->readElementText(); 0742 latUnit = reader->attributes().value("unit").toString(); 0743 } 0744 else if (reader->name() == "longitude") 0745 { 0746 lon = reader->readElementText(); 0747 lonUnit = reader->attributes().value("unit").toString(); 0748 } 0749 else 0750 readUnknownElement(); 0751 } 0752 } 0753 OAL::Site *o = new OAL::Site(id, name, lat.toDouble(), latUnit, lon.toDouble(), lonUnit); 0754 m_siteList.append(o); 0755 } 0756 0757 void OAL::Log::readSession(const QString &id, const QString &lang) 0758 { 0759 QString site, weather, equipment, comments, begin, end; 0760 KStarsDateTime beginDT, endDT; 0761 while (!reader->atEnd()) 0762 { 0763 reader->readNext(); 0764 0765 if (reader->isEndElement()) 0766 break; 0767 0768 if (reader->isStartElement()) 0769 { 0770 if (reader->name() == "site") 0771 { 0772 site = reader->readElementText(); 0773 } 0774 else if (reader->name() == "begin") 0775 { 0776 begin = reader->readElementText(); 0777 beginDT.fromString(begin); 0778 } 0779 else if (reader->name() == "end") 0780 { 0781 end = reader->readElementText(); 0782 endDT.fromString(begin); 0783 } 0784 else if (reader->name() == "weather") 0785 { 0786 weather = reader->readElementText(); 0787 } 0788 else if (reader->name() == "equipment") 0789 { 0790 equipment = reader->readElementText(); 0791 } 0792 else if (reader->name() == "comments") 0793 { 0794 comments = reader->readElementText(); 0795 } 0796 else 0797 readUnknownElement(); 0798 } 0799 } 0800 OAL::Session *o = new OAL::Session(id, site, beginDT, endDT, weather, equipment, comments, lang); 0801 m_sessionList.append(o); 0802 } 0803 0804 SkyPoint OAL::Log::readPosition(bool &OK) 0805 { 0806 SkyPoint p; 0807 bool RAOK = false, DEOK = false; 0808 while (!reader->atEnd()) 0809 { 0810 reader->readNext(); 0811 0812 if (reader->isEndElement()) 0813 break; 0814 0815 if (reader->isStartElement()) 0816 { 0817 if (reader->name() == "ra") 0818 { 0819 qDebug() << reader->readElementText() << reader->attributes().value("unit"); 0820 dms ra; 0821 if (reader->attributes().value("unit") == "rad") 0822 ra.setRadians(reader->readElementText().toDouble(&RAOK)); 0823 else 0824 ra.setD(reader->readElementText().toDouble(&RAOK)); 0825 0826 p.setRA(ra); 0827 } 0828 else if (reader->name() == "dec") 0829 { 0830 qDebug() << reader->readElementText() << reader->attributes().value("unit"); 0831 dms de; 0832 if (reader->attributes().value("unit") == "rad") 0833 de.setRadians(reader->readElementText().toDouble(&DEOK)); 0834 else 0835 de.setD(reader->readElementText().toDouble(&DEOK)); 0836 0837 p.setDec(de); 0838 } 0839 else 0840 readUnknownElement(); 0841 } 0842 } 0843 0844 OK = RAOK && DEOK; 0845 0846 return p; 0847 } 0848 0849 void OAL::Log::readObservation(const QString &id) 0850 { 0851 QString observer, site, session, target, faintestStar, seeing, scope, eyepiece, lens, filter, result, lang; 0852 KStarsDateTime begin; 0853 while (!reader->atEnd()) 0854 { 0855 reader->readNext(); 0856 if (reader->isEndElement()) 0857 break; 0858 if (reader->isStartElement()) 0859 { 0860 if (reader->name() == "observer") 0861 observer = reader->readElementText(); 0862 else if (reader->name() == "site") 0863 site = reader->readElementText(); 0864 else if (reader->name() == "session") 0865 session = reader->readElementText(); 0866 else if (reader->name() == "target") 0867 target = reader->readElementText(); 0868 else if (reader->name() == "begin") 0869 begin.fromString(reader->readElementText()); 0870 else if (reader->name() == "faintestStar") 0871 faintestStar = reader->readElementText(); 0872 else if (reader->name() == "seeing") 0873 seeing = reader->readElementText(); 0874 else if (reader->name() == "scope") 0875 scope = reader->readElementText(); 0876 else if (reader->name() == "eyepiece") 0877 eyepiece = reader->readElementText(); 0878 else if (reader->name() == "lens") 0879 lens = reader->readElementText(); 0880 else if (reader->name() == "filter") 0881 filter = reader->readElementText(); 0882 else if (reader->name() == "result") 0883 { 0884 lang = reader->attributes().value("lang").toString(); 0885 result = readResult(); 0886 } 0887 else 0888 readUnknownElement(); 0889 } 0890 } 0891 OAL::Observation *o = new OAL::Observation(id, observer, site, session, target, begin, faintestStar.toDouble(), 0892 seeing.toDouble(), scope, eyepiece, lens, filter, result, lang); 0893 m_observationList.append(o); 0894 } 0895 0896 QString OAL::Log::readResult() 0897 { 0898 QString result; 0899 while (!reader->atEnd()) 0900 { 0901 reader->readNext(); 0902 0903 if (reader->isEndElement()) 0904 break; 0905 if (reader->isStartElement()) 0906 { 0907 if (reader->name() == "description") 0908 result = reader->readElementText(); 0909 else 0910 readUnknownElement(); 0911 } 0912 } 0913 return result; 0914 } 0915 0916 void OAL::Log::readGeoDate() 0917 { 0918 QString name, province, country, date; 0919 while (!reader->atEnd()) 0920 { 0921 reader->readNext(); 0922 0923 if (reader->isEndElement()) 0924 break; 0925 0926 if (reader->isStartElement()) 0927 { 0928 if (reader->name() == "name") 0929 name = reader->readElementText(); 0930 else if (reader->name() == "province") 0931 province = reader->readElementText(); 0932 else if (reader->name() == "country") 0933 country = reader->readElementText(); 0934 else if (reader->name() == "date") 0935 { 0936 date = reader->readElementText(); 0937 } 0938 else 0939 readUnknownElement(); 0940 } 0941 } 0942 geo = KStarsData::Instance()->locationNamed(name, province, country); 0943 if (geo == nullptr) 0944 { 0945 qCWarning(KSTARS) << "Location " << name << ", " << province << ", " << country 0946 << " not found in KStars. Using current location."; 0947 geo = KStarsData::Instance()->geo(); 0948 } 0949 dt.setDate(QDate::fromString(date, "ddMMyyyy")); 0950 } 0951 0952 OAL::Observer *OAL::Log::findObserverByName(const QString &name) 0953 { 0954 foreach (OAL::Observer *obs, *observerList()) 0955 { 0956 if (QString(obs->name() + ' ' + obs->surname()) == name) 0957 return obs; 0958 } 0959 return nullptr; 0960 } 0961 0962 OAL::Observer *OAL::Log::findObserverById(const QString &id) 0963 { 0964 foreach (OAL::Observer *obs, *observerList()) 0965 { 0966 if (obs->id() == id) 0967 return obs; 0968 } 0969 return nullptr; 0970 } 0971 0972 OAL::Session *OAL::Log::findSessionByName(const QString &id) 0973 { 0974 foreach (OAL::Session *s, *sessionList()) 0975 { 0976 if (s->id() == id) 0977 return s; 0978 } 0979 return nullptr; 0980 } 0981 0982 OAL::Site *OAL::Log::findSiteById(const QString &id) 0983 { 0984 foreach (OAL::Site *s, *siteList()) 0985 { 0986 if (s->id() == id) 0987 return s; 0988 } 0989 return nullptr; 0990 } 0991 0992 OAL::Site *OAL::Log::findSiteByName(const QString &name) 0993 { 0994 foreach (OAL::Site *s, *siteList()) 0995 { 0996 if (s->name() == name) 0997 return s; 0998 } 0999 return nullptr; 1000 } 1001 1002 OAL::Scope *OAL::Log::findScopeById(const QString &id) 1003 { 1004 foreach (OAL::Scope *s, *scopeList()) 1005 { 1006 if (s->id() == id) 1007 return s; 1008 } 1009 return nullptr; 1010 } 1011 1012 OAL::Eyepiece *OAL::Log::findEyepieceById(const QString &id) 1013 { 1014 foreach (OAL::Eyepiece *e, *eyepieceList()) 1015 { 1016 if (e->id() == id) 1017 return e; 1018 } 1019 return nullptr; 1020 } 1021 1022 OAL::Lens *OAL::Log::findLensById(const QString &id) 1023 { 1024 foreach (OAL::Lens *l, *lensList()) 1025 { 1026 if (l->id() == id) 1027 return l; 1028 } 1029 return nullptr; 1030 } 1031 1032 OAL::Filter *OAL::Log::findFilterById(const QString &id) 1033 { 1034 foreach (OAL::Filter *f, *filterList()) 1035 { 1036 if (f->id() == id) 1037 return f; 1038 } 1039 return nullptr; 1040 } 1041 1042 OAL::Scope *OAL::Log::findScopeByName(const QString &name) 1043 { 1044 foreach (OAL::Scope *s, *scopeList()) 1045 { 1046 if (s->name() == name) 1047 return s; 1048 } 1049 return nullptr; 1050 } 1051 1052 OAL::DSLRLens *OAL::Log::findDSLRLensByName(const QString &name) 1053 { 1054 for (const auto &s : *dslrLensList()) 1055 { 1056 if (s->name() == name) 1057 return s; 1058 } 1059 return nullptr; 1060 } 1061 1062 OAL::DSLRLens *OAL::Log::findDSLRLensById(const QString &id) 1063 { 1064 for (const auto &s : *dslrLensList()) 1065 { 1066 if (s->id() == id) 1067 return s; 1068 } 1069 return nullptr; 1070 } 1071 1072 OAL::Eyepiece *OAL::Log::findEyepieceByName(const QString &name) 1073 { 1074 foreach (OAL::Eyepiece *e, *eyepieceList()) 1075 { 1076 if (e->name() == name) 1077 return e; 1078 } 1079 return nullptr; 1080 } 1081 1082 OAL::Filter *OAL::Log::findFilterByName(const QString &name) 1083 { 1084 foreach (OAL::Filter *f, *filterList()) 1085 { 1086 if (f->name() == name) 1087 return f; 1088 } 1089 return nullptr; 1090 } 1091 1092 OAL::Lens *OAL::Log::findLensByName(const QString &name) 1093 { 1094 foreach (OAL::Lens *l, *lensList()) 1095 { 1096 if (l->name() == name) 1097 return l; 1098 } 1099 return nullptr; 1100 } 1101 1102 OAL::Observation *OAL::Log::findObservationByName(const QString &id) 1103 { 1104 foreach (OAL::Observation *o, *observationList()) 1105 { 1106 if (o->id() == id) 1107 return o; 1108 } 1109 return nullptr; 1110 } 1111 1112 void OAL::Log::readAll() 1113 { 1114 readObservers(); 1115 readScopes(); 1116 readEyepieces(); 1117 readLenses(); 1118 readFilters(); 1119 }