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
*, void * instance
) {
23 emit
static_cast<QPlaylist
*>(instance
)->loaded();
27 void QPlaylist::changedCallback(xmmsc_result_t
* result
, void * instance
) {
29 QPlaylist
* playlist
= static_cast<QPlaylist
*>(instance
);
30 xmms_playlist_changed_actions_t type
;
31 xmmsc_result_get_dict_entry_uint(result
, "type", (quint32
*)(&type
));
34 case XMMS_PLAYLIST_CHANGED_ADD
:
35 emit playlist
->entryAppended();
37 case XMMS_PLAYLIST_CHANGED_INSERT
:
42 xmmsc_result_get_dict_entry_string(result
, "name", &name
);
43 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
44 xmmsc_result_get_dict_entry_uint(result
, "id", &id
);
45 emit playlist
->entryInserted(position
, QString(name
), id
);
48 case XMMS_PLAYLIST_CHANGED_UPDATE
:
53 xmmsc_result_get_dict_entry_string(result
, "name", &name
);
54 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
55 emit playlist
->entryUpdated(position
, QString(name
));
58 case XMMS_PLAYLIST_CHANGED_REMOVE
:
62 xmmsc_result_get_dict_entry_uint(result
, "position", &position
);
63 emit playlist
->entryRemoved(position
);
66 case XMMS_PLAYLIST_CHANGED_MOVE
:
70 xmmsc_result_get_dict_entry_uint(result
, "position", &from
);
71 xmmsc_result_get_dict_entry_uint(result
, "newpositionp", &from
);
72 emit playlist
->entryMoved(from
, to
);
75 case XMMS_PLAYLIST_CHANGED_SORT
:
76 case XMMS_PLAYLIST_CHANGED_SHUFFLE
:
77 emit playlist
->sortingChanged();
79 case XMMS_PLAYLIST_CHANGED_CLEAR
:
80 emit playlist
->cleared();
88 void QPlaylist::currentPosCallback(xmmsc_result_t
* result
, void * instance
) {
92 xmmsc_result_get_uint(result
, &position
);
93 emit
static_cast<QPlaylist
*>(instance
)->currentChanged(position
);
97 void QPlaylist::setConnection(xmmsc_connection_t
* connection
) {
98 if (m_Connection
== connection
)
103 disconnectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection
));
104 disconnectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection
));
105 disconnectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection
));
108 m_Connection
= connection
;
112 connectNotifierUnref(xmmsc_broadcast_playlist_loaded(m_Connection
), &loadedCallback
, this);
113 connectNotifierUnref(xmmsc_broadcast_playlist_changed(m_Connection
), &changedCallback
, this);
114 connectNotifierUnref(xmmsc_broadcast_playlist_current_pos(m_Connection
), ¤tPosCallback
, this);
118 void QPlaylist::append(quint32 id
) {
119 xmmsc_result_unref(xmmsc_playlist_add_id(m_Connection
, "Default", id
));
122 void QPlaylist::append(QString url
) {
123 xmmsc_result_unref(xmmsc_playlist_add_url(m_Connection
, "Default", url
.toAscii().data()));
126 void QPlaylist::append(QStringList urls
) {
127 foreach(QString i
, urls
)
131 void QPlaylist::append(QList
<quint32
> ids
) {
132 foreach(quint32 i
, ids
)
136 void QPlaylist::appendRecursive(QString directory
) {
137 xmmsc_result_unref(xmmsc_playlist_radd(m_Connection
, "Default", directory
.toAscii().data()));
140 void QPlaylist::insert(quint32 id
, quint32 position
) {
141 xmmsc_result_unref(xmmsc_playlist_insert_id(m_Connection
, "Default", position
, id
));
144 void QPlaylist::insert(QString url
, quint32 position
) {
145 xmmsc_result_unref(xmmsc_playlist_insert_url(m_Connection
, "Default", position
, url
.toAscii().data()));
148 void QPlaylist::insert(QList
<quint32
> ids
, quint32 position
) {
149 if (ids
.count() == 0)
152 QList
<quint32
>::iterator i
= ids
.end();
155 insert(*i
, position
);
157 while (i
!= ids
.begin());
160 void QPlaylist::insert(QStringList urls
, quint32 position
) {
161 if (urls
.count() == 0)
164 QStringList::iterator i
= urls
.end();
167 insert(*i
, position
);
169 while (i
!= urls
.begin());
172 void QPlaylist::remove(quint32 position
) {
173 xmmsc_result_unref(xmmsc_playlist_remove_entry(m_Connection
, "Default", position
));
176 void QPlaylist::move(quint32 from
, quint32 to
) {
177 xmmsc_result_unref(xmmsc_playlist_move_entry(m_Connection
, "Default", from
, to
));
180 void QPlaylist::clear() {
181 xmmsc_result_unref(xmmsc_playlist_clear(m_Connection
, "Default"));
184 /* void QPlaylist::sort(QStringList properties) {
185 xmmsc_result_unref(xmmsc_playlist_sort(m_Connection, "Default"));
188 void QPlaylist::shuffle() {
189 xmmsc_result_unref(xmmsc_playlist_shuffle(m_Connection
, "Default"));