]> git.sesse.net Git - kdenlive/blobdiff - src/utils/archiveorg.cpp
Use KLocalizedString (for i18n only, in kf5 it will necessary => use a script for...
[kdenlive] / src / utils / archiveorg.cpp
index af4a9778e4f23421b4fde5d4b47c586d73fd3bc4..357b9b82a43e22021500813e608eb58e14f7f56e 100644 (file)
 #include <QSpinBox>
 #include <QListWidget>
 #include <QDomDocument>
+#include <QApplication>
 
 #include <KDebug>
 #include "kdenlivesettings.h"
 #include <kio/job.h>
-#include <KLocale>
+#include <KLocalizedString>
 
 #ifdef USE_QJSON
 #include <qjson/parser.h>
@@ -40,28 +41,30 @@ 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)));
 }
 
 ArchiveOrg::~ArchiveOrg()
 {
-    if (m_previewProcess) delete m_previewProcess;
+    delete m_previewProcess;
 }
 
-void ArchiveOrg::slotStartSearch(const QString searchText, int page)
+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");
 
     KJob* resolveJob = KIO::storedGet( KUrl(uri), KIO::NoReload, KIO::HideProgressInfo );
-    connect( resolveJob, SIGNAL( result( KJob* ) ), this, SLOT( slotShowResults( KJob* ) ) );
+    connect( resolveJob, SIGNAL(result(KJob*)), this, SLOT(slotShowResults(KJob*)) );
 }
 
 
@@ -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 );
-        connect( resolveJob, SIGNAL( result( KJob* ) ), this, SLOT( slotParseResults( KJob* ) ) );
+        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<KIO::StoredTransferJob*>( job );
-    QJson::Parser parser;
-    bool ok;
-    QVariant data = parser.parse(storedQueryJob->data(), &ok);
-    if (data.canConvert(QVariant::Map)) {
-        QMap <QString, QVariant> 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));
+    QDomDocument doc;
+    doc.setContent(QString::fromUtf8(storedQueryJob->data()));
+    QDomNodeList links = doc.elementsByTagName("a");
+    QString html = QString("<style type=\"text/css\">tr.cellone {background-color: %1;}").arg(qApp->palette().alternateBase().color().name());
+    html += "</style><table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\">";
+    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("description")) {
-            m_metaInfo.insert("description", infos.value("description").toString());
-        }
-        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 += "<tr class=\"cellone\">";
+            }
+            else html += "<tr>";
+            html += "<td>" + KUrl(link).fileName() + QString("</td><td><a href=\"%1\">%2</a></td><td><a href=\"%3\">%4</a></td></tr>").arg(link).arg(i18n("Preview")).arg(link + "_import").arg(i18n("Import"));
         }
     }
-    emit gotMetaInfo(m_metaInfo);
-#endif    
+    html += "</table>";
+    if (m_metaInfo.value("id") == job->property("id").toString()) emit gotMetaInfo(html);
 }
 
 
@@ -178,12 +194,12 @@ bool ArchiveOrg::startItemPreview(QListWidgetItem *item)
     if (m_previewProcess && m_previewProcess->state() != QProcess::NotRunning) {
         m_previewProcess->close();
     }
-    m_previewProcess->start("ffplay", QStringList() << url << "-nodisp");
+    m_previewProcess->start(KdenliveSettings::ffplaypath(), QStringList() << url << "-nodisp");
     return true;
 }
 
 
-void ArchiveOrg::stopItemPreview(QListWidgetItem *item)
+void ArchiveOrg::stopItemPreview(QListWidgetItem */*item*/)
 {    
     if (m_previewProcess && m_previewProcess->state() != QProcess::NotRunning) {
         m_previewProcess->close();
@@ -202,3 +218,23 @@ QString ArchiveOrg::getDefaultDownloadName(QListWidgetItem *item)
     if (!item) return QString();
     return item->text();
 }
+
+void ArchiveOrg::slotParseThumbs(KJob* job)
+{
+    KIO::StoredTransferJob* storedQueryJob = static_cast<KIO::StoredTransferJob*>( 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;
+        }
+    }
+}
+
+#include "archiveorg.moc"