bool MeteorShowersMgr::loadCatalog(const QString& jsonPath) { qDebug() << "MeteorShowersMgr: Loading catalog file:" << QDir::toNativeSeparators(jsonPath); QFile jsonFile(jsonPath); if (!jsonFile.exists()) { restoreDefaultCatalog(jsonPath); } if (!jsonFile.open(QIODevice::ReadOnly)) { qWarning() << "MeteorShowersMgr: Cannot to open the catalog file!"; return false; } QJsonObject json(QJsonDocument::fromJson(jsonFile.readAll()).object()); jsonFile.close(); if (json["shortName"].toString() != "meteor showers data" || json["version"].toInt() != MS_CATALOG_VERSION) { qWarning() << "MeteorShowersMgr: The current catalog is not compatible!"; return false; } QVariantMap map = json["showers"].toObject().toVariantMap(); m_meteorShowers->loadMeteorShowers(map); return true; }
void MeteorShowersMgr::restoreDefaultSettings() { qDebug() << "MeteorShowersMgr: Restoring default settings"; m_conf->beginGroup(MS_CONFIG_PREFIX); m_conf->remove(""); m_conf->endGroup(); loadConfig(); restoreDefaultCatalog(m_catalogPath); m_configDialog->init(); }
void MeteorShowersMgr::init() { loadTextures(); m_meteorShowers = new MeteorShowers(this); m_configDialog = new MSConfigDialog(this); m_searchDialog = new MSSearchDialog(this); createActions(); loadConfig(); // timer to hide the alert messages m_messageTimer = new QTimer(this); m_messageTimer->setSingleShot(true); m_messageTimer->setInterval(9000); m_messageTimer->stop(); connect(m_messageTimer, SIGNAL(timeout()), this, SLOT(messageTimeout())); // MeteorShowers directory QString userDir = StelFileMgr::getUserDir() + "/modules/MeteorShowers"; StelFileMgr::makeSureDirExistsAndIsWritable(userDir); // Loads the JSON catalog m_catalogPath = userDir + "/showers.json"; if (!loadCatalog(m_catalogPath)) { displayMessage(q_("The current catalog of Meteor Showers is invalid!"), "#bb0000"); restoreDefaultCatalog(m_catalogPath); } // Sets up the download manager m_downloadMgr = new QNetworkAccessManager(this); connect(m_downloadMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(updateFinished(QNetworkReply*))); // every 5 min, check if it's time to update QTimer* updateTimer = new QTimer(this); updateTimer->setInterval(300000); connect(updateTimer, SIGNAL(timeout()), this, SLOT(checkForUpdates())); updateTimer->start(); checkForUpdates(); // always check if we are on Earth StelCore* core = StelApp::getInstance().getCore(); m_onEarth = core->getCurrentPlanet().data()->getEnglishName() == "Earth"; connect(core, SIGNAL(locationChanged(StelLocation)), this, SLOT(locationChanged(StelLocation))); // enable at startup? setEnablePlugin(getEnableAtStartup()); }
void Satellites::init() { QSettings* conf = StelApp::getInstance().getSettings(); try { // TODO: Compatibility with installation-dir modules? --BM // It seems that the original code couldn't handle them either. QString dirPath = StelFileMgr::getUserDir() + "/modules/Satellites"; // TODO: Ideally, this should return a QDir object StelFileMgr::makeSureDirExistsAndIsWritable(dirPath); dataDir.setPath(dirPath); // If no settings in the main config file, create with defaults if (!conf->childGroups().contains("Satellites")) { //qDebug() << "Stellites: created section in config file."; restoreDefaultSettings(); } // populate settings from main config file. loadSettings(); // absolute file name for inner catalog of the satellites catalogPath = dataDir.absoluteFilePath("satellites.json"); // absolute file name for qs.mag file qsMagFilePath = dataDir.absoluteFilePath("qs.mag"); // Load and find resources used in the plugin texPointer = StelApp::getInstance().getTextureManager().createTexture(StelFileMgr::getInstallationDir()+"/textures/pointeur5.png"); Satellite::hintTexture = StelApp::getInstance().getTextureManager().createTexture(":/satellites/hint.png"); // key bindings and other actions StelGui* gui = dynamic_cast<StelGui*>(StelApp::getInstance().getGui()); QString satGroup = N_("Satellites"); addAction("actionShow_Satellite_Hints", satGroup, N_("Satellite hints"), "hintsVisible", "Ctrl+Z"); addAction("actionShow_Satellite_Labels", satGroup, N_("Satellite labels"), "labelsVisible", "Shift+Z"); addAction("actionShow_Satellite_ConfigDialog_Global", satGroup, N_("Satellites configuration window"), configDialog, "visible", "Alt+Z"); // Gui toolbar button toolbarButton = new StelButton(NULL, QPixmap(":/satellites/bt_satellites_on.png"), QPixmap(":/satellites/bt_satellites_off.png"), QPixmap(":/graphicGui/glow32x32.png"), "actionShow_Satellite_Hints"); gui->getButtonBar()->addButton(toolbarButton, "065-pluginsGroup"); } catch (std::runtime_error &e) { qWarning() << "Satellites::init error: " << e.what(); return; } // A timer for hiding alert messages messageTimer = new QTimer(this); messageTimer->setSingleShot(true); // recurring check for update messageTimer->setInterval(9000); // 6 seconds should be enough time messageTimer->stop(); connect(messageTimer, SIGNAL(timeout()), this, SLOT(hideMessages())); // If the json file does not already exist, create it from the resource in the QT resource if(QFileInfo(catalogPath).exists()) { if (!checkJsonFileFormat() || readCatalogVersion() != SATELLITES_PLUGIN_VERSION) { displayMessage(q_("The old satellites.json file is no longer compatible - using default file"), "#bb0000"); restoreDefaultCatalog(); } } else { qDebug() << "Satellites::init satellites.json does not exist - copying default file to " << QDir::toNativeSeparators(catalogPath); restoreDefaultCatalog(); } if(!QFileInfo(qsMagFilePath).exists()) { restoreDefaultQSMagFile(); } qDebug() << "Satellites: loading catalog file:" << QDir::toNativeSeparators(catalogPath); // create satellites according to content os satellites.json file loadCatalog(); // Set up download manager and the update schedule downloadMgr = new QNetworkAccessManager(this); connect(downloadMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(saveDownloadedUpdate(QNetworkReply*))); updateState = CompleteNoUpdates; updateTimer = new QTimer(this); updateTimer->setSingleShot(false); // recurring check for update updateTimer->setInterval(13000); // check once every 13 seconds to see if it is time for an update connect(updateTimer, SIGNAL(timeout()), this, SLOT(checkForUpdate())); updateTimer->start(); earth = GETSTELMODULE(SolarSystem)->getEarth(); GETSTELMODULE(StelObjectMgr)->registerStelObjectMgr(this); // Handle changes to the observer location: connect(StelApp::getInstance().getCore(), SIGNAL(locationChanged(StelLocation)), this, SLOT(updateObserverLocation(StelLocation))); }