]> git.sur5r.net Git - minitube/blobdiff - src/yt3.cpp
Upload 3.9.3-2 to unstable
[minitube] / src / yt3.cpp
index b42e204a03c6e2cd1444d41c36e1515935cc27f0..dcd21332d9687a97f891af25433ede5272d224c9 100644 (file)
@@ -3,10 +3,12 @@
 #include <algorithm>
 #include <ctime>
 
-#include "jsfunctions.h"
-#include "networkaccess.h"
 #include "constants.h"
-#include "compatibility/qurlqueryhelper.h"
+#include "http.h"
+#include "httputils.h"
+#include "jsfunctions.h"
+#include "mainwindow.h"
+#include "videodefinition.h"
 
 #ifdef APP_EXTRA
 #include "extra.h"
 #define STR(x) #x
 #define STRINGIFY(x) STR(x)
 
-namespace The {
-NetworkAccess* http();
+YT3 &YT3::instance() {
+    static YT3 i;
+    return i;
 }
 
-YT3 &YT3::instance() {
-    static YT3 *i = new YT3();
-    return *i;
+const QString &YT3::baseUrl() {
+    static const QString base = "https://www.googleapis.com/youtube/v3/";
+    return base;
 }
 
 YT3::YT3() {
+}
+
+void YT3::initApiKeys() {
+    keys.clear();
+
     QByteArray customApiKey = qgetenv("GOOGLE_API_KEY");
     if (!customApiKey.isEmpty()) {
         keys << QString::fromUtf8(customApiKey);
@@ -47,43 +55,42 @@ YT3::YT3() {
 #endif
 
 #ifdef APP_EXTRA
-    if (keys.isEmpty())
-        keys << Extra::apiKeys();
+    if (keys.isEmpty()) keys << Extra::apiKeys();
 #endif
 
     if (keys.isEmpty()) {
         qWarning() << "No available API keys";
+#ifdef APP_LINUX_NO
+        QMetaObject::invokeMethod(MainWindow::instance(), "missingKeyWarning",
+                                  Qt::QueuedConnection);
+#endif
     } else {
         key = keys.takeFirst();
         if (!keys.isEmpty()) testApiKey();
     }
 }
 
-const QString &YT3::baseUrl() {
-    static const QString base = "https://www.googleapis.com/youtube/v3/";
-    return base;
-}
-
 void YT3::testApiKey() {
     QUrl url = method("videos");
-    {
-        QUrlQueryHelper urlHelper(url);
-        urlHelper.addQueryItem("part", "id");
-        urlHelper.addQueryItem("chart", "mostPopular");
-        urlHelper.addQueryItem("maxResults", "1");
-    }
-    QObject *reply = The::http()->get(url);
-    connect(reply, SIGNAL(finished(QNetworkReply*)), SLOT(testResponse(QNetworkReply*)));
+    QUrlQuery q(url);
+    q.addQueryItem("part", "id");
+    q.addQueryItem("chart", "mostPopular");
+    q.addQueryItem("maxResults", "1");
+    url.setQuery(q);
+    QObject *reply = HttpUtils::stealthAndNotCached().get(url);
+    connect(reply, SIGNAL(finished(HttpReply)), SLOT(testResponse(HttpReply)));
 }
 
 void YT3::addApiKey(QUrl &url) {
     if (key.isEmpty()) {
         qDebug() << __PRETTY_FUNCTION__ << "empty key";
+        initApiKeys();
         return;
     }
 
-    QUrlQueryHelper urlHelper(url);
-    urlHelper.addQueryItem("key", key);
+    QUrlQuery q(url);
+    q.addQueryItem("key", key);
+    url.setQuery(q);
 }
 
 QUrl YT3::method(const QString &name) {
@@ -92,8 +99,20 @@ QUrl YT3::method(const QString &name) {
     return url;
 }
 
-void YT3::testResponse(QNetworkReply *reply) {
-    int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+const VideoDefinition &YT3::maxVideoDefinition() {
+    const QString name = QSettings().value("definition", "720p").toString();
+    const VideoDefinition &definition = VideoDefinition::forName(name);
+    return definition;
+}
+
+void YT3::setMaxVideoDefinition(const QString &name) {
+    QSettings settings;
+    settings.setValue("definition", name);
+    emit maxVideoDefinitionChanged(name);
+}
+
+void YT3::testResponse(const HttpReply &reply) {
+    int status = reply.statusCode();
     if (status != 200) {
         if (keys.isEmpty()) {
             qWarning() << "Fatal error: No working API keys!";