#ifndef TVSHOW_H #define TVSHOW_H #include #include #include #include #include "episodelist.h" #include #include #include class TvShowPlayerSettings { public: TvShowPlayerSettings(); int subtileTrack; int audioTrack; int videoTrack; void describe(nw::Describer *de); }; class TvShow; class Library; class RelatedTvShow { public: RelatedTvShow(const QString identifier, int id); TvShow* get(Library &library) const; bool matches(const TvShow& show) const; bool isDummy() const; bool operator ==(const RelatedTvShow& other) const; void describe(nw::Describer* de); void parseForManga(nw::Describer* de, QString identifier); void parseForAnime(nw::Describer* de, QString identifier); void setRemoteId(QString identifier, int id); static RelatedTvShow makeDummy(); static void parseFromList(nw::Describer* de, QString arrayName, QList &list, const QString identifier, const bool anime); private: std::map remoteIds; QString title; }; class TvShow : public QObject { Q_OBJECT public: enum WatchStatus { automatic, completed, watching, waitingForNewEpisodes, onHold, dropped, planToWatch }; class OnlineSyncData { public: OnlineSyncData(); void describe(nw::Describer& de); int getRemoteId() const; void setRemoteId(int value); QDateTime getLastOnlineTrackerUpdate() const; void setLastOnlineTrackerUpdate(const QDateTime& value); private: int remoteId; QDateTime lastOnlineTrackerUpdate; }; TvShow(QString name, QObject* parent = NULL); EpisodeList &episodeList(); void read(QDir &dir); void write(nw::JsonWriter &jw); void importVideoFile(const VideoFile *episode); void downloadImage(const QString url, QDir libraryDirectory); bool isAiring() const; QString coverPath(QDir libaryPath) const; void handleApiRequest(QString endPath, QHttpRequest *req, QHttpResponse *resp); // TODO reimplement export for episode list // or remove, since it didn't work very good to begin with //void exportXbmcLinks(QDir dir); QString name() const; QStringList getSynonyms() const; QString getAiringStatus() const; QDate getStartDate() const; QDate getEndDate() const; int getTotalEpisodes() const; QString getSynopsis() const; QString getShowType() const; int getRemoteId(const QString trackerIdentifierKey) const; bool matchesNameOrSynonym(QString str) const; bool matchesRemote(const QString trackerIdentifierKey, int id) const; void addPrequels(QList relations); void addSideStories(QList relations); void addSequels(QList relations); void syncRelations(Library &library); bool hasRelationTo(const TvShow *show) const; void addSynonyms(const QStringList& values); void setSynonyms(const QStringList &value); void setAiringStatus(const QString &value); void setStartDate(const QDate &value); void setEndDate(const QDate &value); void setTotalEpisodes(int value); void setShowType(const QString &value); void setSynopsis(const QString &value); void setRemoteId(const QString remoteIdentifier, const int &value); QDir directory(QDir libraryDirectory) const; QDir wallpaperDirectory(QDir libraryDirectory) const; int numberOfWallpapers(QDir libraryDirectory) const; QString randomWallpaper(QDir libraryDirectory) const; QStringList wallpapers(QDir libraryDirectory) const; QString favouriteReleaseGroup() const; Episode* getEpisodeForPath(const QString &path); TvShowPlayerSettings playerSettings; QDateTime lastWatchedDate() const; WatchStatus getStatus() const; bool isRewatching() const; void setStatus(TvShow::WatchStatus status); bool isCompleted() const; const EpisodeList& episodeList() const; static QString watchStatusToString(TvShow::WatchStatus status); static TvShow::WatchStatus watchStatusFromString(QString statusString); void writeAsListingItem(nw::Describer *de) const; QStringList getReleaseGroupPreference() const; void setReleaseGroupPreference(QStringList value); int getRewatchMarker() const; void setRewatchMarker(int marker, bool updateTracker); int getRewatchCount() const; void setRewatchCount(int count, bool updateTracker); QDateTime getLastLocalUpdate() const; QDateTime getLastOnlineTrackerUpdate(const QString trackerKey) const; void setLastOnlineTrackerUpdate(const QString trackerKey, const QDateTime& value); RelatedTvShow toRelation(); bool hasNoRemoteIds() const; signals: private slots: void receivedPlayerSettings(QHttpResponse* resp, const QByteArray& body); void receivedReleaseGroupPreference(QHttpResponse* resp, const QByteArray& body); void onWatchCountChanged(int, int); private: QString mName; EpisodeList episodes; WatchStatus customStatus; QList prequels; QList sideStories; QList sequels; QStringList releaseGroupPreference; int rewatchMarker; ///< -1 if none int rewatchCount; ///< 0 upwards std::map onlineSyncData; QDateTime lastLocalUpdate; QStringList synonyms; QString showType; QString airingStatus; QDate startDate; QDate endDate; int totalEpisodes; QString synopsis; }; #endif // TVSHOW_H