diff --git a/src/blackgui/components/configurationwizard.cpp b/src/blackgui/components/configurationwizard.cpp index 85ca50126..d30bed011 100644 --- a/src/blackgui/components/configurationwizard.cpp +++ b/src/blackgui/components/configurationwizard.cpp @@ -40,7 +40,7 @@ namespace BlackGui // no other versions, skip copy pages // disabled afetr discussion with RP as it is confusing - // if (!CDirectoryUtils::hasOtherSwiftDataDirectories()) { this->setStartId(ConfigSimulator); } + // if (!CApplicationInfoList::hasOtherSwiftDataDirectories()) { this->setStartId(ConfigSimulator); } ui->tb_SimulatorSpecific->setCurrentWidget(ui->comp_InstallXSwiftBus); diff --git a/src/blackgui/components/copyconfigurationcomponent.cpp b/src/blackgui/components/copyconfigurationcomponent.cpp index 9bfb8a943..a61eacfde 100644 --- a/src/blackgui/components/copyconfigurationcomponent.cpp +++ b/src/blackgui/components/copyconfigurationcomponent.cpp @@ -51,7 +51,7 @@ namespace BlackGui ui->setupUi(this); this->initOtherSwiftVersions(); this->setWidths(); - m_hasOtherSwiftVersions = CSwiftDirectories::hasOtherSwiftDataDirectories(); + m_hasOtherSwiftVersions = CApplicationInfoList::hasOtherSwiftDataDirectories(); ui->cb_ShowAll->setChecked(m_nameFilterDisables); connect(ui->rb_Cache, &QRadioButton::toggled, [ = ](bool) { this->initCurrentDirectories(true); }); @@ -419,7 +419,7 @@ namespace BlackGui void CCopyConfigurationComponent::initOtherSwiftVersions() { ui->cb_OtherVersions->clear(); - const QMap otherVersions = CSwiftDirectories::currentApplicationDataDirectoryMapWithoutCurrentVersion(); + const QMap otherVersions = CApplicationInfoList::currentApplicationDataDirectoryMapWithoutCurrentVersion(); for (const auto &pair : makePairsRange(otherVersions)) { const CApplicationInfo &info(pair.second); diff --git a/src/blackmisc/applicationinfolist.cpp b/src/blackmisc/applicationinfolist.cpp index fdb4d1840..ad7affb12 100644 --- a/src/blackmisc/applicationinfolist.cpp +++ b/src/blackmisc/applicationinfolist.cpp @@ -9,6 +9,7 @@ #include "blackmisc/applicationinfolist.h" #include "blackmisc/swiftdirectories.h" #include "blackmisc/directoryutils.h" +#include "blackmisc/stringutils.h" #include "blackconfig/buildconfig.h" using namespace BlackConfig; @@ -46,8 +47,8 @@ namespace BlackMisc { this->clear(); const QMap otherVersions = reinit ? - CSwiftDirectories::currentApplicationDataDirectoryMapWithoutCurrentVersion() : - CSwiftDirectories::applicationDataDirectoryMapWithoutCurrentVersion(); + currentApplicationDataDirectoryMapWithoutCurrentVersion() : + applicationDataDirectoryMapWithoutCurrentVersion(); for (const CApplicationInfo &info : otherVersions) { @@ -62,4 +63,45 @@ namespace BlackMisc il.otherSwiftVersionsFromDataDirectories(reinit); return il; } + + const QMap &CApplicationInfoList::applicationDataDirectoryMapWithoutCurrentVersion() + { + static const QMap directories = currentApplicationDataDirectoryMapWithoutCurrentVersion(); + return directories; + } + + QMap CApplicationInfoList::currentApplicationDataDirectoryMapWithoutCurrentVersion() + { + QMap directories; + for (const QFileInfo &info : CSwiftDirectories::currentApplicationDataDirectories()) + { + // check for myself (the running swift) + if (caseInsensitiveStringCompare(info.filePath(), CSwiftDirectories::normalizedApplicationDataDirectory())) { continue; } + + // the application info will be written by each swift application started + // so the application type will always contain that application + const QString appInfoFile = CFileUtils::appendFilePaths(info.filePath(), CApplicationInfo::fileName()); + const QString appInfoJson = CFileUtils::readFileToString(appInfoFile); + CApplicationInfo appInfo; + if (appInfoJson.isEmpty()) + { + // no JSON means the app no longer exists + const QString exeDir = CDirectoryUtils::decodeNormalizedDirectory(info.filePath()); + appInfo.setExecutablePath(exeDir); + } + else + { + appInfo = CApplicationInfo::fromJson(appInfoJson); + } + appInfo.setApplicationDataDirectory(info.filePath()); + directories.insert(info.filePath(), appInfo); + } + + return directories; + } + + bool CApplicationInfoList::hasOtherSwiftDataDirectories() + { + return applicationDataDirectoryMapWithoutCurrentVersion().size() > 0; + } } // ns diff --git a/src/blackmisc/applicationinfolist.h b/src/blackmisc/applicationinfolist.h index 0f6b072ac..f912315e9 100644 --- a/src/blackmisc/applicationinfolist.h +++ b/src/blackmisc/applicationinfolist.h @@ -48,6 +48,15 @@ namespace BlackMisc //! Filled from cache data directories static CApplicationInfoList fromOtherSwiftVersionsFromDataDirectories(bool reinit = false); + + //! swift application data sub directories with info if available + static const QMap &applicationDataDirectoryMapWithoutCurrentVersion(); + + //! swift application data sub directories with info if available + static QMap currentApplicationDataDirectoryMapWithoutCurrentVersion(); + + //! Other swift data directories + static bool hasOtherSwiftDataDirectories(); }; } // ns diff --git a/src/blackmisc/swiftdirectories.cpp b/src/blackmisc/swiftdirectories.cpp index 70889415a..e4099ec28 100644 --- a/src/blackmisc/swiftdirectories.cpp +++ b/src/blackmisc/swiftdirectories.cpp @@ -145,47 +145,6 @@ namespace BlackMisc return dirs; } - const CSwiftDirectories::FilePerApplication &CSwiftDirectories::applicationDataDirectoryMapWithoutCurrentVersion() - { - static const FilePerApplication directories = currentApplicationDataDirectoryMapWithoutCurrentVersion(); - return directories; - } - - CSwiftDirectories::FilePerApplication CSwiftDirectories::currentApplicationDataDirectoryMapWithoutCurrentVersion() - { - FilePerApplication directories; - for (const QFileInfo &info : currentApplicationDataDirectories()) - { - // check for myself (the running swift) - if (caseInsensitiveStringCompare(info.filePath(), normalizedApplicationDataDirectory())) { continue; } - - // the application info will be written by each swift application started - // so the application type will always contain that application - const QString appInfoFile = CFileUtils::appendFilePaths(info.filePath(), CApplicationInfo::fileName()); - const QString appInfoJson = CFileUtils::readFileToString(appInfoFile); - CApplicationInfo appInfo; - if (appInfoJson.isEmpty()) - { - // no JSON means the app no longer exists - const QString exeDir = CDirectoryUtils::decodeNormalizedDirectory(info.filePath()); - appInfo.setExecutablePath(exeDir); - } - else - { - appInfo = CApplicationInfo::fromJson(appInfoJson); - } - appInfo.setApplicationDataDirectory(info.filePath()); - directories.insert(info.filePath(), appInfo); - } - - return directories; - } - - bool CSwiftDirectories::hasOtherSwiftDataDirectories() - { - return applicationDataDirectoryMapWithoutCurrentVersion().size() > 0; - } - const QString &CSwiftDirectories::normalizedApplicationDataDirectory() { static const QString p = CFileUtils::appendFilePaths(applicationDataDirectory(), normalizedApplicationDirectory()); diff --git a/src/blackmisc/swiftdirectories.h b/src/blackmisc/swiftdirectories.h index 365159c26..428926d4e 100644 --- a/src/blackmisc/swiftdirectories.h +++ b/src/blackmisc/swiftdirectories.h @@ -11,7 +11,6 @@ #ifndef BLACKMISC_SWIFTDIRECTORIES_H #define BLACKMISC_SWIFTDIRECTORIES_H -#include "blackmisc/applicationinfo.h" #include "blackmisc/blackmiscexport.h" #include #include @@ -28,9 +27,6 @@ namespace BlackMisc class BLACKMISC_EXPORT CSwiftDirectories { public: - //! File path and swift application - using FilePerApplication = QMap; - //! Returns the bin directory. On Windows/Linux this is the same directory as //! QCoreApplication::applicationDirPath(), but on MacOS the exceutable is //! located deeper in the hierarchy of the bundles @@ -67,15 +63,6 @@ namespace BlackMisc //! swift application data sub directories static QStringList applicationDataDirectoryList(bool withoutCurrent = false, bool decodedDirName = false); - //! swift application data sub directories with info if available - static const FilePerApplication &applicationDataDirectoryMapWithoutCurrentVersion(); - - //! swift application data sub directories with info if available - static FilePerApplication currentApplicationDataDirectoryMapWithoutCurrentVersion(); - - //! Other swift data directories - static bool hasOtherSwiftDataDirectories(); - //! swift application data directory for one specific installation (a version) //! \remark use CDirectoryUtils::applicationDataDirectory for one all swift versions static const QString &normalizedApplicationDataDirectory();