mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-01 05:26:45 +08:00
Improved version of "Allow to delete data directory from application view"
- split functions into dynamic loading and const versions (loading at startup) - reload other versions from wizard in case they changed - some renaming/formatting
This commit is contained in:
@@ -45,7 +45,10 @@ namespace BlackMisc
|
||||
int CApplicationInfoList::otherSwiftVersionsFromDataDirectories(bool reinit)
|
||||
{
|
||||
this->clear();
|
||||
const QMap<QString, CApplicationInfo> otherVersions = CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion(reinit);
|
||||
const QMap<QString, CApplicationInfo> otherVersions = reinit ?
|
||||
CDirectoryUtils::currentApplicationDataDirectoryMapWithoutCurrentVersion() :
|
||||
CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion();
|
||||
|
||||
for (const QString &directory : otherVersions.keys())
|
||||
{
|
||||
CApplicationInfo info(otherVersions.value(directory));
|
||||
|
||||
@@ -117,15 +117,17 @@ namespace BlackMisc
|
||||
|
||||
const QFileInfoList &CDirectoryUtils::applicationDataDirectories()
|
||||
{
|
||||
static const QFileInfoList fileInfoList([]
|
||||
{
|
||||
const QDir swiftAppData(CDirectoryUtils::applicationDataDirectory()); // contains 1..n subdirs
|
||||
if (!swiftAppData.isReadable()) { return QFileInfoList(); }
|
||||
return swiftAppData.entryInfoList({}, QDir::Dirs | QDir::NoDotAndDotDot, QDir::Time);
|
||||
}());
|
||||
static QFileInfoList fileInfoList = currentApplicationDataDirectories();
|
||||
return fileInfoList;
|
||||
}
|
||||
|
||||
QFileInfoList CDirectoryUtils::currentApplicationDataDirectories()
|
||||
{
|
||||
const QDir swiftAppData(CDirectoryUtils::applicationDataDirectory()); // contains 1..n subdirs
|
||||
if (!swiftAppData.isReadable()) { return QFileInfoList(); }
|
||||
return swiftAppData.entryInfoList({}, QDir::Dirs | QDir::NoDotAndDotDot, QDir::Time);
|
||||
}
|
||||
|
||||
int CDirectoryUtils::applicationDataDirectoriesCount()
|
||||
{
|
||||
return CDirectoryUtils::applicationDataDirectories().size();
|
||||
@@ -144,14 +146,18 @@ namespace BlackMisc
|
||||
return dirs;
|
||||
}
|
||||
|
||||
const CDirectoryUtils::FilePerApplication &CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion(bool reinit)
|
||||
const CDirectoryUtils::FilePerApplication &CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion()
|
||||
{
|
||||
static FilePerApplication dirs;
|
||||
if (!reinit && !dirs.isEmpty()) { return dirs; }
|
||||
static const FilePerApplication directories = currentApplicationDataDirectoryMapWithoutCurrentVersion();
|
||||
return directories;
|
||||
}
|
||||
|
||||
CDirectoryUtils::FilePerApplication CDirectoryUtils::currentApplicationDataDirectoryMapWithoutCurrentVersion()
|
||||
{
|
||||
FilePerApplication directories;
|
||||
for (const QFileInfo &info : CDirectoryUtils::applicationDataDirectories())
|
||||
for (const QFileInfo &info : CDirectoryUtils::currentApplicationDataDirectories())
|
||||
{
|
||||
// check for myself (the running swift)
|
||||
if (caseInsensitiveStringCompare(info.filePath(), CDirectoryUtils::normalizedApplicationDataDirectory())) { continue; }
|
||||
|
||||
// the application info will be written by each swift application started
|
||||
@@ -161,6 +167,7 @@ namespace BlackMisc
|
||||
CApplicationInfo appInfo;
|
||||
if (appInfoJson.isEmpty())
|
||||
{
|
||||
// no JSON means the app no longer exists
|
||||
const QString exeDir = CDirectoryUtils::decodeNormalizedDirectory(info.filePath());
|
||||
appInfo.setExecutablePath(exeDir);
|
||||
}
|
||||
@@ -172,13 +179,12 @@ namespace BlackMisc
|
||||
directories.insert(info.filePath(), appInfo);
|
||||
}
|
||||
|
||||
dirs = directories;
|
||||
return dirs;
|
||||
return directories;
|
||||
}
|
||||
|
||||
bool CDirectoryUtils::hasOtherSwiftDataDirectories(bool reinit)
|
||||
bool CDirectoryUtils::hasOtherSwiftDataDirectories()
|
||||
{
|
||||
return CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion(reinit).size() > 0;
|
||||
return CDirectoryUtils::applicationDataDirectoryMapWithoutCurrentVersion().size() > 0;
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::normalizedApplicationDataDirectory()
|
||||
|
||||
@@ -58,14 +58,20 @@ namespace BlackMisc
|
||||
//! number of data directories (including this version)
|
||||
static int applicationDataDirectoriesCount();
|
||||
|
||||
//! swift application data sub directories
|
||||
static QFileInfoList currentApplicationDataDirectories();
|
||||
|
||||
//! 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(bool reinit = false);
|
||||
static const FilePerApplication &applicationDataDirectoryMapWithoutCurrentVersion();
|
||||
|
||||
//! swift application data sub directories with info if available
|
||||
static FilePerApplication currentApplicationDataDirectoryMapWithoutCurrentVersion();
|
||||
|
||||
//! Other swift data directories
|
||||
static bool hasOtherSwiftDataDirectories(bool reinit = false);
|
||||
static bool hasOtherSwiftDataDirectories();
|
||||
|
||||
//! 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