Drag from medialib to Playlist now works! No inserts yet, just append
This commit is contained in:
parent
ef5a523a8d
commit
4c02a3b938
5 changed files with 99 additions and 12 deletions
32
Medialib.cpp
32
Medialib.cpp
|
@ -131,6 +131,32 @@ MedialibList::httpDone (int id, bool error)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList
|
||||||
|
MedialibList::mimeTypes () const
|
||||||
|
{
|
||||||
|
QStringList types;
|
||||||
|
types << "application/mlib.album";
|
||||||
|
return types;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMimeData *
|
||||||
|
MedialibList::mimeData(const QList<QListWidgetItem*> items) const
|
||||||
|
{
|
||||||
|
QMimeData *mimeData = new QMimeData();
|
||||||
|
QByteArray encodedData;
|
||||||
|
|
||||||
|
MedialibListItem *it = dynamic_cast<MedialibListItem *> (currentItem ());
|
||||||
|
|
||||||
|
QDataStream stream(&encodedData, QIODevice::WriteOnly);
|
||||||
|
qDebug ("%s %s", qPrintable (it->getArtist ()), qPrintable (it->getAlbum ()));
|
||||||
|
stream << it->getArtist ();
|
||||||
|
stream << it->getAlbum ();
|
||||||
|
|
||||||
|
mimeData->setData("application/mlib.album", encodedData);
|
||||||
|
return mimeData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MedialibList::queryCallback (QList<QHash<QString, QString> >l)
|
MedialibList::queryCallback (QList<QHash<QString, QString> >l)
|
||||||
{
|
{
|
||||||
|
@ -144,7 +170,7 @@ MedialibList::queryCallback (QList<QHash<QString, QString> >l)
|
||||||
for (int i = 0; i < l.count (); i++) {
|
for (int i = 0; i < l.count (); i++) {
|
||||||
QHash<QString, QString> h(l.value (i));
|
QHash<QString, QString> h(l.value (i));
|
||||||
|
|
||||||
MedialibListItem *item = new MedialibListItem (h.value("artist") + " - " + h.value("album"), this);
|
MedialibListItem *item = new MedialibListItem (h.value("artist"), h.value("album"), this);
|
||||||
item->setSizeHint (QSize (90, 90));
|
item->setSizeHint (QSize (90, 90));
|
||||||
item->setIcon (QIcon (":nocover.jpg"));
|
item->setIcon (QIcon (":nocover.jpg"));
|
||||||
item->setFont (font);
|
item->setFont (font);
|
||||||
|
@ -153,7 +179,7 @@ MedialibList::queryCallback (QList<QHash<QString, QString> >l)
|
||||||
if (h.contains ("image")) {
|
if (h.contains ("image")) {
|
||||||
|
|
||||||
QString name = qtMD5 ((h.value("artist").toLower()+"-"+h.value("album").toLower()).toUtf8());
|
QString name = qtMD5 ((h.value("artist").toLower()+"-"+h.value("album").toLower()).toUtf8());
|
||||||
QString fname (QDir::homePath () +"/.xmms2/clients/generic/art/"+name+"_small.jpg");
|
QString fname (QDir::homePath () +"/.xmms2/clients/generic/art/"+name+"-small.jpg");
|
||||||
|
|
||||||
if (!QFile::exists (fname)) {
|
if (!QFile::exists (fname)) {
|
||||||
QUrl url (h.value("image"));
|
QUrl url (h.value("image"));
|
||||||
|
@ -163,7 +189,7 @@ MedialibList::queryCallback (QList<QHash<QString, QString> >l)
|
||||||
m_http->setUser (url.userName(), url.password());
|
m_http->setUser (url.userName(), url.password());
|
||||||
}
|
}
|
||||||
|
|
||||||
QFile *file = new QFile ("/tmp/"+name+"_small.jpg");
|
QFile *file = new QFile ("/tmp/"+name+"-small.jpg");
|
||||||
file->open(QIODevice::WriteOnly);
|
file->open(QIODevice::WriteOnly);
|
||||||
|
|
||||||
item->setFile (file);
|
item->setFile (file);
|
||||||
|
|
13
Medialib.h
13
Medialib.h
|
@ -8,6 +8,7 @@
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QStatusBar>
|
#include <QStatusBar>
|
||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
|
#include <QMimeData>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QHttp>
|
#include <QHttp>
|
||||||
|
@ -18,13 +19,21 @@ class MedialibWindow;
|
||||||
class MedialibListItem : public QListWidgetItem
|
class MedialibListItem : public QListWidgetItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MedialibListItem (QString text, QListWidget *parent) : QListWidgetItem (text, parent) {}
|
MedialibListItem (QString artist, QString album, QListWidget *parent) :
|
||||||
|
QListWidgetItem (artist + " - " + album, parent) {
|
||||||
|
m_artist = artist;
|
||||||
|
m_album = album;
|
||||||
|
}
|
||||||
~MedialibListItem () {}
|
~MedialibListItem () {}
|
||||||
void setFile (QFile *f) { m_file = f; }
|
void setFile (QFile *f) { m_file = f; }
|
||||||
QFile *getFile (void) { return m_file; }
|
QFile *getFile (void) { return m_file; }
|
||||||
|
QString getArtist (void) { return m_artist; }
|
||||||
|
QString getAlbum (void) { return m_album; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QFile *m_file;
|
QFile *m_file;
|
||||||
|
QString m_artist;
|
||||||
|
QString m_album;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MedialibList : public QListWidget
|
class MedialibList : public QListWidget
|
||||||
|
@ -33,11 +42,13 @@ class MedialibList : public QListWidget
|
||||||
public:
|
public:
|
||||||
MedialibList (QWidget *parent);
|
MedialibList (QWidget *parent);
|
||||||
~MedialibList () {}
|
~MedialibList () {}
|
||||||
|
QStringList mimeTypes (void) const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void queryCallback (QList<QHash<QString, QString> >);
|
void queryCallback (QList<QHash<QString, QString> >);
|
||||||
void httpDone (int, bool);
|
void httpDone (int, bool);
|
||||||
void search (QString);
|
void search (QString);
|
||||||
|
QMimeData *mimeData(const QList<QListWidgetItem*> items) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QHash<int, MedialibListItem*> *m_httpmap;
|
QHash<int, MedialibListItem*> *m_httpmap;
|
||||||
|
|
|
@ -302,8 +302,15 @@ PlaylistList::mouseMoveEvent (QMouseEvent *event)
|
||||||
int i = m_selected->last ();
|
int i = m_selected->last ();
|
||||||
|
|
||||||
m_drag = new QDrag (this);
|
m_drag = new QDrag (this);
|
||||||
m_md = new QMimeData;
|
|
||||||
m_md->setText (QString::number (m_selected->last ()));
|
m_md = new QMimeData();
|
||||||
|
QByteArray encodedData;
|
||||||
|
|
||||||
|
QDataStream stream (&encodedData, QIODevice::WriteOnly);
|
||||||
|
stream << QString::number (m_selected->last ());
|
||||||
|
|
||||||
|
m_md->setData("application/playlist.move", encodedData);
|
||||||
|
|
||||||
m_drag->setMimeData (m_md);
|
m_drag->setMimeData (m_md);
|
||||||
|
|
||||||
m_drag_id = m_items->value (i)->getID ();
|
m_drag_id = m_items->value (i)->getID ();
|
||||||
|
@ -323,7 +330,25 @@ PlaylistList::mouseMoveEvent (QMouseEvent *event)
|
||||||
void
|
void
|
||||||
PlaylistList::dragEnterEvent (QDragEnterEvent *event)
|
PlaylistList::dragEnterEvent (QDragEnterEvent *event)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (event->mimeData()->hasFormat("application/mlib.album") ||
|
||||||
|
event->mimeData()->hasFormat("application/playlist.move"))
|
||||||
|
event->acceptProposedAction();
|
||||||
|
/*
|
||||||
|
const QMimeData *md = event->mimeData ();
|
||||||
|
QByteArray encodedData = md->data("application/mlib.album");
|
||||||
|
QDataStream stream(&encodedData, QIODevice::ReadOnly);
|
||||||
|
|
||||||
|
QString artist;
|
||||||
|
QString album;
|
||||||
|
stream >> artist;
|
||||||
|
stream >> album;
|
||||||
|
|
||||||
|
qDebug ("korv %s - %s", qPrintable (artist),
|
||||||
|
qPrintable (album));
|
||||||
|
|
||||||
event->accept ();
|
event->accept ();
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -352,13 +377,33 @@ PlaylistList::dropEvent (QDropEvent *event)
|
||||||
{
|
{
|
||||||
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
||||||
|
|
||||||
if (m_bar == -2) {
|
if (event->mimeData()->hasFormat("application/playlist.move")) {
|
||||||
m_items->insert (m_pos, m_itemmap->value (m_drag_id));
|
if (m_bar == -2) {
|
||||||
} else {
|
m_items->insert (m_pos, m_itemmap->value (m_drag_id));
|
||||||
m_items->insert (m_bar + 1, m_itemmap->value (m_drag_id));
|
} else {
|
||||||
xmmsh->playlistMove (m_pos, m_bar + 1);
|
m_items->insert (m_bar + 1, m_itemmap->value (m_drag_id));
|
||||||
|
xmmsh->playlistMove (m_pos, m_bar + 1);
|
||||||
|
}
|
||||||
|
m_selected->append (m_drag_id);
|
||||||
|
|
||||||
|
event->acceptProposedAction ();
|
||||||
|
} else if (event->mimeData()->hasFormat("application/mlib.album")) {
|
||||||
|
const QMimeData *md = event->mimeData ();
|
||||||
|
QByteArray encodedData = md->data("application/mlib.album");
|
||||||
|
QDataStream stream(&encodedData, QIODevice::ReadOnly);
|
||||||
|
|
||||||
|
QString artist;
|
||||||
|
QString album;
|
||||||
|
stream >> artist;
|
||||||
|
stream >> album;
|
||||||
|
|
||||||
|
QString query;
|
||||||
|
query.sprintf ("select m1.id as id, ifnull(m3.value,-1) as tracknr from Media m1 join Media m2 on m1.id = m2.id and m2.key='album' left join Media m3 on m1.id = m3.id and m3.key='tracknr' where m1.key='artist' and m1.value='%s' and m2.value='%s' order by tracknr", artist.toUtf8 ().data (), album.toUtf8 ().data ());
|
||||||
|
|
||||||
|
xmmsh->medialibQueryAdd (query);
|
||||||
|
|
||||||
|
event->acceptProposedAction ();
|
||||||
}
|
}
|
||||||
m_selected->append (m_drag_id);
|
|
||||||
m_bar = -2;
|
m_bar = -2;
|
||||||
update ();
|
update ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,11 @@ TextScroller::TextScroller (QWidget *parent, uint w, uint h) : QWidget (parent)
|
||||||
m_w = w;
|
m_w = w;
|
||||||
m_x_off = 0;
|
m_x_off = 0;
|
||||||
m_x2_off = 0;
|
m_x2_off = 0;
|
||||||
|
#ifdef Q_OS_MACX
|
||||||
|
m_fontsize = 9;
|
||||||
|
#else
|
||||||
m_fontsize = 8; /* default */
|
m_fontsize = 8; /* default */
|
||||||
|
#endif
|
||||||
m_ttf = true;
|
m_ttf = true;
|
||||||
|
|
||||||
setMinimumSize(m_w + 2, m_h);
|
setMinimumSize(m_w + 2, m_h);
|
||||||
|
|
|
@ -32,6 +32,7 @@ class XMMSHandler : public QObject, public sigc::trackable {
|
||||||
void playlistRemove (uint pos) { delete m_xmmsc->playlist_remove (pos); }
|
void playlistRemove (uint pos) { delete m_xmmsc->playlist_remove (pos); }
|
||||||
void playlistMove (uint pos, uint newpos) { delete m_xmmsc->playlist_move (pos, newpos); }
|
void playlistMove (uint pos, uint newpos) { delete m_xmmsc->playlist_move (pos, newpos); }
|
||||||
void medialibQuery (QString);
|
void medialibQuery (QString);
|
||||||
|
void medialibQueryAdd (QString q) { delete m_xmmsc->medialib_add_to_playlist (q.toUtf8 ()); }
|
||||||
|
|
||||||
const XMMSClient *getXMMS () { return m_xmmsc; }
|
const XMMSClient *getXMMS () { return m_xmmsc; }
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue