]> git.sur5r.net Git - minitube/blobdiff - src/ytjs/ytjssearch.cpp
New upstream version 3.6.1
[minitube] / src / ytjs / ytjssearch.cpp
index c5a5031ff1a87adb511333748d78a26f1dcf09cd..b6413e31b69296a2c0f9927e05ce6a755367afc6 100644 (file)
@@ -31,6 +31,28 @@ QString parseChannelId(const QString &channelUrl) {
     return QString();
 }
 
+QDateTime parsePublishedText(const QString &s) {
+    int num = 0;
+    const auto parts = s.splitRef(' ');
+    for (const auto &part : parts) {
+        num = part.toInt();
+        if (num > 0) break;
+    }
+    if (num == 0) return QDateTime();
+
+    auto now = QDateTime::currentDateTimeUtc();
+    if (s.contains("day")) {
+        return now.addDays(-num);
+    } else if (s.contains("week")) {
+        return now.addDays(-num * 7);
+    } else if (s.contains("month")) {
+        return now.addMonths(-num);
+    } else if (s.contains("year")) {
+        return now.addDays(-num * 365);
+    }
+    return QDateTime();
+}
+
 } // namespace
 
 YTJSSearch::YTJSSearch(SearchParams *searchParams, QObject *parent)
@@ -141,6 +163,12 @@ void YTJSSearch::loadVideos(int max, int startIndex) {
 
         auto obj = doc.object();
 
+        /*
+        QFile jsonFile("/Users/flavio/test.json");
+        jsonFile.open(QFile::WriteOnly);
+        jsonFile.write(doc.toJson());
+        */
+
         nextpageRef = obj["nextpageRef"].toString();
 
         const auto items = obj["items"].toArray();
@@ -171,6 +199,9 @@ void YTJSSearch::loadVideos(int max, int startIndex) {
             int duration = parseDuration(i["duration"].toString());
             video->setDuration(duration);
 
+            auto published = parsePublishedText(i["uploaded_at"].toString());
+            if (published.isValid()) video->setPublished(published);
+
             auto authorObj = i["author"];
             QString channelName = authorObj["name"].toString();
             video->setChannelTitle(channelName);