1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#ifndef TVSHOW_H
#define TVSHOW_H
#include <QList>
#include <map>
#include <QDate>
#include <QDir>
#include "episodelist.h"
#include <N0Slib.h>
#include <qhttprequest.h>
#include <qhttpresponse.h>
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<RelatedTvShow> &list, const QString identifier, const bool anime);
private:
std::map<const QString, int> 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<RelatedTvShow> relations);
void addSideStories(QList<RelatedTvShow> relations);
void addSequels(QList<RelatedTvShow> 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<RelatedTvShow> prequels;
QList<RelatedTvShow> sideStories;
QList<RelatedTvShow> sequels;
QStringList releaseGroupPreference;
int rewatchMarker; ///< -1 if none
int rewatchCount; ///< 0 upwards
std::map<const QString, OnlineSyncData> onlineSyncData;
QDateTime lastLocalUpdate;
QStringList synonyms;
QString showType;
QString airingStatus;
QDate startDate;
QDate endDate;
int totalEpisodes;
QString synopsis;
};
#endif // TVSHOW_H