1/*
2 SPDX-FileCopyrightText: 2009-2010 Frederik Gladhorn <gladhorn@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.1-or-later
5*/
6
7#ifndef KNEWSTUFF3_ATTICAPROVIDER_P_H
8#define KNEWSTUFF3_ATTICAPROVIDER_P_H
9
10#include <QPointer>
11#include <QSet>
12
13#include <attica/content.h>
14#include <attica/provider.h>
15#include <attica/providermanager.h>
16
17#include "providerbase_p.h"
18
19namespace Attica
20{
21class BaseJob;
22}
23
24namespace KNSCore
25{
26/**
27 * @short KNewStuff Attica Provider class.
28 *
29 * This class provides accessors for the provider object.
30 * It should not be used directly by the application.
31 * This class is the base class and will be instantiated for
32 * websites that implement the Open Collaboration Services.
33 *
34 * @author Frederik Gladhorn <gladhorn@kde.org>
35 *
36 * @internal
37 */
38class /* for autotest: */ KNEWSTUFFCORE_EXPORT AtticaProvider : public ProviderBase
39{
40 Q_OBJECT
41public:
42 explicit AtticaProvider(const QStringList &categories, const QString &additionalAgentInformation);
43 AtticaProvider(const Attica::Provider &provider, const QStringList &categories, const QString &additionalAgentInformation);
44
45 QString id() const override;
46
47 /**
48 * set the provider data xml, to initialize the provider
49 */
50 bool setProviderXML(const QDomElement &xmldata) override;
51
52 bool isInitialized() const override;
53 void setCachedEntries(const KNSCore::Entry::List &cachedEntries) override;
54
55 void loadEntries(const KNSCore::SearchRequest &request) override;
56 void loadEntryDetails(const KNSCore::Entry &entry) override;
57 void loadPayloadLink(const Entry &entry, int linkId) override;
58
59 void loadComments(const KNSCore::Entry &entry, int commentsPerPage, int page) override;
60 void loadPerson(const QString &username) override;
61
62 bool userCanVote() override
63 {
64 return true;
65 }
66 void vote(const Entry &entry, uint rating) override;
67
68 bool userCanBecomeFan() override
69 {
70 return true;
71 }
72 void becomeFan(const Entry &entry) override;
73
74 Attica::Provider *provider()
75 {
76 return &m_provider;
77 }
78
79 [[nodiscard]] QString name() const override;
80 [[nodiscard]] QUrl icon() const override;
81 [[nodiscard]] QString version() override;
82 [[nodiscard]] QUrl website() override;
83 [[nodiscard]] QUrl host() override;
84 [[nodiscard]] QString contactEmail() override;
85 [[nodiscard]] bool supportsSsl() override;
86
87private Q_SLOTS:
88 void providerLoaded(const Attica::Provider &provider);
89 void listOfCategoriesLoaded(Attica::BaseJob *);
90 void downloadItemLoaded(Attica::BaseJob *job);
91 void accountBalanceLoaded(Attica::BaseJob *job);
92 void onAuthenticationCredentialsMissing(const Attica::Provider &);
93 void votingFinished(Attica::BaseJob *);
94 void becomeFanFinished(Attica::BaseJob *job);
95 void loadedComments(Attica::BaseJob *job);
96 void loadedPerson(Attica::BaseJob *job);
97 void loadedConfig(Attica::BaseJob *job);
98
99private:
100 bool jobSuccess(Attica::BaseJob *job);
101 void updateOnFirstBasicsGet();
102
103 // the attica categories we are interested in (e.g. Wallpaper, Application, Vocabulary File...)
104 QMultiHash<QString, Attica::Category> mCategoryMap;
105
106 Attica::ProviderManager m_providerManager;
107 Attica::Provider m_provider;
108
109 KNSCore::Entry::List mCachedEntries;
110 QHash<QString, Attica::Content> mCachedContent;
111
112 // Associate job and entry, this is needed when fetching
113 // download links or the account balance in order to continue
114 // when the result is there.
115 QHash<Attica::BaseJob *, QPair<Entry, int>> mDownloadLinkJobs;
116
117 bool mInitialized;
118 QString m_providerId;
119 bool m_basicsGot = false;
120 QString m_name;
121 QUrl m_icon;
122 QString m_version;
123 QUrl m_website;
124 QUrl m_host;
125 QString m_contactEmail;
126 bool m_supportsSsl = true;
127
128 Q_DISABLE_COPY(AtticaProvider)
129 friend class AtticaRequester;
130};
131
132}
133
134#endif
135

source code of knewstuff/src/attica/atticaprovider_p.h