File indexing completed on 2024-07-14 14:25:36

0001 /*
0002     This file is part of KDE.
0003 
0004     SPDX-FileCopyrightText: 2008 Cornelius Schumacher <schumacher@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #ifndef ATTICA_CONTENT_H
0010 #define ATTICA_CONTENT_H
0011 
0012 #include <QList>
0013 #include <QMap>
0014 #include <QSharedDataPointer>
0015 #include <QString>
0016 #include <QUrl>
0017 
0018 #include "attica_export.h"
0019 #include "downloaddescription.h"
0020 #include "homepageentry.h"
0021 #include "icon.h"
0022 
0023 class QDateTime;
0024 
0025 namespace Attica
0026 {
0027 /**
0028  * @class Content content.h <Attica/Content>
0029  *
0030  * Represents a single content
0031  */
0032 class ATTICA_EXPORT Content
0033 {
0034 public:
0035     typedef QList<Content> List;
0036     class Parser;
0037 
0038     /**
0039      * Creates an empty Content
0040      */
0041     Content();
0042 
0043     /**
0044      * Copy constructor.
0045      * @param other the Content to copy from
0046      */
0047     Content(const Content &other);
0048 
0049     /**
0050      * Assignment operator.
0051      * @param other the Content to assign from
0052      * @return pointer to this Content
0053      */
0054     Content &operator=(const Content &other);
0055 
0056     /**
0057      * Destructor.
0058      */
0059     ~Content();
0060 
0061     /**
0062      * Sets the id of the Content.
0063      * The id uniquely identifies a Content with the OCS API.
0064      * @param id the new id
0065      */
0066     void setId(const QString &id);
0067 
0068     /**
0069      * Gets the id of the Content.
0070      * The id uniquely identifies a Content with the OCS API.
0071      * @return the id
0072      */
0073     QString id() const;
0074 
0075     /**
0076      * Sets the name of the Content.
0077      * @param name the new name
0078      */
0079     void setName(const QString &name);
0080 
0081     /**
0082      * Gets the name of the Content.
0083      * @return the name
0084      */
0085     QString name() const;
0086 
0087     /**
0088      * Sets the rating of the Content.
0089      * @param rating the new rating, has to be in the range 0-100
0090      */
0091     void setRating(int rating);
0092 
0093     /**
0094      * Gets the rating of the Content.
0095      * @return the rating in the range 0-100
0096      */
0097     int rating() const;
0098 
0099     /**
0100      * Sets the number of downloads for the Content.
0101      * @param downloads the new number of downloads
0102      */
0103     void setDownloads(int downloads);
0104 
0105     /**
0106      * Gets the number of downloads for the Content (how often this has been downloaded from the server).
0107      * @return the number of downloads
0108      */
0109     int downloads() const;
0110 
0111     /**
0112      * Sets the number of comments for the Content.
0113      * @param numComments the new number of downloads
0114      */
0115     void setNumberOfComments(int numComments);
0116 
0117     /**
0118      * Gets the number of comments for the Content.
0119      * @return the number of comments
0120      */
0121     int numberOfComments() const;
0122 
0123     /**
0124      * Sets the date and time the Content has been created.
0125      * @param created the new creation date and time
0126      */
0127     void setCreated(const QDateTime &created);
0128 
0129     /**
0130      * Gets the date and time the Content has been created.
0131      * @return the date and time of the last update
0132      */
0133     QDateTime created() const;
0134 
0135     /**
0136      * Sets the time the Content has been last updated.
0137      * @param updated the new date and time of the last update
0138      */
0139     void setUpdated(const QDateTime &updated);
0140 
0141     /**
0142      * Gets the date and time the Content has been last updated.
0143      * @return the date and time of the last update
0144      */
0145     QDateTime updated() const;
0146 
0147     /**
0148      * A summary description of this content.
0149      */
0150     QString summary() const;
0151 
0152     /**
0153      * A description of this content.
0154      */
0155     QString description() const;
0156 
0157     /**
0158      * A webpage with the detailed description of this content.
0159      */
0160     QUrl detailpage() const;
0161 
0162     QString changelog() const;
0163     QString version() const;
0164     QString depend() const;
0165 
0166     /**
0167       Get the details about a download (a content can have multiple links, eg for different distros).
0168       This is not very helpful if we don't know the allowed numbers.
0169       */
0170     DownloadDescription downloadUrlDescription(int number) const;
0171 
0172     /**
0173       Get all possible downloads.
0174       This is slow searching through lots of strings, so beware and don't call it too often.
0175       */
0176     QList<DownloadDescription> downloadUrlDescriptions() const;
0177 
0178     /**
0179       Get the details about a home page (a content can have multiple home pages, blog, bugs, ...).
0180       This is not very helpful if we don't know the allowed numbers.
0181       */
0182     HomePageEntry homePageEntry(int number) const;
0183 
0184     /**
0185       Get all home pages for this content.
0186       This is slow searching through lots of strings, so beware and don't call it too often.
0187       */
0188     QList<HomePageEntry> homePageEntries();
0189 
0190     QString previewPicture(const QString &number = QStringLiteral("1")) const;
0191     QString smallPreviewPicture(const QString &number = QStringLiteral("1")) const;
0192     QString license() const;
0193     QString licenseName() const;
0194     QString author() const;
0195 
0196     /**
0197       Get all icons for this content.
0198       */
0199     QList<Icon> icons();
0200 
0201     /**
0202       Get all icons for this content.
0203       */
0204     QList<Icon> icons() const;
0205 
0206     /**
0207      * Set list of icons.
0208      * @param icons list of icons for this content
0209      */
0210     void setIcons(QList<Icon> icons);
0211 
0212     /**
0213       Get all videos for this content.
0214       */
0215     QList<QUrl> videos();
0216     /**
0217      * Set list of videos.
0218      * @param videos list of videos for this content
0219      */
0220     void setVideos(QList<QUrl> videos);
0221 
0222     /**
0223      * Get all the tags for this content
0224      * @since 5.50
0225      */
0226     QStringList tags() const;
0227     /**
0228      * Set the list of tags
0229      * @param tags list of tags for this content
0230      * @since 5.50
0231      */
0232     void setTags(const QStringList &tags);
0233 
0234     /**
0235      * Add an attribute that is not included in the basis set of attributes exposed by the Content class.
0236      * If the attribute already exists it gets overwritten.
0237      * @param key the key of the attribute
0238      * @param value the value of the attribute
0239      */
0240     void addAttribute(const QString &key, const QString &value);
0241 
0242     /**
0243      * Get an attribute that is not included in the basis set of attributes exposed by the Content class.
0244      * @param key the key of the attribute
0245      * @return the value of the attribute with the specified key, or an empty string, if the key has not been found
0246      */
0247     QString attribute(const QString &key) const;
0248 
0249     /**
0250      * Get all attributes that are not included in the basis set of attributes exposed by the Content class.
0251      * @return the attribute mappings
0252      */
0253     QMap<QString, QString> attributes() const;
0254 
0255     /**
0256      * Checks whether this Content has an id
0257      * @return @c true if an id has been set, @c false otherwise
0258      */
0259     bool isValid() const;
0260 
0261 private:
0262     class Private;
0263     QSharedDataPointer<Private> d;
0264 };
0265 
0266 }
0267 
0268 #endif