Issue #77 Break cyclic dependency swiftdirectories <-> applicationinfolist

This commit is contained in:
Mat Sutcliffe
2020-08-30 00:25:56 +01:00
parent ab44c068ab
commit f421bb90c3
6 changed files with 56 additions and 59 deletions

View File

@@ -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<QString, CApplicationInfo> 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<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