Attica

provider.h
1/*
2 This file is part of KDE.
3
4 SPDX-FileCopyrightText: 2008 Cornelius Schumacher <schumacher@kde.org>
5 SPDX-FileCopyrightText: 2011 Laszlo Papp <djszapi@archlinux.us>
6
7 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
8*/
9
10#ifndef ATTICA_PROVIDER_H
11#define ATTICA_PROVIDER_H
12
13#include <QExplicitlySharedDataPointer>
14#include <QSharedPointer>
15#include <QString>
16#include <QStringList>
17
18#include <QUrl>
19
20#include "achievement.h"
21#include "attica_export.h"
22#include "category.h"
23#include "comment.h"
24#include "distribution.h"
25#include "forum.h"
26#include "itemjob.h"
27#include "license.h"
28#include "listjob.h"
29#include "message.h"
30
31class QDate;
32class QUrl;
33
34namespace Attica
35{
36class PlatformDependent;
37
38class PostJobStatus;
39
40class AccountBalance;
41class Activity;
42class BuildServiceJobOutput;
43class BuildServiceJob;
44class BuildService;
45class PrivateData;
46class Config;
47class Content;
48class DownloadItem;
49class Distribution;
50class Event;
51class Folder;
52class HomePageType;
53class KnowledgeBaseEntry;
54class License;
55class Person;
56class PostJob;
57class Project;
58class Provider;
59class Publisher;
60class PublisherField;
61class RemoteAccount;
62
63/**
64 * @class Provider provider.h <Attica/Provider>
65 *
66 * The Provider class represents one Open Collaboration Service provider.
67 * Use the ProviderManager to instantiate a Provider.
68 *
69 * Accessing functions of the Provider returns a Job class that
70 * takes care of accessing the server and parsing the result.
71 *
72 * Provider files are xml of the form:
73 <pre>
74 <provider>
75 <id>opendesktop</id>
76 <location>https://api.opendesktop.org/v1/</location>
77 <name>openDesktop.org</name>
78 <icon></icon>
79 <termsofuse>https://opendesktop.org/terms/</termsofuse>
80 <register>https://opendesktop.org/usermanager/new.php</register>
81 <services>
82 <person ocsversion="1.3" />
83 <friend ocsversion="1.3" />
84 <message ocsversion="1.3" />
85 <activity ocsversion="1.3" />
86 <content ocsversion="1.3" />
87 <fan ocsversion="1.3" />
88 <knowledgebase ocsversion="1.3" />
89 <event ocsversion="1.3" />
90 <comment ocsversion="1.2" />
91 </services>
92</provider>
93 </pre>
94 * The server provides the services specified in the services section, not necessarily all of them.
95 */
97{
98public:
99 Provider();
100 Provider(const Provider &other);
101 Provider &operator=(const Provider &other);
102 ~Provider();
103
104 /**
105 Returns true if the provider has been set up and can be used.
106 */
107 bool isValid() const;
108
109 /**
110 Test if the provider is enabled by the settings.
111 The application can choose to ignore this, but the user settings should be respected.
112 */
113 bool isEnabled() const;
114 void setEnabled(bool enabled);
115
116 /**
117 * Set a custom identifier for your application (sent along with the requests as
118 * the http agent header in addition to the application name and version).
119 *
120 * For example, you might have an application named SomeApplication, version 23,
121 * and wish to send along the data "lookandfeel.knsrc". Call this function, and
122 * the resulting agent header would be:
123 *
124 * SomeApplication/23 (+lookandfeel.knsrc)
125 *
126 * If you do not set this (or set it to an empty string), the agent string becomes
127 *
128 * SomeApplication/23
129 *
130 * @param additionalAgentInformation The extra string
131 * @since 5.66
132 */
133 void setAdditionalAgentInformation(const QString &additionalInformation);
134 /**
135 * The custom identifier sent along with requests
136 *
137 * @return The custom identifier
138 * @see setAdditionalAgentInformation(const QString&)
139 * @since 5.66
140 */
141 QString additionalAgentInformation() const;
142
143 /**
144 A url that identifies this provider.
145 This should be used as identifier when referring to this provider but you don't want to use the full provider object.
146 */
147 QUrl baseUrl() const;
148
149 /**
150 A name for the provider that can be displayed to the user
151 */
152 QString name() const;
153
154 /**
155 * An icon used to visually identify this provider
156 * @return A URL for an icon image (or an invalid URL if one was not defined by the provider)
157 * @since 5.85
158 */
159 QUrl icon() const;
160
161 enum SortMode {
162 Newest,
163 Alphabetical,
164 Rating,
165 Downloads,
166 };
167
168 /**
169 Test if the server supports the person part of the API
170 */
171 bool hasPersonService() const;
172 /**
173 Version of the person part of the API
174 */
175 QString personServiceVersion() const;
176
177 /**
178 Test if the server supports the friend part of the API
179 */
180 bool hasFriendService() const;
181
182 /**
183 Version of the friend part of the API
184 */
185 QString friendServiceVersion() const;
186
187 /**
188 Test if the server supports the message part of the API
189 */
190 bool hasMessageService() const;
191 /**
192 Version of the message part of the API
193 */
194 QString messageServiceVersion() const;
195
196 /**
197 Test if the server supports the achievement part of the API
198 */
199 bool hasAchievementService() const;
200 /**
201 Version of the achievement part of the API
202 */
203 QString achievementServiceVersion() const;
204
205 /**
206 Test if the server supports the activity part of the API
207 */
208 bool hasActivityService() const;
209 /**
210 Version of the activity part of the API
211 */
212 QString activityServiceVersion() const;
213
214 /**
215 Test if the server supports the content part of the API
216 */
217 bool hasContentService() const;
218 /**
219 Version of the content part of the API
220 */
221 QString contentServiceVersion() const;
222
223 /**
224 Test if the server supports the fan part of the API
225 */
226 bool hasFanService() const;
227 /**
228 Version of the fan part of the API
229 */
230 QString fanServiceVersion() const;
231
232 /**
233 Test if the server supports the forum part of the API
234 */
235 bool hasForumService() const;
236 /**
237 Version of the forum part of the API
238 */
239 QString forumServiceVersion() const;
240
241 /**
242 *
243 Test if the server supports the knowledgebase part of the API
244 */
245 bool hasKnowledgebaseService() const;
246 /**
247 Version of the knowledgebase part of the API
248 */
249 QString knowledgebaseServiceVersion() const;
250
251 /**
252 Test if the server supports the comments part of the API
253 */
254 bool hasCommentService() const;
255 /**
256 Version of the comments part of the API
257 */
258 QString commentServiceVersion() const;
259
260 /**
261 Test if the provider has user name/password available.
262 This does not yet open kwallet in case the KDE plugin is used.
263 @return true if the provider has login information
264 */
265 bool hasCredentials() const;
266 bool hasCredentials();
267
268 /**
269 Load user name and password from the store.
270 Attica will remember the loaded values and use them from this point on.
271 @param user reference that returns the user name
272 @param password reference that returns the password
273 @return if credentials could be loaded
274 */
275 bool loadCredentials(QString &user, QString &password);
276
277 /**
278 Sets (and remembers) user name and password for this provider.
279 To remove the data an empty username should be passed.
280 @param user the user (login) name
281 @param password the password
282 @return if credentials could be saved
283 */
284 bool saveCredentials(const QString &user, const QString &password);
285
286 /**
287 Test if the server accepts the login/password.
288 This function does not actually set the credentials. Use saveCredentials for that purpose.
289 @param user the user (login) name
290 @param password the password
291 @return the job that will contain the success of the login as metadata
292 */
293 PostJob *checkLogin(const QString &user, const QString &password);
294
295 /**
296 * Fetches server config
297 * @return The job responsible for fetching data
298 */
299 ItemJob<Config> *requestConfig();
300
301 // Person part of OCS
302
303 PostJob *registerAccount(const QString &id, const QString &password, const QString &mail, const QString &firstName, const QString &lastName);
304 ItemJob<Person> *requestPerson(const QString &id);
305 ItemJob<Person> *requestPersonSelf();
306 ItemJob<AccountBalance> *requestAccountBalance();
307 ListJob<Person> *requestPersonSearchByName(const QString &name);
308 ListJob<Person> *requestPersonSearchByLocation(qreal latitude, qreal longitude, qreal distance = 0.0, int page = 0, int pageSize = 20);
309 PostJob *postLocation(qreal latitude, qreal longitude, const QString &city = QString(), const QString &country = QString());
310
311 //////////////////////////
312 // PrivateData part of OCS
313
314 /**
315 * Fetches the a given attribute from an OCS-compliant server.
316 * @param app The application name
317 * @param key The key of the attribute to fetch (optional)
318 * @return The job that is responsible for fetching the data
319 */
320 ItemJob<PrivateData> *requestPrivateData(const QString &app, const QString &key = QString());
321
322 /**
323 * Fetches all stored private data.
324 * @return The job responsible for fetching data
325 */
327 {
328 return requestPrivateData(QString(), QString());
329 }
330
331 /**
332 * Sets the value of an attribute.
333 * @param app The application name
334 * @param key The key of the attribute
335 * @param value The new value of the attribute
336 * @return The job responsible for setting data
337 */
338 PostJob *setPrivateData(const QString &app, const QString &key, const QString &value);
339
340 // Friend part of OCS
341
342 ListJob<Person> *requestFriends(const QString &id, int page = 0, int pageSize = 20);
343 ListJob<Person> *requestSentInvitations(int page = 0, int pageSize = 20);
344 ListJob<Person> *requestReceivedInvitations(int page = 0, int pageSize = 20);
345 PostJob *inviteFriend(const QString &to, const QString &message);
346 PostJob *approveFriendship(const QString &to);
347 PostJob *declineFriendship(const QString &to);
348 PostJob *cancelFriendship(const QString &to);
349
350 // Message part of OCS
351
352 ListJob<Folder> *requestFolders();
353 ListJob<Message> *requestMessages(const Folder &folder);
354 ListJob<Message> *requestMessages(const Folder &folder, Message::Status status);
355 ItemJob<Message> *requestMessage(const Folder &folder, const QString &id);
356 PostJob *postMessage(const Message &message);
357
358 // Achievement part of OCS
359 /**
360 * Get a list of achievements
361 * @return ListJob listing Achievements
362 */
363 ListJob<Achievement> *requestAchievements(const QString &contentId, const QString &achievementId, const QString &userId);
364
365 /** Add a new achievement.
366 * @param id id of the achievement entry
367 * @param achievement The new Achievement added
368 * @return item post job for adding the new achievement
369 */
370 ItemPostJob<Achievement> *addNewAchievement(const QString &id, const Achievement &newAchievement);
371
372 /**
373 * Post modifications to an Achievement on the server
374 * @param achievement Achievement to update on the server
375 */
376 PutJob *editAchievement(const QString &contentId, const QString &achievementId, const Achievement &achievement);
377
378 /**
379 * Deletes an achievement on the server. The achievement passed as an argument doesn't need complete
380 * information as just the id() is used.
381 * @param achievement Achievement to delete on the server.
382 */
383 DeleteJob *deleteAchievement(const QString &contentId, const QString &achievementId);
384
385 // PostJob* postAchievement(const Achievement& achievement);
386 PostJob *setAchievementProgress(const QString &id, const QVariant &progress, const QDateTime &timestamp);
387 DeleteJob *resetAchievementProgress(const QString &id);
388
389 // Activity part of OCS
390
391 ListJob<Activity> *requestActivities();
392 PostJob *postActivity(const QString &message);
393
394 // Project part of OCS
395 /**
396 * Get a list of build service projects
397 * @return ListJob listing Projects
398 */
399 ListJob<Project> *requestProjects();
400
401 /**
402 * Get a Project's data
403 * @return ItemJob receiving data
404 */
405 ItemJob<Project> *requestProject(const QString &id);
406
407 /**
408 * Post modifications to a Project on the server. The resulting project ID can be found in
409 * the Attica::MetaData of the finished() PostJob. You can retrieve it using
410 * Attica::MetaData::resultingProjectId().
411 * @param project Project to create on the server
412 */
413 PostJob *createProject(const Project &project);
414
415 /**
416 * Deletes a project on the server. The project passed as an argument doesn't need complete
417 * information as just the id() is used.
418 * @param project Project to delete on the server.
419 */
420 PostJob *deleteProject(const Project &project);
421
422 /**
423 * Post modifications to a Project on the server
424 * @param project Project to update on the server
425 */
426 PostJob *editProject(const Project &project);
427
428 // Buildservice part of OCS
429
430 /**
431 * Get the information for a specific build service instance.
432 * @return ItemJob receiving data
433 */
434 ItemJob<BuildService> *requestBuildService(const QString &id);
435
436 /**
437 * Get the information for a specific publisher.
438 * @return ItemJob receiving data
439 */
440 ItemJob<Publisher> *requestPublisher(const QString &id);
441
442 /**
443 * Save the value of a single publishing field
444 * @return PostJob*
445 */
446 PostJob *savePublisherField(const Project &project, const PublisherField &field);
447
448 /**
449 * Publish the result of a completed build job to a publisher.
450 * @return ItemJob receiving data
451 */
452 PostJob *publishBuildJob(const BuildServiceJob &buildjob, const Publisher &publisher);
453
454 /**
455 * Get the build output for a specific build service job
456 * @return ItemJob receiving and containing the output data
457 */
458 ItemJob<BuildServiceJobOutput> *requestBuildServiceJobOutput(const QString &id);
459
460 /**
461 * Get the information for a specific build service job, such as status and progress.
462 * @return ItemJob receiving and containing the data
463 */
464 ItemJob<BuildServiceJob> *requestBuildServiceJob(const QString &id);
465
466 /**
467 * Get a list of build service build services
468 * @return ListJob listing BuildServices
469 */
470 ListJob<BuildService> *requestBuildServices();
471
472 /**
473 * Get a list of publishers
474 * @return ListJob listing Publishers
475 */
476 ListJob<Publisher> *requestPublishers();
477
478 /**
479 * Get a list of build service projects
480 * @return ListJob listing BuildServiceJobs
481 */
482 ListJob<BuildServiceJob> *requestBuildServiceJobs(const Project &project);
483
484 /**
485 * Create a new job for a given project on a given buildservice for a given target.
486 * Those three items are mandatory for the job to succeed.
487 * @param job Buildservicejob to create on the server
488 */
489 PostJob *createBuildServiceJob(const BuildServiceJob &job);
490
491 /**
492 * Cancel a job.
493 * Setting the ID on the build service parameter is enough for it to work.
494 * @param job Buildservicejob to cancel on the server, needs at least id set.
495 */
496 PostJob *cancelBuildServiceJob(const BuildServiceJob &job);
497
498 /**
499 * Get a list of remote accounts, account for a build service instance
500 * which is stored in the OCS service in order to authenticate with the
501 * build service instance.
502 * @return ListJob listing RemoteAccounts
503 */
504 ListJob<RemoteAccount> *requestRemoteAccounts();
505
506 /**
507 * Deletes a remote account stored on the OCS server.
508 * @param id The ID of the remote account on the OCS instance.
509 */
510 PostJob *deleteRemoteAccount(const QString &id);
511
512 /**
513 * Create a new remote account, an account for a build service instance
514 * which is stored in the OCS service in order to authenticate with the
515 * build service instance.
516 * Type, Type ID, login and password are mandatory.
517 * @param account RemoteAccount to create on the server
518 */
519 PostJob *createRemoteAccount(const RemoteAccount &account);
520
521 /**
522 * Edit an existing remote account.
523 * @param account RemoteAccount to create on the server
524 */
525 PostJob *editRemoteAccount(const RemoteAccount &account);
526
527 /** Get a remote account by its ID.
528 * @param id The ID of the remote account
529 */
530 ItemJob<RemoteAccount> *requestRemoteAccount(const QString &id);
531
532 /** Upload a tarball to the buildservice.
533 * @param projectId The ID of the project this source file belongs to
534 * @param payload A reference to the complete file data
535 * @return A postjob to keep keep track of the upload
536 */
537 Attica::PostJob *uploadTarballToBuildService(const QString &projectId, const QString &fileName, const QByteArray &payload);
538
539 // Content part of OCS
540
541 /**
542 * Get a list of categories (such as wallpaper)
543 * @return the categories of the server
544 */
545 ListJob<Category> *requestCategories();
546
547 /**
548 * Get a list of licenses (such as GPL)
549 * @return the licenses available from the server
550 */
551 ListJob<License> *requestLicenses();
552
553 /**
554 * Get a list of distributions (such as Ark, Debian)
555 * @return the licenses available from the server
556 */
557 ListJob<Distribution> *requestDistributions();
558
559 /**
560 * Get a list of home page types (such as blog, Facebook)
561 * @return the licenses available from the server
562 */
563 ListJob<HomePageType> *requestHomePageTypes();
564
565 /**
566 Request a list of Contents.
567 Note that @p categories is not optional. If left empty, no results will be returned.
568 An empty search string @p search returns the top n items.
569 @param categories categories to search in
570 @param search optional search string (in name/description of the content)
571 @param mode sorting mode
572 @param page request nth page in the list of results
573 @param pageSize requested size of pages when calculating the list of results
574 @return list job for the search results
575 */
577 searchContents(const Category::List &categories, const QString &search = QString(), SortMode mode = Rating, uint page = 0, uint pageSize = 10);
578
579 /**
580 Request a list of Contents.
581 Like @see searchContents, but only contents created by one person.
582 @param person the person-id that created the contents.
583 */
584 ListJob<Content> *searchContentsByPerson(const Category::List &categories,
585 const QString &person,
586 const QString &search = QString(),
587 SortMode mode = Rating,
588 uint page = 0,
589 uint pageSize = 10);
590
591 /**
592 Request a list of Contents. More complete version.
593 Note that @p categories is not optional. If left empty, no results will be returned.
594 An empty search string @p search returns the top n items.
595 @param categories categories to search in
596 @param person the person-id that created the contents
597 @param distributions list of distributions to filter by, if empty no filtering by distribution is done
598 @param licenses list of licenses to filter by, if empty no filtering by license is done
599 @param search optional search string (in name/description of the content)
600 @param mode sorting mode
601 @param page request nth page in the list of results
602 @param pageSize requested size of pages when calculating the list of results
603 @return list job for the search results
604 */
605 ListJob<Content> *searchContents(const Category::List &categories,
606 const QString &person,
608 const License::List &licenses,
609 const QString &search = QString(),
610 SortMode sortMode = Rating,
611 uint page = 0,
612 uint pageSize = 10);
613
614 /**
615 Retrieve a single content.
616 @param contentId the id of the content
617 @return job that retrieves the content object
618 */
619 ItemJob<Content> *requestContent(const QString &contentId);
620
621 ItemJob<DownloadItem> *downloadLink(const QString &contentId, const QString &itemId = QStringLiteral("1"));
622
623 /** Vote for a content item
624 * @param contentId the content which this voting is for
625 * @param rating - the rating, must be between 0 (bad) and 100 (good)
626 * @return the post job for this voting
627 */
628 PostJob *voteForContent(const QString &contentId, uint rating);
629
630 ItemPostJob<Content> *addNewContent(const Category &category, const Content &newContent);
631 ItemPostJob<Content> *editContent(const Category &updatedCategory, const QString &contentId, const Content &updatedContent);
632 PostJob *deleteContent(const QString &contentId);
633
634 PostJob *setDownloadFile(const QString &contentId, const QString &fileName, QIODevice *payload);
635 PostJob *setDownloadFile(const QString &contentId, const QString &fileName, const QByteArray &payload);
636 PostJob *deleteDownloadFile(const QString &contentId);
637
638 /**
639 * Upload an image file as preview for the content
640 * @param contentId
641 * @param previewId each content can have previews with the id 1,2 or 3
642 * @param payload the image file
643 */
644 PostJob *setPreviewImage(const QString &contentId, const QString &previewId, const QString &fileName, const QByteArray &image);
645 PostJob *deletePreviewImage(const QString &contentId, const QString &previewId);
646
647 // KnowledgeBase part of OCS
648
649 ItemJob<KnowledgeBaseEntry> *requestKnowledgeBaseEntry(const QString &id);
650 ListJob<KnowledgeBaseEntry> *searchKnowledgeBase(const Content &content, const QString &search, SortMode, int page, int pageSize);
651
652 // Event part of OCS
653
654 ItemJob<Event> *requestEvent(const QString &id);
655 ListJob<Event> *requestEvent(const QString &country, const QString &search, const QDate &startAt, SortMode mode, int page, int pageSize);
656
657 // Comment part of OCS
658 /** Request a list of comments for a content / forum / knowledgebase / event.
659 * @param comment::Type type of the comment @see Comment::Type (content / forum / knowledgebase / event)
660 * @param id id of the content entry where you want to get the comments is from
661 * @param id2 id of the content entry where you want to get the comments is from
662 * @param page request nth page in the list of results
663 * @param pageSize requested size of pages when calculating the list of results
664 * @return list job for the comments results
665 */
666 ListJob<Comment> *requestComments(const Comment::Type commentType, const QString &id, const QString &id2, int page, int pageSize);
667
668 /** Add a new comment.
669 * @param commentType type of the comment @see CommentType (content / forum / knowledgebase / event)
670 * @param id id of the content entry where you want to get the comments is from
671 * @param id2 id of the sub content entry where you want to get the comments is from
672 * @param parentId the id of the parent comment if the new comment is a reply
673 * @param subject title of the comment
674 * @param message text of the comment
675 * @return item post job for adding the new comment
676 */
677 ItemPostJob<Comment> *addNewComment(const Comment::Type commentType,
678 const QString &id,
679 const QString &id2,
680 const QString &parentId,
681 const QString &subject,
682 const QString &message);
683
684 /** Vote a comment item
685 * @param id the comment id which this voting is for
686 * @param rating the rating, must be between 0 (bad) and 100 (good)
687 * @return the post job for this voting
688 */
689 PostJob *voteForComment(const QString &id, uint rating);
690
691 // Fan part of OCS
692
693 PostJob *becomeFan(const QString &contentId);
694 ListJob<Person> *requestFans(const QString &contentId, uint page = 0, uint pageSize = 10);
695
696 // Forum part of OCS
697 ListJob<Forum> *requestForums(uint page = 0, uint pageSize = 10);
698 ListJob<Topic> *requestTopics(const QString &forum, const QString &search, const QString &description, SortMode mode, int page, int pageSize);
699 PostJob *postTopic(const QString &forumId, const QString &subject, const QString &content);
700
701 const QString &getRegisterAccountUrl() const;
702
703protected:
704 QUrl createUrl(const QString &path);
705 QNetworkRequest createRequest(const QUrl &url);
706 // Convenience overload
707 QNetworkRequest createRequest(const QString &path);
708
709 ItemJob<Config> *doRequestConfig(const QUrl &url);
710 ItemJob<Person> *doRequestPerson(const QUrl &url);
711 ItemJob<AccountBalance> *doRequestAccountBalance(const QUrl &url);
712 ListJob<Person> *doRequestPersonList(const QUrl &url);
713 ListJob<Achievement> *doRequestAchievementList(const QUrl &url);
714 ListJob<Activity> *doRequestActivityList(const QUrl &url);
715 ListJob<Folder> *doRequestFolderList(const QUrl &url);
716 ListJob<Forum> *doRequestForumList(const QUrl &url);
717 ListJob<Topic> *doRequestTopicList(const QUrl &url);
718 ListJob<Message> *doRequestMessageList(const QUrl &url);
719
720private:
721 class Private;
723
724 Provider(PlatformDependent *internals, const QUrl &baseUrl, const QString &name, const QUrl &icon = QUrl());
725 Provider(PlatformDependent *internals,
726 const QUrl &baseUrl,
727 const QString &name,
728 const QUrl &icon,
729 const QString &person,
730 const QString &friendV,
731 const QString &message,
732 const QString &achievements,
733 const QString &activity,
734 const QString &content,
735 const QString &fan,
736 const QString &forum,
737 const QString &knowledgebase,
738 const QString &event,
739 const QString &comment);
740 // kde-SC5: merge with the constructor above (i.e. remove the above one)
741 Provider(PlatformDependent *internals,
742 const QUrl &baseUrl,
743 const QString &name,
744 const QUrl &icon,
745 const QString &person,
746 const QString &friendV,
747 const QString &message,
748 const QString &achievements,
749 const QString &activity,
750 const QString &content,
751 const QString &fan,
752 const QString &forum,
753 const QString &knowledgebase,
754 const QString &event,
755 const QString &comment,
756 const QString &registerUrl);
757 // TODO KF6: merge with the constructor above (i.e. remove the above one - and actually do it this time :P )
758 Provider(PlatformDependent *internals,
759 const QUrl &baseUrl,
760 const QString &name,
761 const QUrl &icon,
762 const QString &person,
763 const QString &friendV,
764 const QString &message,
765 const QString &achievements,
766 const QString &activity,
767 const QString &content,
768 const QString &fan,
769 const QString &forum,
770 const QString &knowledgebase,
771 const QString &event,
772 const QString &comment,
773 const QString &registerUrl,
774 const QString &additionalAgentInformation);
775
776 friend class ProviderManager;
777};
778}
779
780#endif
Represents an achievement.
Definition achievement.h:28
Represents a build service job.
Represents a single content category.
Definition category.h:24
Represents a single content.
Definition content.h:33
Represents a delete job.
Definition deletejob.h:26
Represents a single mail folder.
Definition folder.h:25
Represents an item post job.
Definition itemjob.h:66
Represents a message.
Definition message.h:27
Represents a post job.
Definition postjob.h:30
Represents a project.
Definition project.h:30
Attica ProviderManager.
The Provider class represents one Open Collaboration Service provider.
Definition provider.h:97
ItemJob< PrivateData > * requestPrivateData()
Fetches all stored private data.
Definition provider.h:326
Represents a publisher field.
Represents a publisher.
Definition publisher.h:44
Represents a put job.
Definition putjob.h:30
Represents a remote account.
Q_SCRIPTABLE CaptureState status()
The Attica namespace,.
virtual bool event(QEvent *e)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:19:48 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.