本文整理汇总了C++中MediaQuery::addLRIFilterConditions方法的典型用法代码示例。如果您正苦于以下问题:C++ MediaQuery::addLRIFilterConditions方法的具体用法?C++ MediaQuery::addLRIFilterConditions怎么用?C++ MediaQuery::addLRIFilterConditions使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MediaQuery
的用法示例。
在下文中一共展示了MediaQuery::addLRIFilterConditions方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: run
void SemanticsListEngine::run()
{
QThread::setTerminationEnabled(true);
m_stop = false;
if (m_updateSourceInfo || m_removeSourceInfo) {
NepomukListEngine::run();
return;
}
//Create media list based on engine argument and filter
QList<MediaItem> mediaList;
MediaVocabulary mediaVocabulary = MediaVocabulary();
QString engineArg = m_mediaListProperties.engineArg();
QString engineFilter = m_mediaListProperties.engineFilter();
QStringList engineFilterList = m_mediaListProperties.engineFilterList();
//Parse filter
QString mediaType;
QString groupByCategoryType;
QString groupByField;
QString limitFilter;
int originalGenreLimit = 0;
if (engineFilterList.count() != 0) {
mediaType = engineFilterList.at(0);
if (engineFilterList.filter("groupBy=").count() != 0) {
QString groupByFilter = engineFilterList.filter("groupBy=").at(0);
groupByField = groupByFilter.remove("groupBy=").trimmed();
if (groupByField == "artist") {
groupByCategoryType = "Artist";
} else if (groupByField == "album") {
groupByCategoryType = "Album";
} else if (groupByField == "genre") {
if (mediaType == "audio") {
groupByCategoryType = "AudioGenre";
} else if (mediaType == "video") {
groupByCategoryType = "VideoGenre";
}
} else if (groupByField == "seriesName") {
groupByCategoryType = "TV Series";
} else if (groupByField == "actor") {
groupByCategoryType = "Actor";
} else if (groupByField == "director") {
groupByCategoryType = "Director";
} else if (groupByField == "tag") {
if (mediaType == "audio") {
groupByCategoryType = "AudioTag";
} else if (mediaType == "video") {
groupByCategoryType = "VideoTag";
}
}
}
if (engineFilterList.filter("limit=").count() !=0) {
limitFilter = engineFilterList.filter("limit=").at(0);
if (groupByField == "genre") {
originalGenreLimit = m_mediaListProperties.filterValue(limitFilter).trimmed().toInt();
int originalFilterIndex = engineFilterList.indexOf(limitFilter);
limitFilter = QString("%1%2%3").arg(m_mediaListProperties.filterField(limitFilter))
.arg(m_mediaListProperties.filterOperator(limitFilter))
.arg(m_mediaListProperties.filterValue(limitFilter).trimmed().toInt()*3);
engineFilterList.replace(originalFilterIndex, limitFilter);
}
}
}
if (m_nepomukInited) {
if (engineArg.toLower() == "frequent") {
mediaList.clear();
if (mediaType == "audio" || mediaType == "video") {
MediaQuery query;
bool ignoreZeros = false;
if (groupByCategoryType.isEmpty()) {
QStringList bindings;
bindings.append(mediaVocabulary.mediaResourceBinding());
bindings.append(mediaVocabulary.mediaResourceUrlBinding());
bindings.append(mediaVocabulary.playCountBinding());
query.select(bindings, MediaQuery::Distinct);
query.startWhere();
if (mediaType == "audio") {
query.addCondition(mediaVocabulary.hasTypeAnyAudio(MediaQuery::Required));
} else if (mediaType == "video") {
query.addCondition(mediaVocabulary.hasTypeAnyVideo(MediaQuery::Required));
}
query.addLRIFilterConditions(engineFilterList, mediaVocabulary);
if (m_mediaListProperties.filterForField("playCount").isEmpty()) {
query.addCondition(mediaVocabulary.hasPlayCount(MediaQuery::Required, 0, MediaQuery::GreaterThan));
ignoreZeros = true;
}
query.addCondition(mediaVocabulary.hasLastPlayed(MediaQuery::Optional));
query.endWhere();
QStringList orderByBindings;
QList<MediaQuery::Order> order;
orderByBindings.append(mediaVocabulary.playCountBinding());
order.append(MediaQuery::Descending);
orderByBindings.append(mediaVocabulary.lastPlayedBinding());
order.append(MediaQuery::Descending);
query.orderBy(orderByBindings, order);
} else {
QStringList bindings;
//.........这里部分代码省略.........