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
15 QPlaylist::QPlaylist(QClient
* parent
, QString identifier
) : QObject(parent
), m_Identifier(identifier
), m_Connection(0) {
16 connect(parent
, SIGNAL(connectionChanged(xmmsc_connection_t
*)),
17 this, SLOT(setConnection(xmmsc_connection_t
*)));
20 QPlaylist::~QPlaylist() {
23 void QPlaylist::changedCallback(xmmsc_result_t
* result
, void * instance
) {
25 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
27 xmms_playlist_changed_actions_t type
;
28 xmmsc_result_get_dict_entry_int(result
, "type", (qint32
*)(&type
));
31 case XMMS_PLAYLIST_CHANGED_ADD
:
35 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
36 emit playlist
->entryAboutToBeInserted(playlist
->m_IDList
.size(), id
);
37 playlist
->m_IDList
<< id
;
38 emit playlist
->entryInserted(playlist
->m_IDList
.size());
41 case XMMS_PLAYLIST_CHANGED_INSERT
:
45 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
46 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
47 emit playlist
->entryAboutToBeInserted(position
, id
);
48 playlist
->m_IDList
.insert(position
, id
);
49 emit playlist
->entryInserted(position
);
52 case XMMS_PLAYLIST_CHANGED_UPDATE
:
54 quint32 position
, oldid
;
56 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
57 oldid
= playlist
->m_IDList
[position
];
58 xmmsc_result_get_dict_entry_uint(result
, "id", &playlist
->m_IDList
[position
]);
59 emit playlist
->entryUpdated(position
, oldid
);
62 case XMMS_PLAYLIST_CHANGED_REMOVE
:
66 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
67 id
= playlist
->m_IDList
[position
];
68 emit playlist
->entryAboutToBeRemoved(position
, id
);
69 playlist
->m_IDList
.removeAt(position
);
70 emit playlist
->entryRemoved(position
);
73 case XMMS_PLAYLIST_CHANGED_MOVE
:
77 xmmsc_result_get_dict_entry_uint(result
, "position", &from
);
78 xmmsc_result_get_dict_entry_uint(result
, "newposition", &from
);
79 playlist
->m_IDList
.move(from
, to
);
80 emit playlist
->entryMoved(from
, to
);
83 case XMMS_PLAYLIST_CHANGED_SORT
:
84 case XMMS_PLAYLIST_CHANGED_SHUFFLE
:
85 case XMMS_PLAYLIST_CHANGED_CLEAR
:
86 qDebug() << "to be reseted...";
93 //xmmsc_result_unref(result);
96 void QPlaylist::fillIDListCallback(xmmsc_result_t
* result
, void * instance
) {
98 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
102 xmmsc_result_t
* i
= result
;
103 while (xmmsc_result_list_valid(i
)) {
104 xmmsc_result_get_uint(i
, &buffer
);
105 playlist
->m_IDList
<< buffer
;
106 xmmsc_result_list_next(i
);
108 qDebug() << "reset!";
109 emit playlist
->reseted();
111 //xmmsc_result_unref(result);
114 void QPlaylist::currentPosCallback(xmmsc_result_t
* result
, void * instance
) {
116 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
117 xmmsc_result_get_uint(result
, &playlist
->m_Position
);
118 emit playlist
->positionChanged(playlist
->m_Position
);
120 //xmmsc_result_unref(result);
123 inline const char * QPlaylist::identifierToCString() {
124 return m_Identifier
.isEmpty() ? NULL
: m_Identifier
.toAscii().data();
127 void QPlaylist::setConnection(xmmsc_connection_t
* connection
) {
128 if (m_Connection
== connection
)
132 /* if (m_Connection) {
133 disconnectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection));
134 disconnectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection));
135 disconnectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection));
138 m_Connection
= connection
;
145 /* connectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection), loadedCallback, this);
146 connectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection), changedCallback, this);
147 connectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection), currentPosCallback, this);*/
149 connectNotifierUnref(xmmsc_playlist_list_entries(m_Connection
, identifierToCString()), fillIDListCallback
, this);
150 connectNotifierUnref(xmmsc_playlist_current_pos(m_Connection
, identifierToCString()), currentPosCallback
, this);
154 emit
positionChanged(0);
158 void QPlaylist::reset() {
162 connectNotifierUnref(xmmsc_playlist_list_entries(m_Connection
, identifierToCString()), fillIDListCallback
, this);
163 connectNotifierUnref(xmmsc_playlist_current_pos(m_Connection
, identifierToCString()), currentPosCallback
, this);
168 void QPlaylist::append(quint32 id
) {
169 xmmsc_result_unref(xmmsc_playlist_add_id(m_Connection
, identifierToCString(), id
));
172 void QPlaylist::append(QString url
) {
173 xmmsc_result_t
* result
= xmmsc_playlist_add_url(m_Connection
, identifierToCString(), url
.toAscii().data());
174 qDebug(url
.toAscii().data());
175 if (xmmsc_result_iserror(result
))
176 qDebug(xmmsc_result_get_error(result
));
177 xmmsc_result_unref(result
);
180 void QPlaylist::append(QStringList urls
) {
181 foreach(QString i
, urls
)
185 void QPlaylist::append(QList
<quint32
> ids
) {
186 foreach(quint32 i
, ids
)
190 void QPlaylist::appendRecursive(QString directory
) {
191 xmmsc_result_unref(xmmsc_playlist_radd(m_Connection
, identifierToCString(), directory
.toAscii().data()));
194 void QPlaylist::insert(quint32 id
, quint32 position
) {
195 xmmsc_result_unref(xmmsc_playlist_insert_id(m_Connection
, identifierToCString(), position
, id
));
198 void QPlaylist::insert(QString url
, quint32 position
) {
199 xmmsc_result_unref(xmmsc_playlist_insert_url(m_Connection
, identifierToCString(), position
, url
.toAscii().data()));
202 void QPlaylist::insert(QList
<quint32
> ids
, quint32 position
) {
203 if (ids
.count() == 0)
206 QList
<quint32
>::iterator i
= ids
.end();
209 insert(*i
, position
);
211 while (i
!= ids
.begin());
214 void QPlaylist::insert(QStringList urls
, quint32 position
) {
215 if (urls
.count() == 0)
218 QStringList::iterator i
= urls
.end();
221 insert(*i
, position
);
223 while (i
!= urls
.begin());
226 void QPlaylist::remove(quint32 position
) {
227 xmmsc_result_unref(xmmsc_playlist_remove_entry(m_Connection
, identifierToCString(), position
));
230 void QPlaylist::move(quint32 from
, quint32 to
) {
231 xmmsc_result_unref(xmmsc_playlist_move_entry(m_Connection
, identifierToCString(), from
, to
));
234 void QPlaylist::clear() {
235 xmmsc_result_unref(xmmsc_playlist_clear(m_Connection
, identifierToCString()));
238 /* void QPlaylist::sort(QStringList properties) {
239 xmmsc_result_unref(xmmsc_playlist_sort(m_Connection, "Default"));
242 void QPlaylist::randomize() {
243 xmmsc_result_unref(xmmsc_playlist_shuffle(m_Connection
, identifierToCString()));