diff options
author | Artem Sokolovskii <[email protected]> | 2023-01-23 16:34:24 +0100 |
---|---|---|
committer | Artem Sokolovskii <[email protected]> | 2023-02-14 14:11:30 +0000 |
commit | b7fde29cdfbdf46d8d3f89d0c4dfc6328b43782d (patch) | |
tree | 837f532ec90684dc5f5b15397f99cf56cf365169 /src/plugins/android/sdkmanageroutputparser.h | |
parent | b4f665f8acc73c11063cc2cb6c829428fc1d1748 (diff) |
Android: Extract sdkmanageroutputparser to separate file
- Needed for testing and for improving readability
Change-Id: Ie7a716b204ae0a216d72fa0191d4d05b7708c16c
Reviewed-by: <[email protected]>
Reviewed-by: Alessandro Portale <[email protected]>
Diffstat (limited to 'src/plugins/android/sdkmanageroutputparser.h')
-rw-r--r-- | src/plugins/android/sdkmanageroutputparser.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/plugins/android/sdkmanageroutputparser.h b/src/plugins/android/sdkmanageroutputparser.h new file mode 100644 index 00000000000..5f0534dfbde --- /dev/null +++ b/src/plugins/android/sdkmanageroutputparser.h @@ -0,0 +1,79 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +#pragma once + +#include "androidconstants.h" +#include "androidsdkpackage.h" + +#include <utils/filepath.h> + +#include <QVersionNumber> + +namespace Android { +namespace Internal { +/*! + \class SdkManagerOutputParser + \brief The SdkManagerOutputParser class is a helper class to parse the output of the \c sdkmanager + commands. + */ +class SdkManagerOutputParser +{ + class GenericPackageData + { + public: + bool isValid() const { return !revision.isNull() && !description.isNull(); } + QStringList headerParts; + QVersionNumber revision; + QString description; + Utils::FilePath installedLocation; + QMap<QString, QString> extraData; + }; + +public: + enum MarkerTag + { + None = 0x001, + InstalledPackagesMarker = 0x002, + AvailablePackagesMarkers = 0x004, + AvailableUpdatesMarker = 0x008, + EmptyMarker = 0x010, + PlatformMarker = 0x020, + SystemImageMarker = 0x040, + BuildToolsMarker = 0x080, + SdkToolsMarker = 0x100, + PlatformToolsMarker = 0x200, + EmulatorToolsMarker = 0x400, + NdkMarker = 0x800, + ExtrasMarker = 0x1000, + CmdlineSdkToolsMarker = 0x2000, + GenericToolMarker = 0x4000, + SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker + }; + + SdkManagerOutputParser(AndroidSdkPackageList &container) : m_packages(container) {} + void parsePackageListing(const QString &output); + + AndroidSdkPackageList &m_packages; + +private: + void compilePackageAssociations(); + void parsePackageData(MarkerTag packageMarker, const QStringList &data); + bool parseAbstractData(GenericPackageData &output, const QStringList &input, int minParts, + const QString &logStrTag, + const QStringList &extraKeys = QStringList()) const; + AndroidSdkPackage *parsePlatform(const QStringList &data) const; + QPair<SystemImage *, int> parseSystemImage(const QStringList &data) const; + BuildTools *parseBuildToolsPackage(const QStringList &data) const; + SdkTools *parseSdkToolsPackage(const QStringList &data) const; + PlatformTools *parsePlatformToolsPackage(const QStringList &data) const; + EmulatorTools *parseEmulatorToolsPackage(const QStringList &data) const; + Ndk *parseNdkPackage(const QStringList &data) const; + ExtraTools *parseExtraToolsPackage(const QStringList &data) const; + GenericSdkPackage *parseGenericTools(const QStringList &data) const; + MarkerTag parseMarkers(const QString &line); + + MarkerTag m_currentSection = MarkerTag::None; + QHash<AndroidSdkPackage *, int> m_systemImages; +}; +} // namespace Internal +} // namespace Android |