]> git.tdb.fi Git - xinema.git/blob - source/xinestream.h
Rename check_info to update_info
[xinema.git] / source / xinestream.h
1 #ifndef XINESTREAM_H_
2 #define XINESTREAM_H_
3
4 #include <string>
5 #include <xine.h>
6 #include <msp/core/mutex.h>
7 #include <msp/strings/lexicalcast.h>
8 #include <msp/time/timedelta.h>
9
10 class XineEngine;
11
12 class XineStream
13 {
14 public:
15         enum State
16         {
17                 STOPPED,
18                 PAUSED,
19                 PLAYING
20         };
21
22         sigc::signal<void, State> signal_state_changed;
23         sigc::signal<void, const std::string &> signal_title_changed;
24         sigc::signal<void, const Msp::Time::TimeDelta &> signal_duration_changed;
25         sigc::signal<void, const Msp::Time::TimeDelta &> signal_position_changed;
26
27 private:
28         XineEngine &engine;
29         xine_stream_t *stream;
30         xine_event_queue_t *queue;
31         Msp::Mutex mutex;
32         State state;
33         std::string title;
34         Msp::Time::TimeDelta duration;
35         Msp::Time::TimeDelta position;
36
37 public:
38         XineStream(XineEngine &, const std::string &);
39         ~XineStream();
40
41         State get_state() const { return state; }
42         const Msp::Time::TimeDelta &get_duration() const { return duration; }
43         const Msp::Time::TimeDelta &get_position() const { return position; }
44         const std::string &get_title() const { return title; }
45
46         void play();
47         void seek(const Msp::Time::TimeDelta &);
48         void pause();
49         void stop();
50 private:
51         void set_state(State);
52
53 public:
54         void tick();
55 private:
56         void update_info();
57         void handle_event(const xine_event_t &);
58 };
59
60 void operator<<(Msp::LexicalConverter &, XineStream::State);
61 void operator>>(const Msp::LexicalConverter &, XineStream::State &);
62
63 #endif