1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#include "medialibsearchmodel.h"
MedialibSearchModel::MedialibSearchModel (QObject *parent, XClient *client) :
PlaylistModel (parent, client)
{
m_client = client;
QStringList columns;
columns.append ("Artist");
columns.append ("Album");
columns.append ("Title");
setColumns (columns);
columns.append ("url");
columns.append ("");
columns.append ("");
setColumnFallback (columns);
}
void
MedialibSearchModel::do_search (uint32_t p, const QString &s)
{
QString a = QString ("%%%0%%").arg (s.toLower ());
a = QString::fromStdString (m_client->medialib.sqlitePrepareString (a.toStdString ()));
QString q ("select distinct m1.id as id from Media m1 join Media m2 on m1.id = m2.id and m2.key = 'resolved' and m2.value = 1");
switch (p) {
case SEARCH_ALL:
q.append (QString (" where lower(m1.value) like %0").arg (a));
break;
case SEARCH_ALBUM:
q.append (QString (" where m1.key = 'album' and lower(m1.value) like %0").arg (a));
break;
case SEARCH_ARTIST:
q.append (QString (" where m1.key = 'artist' and lower(m1.value) like %0").arg (a));
break;
case SEARCH_TITLE:
q.append (QString (" where m1.key = 'title' and lower(m1.value) like %0").arg (a));
break;
case SEARCH_YEAR:
q.append (QString (" where m1.key = 'date' and lower(m1.value) like %0").arg (a));
break;
}
q.append (" order by m1.id");
m_client->medialib.select (q.toStdString (), Xmms::bind (&MedialibSearchModel::handle_search, this));
}
void
MedialibSearchModel::got_connection (XClient *client)
{
m_client = client;
}
bool
MedialibSearchModel::handle_search (const Xmms::List< Xmms::Dict > &list)
{
m_plist.clear ();
for (list.first (); list.isValid (); ++ list) {
m_plist.append ((*list).get<int32_t> ("id"));
}
emit searchDone ();
reset ();
return true;
}
|