]> git.sur5r.net Git - minitube/blobdiff - src/searchview.cpp
New upstream version 3.8
[minitube] / src / searchview.cpp
index 6536d0b4edaebb0bf69401ccec918f6b33772185..5315ca3e32632b9cef5b8531cac699d69678485d 100644 (file)
@@ -42,8 +42,13 @@ $END_LICENSE */
 #include "clickablelabel.h"
 #include "iconutils.h"
 #include "mainwindow.h"
+#include "messagebar.h"
 #include "painterutils.h"
 
+#ifdef UPDATER
+#include "updater.h"
+#endif
+
 namespace {
 const QString recentKeywordsKey = "recentKeywords";
 const QString recentChannelsKey = "recentChannels";
@@ -60,10 +65,11 @@ SearchView::SearchView(QWidget *parent) : View(parent) {
     vLayout->setMargin(padding);
     vLayout->setSpacing(0);
 
-    // hidden message widget
-    message = new QLabel(this);
-    message->hide();
-    vLayout->addWidget(message);
+    messageBar = new MessageBar();
+    messageBar->hide();
+    vLayout->addWidget(messageBar, 0, Qt::AlignCenter);
+    vLayout->addSpacing(padding);
+    maybeShowMessage();
 
     vLayout->addStretch();
 
@@ -265,7 +271,6 @@ void SearchView::updateRecentKeywords() {
         ClickableLabel *item;
         if (recentKeywordsLayout->count() - 1 >= counter) {
             item = qobject_cast<ClickableLabel *>(recentKeywordsLayout->itemAt(counter)->widget());
-
         } else {
             item = new ClickableLabel();
 #ifdef APP_MAC
@@ -285,6 +290,17 @@ void SearchView::updateRecentKeywords() {
                     }
                 }
             });
+            item->setContextMenuPolicy(Qt::ActionsContextMenu);
+            auto removeAction = new QAction(tr("Remove"));
+            item->addAction(removeAction);
+            connect(removeAction, &QAction::triggered, item, [item] {
+                QSettings settings;
+                QStringList keywords = settings.value(recentKeywordsKey).toStringList();
+                QString keyword = item->property("keyword").toString();
+                keywords.removeOne(keyword);
+                settings.setValue(recentKeywordsKey, keywords);
+                item->deleteLater();
+            });
             recentKeywordsLayout->addWidget(item);
         }
 
@@ -293,6 +309,7 @@ void SearchView::updateRecentKeywords() {
             item->setStatusTip(link);
         else
             item->setStatusTip(QString());
+        item->setProperty("keyword", keyword);
 
         disconnect(item, &ClickableLabel::clicked, nullptr, nullptr);
         connect(item, &ClickableLabel::clicked, this, [this, link]() { watchKeywords(link); });
@@ -332,6 +349,7 @@ void SearchView::updateRecentChannels() {
         }
 
         ClickableLabel *item = new ClickableLabel(display);
+        item->setProperty("keyword", keyword);
 #ifdef APP_MAC
         item->setPalette(p);
 #endif
@@ -342,6 +360,17 @@ void SearchView::updateRecentChannels() {
         connect(item, &ClickableLabel::hovered, item, [item](bool value) {
             item->setForegroundRole(value ? QPalette::Highlight : QPalette::WindowText);
         });
+        item->setContextMenuPolicy(Qt::ActionsContextMenu);
+        auto removeAction = new QAction(tr("Remove"));
+        item->addAction(removeAction);
+        connect(removeAction, &QAction::triggered, item, [item] {
+            QSettings settings;
+            QStringList keywords = settings.value(recentChannelsKey).toStringList();
+            QString keyword = item->property("keyword").toString();
+            keywords.removeOne(keyword);
+            settings.setValue(recentChannelsKey, keywords);
+            item->deleteLater();
+        });
         recentChannelsLayout->addWidget(item);
     }
 }
@@ -378,11 +407,7 @@ void SearchView::watchChannel(const QString &channelId) {
     }
 
     QString id = channelId;
-
-    // Fix old settings
-    const QLatin1String uc("UC");
-    if (!id.startsWith(uc)) id = uc + id;
-
+    qDebug() << "Channel" << id;
     SearchParams *searchParams = new SearchParams();
     searchParams->setChannelId(id);
     searchParams->setSortBy(SearchParams::SortByNewest);
@@ -429,3 +454,76 @@ void SearchView::suggestionAccepted(Suggestion *suggestion) {
 void SearchView::onChannelSuggestions(const QVector<Suggestion *> &suggestions) {
     lastChannelSuggestions = suggestions;
 }
+
+void SearchView::maybeShowMessage() {
+    QSettings settings;
+    QString key;
+
+    bool showMessages = true;
+#ifdef APP_ACTIVATION
+    showMessages = Activation::instance().isActivated();
+#endif
+
+#if defined APP_MAC && !defined APP_MAC_STORE
+    if (showMessages && !settings.contains(key = "sofa")) {
+        QString msg = tr("Need a remote control for %1? Try %2!").arg(Constants::NAME).arg("Sofa");
+        msg = "<a href='https://" + QLatin1String(Constants::ORG_DOMAIN) + '/' + key +
+              "' style='text-decoration:none;color:palette(windowText)'>" + msg + "</a>";
+        messageBar->setMessage(msg);
+        messageBar->setOpenExternalLinks(true);
+        disconnect(messageBar);
+        connect(messageBar, &MessageBar::closed, this, [key] {
+            QSettings settings;
+            settings.setValue(key, true);
+        });
+        messageBar->show();
+        showMessages = false;
+    }
+#endif
+
+    if (showMessages) {
+        key = "donate" + QLatin1String(Constants::VERSION);
+        if (!settings.contains(key)) {
+            bool oneYearUsage = true;
+#ifdef APP_ACTIVATION
+            oneYearUsage = (QDateTime::currentSecsSinceEpoch() -
+                            Activation::instance().getLicenseTimestamp()) > 86400 * 365;
+#elif APP_MAC_STORE
+            oneYearUsage = false;
+#endif
+            if (oneYearUsage) {
+                QString msg =
+                        tr("I keep improving %1 to make it the best I can. Support this work!")
+                                .arg(Constants::NAME);
+                msg = "<a href='https://" + QLatin1String(Constants::ORG_DOMAIN) + "/donate" +
+                      "' style='text-decoration:none;color:palette(windowText)'>" + msg + "</a>";
+                messageBar->setMessage(msg);
+                messageBar->setOpenExternalLinks(true);
+                disconnect(messageBar);
+                connect(messageBar, &MessageBar::closed, this, [key] {
+                    QSettings settings;
+                    settings.setValue(key, true);
+                });
+                messageBar->show();
+            }
+        }
+    }
+
+#ifdef UPDATER
+    connect(&Updater::instance(), &Updater::statusChanged, this, [this](auto status) {
+        if (status == Updater::Status::UpdateDownloaded) {
+            QString msg = tr("An update is ready to be installed. Quit and install update.");
+            msg = "<a href='http://quit' style='text-decoration:none;color:palette(windowText)'>" +
+                  msg + "</a>";
+            messageBar->setMessage(msg);
+            messageBar->setOpenExternalLinks(false);
+            disconnect(messageBar);
+            connect(messageBar, &MessageBar::linkActivated, this, [] {
+                Updater::instance().setRelaunchAfterInstall(true);
+                qApp->quit();
+            });
+            messageBar->show();
+        }
+    });
+#endif
+}