void NetSearch::PopulateResultList(ResultItem::resultList list) { for (ResultItem::resultList::iterator i = list.begin(); i != list.end(); ++i) { QString title = (*i)->GetTitle(); MythUIButtonListItem *item = new MythUIButtonListItem(m_searchResultList, title, qVariantFromValue(*i)); InfoMap metadataMap; (*i)->toMap(metadataMap); item->SetTextFromMap(metadataMap); if (!(*i)->GetThumbnail().isEmpty()) { QString dlfile = (*i)->GetThumbnail(); if (dlfile.contains("%SHAREDIR%")) { dlfile.replace("%SHAREDIR%", GetShareDir()); item->SetImage(dlfile); } else { uint pos = m_searchResultList->GetItemPos(item); m_imageDownload->addThumb((*i)->GetTitle(), (*i)->GetThumbnail(), qVariantFromValue<uint>(pos)); } } } }
ResultItem::resultList getRSSArticles(const QString &feedtitle, ArticleType type) { ResultItem::resultList ret; MSqlQuery query(MSqlQuery::InitCon()); query.prepare("SELECT title, description, url, " "thumbnail, mediaURL, author, date, time, " "rating, filesize, player, playerargs, download, " "downloadargs, width, height, language, " "downloadable, countries, season, episode " "FROM internetcontentarticles " "WHERE feedtitle = :FEEDTITLE AND podcast = 1 " "AND type = :TYPE ORDER BY date DESC;"); query.bindValue(":FEEDTITLE", feedtitle); query.bindValue(":TYPE", type); if (!query.exec() || !query.isActive()) { MythDB::DBError("RSS find in db", query); return ret; } while (query.next()) { QString title = query.value(0).toString(); QString desc = query.value(1).toString(); QString URL = query.value(2).toString(); QString thumbnail = query.value(3).toString(); QString mediaURL = query.value(4).toString(); QString author = query.value(5).toString(); QDateTime date = query.value(6).toDateTime(); QString time = query.value(7).toString(); QString rating = query.value(8).toString(); off_t filesize = query.value(9).toULongLong(); QString player = query.value(10).toString(); QStringList playerargs = query.value(11).toString().split(" "); QString download = query.value(12).toString(); QStringList downloadargs = query.value(13).toString().split(" "); uint width = query.value(14).toUInt(); uint height = query.value(15).toUInt(); QString language = query.value(16).toString(); bool downloadable = query.value(17).toBool(); QStringList countries = query.value(18).toString().split(" "); uint season = query.value(19).toUInt(); uint episode = query.value(20).toUInt(); ret.append(new ResultItem(title, QString(), desc, URL, thumbnail, mediaURL, author, date, time, rating, filesize, player, playerargs, download, downloadargs, width, height, language, downloadable, countries, season, episode, false)); } return ret; }
void GrabberScript::parseDBTree(const QString &feedtitle, const QString &path, const QString &pathThumb, QDomElement& domElem, const ArticleType &type) { QMutexLocker locker(&m_lock); Parse parse; ResultItem::resultList articles; // File Handling QDomElement fileitem = domElem.firstChildElement("item"); while (!fileitem.isNull()) { // Fill the article list... articles.append(parse.ParseItem(fileitem)); fileitem = fileitem.nextSiblingElement("item"); } while (!articles.isEmpty()) { // Insert the articles in the DB... insertTreeArticleInDB(feedtitle, path, pathThumb, articles.takeFirst(), type); } // Directory Handling QDomElement diritem = domElem.firstChildElement("directory"); while (!diritem.isNull()) { QDomElement subfolder = diritem; QString dirname = diritem.attribute("name"); QString dirthumb = diritem.attribute("thumbnail"); dirname.replace("/", "|"); QString pathToUse; if (path.isEmpty()) pathToUse = dirname; else pathToUse = QString("%1/%2").arg(path).arg(dirname); parseDBTree(feedtitle, pathToUse, dirthumb, subfolder, type); diritem = diritem.nextSiblingElement("directory"); } }
void RSSManager::processAndInsertRSS(RSSSite *site) { if (!site) return; clearRSSArticles(site->GetTitle(), site->GetType()); ResultItem::resultList rss = site->GetVideoList(); ResultItem::resultList::iterator it = rss.begin(); for (; it != rss.end(); ++it) { // Insert in the DB here. insertRSSArticleInDB(site->GetTitle(), *it, site->GetType()); m_inprogress.removeOne(site); } if (!m_inprogress.count()) emit finished(); }
void NetTree::fillTree() { // First let's add all the RSS m_rssGeneric = new MythGenericTree( RSSNode, kSubFolder, false); // Add an upfolder if (m_type != DLG_TREE) { m_rssGeneric->addNode(QString(tr("Back")), kUpFolder, true, false); } m_rssGeneric->SetData(QString("%1/mythnetvision/icons/rss.png") .arg(GetShareDir())); RSSSite::rssList::iterator i = m_rssList.begin(); for (; i != m_rssList.end(); ++i) { ResultItem::resultList items = getRSSArticles((*i)->GetTitle(), VIDEO_PODCAST); MythGenericTree *ret = new MythGenericTree( (*i)->GetTitle(), kSubFolder, false); ret->SetData(qVariantFromValue(*i)); m_rssGeneric->addNode(ret); // Add an upfolder if (m_type != DLG_TREE) { ret->addNode(QString(tr("Back")), kUpFolder, true, false); } ResultItem::resultList::iterator it = items.begin(); for (; it != items.end(); ++it) { AddFileNode(ret, *it); } } if (m_rssList.count() > 0) m_siteGeneric->addNode(m_rssGeneric); else { delete m_rssGeneric; m_rssGeneric = NULL; } // Now let's add all the grabber trees for (GrabberScript::scriptList::iterator i = m_grabberList.begin(); i != m_grabberList.end(); ++i) { QMultiMap<QPair<QString,QString>, ResultItem*> treePathsNodes = getTreeArticles((*i)->GetTitle(), VIDEO_FILE); QList< QPair<QString,QString> > paths = treePathsNodes.uniqueKeys(); MythGenericTree *ret = new MythGenericTree( (*i)->GetTitle(), kSubFolder, false); QString thumb = QString("%1mythnetvision/icons/%2").arg(GetShareDir()) .arg((*i)->GetImage()); ret->SetData(qVariantFromValue(thumb)); // Add an upfolder if (m_type != DLG_TREE) { ret->addNode(QString(tr("Back")), kUpFolder, true, false); } for (QList<QPair<QString, QString> >::iterator i = paths.begin(); i != paths.end(); ++i) { QStringList curPaths = (*i).first.split("/"); QString dirthumb = (*i).second; QList<ResultItem*> videos = treePathsNodes.values(*i); buildGenericTree(ret, curPaths, dirthumb, videos); } m_siteGeneric->addNode(ret); } }