From 4d5363c02ce203683bcccb13ff86405e4b84dac5 Mon Sep 17 00:00:00 2001 From: "Alexander V. Wolf" Date: Thu, 27 Apr 2023 20:42:44 +0700 Subject: [PATCH] Move TZF file into user directory --- src/core/StelLocationMgr.cpp | 57 +++++++++++++++++++++--------------- src/core/StelLocationMgr.hpp | 1 + 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/core/StelLocationMgr.cpp b/src/core/StelLocationMgr.cpp index d1e58e97ff991..6921ba1a6b79c 100644 --- a/src/core/StelLocationMgr.cpp +++ b/src/core/StelLocationMgr.cpp @@ -42,7 +42,7 @@ #include TimezoneNameMap StelLocationMgr::locationDBToIANAtranslations; - +QString StelLocationMgr::tzfFileName = "data/timezone.tab"; QList StelLocationMgr::regions; QMap StelLocationMgr::countryCodeToRegionMap; QMap StelLocationMgr::countryNameToCodeMap; @@ -1184,35 +1184,46 @@ void StelLocationMgr::loadCountries() void StelLocationMgr::loadTimeZones() { - QFile tzFile(":/data/timezone.tab"); + QString tzFilePath = StelFileMgr::findFile(tzfFileName, StelFileMgr::File); + if (tzFilePath.isEmpty()) + { + tzFilePath = StelFileMgr::findFile(tzfFileName, StelFileMgr::New); + // Create a default TZF (time zone fixes) file + QFile tzSrc(":/data/timezone.tab"); + if (!tzSrc.copy(tzFilePath)) + { + qWarning() << "Cannot copy time zones file to " + QDir::toNativeSeparators(tzFilePath); + return; + } + } + QFile tzFile(tzFilePath); + if(tzFile.open(QFile::ReadOnly | QFile::Text)) { - if (locationDBToIANAtranslations.isEmpty()) + locationDBToIANAtranslations.clear(); + QString line; + int readOk=0; + locationDBToIANAtranslations.insert("", "UTC"); + while(!tzFile.atEnd()) { - QString line; - int readOk=0; - locationDBToIANAtranslations.insert("", "UTC"); - while(!tzFile.atEnd()) - { - line = QString::fromUtf8(tzFile.readLine()); - if (line.startsWith("//") || line.startsWith("#") || line.isEmpty()) - continue; + line = QString::fromUtf8(tzFile.readLine()); + if (line.startsWith("//") || line.startsWith("#") || line.isEmpty()) + continue; - if (!line.isEmpty()) - { - #if (QT_VERSION>=QT_VERSION_CHECK(5, 14, 0)) - QStringList list=line.split("\t", Qt::KeepEmptyParts); - #else - QStringList list=line.split("\t", QString::KeepEmptyParts); - #endif + if (!line.isEmpty()) + { + #if (QT_VERSION>=QT_VERSION_CHECK(5, 14, 0)) + QStringList list=line.split("\t", Qt::KeepEmptyParts); + #else + QStringList list=line.split("\t", QString::KeepEmptyParts); + #endif - // The first entry is the DB name, the second is as we display it in the program. - locationDBToIANAtranslations.insert(list.at(0).trimmed().toLocal8Bit(), list.at(1).trimmed().toLocal8Bit()); - readOk++; - } + // The first entry is the DB name, the second is as we display it in the program. + locationDBToIANAtranslations.insert(list.at(0).trimmed().toLocal8Bit(), list.at(1).trimmed().toLocal8Bit()); + readOk++; } - qDebug() << "Loaded" << readOk << "fixes for time zones"; } + qDebug() << "Loaded" << readOk << "fixes for time zones"; tzFile.close(); } } diff --git a/src/core/StelLocationMgr.hpp b/src/core/StelLocationMgr.hpp index 9ab89597d41b4..b63f1f03d65f2 100644 --- a/src/core/StelLocationMgr.hpp +++ b/src/core/StelLocationMgr.hpp @@ -183,6 +183,7 @@ private slots: static QList regions; static QMap countryCodeToRegionMap; static QMap countryNameToCodeMap; + static QString tzfFileName; StelLocation lastResortLocation;