Hello community,

here is the log from the commit of package minitube for openSUSE:Factory 
checked in at 2020-11-25 19:30:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/minitube (Old)
 and      /work/SRC/openSUSE:Factory/.minitube.new.5913 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "minitube"

Wed Nov 25 19:30:19 2020 rev:21 rq:850687 version:3.6.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/minitube/minitube.changes        2020-11-12 
22:49:40.598785966 +0100
+++ /work/SRC/openSUSE:Factory/.minitube.new.5913/minitube.changes      
2020-11-25 19:31:09.946604452 +0100
@@ -1,0 +2,6 @@
+Tue Nov 24 19:45:58 UTC 2020 - Carsten Ziepke <[email protected]>
+
+- Update to version 3.6.6
+  - handle thumb loading error
+
+-------------------------------------------------------------------

Old:
----
  minitube-3.6.5.tar.xz

New:
----
  minitube-3.6.6.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ minitube.spec ++++++
--- /var/tmp/diff_new_pack.jmhhZv/_old  2020-11-25 19:31:10.426604925 +0100
+++ /var/tmp/diff_new_pack.jmhhZv/_new  2020-11-25 19:31:10.430604928 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           minitube
-Version:        3.6.5
+Version:        3.6.6
 Release:        0
 Summary:        Native YouTube Client
 License:        GPL-3.0-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.jmhhZv/_old  2020-11-25 19:31:10.458604956 +0100
+++ /var/tmp/diff_new_pack.jmhhZv/_new  2020-11-25 19:31:10.458604956 +0100
@@ -4,7 +4,7 @@
     <param name="url">https://github.com/flaviotordini/minitube.git</param>
     <param name="filename">minitube</param>
     <param name="versionformat">@PARENT_TAG@</param>
-    <param name="revision">3.6.5</param>
+    <param name="revision">3.6.6</param>
   </service>
   <service mode="disabled" name="recompress">
     <param name="file">*.tar</param>

++++++ minitube-3.6.5.tar.xz -> minitube-3.6.6.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/README.md new/minitube-3.6.6/README.md
--- old/minitube-3.6.5/README.md        2020-10-26 19:16:19.000000000 +0100
+++ new/minitube-3.6.6/README.md        2020-11-21 22:20:22.000000000 +0100
@@ -14,7 +14,7 @@
 
     git clone --recursive https://github.com/flaviotordini/minitube.git
 
-You need Qt >= 5.10 and MPV >= 0.29.0. The following Qt modules are needed: 
core, gui, widgets, network, sql (using the Sqlite plugin), declarative, dbus, 
x11extras.
+You need Qt >= 5.12 and MPV >= 0.29.0. The following Qt modules are needed: 
core, gui, widgets, network, sql (using the Sqlite plugin), declarative, dbus, 
x11extras.
 
 To be able to build on a Debian (or derivative) system:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/lib/js/js.cpp 
new/minitube-3.6.6/lib/js/js.cpp
--- old/minitube-3.6.5/lib/js/js.cpp    2020-10-26 19:16:19.000000000 +0100
+++ new/minitube-3.6.6/lib/js/js.cpp    2020-11-21 22:20:22.000000000 +0100
@@ -1,14 +1,12 @@
 #include "js.h"
 
-#include "jsnamfactory.h"
-
 #include "cachedhttp.h"
 
 namespace {
 Http &cachedHttp() {
     static Http *h = [] {
         CachedHttp *cachedHttp = new CachedHttp(Http::instance(), "js");
-        cachedHttp->setMaxSeconds(3600 * 6);
+        cachedHttp->setMaxSeconds(3600);
         // Avoid expiring the cached js
         cachedHttp->setMaxSize(0);
 
@@ -85,12 +83,18 @@
 
     if (engine) engine->deleteLater();
     engine = new QQmlEngine(this);
-    engine->setNetworkAccessManagerFactory(new JSNAMFactory);
+    engine->setNetworkAccessManagerFactory(&namFactory);
     engine->globalObject().setProperty("global", engine->globalObject());
 
     QJSValue timer = engine->newQObject(new JSTimer(engine));
+    engine->globalObject().setProperty("setTimeoutQt", 
timer.property("setTimeout"));
+    QJSValue setTimeoutWrapperFunction =
+            engine->evaluate("function setTimeout(cb, delay) {"
+                             "const args = 
Array.prototype.slice.call(arguments, 2);"
+                             "return setTimeoutQt(cb, delay, args);"
+                             "}");
+    checkError(setTimeoutWrapperFunction);
     engine->globalObject().setProperty("clearTimeout", 
timer.property("clearTimeout"));
-    engine->globalObject().setProperty("setTimeout", 
timer.property("setTimeout"));
 
     connect(cachedHttp().get(url), &HttpReply::finished, this, [this](auto 
&reply) {
         if (!reply.isSuccessful()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/lib/js/js.h 
new/minitube-3.6.6/lib/js/js.h
--- old/minitube-3.6.5/lib/js/js.h      2020-10-26 19:16:19.000000000 +0100
+++ new/minitube-3.6.6/lib/js/js.h      2020-11-21 22:20:22.000000000 +0100
@@ -3,6 +3,7 @@
 
 #include <QtQml>
 
+#include "jsnamfactory.h"
 #include "jsresult.h"
 
 class JSTimer : public QTimer {
@@ -24,14 +25,26 @@
         return QJSValue();
     }
     // This should be static but cannot bind static functions to QJSEngine
-    Q_INVOKABLE QJSValue setTimeout(QJSValue callback, QJSValue delayTime) {
-        // qDebug() << callback.toString() << delayTime.toInt();
+    Q_INVOKABLE QJSValue setTimeout(QJSValue callback, QJSValue delayTime, 
QJSValue args) {
+        // qDebug() << callback.toString() << delayTime.toInt() << 
args.toString();
+
+        QJSValueList valueArgs;
+        if (args.isArray()) {
+            const int argsLength = args.property("length").toInt();
+            for (int i = 0; i < argsLength; ++i) {
+                auto arg = args.property(i);
+                qDebug() << "Adding arg" << arg.toString();
+                valueArgs << arg;
+            }
+        }
+
         auto timer = new JSTimer();
         timer->setInterval(delayTime.toInt());
-        connect(timer, &JSTimer::timeout, this, [callback]() mutable {
+
+        connect(timer, &JSTimer::timeout, timer, [callback, valueArgs]() 
mutable {
             qDebug() << "Calling" << callback.toString();
             if (!callback.isCallable()) qDebug() << callback.toString() << "is 
not callable";
-            auto value = callback.call();
+            auto value = callback.call(valueArgs);
             if (value.isError()) {
                 qWarning() << "Error" << value.toString();
                 qDebug() << value.property("stack").toString().splitRef('\n');
@@ -62,6 +75,8 @@
     static JS &instance();
 
     explicit JS(QObject *parent = nullptr);
+    JSNAMFactory &getNamFactory() { return namFactory; };
+
     void initialize(const QUrl &url);
     bool checkError(const QJSValue &value);
 
@@ -78,6 +93,7 @@
     void initialize();
 
     QQmlEngine *engine;
+    JSNAMFactory namFactory;
     bool initializing = false;
     bool ready = false;
     QUrl url;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/lib/js/jsnamfactory.cpp 
new/minitube-3.6.6/lib/js/jsnamfactory.cpp
--- old/minitube-3.6.5/lib/js/jsnamfactory.cpp  2020-10-26 19:16:19.000000000 
+0100
+++ new/minitube-3.6.6/lib/js/jsnamfactory.cpp  2020-11-21 22:20:22.000000000 
+0100
@@ -24,16 +24,19 @@
     auto headers = meta2.rawHeaders();
     for (auto i = headers.begin(); i != headers.end(); ++i) {
         // qDebug() << i->first << i->second;
-        if (i->first == "Cache-Control" || i->first == "Expires") {
+        static const QVector<QByteArray> headersToRemove{"Cache-Control", 
"Expires", "Pragma"};
+        if (headersToRemove.contains(i->first)) {
             qDebug() << "Removing" << i->first << i->second;
             headers.erase(i);
         }
     }
+    meta2.setRawHeaders(headers);
 
     return meta2;
 }
 
-JSNAM::JSNAM(QObject *parent) : QNetworkAccessManager(parent) {
+JSNAM::JSNAM(QObject *parent, const JSNAMFactory &factory)
+    : QNetworkAccessManager(parent), factory(factory) {
     auto cache = new JSDiskCache(this);
     
cache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)
 +
                              "/js");
@@ -50,13 +53,16 @@
     auto req2 = request;
     req2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, 
QNetworkRequest::PreferCache);
 
-    // TODO maybe set user agent
+    auto end = factory.getRequestHeaders().cend();
+    for (auto i = factory.getRequestHeaders().cbegin(); i != end; ++i) {
+        req2.setRawHeader(i.key(), i.value());
+    }
 
-    qDebug() << req2.url();
+    qDebug() << req2.url() << req2.rawHeaderList();
     return QNetworkAccessManager::createRequest(op, req2, outgoingData);
 }
 
 QNetworkAccessManager *JSNAMFactory::create(QObject *parent) {
     qDebug() << "Creating NAM";
-    return new JSNAM(parent);
+    return new JSNAM(parent, *this);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/lib/js/jsnamfactory.h 
new/minitube-3.6.6/lib/js/jsnamfactory.h
--- old/minitube-3.6.5/lib/js/jsnamfactory.h    2020-10-26 19:16:19.000000000 
+0100
+++ new/minitube-3.6.6/lib/js/jsnamfactory.h    2020-11-21 22:20:22.000000000 
+0100
@@ -3,30 +3,39 @@
 
 #include <QtQml>
 
-class JSDiskCache : public QNetworkDiskCache {
+class JSNAMFactory : public QQmlNetworkAccessManagerFactory {
 public:
-    JSDiskCache(QObject *parent);
-    void updateMetaData(const QNetworkCacheMetaData &meta);
-    QIODevice *prepare(const QNetworkCacheMetaData &meta);
+    QNetworkAccessManager *create(QObject *parent);
+
+    void setRequestHeaders(QMap<QByteArray, QByteArray> value) { 
requestHeaders = value; };
+    const QMap<QByteArray, QByteArray> &getRequestHeaders() const { return 
requestHeaders; }
 
 private:
-    QNetworkCacheMetaData fixMetadata(const QNetworkCacheMetaData &meta);
+    QMap<QByteArray, QByteArray> requestHeaders;
 };
 
 class JSNAM : public QNetworkAccessManager {
     Q_OBJECT
 
 public:
-    JSNAM(QObject *parent);
+    JSNAM(QObject *parent, const JSNAMFactory &factory);
 
 protected:
     QNetworkReply *
     createRequest(Operation op, const QNetworkRequest &request, QIODevice 
*outgoingData);
+
+private:
+    const JSNAMFactory &factory;
 };
 
-class JSNAMFactory : public QQmlNetworkAccessManagerFactory {
+class JSDiskCache : public QNetworkDiskCache {
 public:
-    QNetworkAccessManager *create(QObject *parent);
+    JSDiskCache(QObject *parent);
+    void updateMetaData(const QNetworkCacheMetaData &meta);
+    QIODevice *prepare(const QNetworkCacheMetaData &meta);
+
+private:
+    QNetworkCacheMetaData fixMetadata(const QNetworkCacheMetaData &meta);
 };
 
 #endif // YTJSNAMFACTORY_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/lib/updater/marketplace.json 
new/minitube-3.6.6/lib/updater/marketplace.json
--- old/minitube-3.6.5/lib/updater/marketplace.json     1970-01-01 
01:00:00.000000000 +0100
+++ new/minitube-3.6.6/lib/updater/marketplace.json     2020-11-21 
22:20:22.000000000 +0100
@@ -0,0 +1,48 @@
+{
+    "$schema": "http://qt.io/schema/extension-schema-v1#";,
+    "title": "Updater",
+    "extensionType": [
+        "library"
+    ],
+    "version": "1",
+    "vendor": {
+        "name": "Flavio Tordini",
+        "url": "https://flavio.tordini.org";
+    },
+    "contact": "Flavio Tordini <[email protected]>",
+    "copyright": [
+        "Flavio Tordini"
+    ],
+    "author": "Flavio Tordini",
+    "icon": "https://flavio.tordini.org/favicon-196x196.png";,
+    "licenses": [
+        {
+            "licenseType": "GPLv3",
+            "licenseUrl": "https://opensource.org/licenses/GPL-3.0";
+        }
+    ],
+    "created": "2020-07-03",
+    "platforms": [
+        "Windows",
+        "Linux",
+        "macOS"
+    ],
+    "qtVersions": [
+        "5.10.0-or-later"
+    ],
+    "tags": [
+        "updater,update,deploy,release,tools,utility"
+    ],
+    "price": {
+        "listprice": 0
+    },
+    "support": "[email protected]",
+    "bugUrl": "https://github.com/flaviotordini/updater/issues";,
+    "sourceRepoUrl": "https://github.com/flaviotordini/updater";,
+    "userManuals": [
+        "https://github.com/flaviotordini/updater/blob/master/README.md";
+    ],
+    "dependencies": [
+        "Network"
+    ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/minitube.pro 
new/minitube-3.6.6/minitube.pro
--- old/minitube-3.6.5/minitube.pro     2020-10-26 19:16:19.000000000 +0100
+++ new/minitube-3.6.6/minitube.pro     2020-11-21 22:20:22.000000000 +0100
@@ -1,7 +1,7 @@
 CONFIG += c++17 exceptions_off rtti_off optimize_full object_parallel_to_source
 
 TEMPLATE = app
-VERSION = 3.6.5
+VERSION = 3.6.6
 DEFINES += APP_VERSION="$$VERSION"
 
 APP_NAME = Minitube
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/src/invidious/invidious.cpp 
new/minitube-3.6.6/src/invidious/invidious.cpp
--- old/minitube-3.6.5/src/invidious/invidious.cpp      2020-10-26 
19:16:19.000000000 +0100
+++ new/minitube-3.6.6/src/invidious/invidious.cpp      2020-11-21 
22:20:22.000000000 +0100
@@ -41,7 +41,7 @@
         throttledHttp->setMilliseconds(500);
 
         CachedHttp *cachedHttp = new CachedHttp(*throttledHttp, "iv");
-        cachedHttp->setMaxSeconds(86400);
+        cachedHttp->setMaxSeconds(3600);
         cachedHttp->setIgnoreHostname(true);
 
         cachedHttp->getValidators().insert("application/json", [](const auto 
&reply) -> bool {
@@ -102,7 +102,6 @@
                 QJsonObject serverObj = serverArray.at(1).toObject();
                 if (serverObj["type"] == "https") {
                     QString url = "https://"; + host;
-
                     QUrl testUrl(url + "/api/v1/search?q=" + testKeyword);
                     auto reply = http().get(testUrl);
                     connect(reply, &HttpReply::finished, this, [this, 
url](auto &reply) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/src/mainwindow.cpp 
new/minitube-3.6.6/src/mainwindow.cpp
--- old/minitube-3.6.5/src/mainwindow.cpp       2020-10-26 19:16:19.000000000 
+0100
+++ new/minitube-3.6.6/src/mainwindow.cpp       2020-11-21 22:20:22.000000000 
+0100
@@ -169,7 +169,9 @@
     } else if (VideoAPI::impl() == VideoAPI::YT3) {
         YT3::instance().initApiKeys();
     } else if (VideoAPI::impl() == VideoAPI::JS) {
-        JS::instance().initialize(QUrl(QLatin1String(Constants::WEBSITE) + 
"-ws/bundle.js"));
+        JS::instance().getNamFactory().setRequestHeaders(
+                {{"User-Agent", HttpUtils::stealthUserAgent()}});
+        JS::instance().initialize(QUrl(QLatin1String(Constants::WEBSITE) + 
"-ws/bundle2.js"));
         Invidious::instance().initServers();
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/src/video.cpp 
new/minitube-3.6.6/src/video.cpp
--- old/minitube-3.6.5/src/video.cpp    2020-10-26 19:16:19.000000000 +0100
+++ new/minitube-3.6.6/src/video.cpp    2020-11-21 22:20:22.000000000 +0100
@@ -84,8 +84,12 @@
 void Video::loadThumbnail() {
     if (thumbnailUrl.isEmpty() || loadingThumbnail) return;
     loadingThumbnail = true;
-    QObject *reply = HttpUtils::yt().get(thumbnailUrl);
+    auto reply = HttpUtils::yt().get(thumbnailUrl);
     connect(reply, SIGNAL(data(QByteArray)), SLOT(setThumbnail(QByteArray)));
+    connect(reply, &HttpReply::error, this, [this](auto &msg) {
+        qWarning() << msg;
+        loadingThumbnail = false;
+    });
 }
 
 void Video::setDuration(int value) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minitube-3.6.5/src/ytjs/ytjssearch.cpp 
new/minitube-3.6.6/src/ytjs/ytjssearch.cpp
--- old/minitube-3.6.5/src/ytjs/ytjssearch.cpp  2020-10-26 19:16:19.000000000 
+0100
+++ new/minitube-3.6.6/src/ytjs/ytjssearch.cpp  2020-11-21 22:20:22.000000000 
+0100
@@ -78,7 +78,15 @@
 
     QJSValue options = engine.newObject();
 
-    if (startIndex > 1 && !nextpageRef.isEmpty()) 
options.setProperty("nextpageRef", nextpageRef);
+    if (startIndex > 1) {
+        if (!nextpageRef.isEmpty())
+            options.setProperty("nextpageRef", nextpageRef);
+        else {
+            // non-first page was requested but we have no continuation token
+            emit error("No pagination token");
+            return;
+        }
+    }
     options.setProperty("limit", max);
 
     switch (searchParams->safeSearch()) {
_______________________________________________
openSUSE Commits mailing list -- [email protected]
To unsubscribe, email [email protected]
List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette
List Archives: 
https://lists.opensuse.org/archives/list/[email protected]

Reply via email to