| 331 | } |
| 332 | |
| 333 | Anime *Anime::fromMap(const QVariantMap &aobj) |
| 334 | { |
| 335 | const QString name = aobj.value("name").toString(), |
| 336 | airdate=aobj.value("airDate").toString(); |
| 337 | if (name.isEmpty() || airdate.isEmpty()) return nullptr; |
| 338 | Anime *anime = new Anime; |
| 339 | anime->_name = name; |
| 340 | anime->_desc = aobj.value("desc").toString(); |
| 341 | anime->_url = aobj.value("url").toString(); |
| 342 | anime->_coverURL = aobj.value("coverUrl").toString(); |
| 343 | anime->_scriptId = aobj.value("scriptId").toString(); |
| 344 | anime->_scriptData = aobj.value("data").toString(); |
| 345 | anime->_airDate = airdate; |
| 346 | anime->_epCount = aobj.value("epCount", 0).toInt(); |
| 347 | if (aobj.contains("staff")) |
| 348 | { |
| 349 | QString staffstr = aobj.value("staff").toString(); |
| 350 | auto strs = staffstr.split(';', Qt::SkipEmptyParts); |
| 351 | for (const auto &s : qAsConst(strs)) |
| 352 | { |
| 353 | int pos = s.indexOf(':'); |
| 354 | anime->staff.append({s.mid(0, pos), s.mid(pos+1)}); |
| 355 | } |
| 356 | } |
| 357 | if (aobj.contains("crt") && aobj.value("crt").type() == QVariant::List) |
| 358 | { |
| 359 | auto crts = aobj.value("crt").toList(); |
| 360 | for (auto &c : crts) |
| 361 | { |
| 362 | if (c.type()!=QVariant::Map) continue; |
| 363 | auto cobj = c.toMap(); |
| 364 | QString cname = cobj.value("name").toString(); |
| 365 | if(cname.isEmpty()) continue; |
| 366 | Character crt; |
| 367 | crt.name = cname; |
| 368 | crt.actor = cobj.value("actor").toString(); |
| 369 | crt.link = cobj.value("link").toString(); |
| 370 | crt.imgURL = cobj.value("imgurl").toString(); |
| 371 | anime->characters.append(crt); |
| 372 | } |
| 373 | } |
| 374 | return anime; |
| 375 | } |
| 376 | |
| 377 | Anime *AnimeLite::toAnime() const |
| 378 | { |