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
#ifndef VIDEOPLAYER_H
#define VIDEOPLAYER_H
#include <QProcess>
#include <qhttprequest.h>
#include <qhttpresponse.h>
#include <QObject>
#include "metadataparser.h"
#include "thumbnailcreator.h"
#include "library.h"
#include "config.h"
#include "shortclipcreator.h"
class VideoProgress {
public:
float seconds;
MetaData metaData;
TvShow* tvShow;
QString path;
QString toSecondsAndPathJson();
QString toJson();
};
class VideoPlayer : public QObject
{
Q_OBJECT // TODO build breaks here when trying to inherit qobject
public:
explicit VideoPlayer(Library &library, const BaseConfig& baseConfig, QObject *parent = NULL);
virtual ~VideoPlayer();
bool playFile(QString filepath);
void togglePause();
void pause();
void unPause();
virtual void stop() = 0;
virtual void jumpTo(int second);
virtual void backwards(const int seconds = 5) = 0;
virtual void forwards(const int seconds = 5) = 0;
virtual float incrementVolume() = 0; ///< returns the new sound level
virtual float decrementVolume() = 0; ///< returns the new sound level
bool handleApiRequest(QHttpRequest* req, QHttpResponse* resp);
const MetaDataParser *getMetaDataParser() const;
void setMetaDataParser(const MetaDataParser *value);
const ThumbnailCreator *getThumbnailCreator() const;
void setThumbnailCreator(const ThumbnailCreator *value);
QStringList getPlaylist() const;
void setPlaylist(const QStringList &value);
void resetPlayingStatus();
VideoProgress getNowPlaying() const;
void createGif(QHttpResponse* resp, ShortClipCreator::ApiData apiData);
signals:
void paused();
void unpaused();
void jumped(int second);
void playbackStarted();
void playbackEnded();
void playbackEndedNormally();
void playbackCanceled();
void exactProgressReady(float);
protected:
virtual bool playFileImpl(QString filepath, const TvShowPlayerSettings& settings) = 0;
virtual void pauseImpl() = 0;
virtual void unPauseImpl() = 0;
virtual bool customHandleApiRequest() { return false; }
virtual void getExactProgress() { emit exactProgressReady(nowPlaying.seconds); }
Library& library;
const BaseConfig& baseConfig;
const SnapshotConfig& snapshotConfig;
const MetaDataParser* metaDataParser;
const ThumbnailCreator* thumbnailCreator;
QProcess process;
bool pauseStatus;
VideoProgress nowPlaying;
QStringList playlist;
// snapshots
QMap<QString, QString> unhandledSnapshots;
QString imageName(QString templateString, QString extension) const;
QString snapshotOutputPath() const;
QString shortClipOutputPath(const ShortClipCreator::Config& sccofig, float start, float end, QString extension) const;
void convertSnapshots();
bool convertSnapshot(const QString snapshotPath, const QString outputPath);
private:
const ShortClipCreator::Config* initShortClipConfig(ShortClipCreator::Config* config, ShortClipCreator::ApiData apiData) const;
public slots:
void onThumbnailCreated(const QByteArray img);
void receivedPlaylist(QHttpResponse* resp, const QByteArray& body);
void onGifReady(bool success);
void onExactProgressReady(float);
private slots:
void onPlaybackEndedNormally();
void onPlaybackCanceled();
};
#endif // VIDEOPLAYER_H