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) {
14 connect(parent
, SIGNAL(connectionChanged(xmmsc_connection_t
*)),
15 this, SLOT(setConnection(xmmsc_connection_t
*)));
18 QPlaylist::~QPlaylist() {
21 void QPlaylist::loadedCallback(xmmsc_result_t
* result
, void * instance
) {
23 static_cast<QPlaylist
*>(instance
)->reset();
25 xmmsc_result_unref(result
);
28 void QPlaylist::changedCallback(xmmsc_result_t
* result
, void * instance
) {
30 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
31 xmms_playlist_changed_actions_t type
;
32 xmmsc_result_get_dict_entry_uint(result
, "type", (quint32
*)(&type
));
35 case XMMS_PLAYLIST_CHANGED_ADD
:
39 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
41 emit playlist
->entryAppended(id
);
44 case XMMS_PLAYLIST_CHANGED_INSERT
:
48 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
49 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
50 emit playlist
->entryInserted(id
, position
);
53 case XMMS_PLAYLIST_CHANGED_UPDATE
:
57 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
58 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
59 emit playlist
->entryUpdated(id
, position
);
62 case XMMS_PLAYLIST_CHANGED_REMOVE
:
66 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
67 emit playlist
->entryRemoved(position
);
70 case XMMS_PLAYLIST_CHANGED_MOVE
:
74 xmmsc_result_get_dict_entry_uint(result
, "position", &from
);
75 xmmsc_result_get_dict_entry_uint(result
, "newposition", &from
);
76 emit playlist
->entryMoved(from
, to
);
79 case XMMS_PLAYLIST_CHANGED_SORT
:
80 case XMMS_PLAYLIST_CHANGED_SHUFFLE
:
81 case XMMS_PLAYLIST_CHANGED_CLEAR
:
88 xmmsc_result_unref(result
);
91 void QPlaylist::fillIDListCallback(xmmsc_result_t
* result
, void * instance
) {
93 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
97 for (xmmsc_result_t
* i
= result
; xmmsc_result_list_valid(i
); xmmsc_result_list_next(i
)) {
98 xmmsc_result_get_uint(i
, &buffer
);
99 playlist
->m_IDList
<< buffer
;
102 emit playlist
->reseted();
104 xmmsc_result_unref(result
);
107 void QPlaylist::currentPosCallback(xmmsc_result_t
* result
, void * instance
) {
111 xmmsc_result_get_uint(result
, &position
);
112 emit
static_cast<QPlaylist
*>(instance
)->currentChanged(position
);
114 xmmsc_result_unref(result
);
117 void QPlaylist::setConnection(xmmsc_connection_t
* connection
) {
118 if (m_Connection
== connection
)
123 disconnectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection
));
124 disconnectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection
));
125 disconnectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection
));
128 m_Connection
= connection
;
132 connectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection
), loadedCallback
, this);
133 connectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection
), changedCallback
, this);
134 connectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection
), currentPosCallback
, this);
140 void QPlaylist::reset() {
143 connectNotifierUnref(xmmsc_playlist_list_entries(m_Connection
, "default"), fillIDListCallback
, this);
146 void QPlaylist::append(quint32 id
) {
147 xmmsc_result_unref(xmmsc_playlist_add_id(m_Connection
, "Default", id
));
150 void QPlaylist::append(QString url
) {
151 xmmsc_result_unref(xmmsc_playlist_add_url(m_Connection
, "Default", url
.toAscii().data()));
154 void QPlaylist::append(QStringList urls
) {
155 foreach(QString i
, urls
)
159 void QPlaylist::append(QList
<quint32
> ids
) {
160 foreach(quint32 i
, ids
)
164 void QPlaylist::appendRecursive(QString directory
) {
165 xmmsc_result_unref(xmmsc_playlist_radd(m_Connection
, "Default", directory
.toAscii().data()));
168 void QPlaylist::insert(quint32 id
, quint32 position
) {
169 xmmsc_result_unref(xmmsc_playlist_insert_id(m_Connection
, "Default", position
, id
));
172 void QPlaylist::insert(QString url
, quint32 position
) {
173 xmmsc_result_unref(xmmsc_playlist_insert_url(m_Connection
, "Default", position
, url
.toAscii().data()));
176 void QPlaylist::insert(QList
<quint32
> ids
, quint32 position
) {
177 if (ids
.count() == 0)
180 QList
<quint32
>::iterator i
= ids
.end();
183 insert(*i
, position
);
185 while (i
!= ids
.begin());
188 void QPlaylist::insert(QStringList urls
, quint32 position
) {
189 if (urls
.count() == 0)
192 QStringList::iterator i
= urls
.end();
195 insert(*i
, position
);
197 while (i
!= urls
.begin());
200 void QPlaylist::remove(quint32 position
) {
201 xmmsc_result_unref(xmmsc_playlist_remove_entry(m_Connection
, "Default", position
));
204 void QPlaylist::move(quint32 from
, quint32 to
) {
205 xmmsc_result_unref(xmmsc_playlist_move_entry(m_Connection
, "Default", from
, to
));
208 void QPlaylist::clear() {
209 xmmsc_result_unref(xmmsc_playlist_clear(m_Connection
, "Default"));
212 /* void QPlaylist::sort(QStringList properties) {
213 xmmsc_result_unref(xmmsc_playlist_sort(m_Connection, "Default"));
216 void QPlaylist::randomize() {
217 xmmsc_result_unref(xmmsc_playlist_shuffle(m_Connection
, "Default"));
220 void QPlaylist::setNext(quint32 position
) {
221 xmmsc_result_unref(xmmsc_playlist_set_next(m_Connection
, position
));