2 // C++ Implementation: playback
4 // Author: Oliver Groß <z.o.gross@gmx.de>, (C) 2008
6 // Copyright: See COPYING file that comes with this distribution
13 QPlayback::QPlayback(QClient
* parent
) : QObject(parent
), m_Connection(0) {
14 connect(parent
, SIGNAL(connectionChanged(xmmsc_connection_t
*)),
15 this, SLOT(setConnection(xmmsc_connection_t
*)));
16 if (parent
->isConnectedToServer())
17 setConnection(parent
->connection());
22 QPlayback::~QPlayback() {
25 void QPlayback::setVolumeChannel(const void * key
, xmmsc_result_value_type_t
, const void * value
, void * instance
) {
26 QPlayback
* playback
= static_cast<QPlayback
*>(instance
);
28 QString
hashKey((const char *)key
);
29 quint32 volume
= XPOINTER_TO_INT(value
);
30 if (playback
->m_Volume
.contains(hashKey
))
31 playback
->m_Volume
[hashKey
] = volume
;
33 playback
->m_Volume
.insert(hashKey
, volume
);
37 //callback for the "volume changed"-broadcast
38 void QPlayback::volumeCallback(xmmsc_result_t
* result
, void * instance
) {
40 QPlayback
* playback
= static_cast<QPlayback
*>(instance
);
41 xmmsc_result_dict_foreach(result
, setVolumeChannel
, instance
);
42 emit playback
->volumeChanged();
44 //xmmsc_result_unref(result);
47 //callback for the "status changed"-broadcast
48 void QPlayback::statusCallback(xmmsc_result_t
* result
, void * instance
) {
50 QPlayback
* playback
= static_cast<QPlayback
*>(instance
);
51 xmmsc_result_get_uint(result
, (quint32
*)(&playback
->m_Status
));
52 emit playback
->statusChanged(playback
->m_Status
);
54 //xmmsc_result_unref(result);
57 //callback for the "id changed"-broadcast
58 void QPlayback::idCallback(xmmsc_result_t
* result
, void * instance
) {
60 QPlayback
* playback
= static_cast<QPlayback
*>(instance
);
61 xmmsc_result_get_uint(result
, &playback
->m_CurrentID
);
62 emit playback
->idChanged(playback
->m_CurrentID
);
64 //xmmsc_result_unref(result);
67 //callback for the "play time changed"-signal
68 void QPlayback::playTimeCallback(xmmsc_result_t
* result
, void * instance
) {
70 QPlayback
* playback
= static_cast<QPlayback
*>(instance
);
72 xmmsc_result_get_uint(result
, &time
);
73 xmmsc_result_unref(xmmsc_result_restart(result
));
74 emit playback
->playTimeChanged(time
);
76 xmmsc_result_unref(result
);
79 void QPlayback::reset() {
81 connectNotifierUnref(xmmsc_playback_volume_get(m_Connection
), volumeCallback
, this);
82 connectNotifierUnref(xmmsc_playback_current_id(m_Connection
), idCallback
, this);
83 connectNotifierUnref(xmmsc_playback_status(m_Connection
), statusCallback
, this);
87 void QPlayback::setConnection(xmmsc_connection_t
* connection
) {
88 if (m_Connection
== connection
)
95 disconnectNotifierUnref(xmmsc_broadcast_playback_volume_changed(m_Connection
));
96 disconnectNotifierUnref(xmmsc_broadcast_playback_current_id(m_Connection
));
97 disconnectNotifierUnref(xmmsc_broadcast_playback_status(m_Connection
));
98 disconnectNotifierUnref(xmmsc_signal_playback_playtime(m_Connection
));
101 m_Connection
= connection
;
103 m_Status
= XMMS_PLAYBACK_STATUS_STOP
;
107 connectNotifierUnref(xmmsc_broadcast_playback_volume_changed(m_Connection
), volumeCallback
, this);
108 connectNotifierUnref(xmmsc_broadcast_playback_current_id(m_Connection
), idCallback
, this);
109 connectNotifierUnref(xmmsc_broadcast_playback_status(m_Connection
), statusCallback
, this);
110 connectNotifierUnref(xmmsc_signal_playback_playtime(m_Connection
), playTimeCallback
, this);
112 connectNotifierUnref(xmmsc_playback_volume_get(m_Connection
), volumeCallback
, this);
113 connectNotifierUnref(xmmsc_playback_current_id(m_Connection
), idCallback
, this);
114 connectNotifierUnref(xmmsc_playback_status(m_Connection
), statusCallback
, this);
118 emit
volumeChanged();
119 emit
statusChanged(XMMS_PLAYBACK_STATUS_STOP
);
123 void QPlayback::start() {
124 xmmsc_result_unref(xmmsc_playback_start(m_Connection
));
127 void QPlayback::pause() {
128 xmmsc_result_unref(xmmsc_playback_pause(m_Connection
));
131 void QPlayback::stop() {
132 xmmsc_result_unref(xmmsc_playback_stop(m_Connection
));
135 void QPlayback::tickle() {
136 xmmsc_result_unref(xmmsc_playback_tickle(m_Connection
));
139 void QPlayback::setVolume(int volume
, QString channel
) {
140 if (channel
.isEmpty()) {
141 foreach(QString i
, m_Volume
.keys())
142 xmmsc_result_unref(xmmsc_playback_volume_set(m_Connection
, i
.toAscii().data(), volume
));
145 xmmsc_result_unref(xmmsc_playback_volume_set(m_Connection
, channel
.toAscii().data(), volume
));
148 void QPlayback::setNext(quint32 position
) {
149 xmmsc_result_unref(xmmsc_playlist_set_next(m_Connection
, position
));