| 19 | } |
| 20 | |
| 21 | ScriptState ResourceScript::search(const QString &keyword, int page, int &totalPage, QList<ResourceItem> &results, const QString &scene, const QMap<QString, QString> *option) |
| 22 | { |
| 23 | MutexLocker locker(scriptLock); |
| 24 | if(!locker.tryLock()) return ScriptState(ScriptState::S_BUSY); |
| 25 | QString errInfo; |
| 26 | QVariantList params{keyword, page, scene}; |
| 27 | if(!option) |
| 28 | { |
| 29 | addSearchOptions(params); |
| 30 | } |
| 31 | else |
| 32 | { |
| 33 | QVariantMap optionMap; |
| 34 | for(auto iter = option->cbegin(); iter != option->cend(); ++iter) |
| 35 | { |
| 36 | |
| 37 | optionMap[iter.key()] = iter.value(); |
| 38 | } |
| 39 | params.append(optionMap); |
| 40 | } |
| 41 | QVariantList rets = call(searchFunc, params, 2, errInfo); |
| 42 | if(!errInfo.isEmpty()) return ScriptState(ScriptState::S_ERROR, errInfo); |
| 43 | if(rets[0].type()!=QVariant::List || !rets[1].canConvert(QVariant::Int)) return ScriptState(ScriptState::S_ERROR, "Wrong Return Value Type"); |
| 44 | totalPage = rets[1].toInt(); |
| 45 | if(totalPage <= 0) totalPage = 1; |
| 46 | auto robjs = rets[0].toList(); //[{title=xx, <magnet=xx>, <time=xx>, <size=xx>, <url=xx>},...] |
| 47 | for(auto &r : robjs) |
| 48 | { |
| 49 | auto robj = r.toMap(); |
| 50 | QString title = robj.value("title").toString(); |
| 51 | if(title.isEmpty()) continue; |
| 52 | results.append({title, robj.value("time").toString(), robj.value("size").toString(), robj.value("magnet").toString(), robj.value("url").toString()}); |
| 53 | } |
| 54 | return ScriptState(ScriptState::S_NORM); |
| 55 | } |
| 56 | |
| 57 | ScriptState ResourceScript::getDetail(const ResourceItem &oldItem, ResourceItem &newItem, const QString &scene) |
| 58 | { |