// 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 "dashboard/dto.h" #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QIcon; QT_END_NAMESPACE namespace ProjectExplorer { class Project; } namespace Tasking { class Group; template class Storage; } namespace Utils { class Environment; class FilePath; } namespace Axivion::Internal { constexpr int DefaultSearchLimit = 2048; enum class DashboardMode { Global, Local }; enum class QueryMode { SimpleQuery, // just kind and version start and end FilterQuery, // + all filters if available FullQuery // + offset, limit, computeTotalRowCount }; struct IssueListSearch { QString kind; QString state; QString versionStart; QString versionEnd; QString owner; QString filter_path; QString sort; QMap filter; int offset = 0; int limit = DefaultSearchLimit; bool computeTotalRowCount = false; QUrlQuery toUrlQuery(QueryMode mode) const; }; class DashboardInfo { public: QUrl source; QVersionNumber versionNumber; QStringList projects; QHash projectUrls; std::optional checkCredentialsUrl; std::optional globalNamedFilters; std::optional userNamedFilters; std::optional userName; }; enum class ContentType { Html, Json, PlainText, Svg }; class DownloadData { public: QUrl inputUrl; ContentType expectedContentType = ContentType::Html; QByteArray outputData; }; QUrl resolveDashboardInfoUrl(DashboardMode dashboardMode, const QUrl &url); Tasking::Group downloadDataRecipe(DashboardMode dashboardMode, const Tasking::Storage &storage); using DashboardInfoHandler = std::function &)>; Tasking::Group dashboardInfoRecipe(DashboardMode dashboardMode, const DashboardInfoHandler &handler = {}); Tasking::Group projectInfoRecipe(DashboardMode dashboardMode, const QString &projectName); // TODO: Wrap into Result<>? using TableInfoHandler = std::function; Tasking::Group tableInfoRecipe(DashboardMode dashboardMode, const QString &prefix, const TableInfoHandler &handler); // TODO: Wrap into Result<>? using IssueTableHandler = std::function; Tasking::Group issueTableRecipe(DashboardMode dashboardMode, const IssueListSearch &search, const IssueTableHandler &handler); // TODO: Wrap into Result<>? using LineMarkerHandler = std::function; Tasking::Group lineMarkerRecipe(DashboardMode dashboardMode, const Utils::FilePath &filePath, const LineMarkerHandler &handler); void fetchLocalDashboardInfo(const DashboardInfoHandler &handler, const QString &projectName); void fetchDashboardAndProjectInfo(const DashboardInfoHandler &handler, const QString &projectName); std::optional projectInfo(); std::optional localProjectInfo(); struct NamedFilter { QString key; QString displayName; bool global = false; }; void fetchNamedFilters(DashboardMode dashboardMode); QList knownNamedFiltersFor(const QString &issueKind, bool global); std::optional namedFilterInfoForKey(const QString &key, bool global); bool handleCertificateIssue(); QIcon iconForIssue(const std::optional &issueKind); QString anyToSimpleString(const Dto::Any &any, const QString &type, const std::optional> &options); void fetchIssueInfo(DashboardMode dashboardMode, const QString &id); void switchActiveDashboardId(const Utils::Id &toDashboardId); const Utils::Id activeDashboardId(); const std::optional currentDashboardInfo(); void setAnalysisVersion(const QString &version); void enableInlineIssues(bool enable); void switchDashboardMode(DashboardMode mode, bool byLocalBuildButton); // FIXME DashboardMode currentDashboardMode(); Utils::FilePath findFileForIssuePath(const Utils::FilePath &issuePath); void updateEnvironmentForLocalBuild(Utils::Environment *env); } // Axivion::Internal Q_DECLARE_METATYPE(Axivion::Internal::NamedFilter)