swift
applicationinfolist.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include "config/buildconfig.h"
7 #include "misc/directoryutils.h"
8 #include "misc/stringutils.h"
10 
11 using namespace swift::config;
12 
13 SWIFT_DEFINE_SEQUENCE_MIXINS(swift::misc, CApplicationInfo, CApplicationInfoList)
14 
15 namespace swift::misc
16 {
17  CApplicationInfoList::CApplicationInfoList() {}
18 
19  CApplicationInfoList::CApplicationInfoList(const CSequence<CApplicationInfo> &other)
20  : CSequence<CApplicationInfo>(other)
21  {}
22 
24  {
25  return this->contains(&CApplicationInfo::getApplication, application);
26  }
27 
29  {
30  return this->removeIf(&CApplicationInfo::getApplication, application);
31  }
32 
34  {
35  QStringList names;
36  names.reserve(size());
37  for (const CApplicationInfo &info : *this) { names.append(info.getProcessInfo().processName()); }
38  return names;
39  }
40 
42  {
43  this->clear();
44  const QMap<QString, CApplicationInfo> otherVersions =
47 
48  for (const CApplicationInfo &info : otherVersions) { this->push_back(info); }
49  return this->size();
50  }
51 
53  {
56  return il;
57  }
58 
60  {
61  static const QMap<QString, CApplicationInfo> directories =
63  return directories;
64  }
65 
67  {
69  for (const QFileInfo &info : CSwiftDirectories::currentApplicationDataDirectories())
70  {
71  // check for myself (the running swift)
73  {
74  continue;
75  }
76 
77  // the application info will be written by each swift application started
78  // so the application type will always contain that application
79  const QString appInfoFile = CFileUtils::appendFilePaths(info.filePath(), CApplicationInfo::fileName());
80  const QString appInfoJson = CFileUtils::readFileToString(appInfoFile);
81  CApplicationInfo appInfo;
82  if (appInfoJson.isEmpty())
83  {
84  // no JSON means the app no longer exists
85  const QString exeDir = CDirectoryUtils::decodeNormalizedDirectory(info.filePath());
86  appInfo.setExecutablePath(exeDir);
87  }
88  else { appInfo = CApplicationInfo::fromJson(appInfoJson); }
89  appInfo.setApplicationDataDirectory(info.filePath());
90  directories.insert(info.filePath(), appInfo);
91  }
92 
93  return directories;
94  }
95 
97  {
99  }
100 } // namespace swift::misc
Description of a swift application.
Application getApplication() const
Get application.
static const QString & fileName()
File name of the application info file.
Application
Enumeration of application roles.
void setExecutablePath(const QString &exePath)
Set executable path.
const CProcessInfo & getProcessInfo() const
Get process info.
void setApplicationDataDirectory(const QString &appDataDir)
Set application data dir.
List of swift application descriptions.
int otherSwiftVersionsFromDataDirectories(bool reinit=false)
Fill from cache data directories.
static const QMap< QString, CApplicationInfo > & applicationDataDirectoryMapWithoutCurrentVersion()
swift application data sub directories with info if available
static QMap< QString, CApplicationInfo > currentApplicationDataDirectoryMapWithoutCurrentVersion()
swift application data sub directories with info if available
static CApplicationInfoList fromOtherSwiftVersionsFromDataDirectories(bool reinit=false)
Filled from cache data directories.
QStringList processNames() const
Running application names.
bool containsApplication(CApplicationInfo::Application application) const
List containing entry for CApplicationInfo::Application ?
int removeApplication(CApplicationInfo::Application application)
Remove given application.
static bool hasOtherSwiftDataDirectories()
Other swift data directories.
static QString decodeNormalizedDirectory(const QString &directory)
Virtually the inverse operation of CDirectoryUtils::normalizedApplicationDirectory.
static QString appendFilePaths(const QString &path1, const QString &path2)
Append file paths.
Definition: fileutils.cpp:95
static QString readFileToString(const QString &fileNameAndPath)
Read file into string.
Definition: fileutils.cpp:68
const QString & processName() const
Get the process name.
Definition: processinfo.h:46
bool contains(const T &object) const
Return true if there is an element equal to given object. Uses the most efficient implementation avai...
Definition: range.h:109
size_type size() const
Returns number of elements in the sequence.
Definition: sequence.h:273
int removeIf(Predicate p)
Remove elements for which a given predicate returns true.
Definition: sequence.h:446
void push_back(const CApplicationInfo &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
void clear()
Removes all elements in the sequence.
Definition: sequence.h:288
static const QString & normalizedApplicationDataDirectory()
swift application data directory for one specific installation (a version)
static QFileInfoList currentApplicationDataDirectories()
swift application data sub directories
static DerivedObj fromJson(const QJsonObject &json)
Get object from QJsonObject.
Definition: mixinjson.h:190
Free functions in swift::misc.
SWIFT_MISC_EXPORT bool caseInsensitiveStringCompare(const QString &c1, const QString &c2)
Case insensitive string compare.
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.
Definition: sequence.h:63