MCPcopy Create free account
hub / github.com/KikoPlayProject/KikoPlay / search

Method search

Extension/Script/libraryscript.cpp:40–93  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38}
39
40ScriptState LibraryScript::search(const QString &keyword, QList<AnimeLite> &results)
41{
42 MutexLocker locker(scriptLock);
43 if(!locker.tryLock()) return ScriptState(ScriptState::S_BUSY);
44 QString errInfo;
45 QVariantList params{keyword};
46 addSearchOptions(params);
47 QVariantList rets = call(searchFunc, params, 1, errInfo);
48 if(!errInfo.isEmpty()) return ScriptState(ScriptState::S_ERROR, errInfo);
49 if(rets[0].type()!=QVariant::List) return ScriptState(ScriptState::S_ERROR, "Wrong Return Value Type");
50 auto robjs = rets[0].toList(); //[{name=xx, data=xx, <extra=xx>, <eps=[{index=number, name=xx, <type=xx(1:ep, 2:sp, ...,7=other)>, }]>},...]
51 for(auto &r : robjs)
52 {
53 auto robj = r.toMap();
54 QString name = robj.value("name").toString(), scriptData = robj.value("data").toString();
55 if(name.isEmpty()) continue;
56 AnimeLite ab;
57 ab.name = name;
58 ab.extras = robj.value("extra").toString();
59 ab.scriptId = robj.contains("scriptId")?robj.value("scriptId").toString():id();
60 ab.scriptData = robj.value("data").toString();
61 if(robj.contains("eps") && robj.value("eps").type()==QVariant::List)
62 {
63 QVector<EpInfo> *epList = new QVector<EpInfo>;
64 auto eps = robj.value("eps").toList();
65 QMap<EpType, QPair<double, QSet<double>>> reOrderMap;
66 for(auto e: eps)
67 {
68 auto epobj = e.toMap();
69 double index = epobj.value("index", -1).toDouble();
70 QString epName = epobj.value("name").toString();
71 if(index<0) continue;
72 EpInfo ep;
73 ep.name = epName; ep.index = index;
74 ep.type = EpType(qBound(1, epobj.value("type", 1).toInt(), int(EpType::Other)));
75 if(!reOrderMap.contains(ep.type))
76 {
77 reOrderMap.insert(ep.type, {1, QSet<double>()});
78 }
79 if(reOrderMap[ep.type].second.contains(ep.index))
80 {
81 ep.index = reOrderMap[ep.type].first + 1;
82 }
83 reOrderMap[ep.type].first = qMax(reOrderMap[ep.type].first, ep.index);
84 reOrderMap[ep.type].second.insert(ep.index);
85 epList->append(ep);
86 }
87 std::sort(epList->begin(), epList->end());
88 ab.epList.reset(epList);
89 }
90 results.append(ab);
91 }
92 return ScriptState(ScriptState::S_NORM);
93}
94
95ScriptState LibraryScript::getDetail(const AnimeLite &base, Anime *anime)
96{

Callers

nothing calls this directly

Calls 15

ScriptStateClass · 0.85
sortFunction · 0.85
valueMethod · 0.80
EpTypeEnum · 0.50
tryLockMethod · 0.45
isEmptyMethod · 0.45
typeMethod · 0.45
toMapMethod · 0.45
toStringMethod · 0.45
containsMethod · 0.45
insertMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected