Ref T199, added some utility functions

* tag object can be read from data directory
* isNull
* some renamings
This commit is contained in:
Klaus Basan
2017-12-25 13:10:15 +01:00
parent 60b90d6582
commit 9ec3d69eaa
4 changed files with 56 additions and 14 deletions

View File

@@ -33,7 +33,7 @@ namespace BlackMisc
names.reserve(size());
for (const CApplicationInfo &info : *this)
{
names.append(info.processInfo().processName());
names.append(info.getProcessInfo().processName());
}
return names;
}

View File

@@ -95,23 +95,54 @@ namespace BlackMisc
return p;
}
QFileInfoList CDirectoryUtils::applicationDataDirectories()
const QFileInfoList &CDirectoryUtils::applicationDataDirectories()
{
QDir swiftAppData(CDirectoryUtils::applicationDataDirectory()); // contains 1..n subdirs
if (!swiftAppData.isReadable()) return QFileInfoList();
return swiftAppData.entryInfoList({}, QDir::Dirs | QDir::NoDotAndDotDot, QDir::Time);
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);
}());
return fileInfoList;
}
QStringList CDirectoryUtils::applicationDataDirectoryList(bool withoutCurrent, bool beautify)
int CDirectoryUtils::applicationDataDirectoriesCount()
{
return CDirectoryUtils::applicationDataDirectories().size();
}
QStringList CDirectoryUtils::applicationDataDirectoryList(bool withoutCurrent, bool decodedDirName)
{
QStringList dirs;
const QFileInfoList directories(CDirectoryUtils::applicationDataDirectories());
for (const QFileInfo &info : directories)
for (const QFileInfo &info : CDirectoryUtils::applicationDataDirectories())
{
if (withoutCurrent && info.filePath().contains(normalizedApplicationDirectory(), Qt::CaseInsensitive)) continue;
dirs.append(beautify ?
CDirectoryUtils::decodeNormalizedDirectory(info.fileName()) :
info.fileName());
dirs.append(decodedDirName ?
CDirectoryUtils::decodeNormalizedDirectory(info.filePath()) :
info.filePath());
}
return dirs;
}
QMap<QString, CApplicationInfo> CDirectoryUtils::applicationDataDirectoryMap(bool withoutCurrent)
{
static const CApplicationInfo nullInfo;
QMap<QString, CApplicationInfo> dirs;
for (const QFileInfo &info : CDirectoryUtils::applicationDataDirectories())
{
if (withoutCurrent && info.filePath().contains(normalizedApplicationDirectory(), Qt::CaseInsensitive)) continue;
const QString appInfoFile = CFileUtils::appendFilePaths(info.filePath(), CApplicationInfo::fileName());
const QString appInfoJson = CFileUtils::readFileToString(appInfoFile);
if (appInfoJson.isEmpty())
{
dirs.insert(info.filePath(), nullInfo);
}
else
{
const CApplicationInfo appInfo = CApplicationInfo::fromJson(appInfoJson);
dirs.insert(info.filePath(), appInfo);
}
}
return dirs;
}

View File

@@ -12,7 +12,9 @@
#ifndef BLACKMISC_DIRECTORYUTILS_H
#define BLACKMISC_DIRECTORYUTILS_H
#include "blackmisc/blackmiscexport.h"
#include "applicationinfo.h"
#include "blackmiscexport.h"
#include <QMap>
#include <QSet>
#include <QString>
#include <QFileInfoList>
@@ -41,10 +43,16 @@ namespace BlackMisc
static const QString &applicationDataDirectory();
//! swift application data sub directories
static QFileInfoList applicationDataDirectories();
static const QFileInfoList &applicationDataDirectories();
//! number of data directories (including this version)
static int applicationDataDirectoriesCount();
//! swift application data sub directories
static QStringList applicationDataDirectoryList(bool withoutCurrent = false, bool beautify = false);
static QStringList applicationDataDirectoryList(bool withoutCurrent = false, bool decodedDirName = false);
//! swift application data sub directories with info if available
static QMap<QString, CApplicationInfo> applicationDataDirectoryMap(bool withoutCurrent = false);
//! Is MacOS application bundle?
//! \remark: Means the currently running executable is a MacOS bundle, but not all our executables are bundles on MacOS

View File

@@ -42,6 +42,9 @@ namespace BlackMisc
//! Get the pid.
qint64 processId() const { return m_pid; }
//! Empty process info
bool isNull() const { return m_pid == 0 && m_name.isEmpty(); }
//! Get the process name.
const QString &processName() const { return m_name; }