File: medialibsearchmodel.cpp

package info (click to toggle)
esperanza 0.2.1-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 600 kB
  • ctags: 536
  • sloc: cpp: 4,533; sh: 63; makefile: 4
file content (71 lines) | stat: -rw-r--r-- 1,798 bytes parent folder | download
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;
}