2 // C++ Implementation: playlist
4 // Author: Oliver Groß <z.o.gross@gmx.de>, (C) 2008
6 // Copyright: See COPYING file that comes with this distribution
13 QPlaylist::QPlaylist(QClient
* parent
) : QObject(parent
), m_Connection(0) {
15 connect(parent
, SIGNAL(connectionChanged(xmmsc_connection_t
*)),
16 this, SLOT(setConnection(xmmsc_connection_t
*)));
19 QPlaylist::~QPlaylist() {
22 void QPlaylist::loadedCallback(xmmsc_result_t
* result
, void * instance
) {
24 static_cast<QPlaylist
*>(instance
)->reset();
26 xmmsc_result_unref(result
);
29 void QPlaylist::changedCallback(xmmsc_result_t
* result
, void * instance
) {
31 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
32 xmms_playlist_changed_actions_t type
;
33 xmmsc_result_get_dict_entry_uint(result
, "type", (quint32
*)(&type
));
36 case XMMS_PLAYLIST_CHANGED_ADD
:
40 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
42 emit playlist
->entryAppended(id
);
45 case XMMS_PLAYLIST_CHANGED_INSERT
:
49 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
50 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
51 emit playlist
->entryInserted(id
, position
);
54 case XMMS_PLAYLIST_CHANGED_UPDATE
:
58 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
59 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
60 emit playlist
->entryUpdated(id
, position
);
63 case XMMS_PLAYLIST_CHANGED_REMOVE
:
67 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
68 emit playlist
->entryRemoved(position
);
71 case XMMS_PLAYLIST_CHANGED_MOVE
:
75 xmmsc_result_get_dict_entry_uint(result
, "position", &from
);
76 xmmsc_result_get_dict_entry_uint(result
, "newposition", &from
);
77 emit playlist
->entryMoved(from
, to
);
80 case XMMS_PLAYLIST_CHANGED_SORT
:
81 case XMMS_PLAYLIST_CHANGED_SHUFFLE
:
82 case XMMS_PLAYLIST_CHANGED_CLEAR
:
89 xmmsc_result_unref(result
);
92 void QPlaylist::fillIDListCallback(xmmsc_result_t
* result
, void * instance
) {
94 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
97 playlist
->m_IDList
.clear();
99 for (xmmsc_result_t
* i
= result
; xmmsc_result_list_valid(i
); xmmsc_result_list_next(i
)) {
100 xmmsc_result_get_uint(i
, &buffer
);
101 playlist
->m_IDList
<< buffer
;
104 emit playlist
->reseted();
106 xmmsc_result_unref(result
);
109 void QPlaylist::currentPosCallback(xmmsc_result_t
* result
, void * instance
) {
113 xmmsc_result_get_uint(result
, &position
);
114 emit
static_cast<QPlaylist
*>(instance
)->currentChanged(position
);
116 xmmsc_result_unref(result
);
119 void QPlaylist::setConnection(xmmsc_connection_t
* connection
) {
120 if (m_Connection
== connection
)
125 disconnectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection
));
126 disconnectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection
));
127 disconnectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection
));
130 m_Connection
= connection
;
134 connectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection
), loadedCallback
, this);
135 connectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection
), changedCallback
, this);
136 connectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection
), currentPosCallback
, this);
140 void QPlaylist::reset() {
141 connectNotifierUnref(xmmsc_playlist_list_entries(m_Connection
, "default"), fillIDListCallback
, this);
144 void QPlaylist::append(quint32 id
) {
145 xmmsc_result_unref(xmmsc_playlist_add_id(m_Connection
, "Default", id
));
148 void QPlaylist::append(QString url
) {
149 xmmsc_result_unref(xmmsc_playlist_add_url(m_Connection
, "Default", url
.toAscii().data()));
152 void QPlaylist::append(QStringList urls
) {
153 foreach(QString i
, urls
)
157 void QPlaylist::append(QList
<quint32
> ids
) {
158 foreach(quint32 i
, ids
)
162 void QPlaylist::appendRecursive(QString directory
) {
163 xmmsc_result_unref(xmmsc_playlist_radd(m_Connection
, "Default", directory
.toAscii().data()));
166 void QPlaylist::insert(quint32 id
, quint32 position
) {
167 xmmsc_result_unref(xmmsc_playlist_insert_id(m_Connection
, "Default", position
, id
));
170 void QPlaylist::insert(QString url
, quint32 position
) {
171 xmmsc_result_unref(xmmsc_playlist_insert_url(m_Connection
, "Default", position
, url
.toAscii().data()));
174 void QPlaylist::insert(QList
<quint32
> ids
, quint32 position
) {
175 if (ids
.count() == 0)
178 QList
<quint32
>::iterator i
= ids
.end();
181 insert(*i
, position
);
183 while (i
!= ids
.begin());
186 void QPlaylist::insert(QStringList urls
, quint32 position
) {
187 if (urls
.count() == 0)
190 QStringList::iterator i
= urls
.end();
193 insert(*i
, position
);
195 while (i
!= urls
.begin());
198 void QPlaylist::remove(quint32 position
) {
199 xmmsc_result_unref(xmmsc_playlist_remove_entry(m_Connection
, "Default", position
));
202 void QPlaylist::move(quint32 from
, quint32 to
) {
203 xmmsc_result_unref(xmmsc_playlist_move_entry(m_Connection
, "Default", from
, to
));
206 void QPlaylist::clear() {
207 xmmsc_result_unref(xmmsc_playlist_clear(m_Connection
, "Default"));
210 /* void QPlaylist::sort(QStringList properties) {
211 xmmsc_result_unref(xmmsc_playlist_sort(m_Connection, "Default"));
214 void QPlaylist::randomize() {
215 xmmsc_result_unref(xmmsc_playlist_shuffle(m_Connection
, "Default"));
218 void QPlaylist::setNext(quint32 position
) {
219 xmmsc_result_unref(xmmsc_playlist_set_next(m_Connection
, position
));