Worked much on the Medialib.
This commit is contained in:
parent
28f9bd246b
commit
b7d5afc0ca
18 changed files with 737 additions and 155 deletions
105
MediaAlbumList.cpp
Normal file
105
MediaAlbumList.cpp
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
#include "XMMSHandler.h"
|
||||||
|
|
||||||
|
#include "MediaAlbumList.h"
|
||||||
|
|
||||||
|
#include "qtmd5.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
|
|
||||||
|
MediaAlbumList::MediaAlbumList (QWidget *parent, const QString &name) :
|
||||||
|
MedialibList (parent, name)
|
||||||
|
{
|
||||||
|
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
||||||
|
|
||||||
|
connect (xmmsh, SIGNAL (medialibResponse (uint, QList<QHash<QString, QString> >)),
|
||||||
|
this, SLOT (queryCallback (uint, QList<QHash<QString, QString> >)));
|
||||||
|
|
||||||
|
refresh ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaAlbumList::refresh (void)
|
||||||
|
{
|
||||||
|
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
||||||
|
|
||||||
|
m_cid = xmmsh->medialibQuery ("select distinct ifnull(nullif(ifnull(nullif(ifnull(m3.value,0),1),'Various Artists'),0),m1.value) as artist, ifnull(m2.value,'[unknown]') as album, m4.value as art from Media m1 left join Media m2 on m1.id = m2.id and m2.key='album' left join Media m3 on m1.id = m3.id and m3.key='compilation' left join Media m4 on m4.id = m1.id and m4.key='album_front_small' where m1.key='artist' order by artist, album");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QStringList
|
||||||
|
MediaAlbumList::mimeTypes () const
|
||||||
|
{
|
||||||
|
QStringList types;
|
||||||
|
types << "application/mlib.album";
|
||||||
|
return types;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMimeData *
|
||||||
|
MediaAlbumList::mimeData(const QList<QListWidgetItem*> items) const
|
||||||
|
{
|
||||||
|
QMimeData *mimeData = new QMimeData();
|
||||||
|
QByteArray encodedData;
|
||||||
|
|
||||||
|
MedialibListItem *it = dynamic_cast<MedialibListItem *> (currentItem ());
|
||||||
|
|
||||||
|
QDataStream stream(&encodedData, QIODevice::WriteOnly);
|
||||||
|
stream << it->getArtist ();
|
||||||
|
stream << it->getAlbum ();
|
||||||
|
|
||||||
|
mimeData->setData("application/mlib.album", encodedData);
|
||||||
|
return mimeData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaAlbumList::queryCallback (uint id, QList<QHash<QString, QString> >l)
|
||||||
|
{
|
||||||
|
if (m_cid != id)
|
||||||
|
return;
|
||||||
|
|
||||||
|
clear ();
|
||||||
|
|
||||||
|
qDebug ("in query callback album");
|
||||||
|
|
||||||
|
for (int i = 0; i < l.count (); i++) {
|
||||||
|
QHash<QString, QString> h(l.value (i));
|
||||||
|
|
||||||
|
MedialibListItem *item = new MedialibListItem (h.value("artist"), h.value("album"), this);
|
||||||
|
item->setFont (m_font);
|
||||||
|
item->setTextAlignment (Qt::AlignVCenter);
|
||||||
|
|
||||||
|
if (m_noicon) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
item->setIcon (QIcon (":noalbum.png"));
|
||||||
|
item->setSizeHint (iconSize () + QSize (2, 2));
|
||||||
|
|
||||||
|
if (h.contains ("art")) {
|
||||||
|
|
||||||
|
QString name = qtMD5 ((h.value("artist").toLower()+"-"+h.value("album").toLower()).toUtf8());
|
||||||
|
QString fname (QDir::homePath () +"/.xmms2/clients/generic/art/"+name+"-small.jpg");
|
||||||
|
|
||||||
|
if (!QFile::exists (fname)) {
|
||||||
|
QUrl url (h.value("art"));
|
||||||
|
|
||||||
|
QFile *file = new QFile ("/tmp/"+name+"-small.jpg");
|
||||||
|
file->open(QIODevice::WriteOnly);
|
||||||
|
|
||||||
|
item->setFile (file);
|
||||||
|
m_win->addRequest (url, item);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
QIcon ico (fname);
|
||||||
|
item->setIcon (ico);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
24
MediaAlbumList.h
Normal file
24
MediaAlbumList.h
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef __MEDIAALBUMLIST_H__
|
||||||
|
#define __MEDIAALBUMLIST_H__
|
||||||
|
|
||||||
|
class MediaAlbumList;
|
||||||
|
|
||||||
|
#include "Medialib.h"
|
||||||
|
|
||||||
|
class MediaAlbumList : public MedialibList
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
MediaAlbumList (QWidget *parent, const QString &name);
|
||||||
|
~MediaAlbumList () {}
|
||||||
|
QStringList mimeTypes (void) const;
|
||||||
|
|
||||||
|
void refresh (void);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void queryCallback (uint, QList<QHash<QString, QString> >);
|
||||||
|
QMimeData *mimeData(const QList<QListWidgetItem*> items) const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
102
MediaArtistList.cpp
Normal file
102
MediaArtistList.cpp
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
#include "XMMSHandler.h"
|
||||||
|
|
||||||
|
#include "MediaArtistList.h"
|
||||||
|
|
||||||
|
#include "qtmd5.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
|
MediaArtistList::MediaArtistList (QWidget *parent, const QString &name) :
|
||||||
|
MedialibList (parent, name)
|
||||||
|
{
|
||||||
|
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
||||||
|
|
||||||
|
connect (xmmsh, SIGNAL (medialibResponse (uint, QList<QHash<QString, QString> >)),
|
||||||
|
this, SLOT (queryCallback (uint, QList<QHash<QString, QString> >)));
|
||||||
|
|
||||||
|
refresh ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaArtistList::refresh (void)
|
||||||
|
{
|
||||||
|
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
||||||
|
|
||||||
|
m_cid = xmmsh->medialibQuery ("select distinct ifnull(nullif(ifnull(nullif(ifnull(m2.value,0),1),'Various Artists'),0),m1.value) as artist, m3.value as art from Media m1 left join Media m2 on m1.id = m2.id and m2.key='compilation' left join Media m3 on m3.id = m1.id and m3.key='artist_art_small' where m1.key='artist' order by artist");
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList
|
||||||
|
MediaArtistList::mimeTypes () const
|
||||||
|
{
|
||||||
|
QStringList types;
|
||||||
|
types << "application/mlib.artist";
|
||||||
|
return types;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMimeData *
|
||||||
|
MediaArtistList::mimeData(const QList<QListWidgetItem*> items) const
|
||||||
|
{
|
||||||
|
QMimeData *mimeData = new QMimeData();
|
||||||
|
QByteArray encodedData;
|
||||||
|
|
||||||
|
MedialibListItem *it = dynamic_cast<MedialibListItem *> (currentItem ());
|
||||||
|
|
||||||
|
QDataStream stream(&encodedData, QIODevice::WriteOnly);
|
||||||
|
stream << it->getArtist ();
|
||||||
|
|
||||||
|
mimeData->setData("application/mlib.artist", encodedData);
|
||||||
|
return mimeData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaArtistList::queryCallback (uint id, QList<QHash<QString, QString> >l)
|
||||||
|
{
|
||||||
|
if (m_cid != id)
|
||||||
|
return;
|
||||||
|
|
||||||
|
clear ();
|
||||||
|
|
||||||
|
qDebug ("in query callback artist");
|
||||||
|
|
||||||
|
for (int i = 0; i < l.count (); i++) {
|
||||||
|
QHash<QString, QString> h(l.value (i));
|
||||||
|
|
||||||
|
MedialibListItem *item = new MedialibListItem (h.value("artist"), this);
|
||||||
|
item->setFont (m_font);
|
||||||
|
item->setTextAlignment (Qt::AlignVCenter);
|
||||||
|
|
||||||
|
if (m_noicon) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
item->setIcon (QIcon (":noartist.png"));
|
||||||
|
item->setSizeHint (iconSize () + QSize (5, 5));
|
||||||
|
|
||||||
|
if (h.contains ("art")) {
|
||||||
|
|
||||||
|
QString name = qtMD5 ((h.value("artist").toLower()).toUtf8());
|
||||||
|
QString fname (QDir::homePath () +"/.xmms2/clients/generic/art/"+name+"-small.jpg");
|
||||||
|
|
||||||
|
if (!QFile::exists (fname)) {
|
||||||
|
QUrl url (h.value("art"));
|
||||||
|
|
||||||
|
QFile *file = new QFile ("/tmp/"+name+"-small.jpg");
|
||||||
|
file->open(QIODevice::WriteOnly);
|
||||||
|
|
||||||
|
item->setFile (file);
|
||||||
|
m_win->addRequest (url, item);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
QIcon ico (fname);
|
||||||
|
item->setIcon (ico);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
24
MediaArtistList.h
Normal file
24
MediaArtistList.h
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef __MEDIAARTISTLIST_H__
|
||||||
|
#define __MEDIAARTISTLIST_H__
|
||||||
|
|
||||||
|
class MediaArtistList;
|
||||||
|
|
||||||
|
#include "Medialib.h"
|
||||||
|
|
||||||
|
class MediaArtistList : public MedialibList
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MediaArtistList (QWidget *parent, const QString &name);
|
||||||
|
~MediaArtistList () {}
|
||||||
|
QStringList mimeTypes (void) const;
|
||||||
|
void refresh (void);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void queryCallback (uint, QList<QHash<QString, QString> >);
|
||||||
|
QMimeData *mimeData(const QList<QListWidgetItem*> items) const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
100
MediaSongList.cpp
Normal file
100
MediaSongList.cpp
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
#include "XMMSHandler.h"
|
||||||
|
|
||||||
|
#include "MediaSongList.h"
|
||||||
|
|
||||||
|
#include "qtmd5.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
|
MediaSongList::MediaSongList (QWidget *parent, const QString &name) :
|
||||||
|
MedialibList (parent, name)
|
||||||
|
{
|
||||||
|
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
||||||
|
|
||||||
|
connect (xmmsh, SIGNAL (medialibResponse (uint, QList<QHash<QString, QString> >)),
|
||||||
|
this, SLOT (queryCallback (uint, QList<QHash<QString, QString> >)));
|
||||||
|
|
||||||
|
refresh ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaSongList::refresh (void)
|
||||||
|
{
|
||||||
|
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
||||||
|
|
||||||
|
m_cid = xmmsh->medialibQuery ("select distinct ifnull(m1.value,'[unknown]') as artist, ifnull(m2.value,'[unknown]') as album, ifnull(m5.value,m6.value) as song, ifnull(m7.value,-1) as tracknr, m4.value as art from Media m1 left join Media m2 on m1.id = m2.id and m2.key='album' left join Media m4 on m4.id = m1.id and m4.key='album_front_small' left join Media m5 on m1.id = m5.id and m5.key='title' left join Media m6 on m1.id = m6.id and m6.key='url' left join Media m7 on m1.id = m7.id and m7.key='tracknr' where m1.key='artist' order by artist, album, tracknr, song");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList
|
||||||
|
MediaSongList::mimeTypes () const
|
||||||
|
{
|
||||||
|
QStringList types;
|
||||||
|
types << "application/mlib.song";
|
||||||
|
return types;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMimeData *
|
||||||
|
MediaSongList::mimeData(const QList<QListWidgetItem*> items) const
|
||||||
|
{
|
||||||
|
QMimeData *mimeData = new QMimeData();
|
||||||
|
QByteArray encodedData;
|
||||||
|
|
||||||
|
MedialibListItem *it = dynamic_cast<MedialibListItem *> (currentItem ());
|
||||||
|
|
||||||
|
QDataStream stream(&encodedData, QIODevice::WriteOnly);
|
||||||
|
stream << it->getArtist ();
|
||||||
|
stream << it->getAlbum ();
|
||||||
|
stream << it->getSong ();
|
||||||
|
|
||||||
|
mimeData->setData("application/mlib.song", encodedData);
|
||||||
|
return mimeData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaSongList::queryCallback (uint id, QList<QHash<QString, QString> >l)
|
||||||
|
{
|
||||||
|
if (m_cid != id)
|
||||||
|
return;
|
||||||
|
|
||||||
|
qDebug ("in query callback song");
|
||||||
|
|
||||||
|
clear ();
|
||||||
|
|
||||||
|
m_win->setBusy (false);
|
||||||
|
m_win->setStatusText ("idle");
|
||||||
|
|
||||||
|
for (int i = 0; i < l.count (); i++) {
|
||||||
|
QHash<QString, QString> h(l.value (i));
|
||||||
|
|
||||||
|
MedialibListItem *item = new MedialibListItem (h.value("artist"),
|
||||||
|
h.value("album"),
|
||||||
|
h.value("song"),
|
||||||
|
this);
|
||||||
|
item->setFont (m_font);
|
||||||
|
item->setTextAlignment (Qt::AlignVCenter);
|
||||||
|
|
||||||
|
if (m_noicon) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
item->setIcon (QIcon (":nosong.png"));
|
||||||
|
item->setSizeHint (iconSize () + QSize (2, 2));
|
||||||
|
|
||||||
|
if (h.contains ("art")) {
|
||||||
|
|
||||||
|
QString name = qtMD5 ((h.value("artist").toLower()+"-"+h.value("album").toLower()).toUtf8());
|
||||||
|
QString fname (QDir::homePath () +"/.xmms2/clients/generic/art/"+name+"-small.jpg");
|
||||||
|
|
||||||
|
if (QFile::exists (fname)) {
|
||||||
|
QIcon ico (fname);
|
||||||
|
item->setIcon (ico);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
23
MediaSongList.h
Normal file
23
MediaSongList.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef __MEDIASONGLIST_H__
|
||||||
|
#define __MEDIASONGLIST_H__
|
||||||
|
|
||||||
|
class MediaSongList;
|
||||||
|
|
||||||
|
#include "Medialib.h"
|
||||||
|
|
||||||
|
class MediaSongList : public MedialibList
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
MediaSongList (QWidget *parent, const QString &name);
|
||||||
|
~MediaSongList () {}
|
||||||
|
QStringList mimeTypes (void) const;
|
||||||
|
void refresh (void);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void queryCallback (uint, QList<QHash<QString, QString> >);
|
||||||
|
QMimeData *mimeData(const QList<QListWidgetItem*> items) const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
240
Medialib.cpp
240
Medialib.cpp
|
@ -8,6 +8,10 @@
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include "qtmd5.h"
|
#include "qtmd5.h"
|
||||||
|
|
||||||
|
#include "MediaArtistList.h"
|
||||||
|
#include "MediaAlbumList.h"
|
||||||
|
#include "MediaSongList.h"
|
||||||
|
|
||||||
MedialibWindow::MedialibWindow (QWidget *parent) : QMainWindow (parent)
|
MedialibWindow::MedialibWindow (QWidget *parent) : QMainWindow (parent)
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
@ -15,6 +19,8 @@ MedialibWindow::MedialibWindow (QWidget *parent) : QMainWindow (parent)
|
||||||
#endif
|
#endif
|
||||||
setWindowTitle ("Promoe - Medialib Window");
|
setWindowTitle ("Promoe - Medialib Window");
|
||||||
|
|
||||||
|
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
||||||
|
|
||||||
QSettings s;
|
QSettings s;
|
||||||
s.beginGroup ("medialib");
|
s.beginGroup ("medialib");
|
||||||
|
|
||||||
|
@ -43,11 +49,36 @@ MedialibWindow::MedialibWindow (QWidget *parent) : QMainWindow (parent)
|
||||||
m_status->setFrameStyle (QFrame::NoFrame);
|
m_status->setFrameStyle (QFrame::NoFrame);
|
||||||
statusBar ()->addPermanentWidget (m_status, 2);
|
statusBar ()->addPermanentWidget (m_status, 2);
|
||||||
|
|
||||||
m_list = new MedialibList (this);
|
|
||||||
m_tab->addTab (new QWidget (), tr ("Artists"));
|
|
||||||
m_tab->addTab (m_list, tr ("Albums"));
|
|
||||||
m_tab->addTab (new QWidget (), tr ("Songs"));
|
|
||||||
|
|
||||||
|
/*** Init views ***/
|
||||||
|
QDir dir (QDir::homePath ()+"/.xmms2/clients/generic/art/");
|
||||||
|
if (!dir.exists()) {
|
||||||
|
dir.mkpath (dir.path ());
|
||||||
|
}
|
||||||
|
m_http = new QHttp (this);
|
||||||
|
connect (m_http, SIGNAL (requestFinished (int, bool)), this,
|
||||||
|
SLOT (httpDone (int, bool)));
|
||||||
|
|
||||||
|
/*** artist ***/
|
||||||
|
m_artist = new MediaArtistList (this, "artist");
|
||||||
|
m_tab->addTab (m_artist, tr ("Artists"));
|
||||||
|
connect (m_search, SIGNAL (textEdited (QString)),
|
||||||
|
m_artist, SLOT (search (QString)));
|
||||||
|
|
||||||
|
/*** album ***/
|
||||||
|
m_album = new MediaAlbumList (this, "album");
|
||||||
|
m_tab->addTab (m_album, tr ("Albums"));
|
||||||
|
connect (m_search, SIGNAL (textEdited (QString)),
|
||||||
|
m_album, SLOT (search (QString)));
|
||||||
|
|
||||||
|
/*** song ***/
|
||||||
|
m_song = new MediaSongList (this, "song");
|
||||||
|
m_tab->addTab (m_song, tr ("Songs"));
|
||||||
|
connect (m_search, SIGNAL (textEdited (QString)),
|
||||||
|
m_song, SLOT (search (QString)));
|
||||||
|
|
||||||
|
|
||||||
|
/*** set active view from config ***/
|
||||||
for (int i = 0; i < m_tab->count() ; i++) {
|
for (int i = 0; i < m_tab->count() ; i++) {
|
||||||
if (s.value("selected").toString () == m_tab->tabText (i)) {
|
if (s.value("selected").toString () == m_tab->tabText (i)) {
|
||||||
m_tab->setCurrentIndex (i);
|
m_tab->setCurrentIndex (i);
|
||||||
|
@ -57,60 +88,46 @@ MedialibWindow::MedialibWindow (QWidget *parent) : QMainWindow (parent)
|
||||||
|
|
||||||
s.endGroup ();
|
s.endGroup ();
|
||||||
|
|
||||||
connect (m_search, SIGNAL (textEdited (QString)), m_list, SLOT (search (QString)));
|
setBusy (true);
|
||||||
}
|
setStatusText ("Loading medialib");
|
||||||
|
|
||||||
MedialibList::MedialibList (QWidget *parent) : QListWidget ()
|
connect (xmmsh, SIGNAL (settingsSaved ()), this, SLOT (settingsSaved ()));
|
||||||
{
|
|
||||||
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
|
|
||||||
m_http = new QHttp (this);
|
|
||||||
m_httpmap = new QHash<int, MedialibListItem *>;
|
|
||||||
m_win = dynamic_cast<MedialibWindow*> (parent);
|
|
||||||
|
|
||||||
setIconSize (QSize (85, 85));
|
|
||||||
setDragEnabled (true);
|
|
||||||
|
|
||||||
QDir dir (QDir::homePath ()+"/.xmms2/clients/generic/art/");
|
|
||||||
if (!dir.exists()) {
|
|
||||||
dir.mkpath (dir.path ());
|
|
||||||
}
|
|
||||||
|
|
||||||
xmmsh->medialibQuery ("select distinct ifnull(nullif(ifnull(nullif(ifnull(m3.value,0),1),'Various Artists'),0),m1.value) as artist, ifnull(m2.value,'[unknown]') as album, m4.value as image from Media m1 left join Media m2 on m1.id = m2.id and m2.key='album' left join Media m3 on m1.id = m3.id and m3.key='compilation' left join Media m4 on m4.id = m1.id and m4.key='album_front_small' where m1.key='artist' order by artist, album");
|
|
||||||
|
|
||||||
connect (xmmsh, SIGNAL (medialibResponse (QList<QHash<QString, QString> >)),
|
|
||||||
this, SLOT (queryCallback (QList<QHash<QString, QString> >)));
|
|
||||||
|
|
||||||
connect (m_http, SIGNAL (requestFinished (int, bool)), this,
|
|
||||||
SLOT (httpDone (int, bool)));
|
|
||||||
|
|
||||||
m_win->setBusy (true);
|
|
||||||
m_win->setStatusText ("Loading album view");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MedialibList::search (QString s)
|
MedialibWindow::settingsSaved ()
|
||||||
{
|
{
|
||||||
if (s.length () > 0) {
|
m_artist->setSizes();
|
||||||
for (int i = 0; i < count (); i++) {
|
m_album->setSizes();
|
||||||
MedialibListItem *it = dynamic_cast<MedialibListItem*> (item (i));
|
m_song->setSizes();
|
||||||
if (!it->text().contains (s, Qt::CaseInsensitive)) {
|
|
||||||
setItemHidden (it, true);
|
|
||||||
} else if (isItemHidden (it)) {
|
|
||||||
setItemHidden (it, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
setBusy (true);
|
||||||
for (int i = 0; i < count (); i++) {
|
setStatusText ("Refreshing medialib");
|
||||||
MedialibListItem *it = dynamic_cast<MedialibListItem*> (item (i));
|
|
||||||
setItemHidden (it, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
m_artist->refresh();
|
||||||
|
m_album->refresh();
|
||||||
|
m_song->refresh();
|
||||||
|
|
||||||
|
update ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MedialibList::httpDone (int id, bool error)
|
MedialibWindow::addRequest (QUrl url, MedialibListItem *item)
|
||||||
|
{
|
||||||
|
m_http->setHost (url.host (), url.port () != 1 ? url.port () : 80);
|
||||||
|
|
||||||
|
if (!url.userName().isEmpty()) {
|
||||||
|
m_http->setUser (url.userName(), url.password());
|
||||||
|
}
|
||||||
|
|
||||||
|
int id = m_http->get (url.path (), item->getFile ());
|
||||||
|
m_httpmap->insert (id, item);
|
||||||
|
|
||||||
|
qDebug ("add request %s (%d)", qPrintable (url.path ()), id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MedialibWindow::httpDone (int id, bool error)
|
||||||
{
|
{
|
||||||
if (error) {
|
if (error) {
|
||||||
qWarning ("error!");
|
qWarning ("error!");
|
||||||
|
@ -137,11 +154,11 @@ MedialibList::httpDone (int id, bool error)
|
||||||
delete f;
|
delete f;
|
||||||
m_httpmap->remove (id);
|
m_httpmap->remove (id);
|
||||||
if (m_httpmap->count () == 0) {
|
if (m_httpmap->count () == 0) {
|
||||||
m_win->setBusy (false);
|
setBusy (false);
|
||||||
m_win->setStatusText ("idle");
|
setStatusText ("idle");
|
||||||
} else {
|
} else {
|
||||||
m_win->setBusy (m_httpmap->count ());
|
setBusy (m_httpmap->count ());
|
||||||
m_win->setStatusText ("Got art for: " + it->text());
|
setStatusText ("Got art for: " + it->text());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,84 +166,67 @@ MedialibList::httpDone (int id, bool error)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList
|
|
||||||
MedialibList::mimeTypes () const
|
|
||||||
|
MedialibList::MedialibList (QWidget *parent, const QString &name) : QListWidget ()
|
||||||
{
|
{
|
||||||
QStringList types;
|
m_win = dynamic_cast<MedialibWindow*> (parent);
|
||||||
types << "application/mlib.album";
|
|
||||||
return types;
|
setDragEnabled (true);
|
||||||
|
|
||||||
|
m_name = name;
|
||||||
|
setSizes ();
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
stream << it->getArtist ();
|
|
||||||
stream << it->getAlbum ();
|
|
||||||
|
|
||||||
mimeData->setData("application/mlib.album", encodedData);
|
|
||||||
return mimeData;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MedialibList::queryCallback (QList<QHash<QString, QString> >l)
|
MedialibList::setSizes (void)
|
||||||
{
|
{
|
||||||
QFont font;
|
QSettings s;
|
||||||
|
|
||||||
font.setPixelSize (14);
|
|
||||||
|
|
||||||
m_win->setBusy (false);
|
|
||||||
m_win->setStatusText ("idle");
|
|
||||||
|
|
||||||
for (int i = 0; i < l.count (); i++) {
|
|
||||||
QHash<QString, QString> h(l.value (i));
|
|
||||||
|
|
||||||
MedialibListItem *item = new MedialibListItem (h.value("artist"), h.value("album"), this);
|
|
||||||
item->setSizeHint (QSize (90, 90));
|
|
||||||
item->setIcon (QIcon (":nocover.png"));
|
|
||||||
item->setFont (font);
|
|
||||||
item->setTextAlignment (Qt::AlignVCenter);
|
|
||||||
|
|
||||||
if (h.contains ("image")) {
|
|
||||||
|
|
||||||
QString name = qtMD5 ((h.value("artist").toLower()+"-"+h.value("album").toLower()).toUtf8());
|
|
||||||
QString fname (QDir::homePath () +"/.xmms2/clients/generic/art/"+name+"-small.jpg");
|
|
||||||
|
|
||||||
if (!QFile::exists (fname)) {
|
|
||||||
QUrl url (h.value("image"));
|
|
||||||
|
|
||||||
m_http->setHost (url.host(), url.port() != -1 ? url.port() : 80);
|
|
||||||
if (!url.userName().isEmpty()) {
|
|
||||||
m_http->setUser (url.userName(), url.password());
|
|
||||||
}
|
|
||||||
|
|
||||||
QFile *file = new QFile ("/tmp/"+name+"-small.jpg");
|
|
||||||
file->open(QIODevice::WriteOnly);
|
|
||||||
|
|
||||||
item->setFile (file);
|
|
||||||
|
|
||||||
int id = m_http->get (url.path(), file);
|
|
||||||
m_httpmap->insert (id, item);
|
|
||||||
} else {
|
|
||||||
QIcon ico (fname);
|
|
||||||
item->setIcon (ico);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
s.beginGroup ("medialib_"+m_name);
|
||||||
|
|
||||||
|
if (!s.contains ("size")) {
|
||||||
|
s.setValue ("size", tr ("Large"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString size = s.value("size").toString ();
|
||||||
|
|
||||||
|
m_noicon = false;
|
||||||
|
|
||||||
if (m_httpmap->count() > 0) {
|
if (size == tr ("Small")) {
|
||||||
m_win->setBusy (0, m_httpmap->count ());
|
setIconSize (QSize (42, 42));
|
||||||
m_win->setStatusText ("Loading album art");
|
m_font.setPixelSize (10);
|
||||||
|
} else if (size == tr ("Large")) {
|
||||||
|
setIconSize (QSize (85, 85));
|
||||||
|
m_font.setPixelSize (14);
|
||||||
|
} else if (size == tr ("None")) {
|
||||||
|
setIconSize (QSize (10, 10));
|
||||||
|
m_noicon = true;
|
||||||
|
m_font.setPixelSize (10);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MedialibList::search (const QString &s)
|
||||||
|
{
|
||||||
|
if (s.length () > 0) {
|
||||||
|
for (int i = 0; i < count (); i++) {
|
||||||
|
MedialibListItem *it = dynamic_cast<MedialibListItem*> (item (i));
|
||||||
|
if (!it->text().contains (s, Qt::CaseInsensitive)) {
|
||||||
|
setItemHidden (it, true);
|
||||||
|
} else if (isItemHidden (it)) {
|
||||||
|
setItemHidden (it, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < count (); i++) {
|
||||||
|
MedialibListItem *it = dynamic_cast<MedialibListItem*> (item (i));
|
||||||
|
setItemHidden (it, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
65
Medialib.h
65
Medialib.h
|
@ -13,48 +13,75 @@
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QHttp>
|
#include <QHttp>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QUrl>
|
||||||
|
|
||||||
class MedialibWindow;
|
class MedialibWindow;
|
||||||
|
|
||||||
class MedialibListItem : public QListWidgetItem
|
class MedialibListItem : public QListWidgetItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MedialibListItem (QString artist, QString album, QListWidget *parent) :
|
MedialibListItem (const QString &artist, const QString &album,
|
||||||
|
const QString &song, QListWidget *parent) :
|
||||||
|
QListWidgetItem (artist + " - " + song, parent) {
|
||||||
|
m_artist = artist;
|
||||||
|
m_album = album;
|
||||||
|
m_song = song;
|
||||||
|
}
|
||||||
|
MedialibListItem (const QString &artist, const QString &album,
|
||||||
|
QListWidget *parent) :
|
||||||
QListWidgetItem (artist + " - " + album, parent) {
|
QListWidgetItem (artist + " - " + album, parent) {
|
||||||
m_artist = artist;
|
m_artist = artist;
|
||||||
m_album = album;
|
m_album = album;
|
||||||
}
|
}
|
||||||
|
MedialibListItem (const QString &artist, QListWidget *parent) :
|
||||||
|
QListWidgetItem (artist, parent) {
|
||||||
|
m_artist = artist;
|
||||||
|
}
|
||||||
|
|
||||||
~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 getArtist (void) { return m_artist; }
|
||||||
QString getAlbum (void) { return m_album; }
|
QString getAlbum (void) { return m_album; }
|
||||||
|
QString getSong (void) { return m_song; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QFile *m_file;
|
QFile *m_file;
|
||||||
QString m_artist;
|
QString m_artist;
|
||||||
QString m_album;
|
QString m_album;
|
||||||
|
QString m_song;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MedialibList : public QListWidget
|
class MedialibList : public QListWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MedialibList (QWidget *parent);
|
MedialibList (QWidget *parent, const QString &name);
|
||||||
~MedialibList () {}
|
~MedialibList () {}
|
||||||
QStringList mimeTypes (void) const;
|
void setSizes (void);
|
||||||
|
void refresh (void) {}
|
||||||
|
/*
|
||||||
|
QStringList mimeTypes (void) const {};
|
||||||
|
*/
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void queryCallback (QList<QHash<QString, QString> >);
|
|
||||||
void httpDone (int, bool);
|
/*
|
||||||
void search (QString);
|
void queryCallback (uint, QList<QHash<QString, QString> >) {};
|
||||||
QMimeData *mimeData(const QList<QListWidgetItem*> items) const;
|
QMimeData *mimeData(const QList<QListWidgetItem*> items) const {};
|
||||||
|
*/
|
||||||
|
|
||||||
|
void search (const QString &);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
uint m_cid;
|
||||||
|
QFont m_font;
|
||||||
|
MedialibWindow *m_win;
|
||||||
|
bool m_noicon;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QHash<int, MedialibListItem*> *m_httpmap;
|
QString m_name;
|
||||||
QHttp *m_http;
|
|
||||||
MedialibWindow *m_win;
|
|
||||||
int m_httpr;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -74,17 +101,26 @@ class MedialibWindow : public QMainWindow
|
||||||
m_progress->reset ();
|
m_progress->reset ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setBusy (int min, int max) {
|
void setBusy (int min, int max) {
|
||||||
m_progress->setMaximum (max);
|
m_progress->setMaximum (max);
|
||||||
m_progress->setMinimum (min);
|
m_progress->setMinimum (min);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setBusy (int cur) {
|
void setBusy (int cur) {
|
||||||
m_progress->setValue (cur);
|
m_progress->setValue (cur);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setStatusText (QString s) {
|
void setStatusText (QString s) {
|
||||||
m_status->setText (s);
|
m_status->setText (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addRequest (QUrl url, MedialibListItem *item);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void httpDone (int, bool);
|
||||||
|
void settingsSaved (void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QWidget *m_dummy;
|
QWidget *m_dummy;
|
||||||
QTabWidget *m_tab;
|
QTabWidget *m_tab;
|
||||||
|
@ -92,7 +128,12 @@ class MedialibWindow : public QMainWindow
|
||||||
QVBoxLayout *m_vbox;
|
QVBoxLayout *m_vbox;
|
||||||
QProgressBar *m_progress;
|
QProgressBar *m_progress;
|
||||||
QLabel *m_status;
|
QLabel *m_status;
|
||||||
MedialibList *m_list;
|
MedialibList *m_artist;
|
||||||
|
MedialibList *m_album;
|
||||||
|
MedialibList *m_song;
|
||||||
|
|
||||||
|
QHash<int, MedialibListItem*> *m_httpmap;
|
||||||
|
QHttp *m_http;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -343,7 +343,7 @@ PlaylistList::mouseMoveEvent (QMouseEvent *event)
|
||||||
m_items->removeAt (i);
|
m_items->removeAt (i);
|
||||||
m_selected->clear ();
|
m_selected->clear ();
|
||||||
|
|
||||||
Qt::DropAction drop = m_drag->start ();
|
m_drag->start ();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -353,23 +353,10 @@ PlaylistList::dragEnterEvent (QDragEnterEvent *event)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (event->mimeData()->hasFormat("application/mlib.album") ||
|
if (event->mimeData()->hasFormat("application/mlib.album") ||
|
||||||
|
event->mimeData()->hasFormat("application/mlib.artist") ||
|
||||||
|
event->mimeData()->hasFormat("application/mlib.song") ||
|
||||||
event->mimeData()->hasFormat("application/playlist.move"))
|
event->mimeData()->hasFormat("application/playlist.move"))
|
||||||
event->acceptProposedAction();
|
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 ();
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -427,6 +414,41 @@ PlaylistList::dropEvent (QDropEvent *event)
|
||||||
|
|
||||||
xmmsh->medialibQueryAdd (query);
|
xmmsh->medialibQueryAdd (query);
|
||||||
|
|
||||||
|
event->acceptProposedAction ();
|
||||||
|
} else if (event->mimeData()->hasFormat("application/mlib.artist")) {
|
||||||
|
const QMimeData *md = event->mimeData ();
|
||||||
|
QByteArray encodedData = md->data("application/mlib.artist");
|
||||||
|
QDataStream stream(&encodedData, QIODevice::ReadOnly);
|
||||||
|
|
||||||
|
QString artist;
|
||||||
|
stream >> artist;
|
||||||
|
|
||||||
|
QString query;
|
||||||
|
if (artist == "Various Artists") {
|
||||||
|
query.sprintf ("select m1.id as id, m2.value as album, ifnull(m3.value,-1) as tracknr from Media m1 left 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='compilation' and m1.value=1 order by album, tracknr;");
|
||||||
|
} else {
|
||||||
|
query.sprintf ("select m1.id as id, m2.value as album, ifnull(m3.value,-1) as tracknr from Media m1 left 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' order by album, tracknr", artist.toUtf8 ().data ());
|
||||||
|
}
|
||||||
|
|
||||||
|
xmmsh->medialibQueryAdd (query);
|
||||||
|
event->acceptProposedAction ();
|
||||||
|
} else if (event->mimeData()->hasFormat("application/mlib.song")) {
|
||||||
|
const QMimeData *md = event->mimeData ();
|
||||||
|
QByteArray encodedData = md->data("application/mlib.song");
|
||||||
|
QDataStream stream(&encodedData, QIODevice::ReadOnly);
|
||||||
|
|
||||||
|
QString artist;
|
||||||
|
QString album;
|
||||||
|
QString song;
|
||||||
|
stream >> artist;
|
||||||
|
stream >> album;
|
||||||
|
stream >> song;
|
||||||
|
|
||||||
|
QString query;
|
||||||
|
query.sprintf ("select m1.id as id, ifnull(m1.value, '[unknown]') as artist, ifnull(m2.value,'[unknown]') as album, ifnull(m4.value,m5.value) as song from Media m1 left join Media m2 on m1.id = m2.id and m2.key='album' left join Media m4 on m1.id = m4.id and m4.key='title' left join Media m5 on m1.id = m5.id and m5.key='url' where m1.key='artist' and artist='%s' and album='%s' and song='%s'", artist.toUtf8 ().data (), album.toUtf8 ().data (), song.toUtf8 ().data ());
|
||||||
|
|
||||||
|
xmmsh->medialibQueryAdd (query);
|
||||||
|
|
||||||
event->acceptProposedAction ();
|
event->acceptProposedAction ();
|
||||||
}
|
}
|
||||||
m_bar = -2;
|
m_bar = -2;
|
||||||
|
|
|
@ -61,6 +61,18 @@ SettingsTabMedialib::SettingsTabMedialib (QWidget *parent) : QWidget (parent)
|
||||||
{
|
{
|
||||||
QSettings s;
|
QSettings s;
|
||||||
|
|
||||||
|
if (!s.contains ("medialib_artist/size")) {
|
||||||
|
s.setValue ("medialib_artist/size", tr ("Large"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!s.contains ("medialib_album/size")) {
|
||||||
|
s.setValue ("medialib_album/size", tr ("Large"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!s.contains ("medialib_song/size")) {
|
||||||
|
s.setValue ("medialib_song/size", tr ("Large"));
|
||||||
|
}
|
||||||
|
|
||||||
s.beginGroup("medialib");
|
s.beginGroup("medialib");
|
||||||
QWidget *dummy = new QWidget (this);
|
QWidget *dummy = new QWidget (this);
|
||||||
|
|
||||||
|
@ -87,7 +99,121 @@ SettingsTabMedialib::SettingsTabMedialib (QWidget *parent) : QWidget (parent)
|
||||||
h->addWidget (m_selected);
|
h->addWidget (m_selected);
|
||||||
|
|
||||||
QLabel *l = new QLabel (tr ("Selected tab on startup"), c);
|
QLabel *l = new QLabel (tr ("Selected tab on startup"), c);
|
||||||
|
h->addWidget (l, 1);
|
||||||
|
|
||||||
|
s.endGroup ();
|
||||||
|
|
||||||
|
c = new QWidget (dummy);
|
||||||
|
h = new QHBoxLayout (c);
|
||||||
|
|
||||||
|
vbox->addWidget (c, 1);
|
||||||
|
|
||||||
|
s.beginGroup ("medialib_artist");
|
||||||
|
|
||||||
|
l = new QLabel (tr ("Artist view"), c);
|
||||||
|
|
||||||
|
QFrame *f = new QFrame (c);
|
||||||
|
f->setFrameStyle (QFrame::HLine | QFrame::Raised);
|
||||||
|
h->addWidget (l);
|
||||||
|
h->addWidget (f, 1);
|
||||||
|
|
||||||
|
c = new QWidget (dummy);
|
||||||
|
h = new QHBoxLayout (c);
|
||||||
|
|
||||||
|
vbox->addWidget (c, 1);
|
||||||
|
|
||||||
|
m_artistsize = new QComboBox (c);
|
||||||
|
m_artistsize->addItem (tr ("None"));
|
||||||
|
m_artistsize->addItem (tr ("Small"));
|
||||||
|
m_artistsize->addItem (tr ("Large"));
|
||||||
|
m_artistsize->setEditable (false);
|
||||||
|
|
||||||
|
curr = s.value ("size").toString ();
|
||||||
|
for (int i = 0; i < m_artistsize->count(); i++) {
|
||||||
|
if (m_artistsize->itemText (i) == curr) {
|
||||||
|
m_artistsize->setCurrentIndex (i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h->addWidget (m_artistsize);
|
||||||
|
l = new QLabel (tr ("Size of media art icon"), c);
|
||||||
|
h->addWidget (l, 1);
|
||||||
|
|
||||||
|
s.endGroup ();
|
||||||
|
|
||||||
|
c = new QWidget (dummy);
|
||||||
|
h = new QHBoxLayout (c);
|
||||||
|
vbox->addWidget (c, 1);
|
||||||
|
|
||||||
|
s.beginGroup ("medialib_album");
|
||||||
|
|
||||||
|
l = new QLabel (tr ("Album view"), c);
|
||||||
|
|
||||||
|
f = new QFrame (c);
|
||||||
|
f->setFrameStyle (QFrame::HLine | QFrame::Raised);
|
||||||
|
h->addWidget (l);
|
||||||
|
h->addWidget (f, 1);
|
||||||
|
|
||||||
|
c = new QWidget (dummy);
|
||||||
|
h = new QHBoxLayout (c);
|
||||||
|
|
||||||
|
vbox->addWidget (c, 1);
|
||||||
|
|
||||||
|
m_albumsize = new QComboBox (c);
|
||||||
|
m_albumsize->addItem (tr ("None"));
|
||||||
|
m_albumsize->addItem (tr ("Small"));
|
||||||
|
m_albumsize->addItem (tr ("Large"));
|
||||||
|
m_albumsize->setEditable (false);
|
||||||
|
|
||||||
|
curr = s.value ("size").toString ();
|
||||||
|
for (int i = 0; i < m_artistsize->count(); i++) {
|
||||||
|
if (m_albumsize->itemText (i) == curr) {
|
||||||
|
m_albumsize->setCurrentIndex (i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h->addWidget (m_albumsize);
|
||||||
|
l = new QLabel (tr ("Size of media art icon"), c);
|
||||||
|
h->addWidget (l, 1);
|
||||||
|
|
||||||
|
s.endGroup ();
|
||||||
|
|
||||||
|
c = new QWidget (dummy);
|
||||||
|
h = new QHBoxLayout (c);
|
||||||
|
vbox->addWidget (c, 1);
|
||||||
|
|
||||||
|
s.beginGroup ("medialib_song");
|
||||||
|
|
||||||
|
l = new QLabel (tr ("Song view"), c);
|
||||||
|
|
||||||
|
f = new QFrame (c);
|
||||||
|
f->setFrameStyle (QFrame::HLine | QFrame::Raised);
|
||||||
|
h->addWidget (l);
|
||||||
|
h->addWidget (f, 1);
|
||||||
|
|
||||||
|
c = new QWidget (dummy);
|
||||||
|
h = new QHBoxLayout (c);
|
||||||
|
|
||||||
|
vbox->addWidget (c, 1);
|
||||||
|
|
||||||
|
m_songsize = new QComboBox (c);
|
||||||
|
m_songsize->addItem (tr ("None"));
|
||||||
|
m_songsize->addItem (tr ("Small"));
|
||||||
|
m_songsize->addItem (tr ("Large"));
|
||||||
|
m_songsize->setEditable (false);
|
||||||
|
|
||||||
|
curr = s.value ("size").toString ();
|
||||||
|
for (int i = 0; i < m_artistsize->count(); i++) {
|
||||||
|
if (m_songsize->itemText (i) == curr) {
|
||||||
|
m_songsize->setCurrentIndex (i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h->addWidget (m_songsize);
|
||||||
|
l = new QLabel (tr ("Size of media art icon"), c);
|
||||||
h->addWidget (l, 1);
|
h->addWidget (l, 1);
|
||||||
|
|
||||||
s.endGroup ();
|
s.endGroup ();
|
||||||
|
@ -99,6 +225,9 @@ SettingsTabMedialib::saveSettings ()
|
||||||
{
|
{
|
||||||
QSettings s;
|
QSettings s;
|
||||||
s.setValue ("medialib/selected", m_selected->currentText ());
|
s.setValue ("medialib/selected", m_selected->currentText ());
|
||||||
|
s.setValue ("medialib_artist/size", m_artistsize->currentText ());
|
||||||
|
s.setValue ("medialib_album/size", m_albumsize->currentText ());
|
||||||
|
s.setValue ("medialib_song/size", m_songsize->currentText ());
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsTabPlaylist::SettingsTabPlaylist (QWidget *parent) : QWidget (parent)
|
SettingsTabPlaylist::SettingsTabPlaylist (QWidget *parent) : QWidget (parent)
|
||||||
|
|
|
@ -20,6 +20,9 @@ class SettingsTabMedialib : public QWidget {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QComboBox *m_selected;
|
QComboBox *m_selected;
|
||||||
|
QComboBox *m_artistsize;
|
||||||
|
QComboBox *m_albumsize;
|
||||||
|
QComboBox *m_songsize;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SettingsTabPlaylist : public QWidget {
|
class SettingsTabPlaylist : public QWidget {
|
||||||
|
|
|
@ -261,11 +261,12 @@ XMMSHandler::PropDictToQHash (XMMSResultDict *res)
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
uint
|
||||||
XMMSHandler::medialibQuery (QString q)
|
XMMSHandler::medialibQuery (QString q)
|
||||||
{
|
{
|
||||||
XMMSResultDictList *r = m_xmmsc->medialib_select (q.toUtf8 ());
|
XMMSResultDictList *r = m_xmmsc->medialib_select (q.toUtf8 ());
|
||||||
r->connect (sigc::mem_fun (this, &XMMSHandler::medialib_select));
|
r->connect (sigc::mem_fun (this, &XMMSHandler::medialib_select));
|
||||||
|
return r->getCID ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -278,7 +279,7 @@ XMMSHandler::medialib_select (XMMSResultDictList *res)
|
||||||
l.append (h);
|
l.append (h);
|
||||||
}
|
}
|
||||||
|
|
||||||
emit medialibResponse (l);
|
emit medialibResponse (res->getCID (), l);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -31,7 +31,7 @@ class XMMSHandler : public QObject, public sigc::trackable {
|
||||||
void playlistClear (void);
|
void playlistClear (void);
|
||||||
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);
|
uint medialibQuery (QString);
|
||||||
void medialibQueryAdd (QString q) { delete m_xmmsc->medialib_add_to_playlist (q.toUtf8 ()); }
|
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; }
|
||||||
|
@ -63,7 +63,7 @@ class XMMSHandler : public QObject, public sigc::trackable {
|
||||||
void playlistList (QList<uint>);
|
void playlistList (QList<uint>);
|
||||||
void currentID (uint);
|
void currentID (uint);
|
||||||
void playlistChanged (QHash<QString, QString>);
|
void playlistChanged (QHash<QString, QString>);
|
||||||
void medialibResponse (QList<QHash<QString, QString> >);
|
void medialibResponse (uint, QList<QHash<QString, QString> >);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
XmmsQT4 *m_qt4;
|
XmmsQT4 *m_qt4;
|
||||||
|
|
BIN
noalbum.png
Normal file
BIN
noalbum.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
BIN
noartist.png
Normal file
BIN
noartist.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
BIN
nosong.png
Normal file
BIN
nosong.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
10
promoe.pro
10
promoe.pro
|
@ -20,7 +20,10 @@ SOURCES += XmmsQT4.cpp \
|
||||||
PlaylistShade.cpp \
|
PlaylistShade.cpp \
|
||||||
Medialib.cpp \
|
Medialib.cpp \
|
||||||
qtmd5.cpp \
|
qtmd5.cpp \
|
||||||
SettingsWindow.cpp
|
SettingsWindow.cpp \
|
||||||
|
MediaArtistList.cpp \
|
||||||
|
MediaAlbumList.cpp \
|
||||||
|
MediaSongList.cpp
|
||||||
|
|
||||||
HEADERS += XmmsQT4.h \
|
HEADERS += XmmsQT4.h \
|
||||||
PixWidget.h \
|
PixWidget.h \
|
||||||
|
@ -44,7 +47,10 @@ HEADERS += XmmsQT4.h \
|
||||||
PlaylistShade.h \
|
PlaylistShade.h \
|
||||||
Medialib.h \
|
Medialib.h \
|
||||||
qtmd5.h \
|
qtmd5.h \
|
||||||
SettingsWindow.h
|
SettingsWindow.h \
|
||||||
|
MediaArtistList.h \
|
||||||
|
MediaAlbumList.h \
|
||||||
|
MediaSongList.h
|
||||||
|
|
||||||
|
|
||||||
RESOURCES = promoe.qrc
|
RESOURCES = promoe.qrc
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<!DOCTYPE RCC><RCC version="1.0">
|
<!DOCTYPE RCC><RCC version="1.0">
|
||||||
<qresource>
|
<qresource>
|
||||||
<file>icon.png</file>
|
<file>icon.png</file>
|
||||||
<file>nocover.png</file>
|
<file>noartist.png</file>
|
||||||
|
<file>nosong.png</file>
|
||||||
|
<file>noalbum.png</file>
|
||||||
<file>CleanAMP/Eq_ex.png</file>
|
<file>CleanAMP/Eq_ex.png</file>
|
||||||
<file>CleanAMP/GENEX.png</file>
|
<file>CleanAMP/GENEX.png</file>
|
||||||
<file>CleanAMP/Gen.png</file>
|
<file>CleanAMP/Gen.png</file>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue