root/src/torrentrss.h

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
#ifndef TORRENTRSS_H
#define TORRENTRSS_H

#include <QObject>
#include <QThread>
#include <QDateTime>
#include "curlresult.h"
#include "library.h"
#include "torrentclient.h"
#include "config.h"

namespace TorrentRss {

class Entry {
public:
    virtual ~Entry() {};
    QString name;
    QString url;
    QDateTime date;

    virtual bool isCandidateForAutoDownload(QString,int,QString, const RssConfig&) { return false;};
};

class FeedResult {
public:
    FeedResult(const RssConfig& rssConfig);
    virtual ~FeedResult();
    QList<Entry*> entires;
    void removeSameEntries(const FeedResult& other);
    virtual void parse(CurlResult& result) = 0;

    const RssConfig& rssConfig;
};

class Feed : public QObject {
    Q_OBJECT
public:
    Feed(QString url,  const RssConfig& rssConfig, TvShow* tvShow = NULL);
    virtual ~Feed();
    virtual void fetch();
    TvShow* getTvShow();

    Entry* candidateForAutoDownload(const RssConfig& rssConfig);

signals:
    void foundCandidateForAutoDownload(TorrentRss::Entry entry);
protected:
    virtual FeedResult* createFeedResult(const RssConfig& rssConfig) = 0;

    void setResult(FeedResult* result);

    const RssConfig& rssConfig;
private:
    FeedResult* result;
    QString url;
    TvShow* tvShow;
};

class Client : public QObject {
    Q_OBJECT
public:
    explicit Client(TorrentClient& torrentClient, Library& library, const RssConfig& rssConfig, QObject *parent = 0);
    virtual ~Client();

    void refetch();

    void addFeed(Feed* feed);
    virtual void addFeed(TvShow* show) = 0;
    void removeFeed(Feed* feed);
    void connectLibrary();
signals:
    void torrentAvailable(TorrentRss::Entry url);

public slots:
    void addFeedsForWaitingShows();
    void autoDownloadEntry(TorrentRss::Entry entry);

private slots:
    void tvShowChangedStatus(TvShow* show, TvShow::WatchStatus newStatus, TvShow::WatchStatus oldStatus);
protected:
    QList<Feed*> feeds;
    const RssConfig& rssConfig;
private:
    Library& library;
    TorrentClient& torrentClient;
};

class Thread : public QThread {
    Q_OBJECT
public:
    Thread(Client& client, QObject* parent = 0);
    ~Thread();
    void run();

    bool toldToStop;
private:
    Client& client;
    int refetchInterval;
    int sleeped;
    int sleepStep;
};

} // namespace

#endif // TORRENTRSS_H