Make plasma libs build.
[amarok.git] / src / collection / MetaQueryBuilder.cpp
blob4ee54995cfc459d2b953532f835267a460c9d72d
1 /*
2 * Copyright (c) 2007 Maximilian Kossick <maximilian.kossick@googlemail.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 #include "MetaQueryBuilder.h"
21 #include <QtGlobal>
23 using namespace Meta;
25 MetaQueryBuilder::MetaQueryBuilder( const QList<Collection*> &collections )
26 : QueryMaker()
27 , m_queryDoneCount( 0 )
28 , m_queryDoneCountMutex()
30 foreach( Collection *c, collections )
32 QueryMaker *b = c->queryMaker();
33 builders.append( b );
34 connect( b, SIGNAL( queryDone() ), this, SLOT( slotQueryDone() ) );
35 //relay signals directly
36 connect( b, SIGNAL( newResultReady( QString, Meta::TrackList ) ), this, SIGNAL( newResultReady( QString, Meta::TrackList ) ), Qt::DirectConnection );
37 connect( b, SIGNAL( newResultReady( QString, Meta::ArtistList ) ), this, SIGNAL( newResultReady( QString, Meta::ArtistList ) ), Qt::DirectConnection );
38 connect( b, SIGNAL( newResultReady( QString, Meta::AlbumList ) ), this, SIGNAL( newResultReady( QString, Meta::AlbumList ) ), Qt::DirectConnection );
39 connect( b, SIGNAL( newResultReady( QString, Meta::GenreList ) ), this, SIGNAL( newResultReady( QString, Meta::GenreList ) ), Qt::DirectConnection );
40 connect( b, SIGNAL( newResultReady( QString, Meta::ComposerList ) ), this, SIGNAL( newResultReady( QString, Meta::ComposerList ) ), Qt::DirectConnection );
41 connect( b, SIGNAL( newResultReady( QString, Meta::YearList ) ), this, SIGNAL( newResultReady( QString, Meta::YearList ) ), Qt::DirectConnection );
42 connect( b, SIGNAL( newResultReady( QString, QStringList ) ), this, SIGNAL( newResultReady( QString, QStringList ) ), Qt::DirectConnection );
43 connect( b, SIGNAL( newResultReady( QString, Meta::DataList ) ), this, SIGNAL( newResultReady( QString, Meta::DataList ) ), Qt::DirectConnection );
47 MetaQueryBuilder::~MetaQueryBuilder()
49 foreach( QueryMaker *b, builders )
50 delete b;
53 QueryMaker*
54 MetaQueryBuilder::reset()
56 m_queryDoneCount = 0;
57 foreach( QueryMaker *b, builders )
58 b->reset();
59 return this;
62 void
63 MetaQueryBuilder::run()
65 foreach( QueryMaker *b, builders )
66 b->run();
69 void
70 MetaQueryBuilder::abortQuery()
72 foreach( QueryMaker *b, builders )
73 b->abortQuery();
76 int
77 MetaQueryBuilder::resultCount() const
79 return builders.count();
82 QueryMaker*
83 MetaQueryBuilder::startTrackQuery()
85 foreach( QueryMaker *b, builders )
86 b->startTrackQuery();
87 return this;
90 QueryMaker*
91 MetaQueryBuilder::startArtistQuery()
93 foreach( QueryMaker *b, builders )
94 b->startArtistQuery();
95 return this;
98 QueryMaker*
99 MetaQueryBuilder::startAlbumQuery()
101 foreach( QueryMaker *b, builders )
102 b->startAlbumQuery();
103 return this;
106 QueryMaker*
107 MetaQueryBuilder::startGenreQuery()
109 foreach( QueryMaker *b, builders )
110 b->startGenreQuery();
111 return this;
114 QueryMaker*
115 MetaQueryBuilder::startComposerQuery()
117 foreach( QueryMaker *b, builders )
118 b->startComposerQuery();
119 return this;
122 QueryMaker*
123 MetaQueryBuilder::startYearQuery()
125 foreach( QueryMaker *b, builders )
126 b->startYearQuery();
127 return this;
130 QueryMaker*
131 MetaQueryBuilder::startCustomQuery()
133 foreach( QueryMaker *b, builders )
134 b->startCustomQuery();
135 return this;
138 QueryMaker*
139 MetaQueryBuilder::addReturnValue( qint64 value )
141 foreach( QueryMaker *b, builders )
142 b->addReturnValue( value );
143 return this;
146 QueryMaker*
147 MetaQueryBuilder::orderBy( qint64 value, bool descending )
149 foreach( QueryMaker *b, builders )
150 b->orderBy( value, descending );
151 return this;
154 QueryMaker*
155 MetaQueryBuilder::includeCollection( const QString &collectionId )
157 foreach( QueryMaker *b, builders )
158 b->includeCollection( collectionId );
159 return this;
162 QueryMaker*
163 MetaQueryBuilder::excludeCollection( const QString &collectionId )
165 foreach( QueryMaker *b, builders )
166 b->excludeCollection( collectionId );
167 return this;
170 QueryMaker*
171 MetaQueryBuilder::addFilter( qint64 value, const QString &filter, bool matchBegin, bool matchEnd )
173 foreach( QueryMaker *b, builders )
174 b->addFilter( value, filter, matchBegin, matchEnd );
175 return this;
178 QueryMaker*
179 MetaQueryBuilder::excludeFilter( qint64 value, const QString &filter, bool matchBegin, bool matchEnd )
181 foreach( QueryMaker *b, builders )
182 b->excludeFilter( value, filter, matchBegin, matchEnd );
183 return this;
186 QueryMaker*
187 MetaQueryBuilder::addMatch( const TrackPtr &track )
189 foreach( QueryMaker *b, builders )
190 b->addMatch( track );
191 return this;
194 QueryMaker*
195 MetaQueryBuilder::addMatch( const ArtistPtr &artist )
197 foreach( QueryMaker *b, builders )
198 b->addMatch( artist );
199 return this;
202 QueryMaker*
203 MetaQueryBuilder::addMatch( const AlbumPtr &album )
205 foreach( QueryMaker *b, builders )
206 b->addMatch( album );
207 return this;
210 QueryMaker*
211 MetaQueryBuilder::addMatch( const GenrePtr &genre )
213 foreach( QueryMaker *b, builders )
214 b->addMatch( genre );
215 return this;
218 QueryMaker*
219 MetaQueryBuilder::addMatch( const ComposerPtr &composer )
221 foreach( QueryMaker *b, builders )
222 b->addMatch( composer );
223 return this;
226 QueryMaker*
227 MetaQueryBuilder::addMatch( const YearPtr &year )
229 foreach( QueryMaker *b, builders )
230 b->addMatch( year );
231 return this;
234 QueryMaker*
235 MetaQueryBuilder::addMatch( const DataPtr &data )
237 DataPtr tmp = const_cast<DataPtr&>( data );
238 foreach( QueryMaker *b, builders )
239 tmp->addMatchTo( b );
240 return this;
243 QueryMaker*
244 MetaQueryBuilder::returnResultAsDataPtrs( bool resultAsDataPtrs )
246 foreach( QueryMaker *b, builders )
247 b->returnResultAsDataPtrs( resultAsDataPtrs );
248 return this;
251 QueryMaker*
252 MetaQueryBuilder::limitMaxResultSize( int size )
254 foreach( QueryMaker *b, builders )
255 b->limitMaxResultSize( size );
256 return this;
259 QueryMaker*
260 MetaQueryBuilder::beginAnd()
262 foreach( QueryMaker *b, builders )
263 b->beginAnd();
264 return this;
267 QueryMaker*
268 MetaQueryBuilder::beginOr()
270 foreach( QueryMaker *b, builders )
271 b->beginOr();
272 return this;
275 QueryMaker*
276 MetaQueryBuilder::endAndOr()
278 foreach( QueryMaker *b, builders )
279 b->endAndOr();
280 return this;
283 void
284 MetaQueryBuilder::slotQueryDone()
286 m_queryDoneCountMutex.lock();
287 m_queryDoneCount++;
288 if ( m_queryDoneCount == builders.size() )
290 //make sure we don't give control to code outside this class while holding the lock
291 m_queryDoneCountMutex.unlock();
292 emit queryDone();
294 else
295 m_queryDoneCountMutex.unlock();
298 #include "MetaQueryBuilder.moc"