mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-15 17:55:34 +08:00
Issue #77 Break cyclic dependency swiftdirectories <-> applicationinfolist
This commit is contained in:
@@ -40,7 +40,7 @@ namespace BlackGui
|
|||||||
|
|
||||||
// no other versions, skip copy pages
|
// no other versions, skip copy pages
|
||||||
// disabled afetr discussion with RP as it is confusing
|
// 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);
|
ui->tb_SimulatorSpecific->setCurrentWidget(ui->comp_InstallXSwiftBus);
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ namespace BlackGui
|
|||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
this->initOtherSwiftVersions();
|
this->initOtherSwiftVersions();
|
||||||
this->setWidths();
|
this->setWidths();
|
||||||
m_hasOtherSwiftVersions = CSwiftDirectories::hasOtherSwiftDataDirectories();
|
m_hasOtherSwiftVersions = CApplicationInfoList::hasOtherSwiftDataDirectories();
|
||||||
|
|
||||||
ui->cb_ShowAll->setChecked(m_nameFilterDisables);
|
ui->cb_ShowAll->setChecked(m_nameFilterDisables);
|
||||||
connect(ui->rb_Cache, &QRadioButton::toggled, [ = ](bool) { this->initCurrentDirectories(true); });
|
connect(ui->rb_Cache, &QRadioButton::toggled, [ = ](bool) { this->initCurrentDirectories(true); });
|
||||||
@@ -419,7 +419,7 @@ namespace BlackGui
|
|||||||
void CCopyConfigurationComponent::initOtherSwiftVersions()
|
void CCopyConfigurationComponent::initOtherSwiftVersions()
|
||||||
{
|
{
|
||||||
ui->cb_OtherVersions->clear();
|
ui->cb_OtherVersions->clear();
|
||||||
const QMap<QString, CApplicationInfo> otherVersions = CSwiftDirectories::currentApplicationDataDirectoryMapWithoutCurrentVersion();
|
const QMap<QString, CApplicationInfo> otherVersions = CApplicationInfoList::currentApplicationDataDirectoryMapWithoutCurrentVersion();
|
||||||
for (const auto &pair : makePairsRange(otherVersions))
|
for (const auto &pair : makePairsRange(otherVersions))
|
||||||
{
|
{
|
||||||
const CApplicationInfo &info(pair.second);
|
const CApplicationInfo &info(pair.second);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "blackmisc/applicationinfolist.h"
|
#include "blackmisc/applicationinfolist.h"
|
||||||
#include "blackmisc/swiftdirectories.h"
|
#include "blackmisc/swiftdirectories.h"
|
||||||
#include "blackmisc/directoryutils.h"
|
#include "blackmisc/directoryutils.h"
|
||||||
|
#include "blackmisc/stringutils.h"
|
||||||
#include "blackconfig/buildconfig.h"
|
#include "blackconfig/buildconfig.h"
|
||||||
|
|
||||||
using namespace BlackConfig;
|
using namespace BlackConfig;
|
||||||
@@ -46,8 +47,8 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
this->clear();
|
this->clear();
|
||||||
const QMap<QString, CApplicationInfo> otherVersions = reinit ?
|
const QMap<QString, CApplicationInfo> otherVersions = reinit ?
|
||||||
CSwiftDirectories::currentApplicationDataDirectoryMapWithoutCurrentVersion() :
|
currentApplicationDataDirectoryMapWithoutCurrentVersion() :
|
||||||
CSwiftDirectories::applicationDataDirectoryMapWithoutCurrentVersion();
|
applicationDataDirectoryMapWithoutCurrentVersion();
|
||||||
|
|
||||||
for (const CApplicationInfo &info : otherVersions)
|
for (const CApplicationInfo &info : otherVersions)
|
||||||
{
|
{
|
||||||
@@ -62,4 +63,45 @@ namespace BlackMisc
|
|||||||
il.otherSwiftVersionsFromDataDirectories(reinit);
|
il.otherSwiftVersionsFromDataDirectories(reinit);
|
||||||
return il;
|
return il;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QMap<QString, CApplicationInfo> &CApplicationInfoList::applicationDataDirectoryMapWithoutCurrentVersion()
|
||||||
|
{
|
||||||
|
static const QMap<QString, CApplicationInfo> directories = currentApplicationDataDirectoryMapWithoutCurrentVersion();
|
||||||
|
return directories;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMap<QString, CApplicationInfo> CApplicationInfoList::currentApplicationDataDirectoryMapWithoutCurrentVersion()
|
||||||
|
{
|
||||||
|
QMap<QString, CApplicationInfo> 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
|
} // ns
|
||||||
|
|||||||
@@ -48,6 +48,15 @@ namespace BlackMisc
|
|||||||
|
|
||||||
//! Filled from cache data directories
|
//! Filled from cache data directories
|
||||||
static CApplicationInfoList fromOtherSwiftVersionsFromDataDirectories(bool reinit = false);
|
static CApplicationInfoList fromOtherSwiftVersionsFromDataDirectories(bool reinit = false);
|
||||||
|
|
||||||
|
//! swift application data sub directories with info if available
|
||||||
|
static const QMap<QString, CApplicationInfo> &applicationDataDirectoryMapWithoutCurrentVersion();
|
||||||
|
|
||||||
|
//! swift application data sub directories with info if available
|
||||||
|
static QMap<QString, CApplicationInfo> currentApplicationDataDirectoryMapWithoutCurrentVersion();
|
||||||
|
|
||||||
|
//! Other swift data directories
|
||||||
|
static bool hasOtherSwiftDataDirectories();
|
||||||
};
|
};
|
||||||
} // ns
|
} // ns
|
||||||
|
|
||||||
|
|||||||
@@ -145,47 +145,6 @@ namespace BlackMisc
|
|||||||
return dirs;
|
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()
|
const QString &CSwiftDirectories::normalizedApplicationDataDirectory()
|
||||||
{
|
{
|
||||||
static const QString p = CFileUtils::appendFilePaths(applicationDataDirectory(), normalizedApplicationDirectory());
|
static const QString p = CFileUtils::appendFilePaths(applicationDataDirectory(), normalizedApplicationDirectory());
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
#ifndef BLACKMISC_SWIFTDIRECTORIES_H
|
#ifndef BLACKMISC_SWIFTDIRECTORIES_H
|
||||||
#define BLACKMISC_SWIFTDIRECTORIES_H
|
#define BLACKMISC_SWIFTDIRECTORIES_H
|
||||||
|
|
||||||
#include "blackmisc/applicationinfo.h"
|
|
||||||
#include "blackmisc/blackmiscexport.h"
|
#include "blackmisc/blackmiscexport.h"
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
@@ -28,9 +27,6 @@ namespace BlackMisc
|
|||||||
class BLACKMISC_EXPORT CSwiftDirectories
|
class BLACKMISC_EXPORT CSwiftDirectories
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! File path and swift application
|
|
||||||
using FilePerApplication = QMap<QString, CApplicationInfo>;
|
|
||||||
|
|
||||||
//! Returns the bin directory. On Windows/Linux this is the same directory as
|
//! Returns the bin directory. On Windows/Linux this is the same directory as
|
||||||
//! QCoreApplication::applicationDirPath(), but on MacOS the exceutable is
|
//! QCoreApplication::applicationDirPath(), but on MacOS the exceutable is
|
||||||
//! located deeper in the hierarchy of the bundles
|
//! located deeper in the hierarchy of the bundles
|
||||||
@@ -67,15 +63,6 @@ namespace BlackMisc
|
|||||||
//! swift application data sub directories
|
//! swift application data sub directories
|
||||||
static QStringList applicationDataDirectoryList(bool withoutCurrent = false, bool decodedDirName = false);
|
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)
|
//! swift application data directory for one specific installation (a version)
|
||||||
//! \remark use CDirectoryUtils::applicationDataDirectory for one all swift versions
|
//! \remark use CDirectoryUtils::applicationDataDirectory for one all swift versions
|
||||||
static const QString &normalizedApplicationDataDirectory();
|
static const QString &normalizedApplicationDataDirectory();
|
||||||
|
|||||||
Reference in New Issue
Block a user