mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 09:15:34 +08:00
Allow to delete data directory from application view
* allow to re-init applicazion list (needed because directories can be deleted) * context menu for "delete data directory"
This commit is contained in:
@@ -42,10 +42,10 @@ namespace BlackMisc
|
||||
return names;
|
||||
}
|
||||
|
||||
int CApplicationInfoList::otherSwiftVersionsFromDataDirectories()
|
||||
int CApplicationInfoList::otherSwiftVersionsFromDataDirectories(bool reinit)
|
||||
{
|
||||
this->clear();
|
||||
const QMap<QString, CApplicationInfo> otherVersions = CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion();
|
||||
const QMap<QString, CApplicationInfo> otherVersions = CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion(reinit);
|
||||
for (const QString &directory : otherVersions.keys())
|
||||
{
|
||||
CApplicationInfo info(otherVersions.value(directory));
|
||||
@@ -54,14 +54,10 @@ namespace BlackMisc
|
||||
return this->size();
|
||||
}
|
||||
|
||||
CApplicationInfoList CApplicationInfoList::fromOtherSwiftVersionsFromDataDirectories()
|
||||
CApplicationInfoList CApplicationInfoList::fromOtherSwiftVersionsFromDataDirectories(bool reinit)
|
||||
{
|
||||
static CApplicationInfoList info = []
|
||||
{
|
||||
CApplicationInfoList il;
|
||||
il.otherSwiftVersionsFromDataDirectories();
|
||||
return il;
|
||||
}();
|
||||
return info;
|
||||
CApplicationInfoList il;
|
||||
il.otherSwiftVersionsFromDataDirectories(reinit);
|
||||
return il;
|
||||
}
|
||||
} // ns
|
||||
|
||||
@@ -44,10 +44,10 @@ namespace BlackMisc
|
||||
QStringList processNames() const;
|
||||
|
||||
//! Fill from cache data directories
|
||||
int otherSwiftVersionsFromDataDirectories();
|
||||
int otherSwiftVersionsFromDataDirectories(bool reinit = false);
|
||||
|
||||
//! Filled from cache data directories
|
||||
static CApplicationInfoList fromOtherSwiftVersionsFromDataDirectories();
|
||||
static CApplicationInfoList fromOtherSwiftVersionsFromDataDirectories(bool reinit = false);
|
||||
};
|
||||
} // ns
|
||||
|
||||
|
||||
@@ -144,42 +144,41 @@ namespace BlackMisc
|
||||
return dirs;
|
||||
}
|
||||
|
||||
const CDirectoryUtils::FilePerApplication &CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion()
|
||||
const CDirectoryUtils::FilePerApplication &CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion(bool reinit)
|
||||
{
|
||||
static const FilePerApplication dirs = [ = ]() -> FilePerApplication
|
||||
{
|
||||
FilePerApplication directories;
|
||||
for (const QFileInfo &info : CDirectoryUtils::applicationDataDirectories())
|
||||
{
|
||||
if (caseInsensitiveStringCompare(info.filePath(), CDirectoryUtils::normalizedApplicationDataDirectory())) { continue; }
|
||||
static FilePerApplication dirs;
|
||||
if (!reinit && !dirs.isEmpty()) { return dirs; }
|
||||
|
||||
// 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())
|
||||
{
|
||||
const QString exeDir = CDirectoryUtils::decodeNormalizedDirectory(info.filePath());
|
||||
appInfo.setExecutablePath(exeDir);
|
||||
}
|
||||
else
|
||||
{
|
||||
appInfo = CApplicationInfo::fromJson(appInfoJson);
|
||||
}
|
||||
appInfo.setApplicationDataDirectory(info.filePath());
|
||||
directories.insert(info.filePath(), appInfo);
|
||||
FilePerApplication directories;
|
||||
for (const QFileInfo &info : CDirectoryUtils::applicationDataDirectories())
|
||||
{
|
||||
if (caseInsensitiveStringCompare(info.filePath(), CDirectoryUtils::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())
|
||||
{
|
||||
const QString exeDir = CDirectoryUtils::decodeNormalizedDirectory(info.filePath());
|
||||
appInfo.setExecutablePath(exeDir);
|
||||
}
|
||||
// https://stackoverflow.com/q/51635959/356726
|
||||
// cppcheck-suppress returnReference
|
||||
return directories;
|
||||
}();
|
||||
else
|
||||
{
|
||||
appInfo = CApplicationInfo::fromJson(appInfoJson);
|
||||
}
|
||||
appInfo.setApplicationDataDirectory(info.filePath());
|
||||
directories.insert(info.filePath(), appInfo);
|
||||
}
|
||||
|
||||
dirs = directories;
|
||||
return dirs;
|
||||
}
|
||||
|
||||
bool CDirectoryUtils::hasOtherSwiftDataDirectories()
|
||||
bool CDirectoryUtils::hasOtherSwiftDataDirectories(bool reinit)
|
||||
{
|
||||
return CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion().size() > 0;
|
||||
return CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion(reinit).size() > 0;
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::normalizedApplicationDataDirectory()
|
||||
|
||||
@@ -62,10 +62,10 @@ namespace BlackMisc
|
||||
static QStringList applicationDataDirectoryList(bool withoutCurrent = false, bool decodedDirName = false);
|
||||
|
||||
//! swift application data sub directories with info if available
|
||||
static const FilePerApplication &applicationDataDirectoryMapWithoutCurrentVersion();
|
||||
static const FilePerApplication &applicationDataDirectoryMapWithoutCurrentVersion(bool reinit = false);
|
||||
|
||||
//! Other swift data directories
|
||||
static bool hasOtherSwiftDataDirectories();
|
||||
static bool hasOtherSwiftDataDirectories(bool reinit = false);
|
||||
|
||||
//! Is MacOS application bundle?
|
||||
//! \remark: Means the currently running executable is a MacOS bundle, but not all our executables are bundles on MacOS
|
||||
|
||||
Reference in New Issue
Block a user