X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Futils%2Farchiveorg.cpp;h=7be89ab9aebcfe3514085b0a5e64a97420b16845;hb=f41770656c58ffc541441d04a3845cd1005fcdcf;hp=af4a9778e4f23421b4fde5d4b47c586d73fd3bc4;hpb=9df342352ff68cdaa169b855d52c861cecc442e8;p=kdenlive diff --git a/src/utils/archiveorg.cpp b/src/utils/archiveorg.cpp index af4a9778..7be89ab9 100644 --- a/src/utils/archiveorg.cpp +++ b/src/utils/archiveorg.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include "kdenlivesettings.h" @@ -40,8 +41,9 @@ ArchiveOrg::ArchiveOrg(QListWidget *listWidget, QObject *parent) : m_previewProcess(new QProcess) { serviceType = ARCHIVEORG; - hasPreview = true; + hasPreview = false; hasMetadata = true; + inlineDownload = true; //connect(m_previewProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(slotPreviewStatusChanged(QProcess::ProcessState))); } @@ -55,7 +57,8 @@ void ArchiveOrg::slotStartSearch(const QString searchText, int page) m_listWidget->clear(); QString uri = "http://www.archive.org/advancedsearch.php?q="; uri.append(searchText); - uri.append("%20AND%20mediatype:MovingImage"); + uri.append("%20AND%20mediatype:movies");//MovingImage"); + uri.append("&fl%5B%5D=creator&fl%5B%5D=description&fl%5B%5D=identifier&fl%5B%5D=licenseurl&fl%5B%5D=title"); uri.append("&rows=30"); if (page > 1) uri.append("&page=" + QString::number(page)); uri.append("&output=json"); //&callback=callback&save=yes#raw"); @@ -96,7 +99,12 @@ void ArchiveOrg::slotShowResults(KJob* job) if (soundmap.contains("title")) { QListWidgetItem *item = new QListWidgetItem(soundmap.value("title").toString(), m_listWidget); item->setData(descriptionRole, soundmap.value("description").toString()); - item->setData(idRole, soundmap.value("identifier").toString()); + item->setData(idRole, soundmap.value("identifier").toString()); + QString author = soundmap.value("creator").toString(); + item->setData(authorRole, author); + if (author.startsWith("http")) item->setData(authorUrl, author); + item->setData(infoUrl, "http://archive.org/details/" + soundmap.value("identifier").toString()); + item->setData(downloadRole, "http://archive.org/download/" + soundmap.value("identifier").toString()); item->setData(licenseRole, soundmap.value("licenseurl").toString()); } } @@ -109,6 +117,7 @@ void ArchiveOrg::slotShowResults(KJob* job) #endif m_listWidget->blockSignals(false); m_listWidget->setCurrentRow(0); + emit searchDone(); } @@ -126,47 +135,54 @@ OnlineItemInfo ArchiveOrg::displayItemDetails(QListWidgetItem *item) info.infoUrl = item->data(infoUrl).toString(); info.author = item->data(authorRole).toString(); info.authorUrl = item->data(authorUrl).toString(); - m_metaInfo.insert(i18n("Duration"), item->data(durationRole).toString()); info.license = item->data(licenseRole).toString(); info.description = item->data(descriptionRole).toString(); - QString extraInfoUrl = item->data(infoData).toString(); + m_metaInfo.insert("url", info.itemDownload); + m_metaInfo.insert("id", info.itemId); + + QString extraInfoUrl = item->data(downloadRole).toString(); if (!extraInfoUrl.isEmpty()) { KJob* resolveJob = KIO::storedGet( KUrl(extraInfoUrl), KIO::NoReload, KIO::HideProgressInfo ); + resolveJob->setProperty("id", info.itemId); connect( resolveJob, SIGNAL( result( KJob* ) ), this, SLOT( slotParseResults( KJob* ) ) ); } - info.imagePreview = item->data(imageRole).toString(); return info; } void ArchiveOrg::slotParseResults(KJob* job) { -#ifdef USE_QJSON KIO::StoredTransferJob* storedQueryJob = static_cast( job ); - QJson::Parser parser; - bool ok; - QVariant data = parser.parse(storedQueryJob->data(), &ok); - if (data.canConvert(QVariant::Map)) { - QMap infos = data.toMap(); - //if (m_currentId != infos.value("id").toInt()) return; - if (infos.contains("samplerate")) - m_metaInfo.insert(i18n("Samplerate"), QString::number(infos.value("samplerate").toDouble())); - if (infos.contains("channels")) - m_metaInfo.insert(i18n("Channels"), QString::number(infos.value("channels").toInt())); - if (infos.contains("filesize")) { - KIO::filesize_t fSize = infos.value("filesize").toDouble(); - m_metaInfo.insert(i18n("File size"), KIO::convertSize(fSize)); - } - if (infos.contains("description")) { - m_metaInfo.insert("description", infos.value("description").toString()); + QDomDocument doc; + doc.setContent(QString::fromUtf8(storedQueryJob->data())); + QDomNodeList links = doc.elementsByTagName("a"); + QString html = QString(""; + QString link; + int ct = 0; + m_thumbsPath.clear(); + for (int i = 0; i < links.count(); i++) { + QString href = links.at(i).toElement().attribute("href"); + if (href.endsWith(".thumbs/")) { + // sub folder contains image thumbs, display one. + m_thumbsPath = m_metaInfo.value("url") + '/' + href; + KJob* thumbJob = KIO::storedGet( KUrl(m_thumbsPath), KIO::NoReload, KIO::HideProgressInfo ); + thumbJob->setProperty("id", m_metaInfo.value("id")); + connect( thumbJob, SIGNAL( result( KJob* ) ), this, SLOT( slotParseThumbs( KJob* ) ) ); } - if (infos.contains("license")) { - m_metaInfo.insert("license", infos.value("license").toString()); + else if (!href.contains('/') && !href.endsWith(".xml")) { + link = m_metaInfo.value("url") + '/' + href; + ct++; + if (ct %2 == 0) { + html += ""; + } + else html += ""; + html += "").arg(link).arg(i18n("Preview")).arg(link + "_import").arg(i18n("Import")); } } - emit gotMetaInfo(m_metaInfo); -#endif + html += "
" + KUrl(link).fileName() + QString("%2%4
"; + if (m_metaInfo.value("id") == job->property("id").toString()) emit gotMetaInfo(html); } @@ -183,7 +199,7 @@ bool ArchiveOrg::startItemPreview(QListWidgetItem *item) } -void ArchiveOrg::stopItemPreview(QListWidgetItem *item) +void ArchiveOrg::stopItemPreview(QListWidgetItem */*item*/) { if (m_previewProcess && m_previewProcess->state() != QProcess::NotRunning) { m_previewProcess->close(); @@ -202,3 +218,21 @@ QString ArchiveOrg::getDefaultDownloadName(QListWidgetItem *item) if (!item) return QString(); return item->text(); } + +void ArchiveOrg::slotParseThumbs(KJob* job) +{ + KIO::StoredTransferJob* storedQueryJob = static_cast( job ); + QDomDocument doc; + doc.setContent(QString::fromUtf8(storedQueryJob->data())); + QDomNodeList links = doc.elementsByTagName("a"); + if (links.isEmpty()) return; + for (int i = 0; i < links.count(); i++) { + QString href = links.at(i).toElement().attribute("href"); + if (!href.contains('/') && i >= links.count() / 2) { + QString thumbUrl = m_thumbsPath + href; + if (m_metaInfo.value("id") == job->property("id").toString()) + emit gotThumb(thumbUrl); + break; + } + } +}