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
);
40 playlist
->m_IDList
<< 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 playlist
->m_IDList
.insert(position
, id
);
51 emit playlist
->entryInserted(id
, position
);
54 case XMMS_PLAYLIST_CHANGED_UPDATE
:
56 quint32 position
, oldid
;
58 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
59 oldid
= playlist
->m_IDList
[position
];
60 xmmsc_result_get_dict_entry_uint(result
, "id", &playlist
->m_IDList
[position
]);
61 emit playlist
->entryUpdated(position
, oldid
);
64 case XMMS_PLAYLIST_CHANGED_REMOVE
:
68 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
69 id
= playlist
->m_IDList
[position
];
70 playlist
->m_IDList
.removeAt(position
);
71 emit playlist
->entryRemoved(id
, position
);
74 case XMMS_PLAYLIST_CHANGED_MOVE
:
78 xmmsc_result_get_dict_entry_uint(result
, "position", &from
);
79 xmmsc_result_get_dict_entry_uint(result
, "newposition", &from
);
80 playlist
->m_IDList
.move(from
, to
);
81 emit playlist
->entryMoved(from
, to
);
84 case XMMS_PLAYLIST_CHANGED_SORT
:
85 case XMMS_PLAYLIST_CHANGED_SHUFFLE
:
86 case XMMS_PLAYLIST_CHANGED_CLEAR
:
93 xmmsc_result_unref(result
);
96 void QPlaylist::fillIDListCallback(xmmsc_result_t
* result
, void * instance
) {
98 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
102 for (xmmsc_result_t
* i
= result
; xmmsc_result_list_valid(i
); xmmsc_result_list_next(i
)) {
103 xmmsc_result_get_uint(i
, &buffer
);
104 playlist
->m_IDList
<< buffer
;
107 emit playlist
->reseted();
109 xmmsc_result_unref(result
);
112 void QPlaylist::currentPosCallback(xmmsc_result_t
* result
, void * instance
) {
116 xmmsc_result_get_uint(result
, &position
);
117 emit
static_cast<QPlaylist
*>(instance
)->currentChanged(position
);
119 xmmsc_result_unref(result
);
122 void QPlaylist::setConnection(xmmsc_connection_t
* connection
) {
123 if (m_Connection
== connection
)
128 disconnectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection
));
129 disconnectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection
));
130 disconnectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection
));
133 m_Connection
= connection
;
137 connectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection
), loadedCallback
, this);
138 connectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection
), changedCallback
, this);
139 connectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection
), currentPosCallback
, this);
145 void QPlaylist::reset() {
148 connectNotifierUnref(xmmsc_playlist_list_entries(m_Connection
, "default"), fillIDListCallback
, this);
151 void QPlaylist::append(quint32 id
) {
152 xmmsc_result_unref(xmmsc_playlist_add_id(m_Connection
, "Default", id
));
155 void QPlaylist::append(QString url
) {
156 xmmsc_result_unref(xmmsc_playlist_add_url(m_Connection
, "Default", url
.toAscii().data()));
159 void QPlaylist::append(QStringList urls
) {
160 foreach(QString i
, urls
)
164 void QPlaylist::append(QList
<quint32
> ids
) {
165 foreach(quint32 i
, ids
)
169 void QPlaylist::appendRecursive(QString directory
) {
170 xmmsc_result_unref(xmmsc_playlist_radd(m_Connection
, "Default", directory
.toAscii().data()));
173 void QPlaylist::insert(quint32 id
, quint32 position
) {
174 xmmsc_result_unref(xmmsc_playlist_insert_id(m_Connection
, "Default", position
, id
));
177 void QPlaylist::insert(QString url
, quint32 position
) {
178 xmmsc_result_unref(xmmsc_playlist_insert_url(m_Connection
, "Default", position
, url
.toAscii().data()));
181 void QPlaylist::insert(QList
<quint32
> ids
, quint32 position
) {
182 if (ids
.count() == 0)
185 QList
<quint32
>::iterator i
= ids
.end();
188 insert(*i
, position
);
190 while (i
!= ids
.begin());
193 void QPlaylist::insert(QStringList urls
, quint32 position
) {
194 if (urls
.count() == 0)
197 QStringList::iterator i
= urls
.end();
200 insert(*i
, position
);
202 while (i
!= urls
.begin());
205 void QPlaylist::remove(quint32 position
) {
206 xmmsc_result_unref(xmmsc_playlist_remove_entry(m_Connection
, "Default", position
));
209 void QPlaylist::move(quint32 from
, quint32 to
) {
210 xmmsc_result_unref(xmmsc_playlist_move_entry(m_Connection
, "Default", from
, to
));
213 void QPlaylist::clear() {
214 xmmsc_result_unref(xmmsc_playlist_clear(m_Connection
, "Default"));
217 /* void QPlaylist::sort(QStringList properties) {
218 xmmsc_result_unref(xmmsc_playlist_sort(m_Connection, "Default"));
221 void QPlaylist::randomize() {
222 xmmsc_result_unref(xmmsc_playlist_shuffle(m_Connection
, "Default"));
225 void QPlaylist::setNext(quint32 position
) {
226 xmmsc_result_unref(xmmsc_playlist_set_next(m_Connection
, position
));