Merge branch 'master' of ssh://w-nz.com:33933/home/kn/sjorsg/git/libmarietje into...
[olympus:libmarietje-qt.git] / marietje.h
1 #ifndef MARIETJE_H
2 #define MARIETJE_H
3
4 #include "libmarietje_global.h"
5
6 #include <QtCore/QObject>
7
8 class QTcpSocket;
9 class QTimer;
10
11 #define LIBMARIETJE_VERSION "1.0"
12
13 class LIBMARIETJESHARED_EXPORT Marietje : public QObject {
14   Q_OBJECT
15
16 public:
17        Marietje( const QString &server, int port = 8080, bool webapi = true, QObject *parent = 0 );
18        Marietje( QObject *parent = 0 );
19       ~Marietje();
20
21   struct Track {
22     int      id;
23     QString  title;
24     QString  artist;
25     int      length;
26     QString  requester;
27   };
28
29   int trackTimeRemaining() const;
30   int trackTotalTime() const;
31   const QString &server() const;
32   int port() const;
33   const QList<Track*> &queue() const;
34
35   void setServer( const QString &server );
36   void setPort( int port );
37
38 public slots:
39   void refreshAllTracks();
40   void refreshQueue();
41   void retrieveNowPlaying();
42
43 signals:
44   void retrievedAllTracks();
45   void retrievedQueue();
46   void retrievedNowPlaying( Marietje::Track *track, int remainingSec );
47   void trackEnded();
48   void requestFailed();
49
50 private slots:
51   void open();
52   void connected();
53   void readyRead();
54   void tryNextRequest();
55   void updateTrackTime();
56
57 private:
58   void fillTrack( Track *t );
59   void leetProtocolParse( const QByteArray &d );
60   void webApiProtocolParse( const QByteArray &d, bool doneCollecting = false );
61   void parseWebapiAllTracksResponse( const QByteArray &contents );
62   QString jsonReadStringSafe( const QByteArray &c, int pos, int *end ) const;
63
64   enum RequestType {
65     NoRequest, UnknownRequest, AllTracksRequest, QueueRequest, NowPlayingRequest
66   };
67
68   QTcpSocket *socket_;
69   bool        refreshAllTracks_;
70   bool        refreshQueue_;
71   bool        retrieveNowPlaying_;
72   RequestType nowRetrieving_;
73   QString     server_;
74   int         port_;
75
76   int           responseLength_;
77   QList<Track*> responseList_;
78
79   QList<Track*> allTracks_;
80   QList<Track*> queue_;
81   int           trackTotalTime_;
82   int           trackTimeRemaining_;
83   QTimer       *trackTimer_;
84
85   QByteArray    buffer_;
86   bool          webapi_;
87 };
88
89 #endif // MARIETJE_H