| 18 | } |
| 19 | |
| 20 | ScriptState MatchScript::match(const QString &path, MatchResult &result) |
| 21 | { |
| 22 | MutexLocker locker(scriptLock); |
| 23 | if(!locker.tryLock()) return ScriptState(ScriptState::S_BUSY); |
| 24 | QString errInfo; |
| 25 | QVariantList rets = call(matchFunc, {path}, 1, errInfo); |
| 26 | if(!errInfo.isEmpty()) return ScriptState(ScriptState::S_ERROR, errInfo); |
| 27 | if(rets[0].metaType().id() != QMetaType::QVariantMap) return ScriptState(ScriptState::S_ERROR, "Wrong Return Value Type"); |
| 28 | auto m = rets[0].toMap(); //{success=xx, anime={name=xx,data=xx}, ep={name=xx, index=number, <type=xx>}} |
| 29 | do |
| 30 | { |
| 31 | if (!m.value("success", false).toBool()) break; |
| 32 | if (!m.contains("anime") || !m.contains("ep")) break; |
| 33 | auto anime = m.value("anime"), ep = m.value("ep"); |
| 34 | if (anime.metaType().id() != QMetaType::QVariantMap || ep.metaType().id() != QMetaType::QVariantMap) break; |
| 35 | auto aobj = anime.toMap(), epobj = ep.toMap(); |
| 36 | QString animeName = aobj.value("name").toString(); |
| 37 | QString scriptData = aobj.value("data").toString(); |
| 38 | QString scriptId = aobj.value("scriptId").toString(); |
| 39 | QString epName = epobj.value("name").toString(); |
| 40 | double epIndex = epobj.value("index", -1).toDouble(); |
| 41 | if (animeName.isEmpty() || epName.isEmpty() || epIndex < 0) break; |
| 42 | result.success = true; |
| 43 | result.name = animeName; |
| 44 | if (!scriptData.isEmpty() && !scriptId.isEmpty()) |
| 45 | { |
| 46 | result.scriptId = scriptId; |
| 47 | result.scriptData = scriptData; |
| 48 | } |
| 49 | EpInfo &epinfo = result.ep; |
| 50 | epinfo.localFile = path; |
| 51 | epinfo.index = epIndex; epinfo.name = epName; |
| 52 | epinfo.type = EpType(qBound(1, epobj.value("type", 1).toInt(), int(EpType::Other))); |
| 53 | return ScriptState(ScriptState::S_NORM); |
| 54 | } while (false); |
| 55 | result.success = false; |
| 56 | return ScriptState(ScriptState::S_NORM); |
| 57 | } |