]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
revuo: add upcoming events
authortobtoht <tob@featherwallet.org>
Mon, 7 Oct 2024 14:08:28 +0000 (16:08 +0200)
committertobtoht <tob@featherwallet.org>
Mon, 7 Oct 2024 15:22:45 +0000 (17:22 +0200)
src/plugins/revuo/RevuoItem.h
src/plugins/revuo/RevuoWidget.cpp
src/plugins/revuo/RevuoWidget.h
src/plugins/revuo/RevuoWidget.ui

index 2499608dbb7522abe65a5bbc770470293f635cd7..4b466e587f477cee8c799914d78d00e31eb2d499 100644 (file)
@@ -7,13 +7,18 @@
 #include <QString>
 #include <QStringList>
 
-struct RevuoItem {
-    RevuoItem(const QString &title, const QString &url, const QStringList &newsbytes)
-        : title(title), url(url), newsbytes(newsbytes){};
+struct RevuoItem : QObject
+{
+    Q_OBJECT
+
+public:
+    explicit RevuoItem(QObject *parent)
+        : QObject(parent) {};
 
     QString title;
     QString url;
     QStringList newsbytes;
+    QList<QPair<QString, QString>> events;
 };
 
 #endif //FEATHER_REVUOITEM_H
index a2442e38e5c535df0fe34ffdf194a6ff4055b195..304e04ec94c7f3e4935c5f4d530f9e14638e89cf 100644 (file)
@@ -8,28 +8,24 @@
 
 #include "utils/ColorScheme.h"
 #include "Utils.h"
+#include "utils/Icons.h"
 #include "utils/WebsocketNotifier.h"
 
 RevuoWidget::RevuoWidget(QWidget *parent)
         : QWidget(parent)
         , ui(new Ui::RevuoWidget)
-        , m_contextMenu(new QMenu(this))
 {
     ui->setupUi(this);
 
     ui->textBrowser->setOpenLinks(false);
     ui->textBrowser->document()->setDefaultStyleSheet("a {color: white; }");
-    connect(ui->textBrowser, &QTextBrowser::anchorClicked, this, &RevuoWidget::onLinkActivated);
-
     ui->textBrowser->setText("<h4>No item selected</h4>");
+    connect(ui->textBrowser, &QTextBrowser::anchorClicked, this, &RevuoWidget::onLinkActivated);
 
-    m_contextMenu->addAction("Open link", this, &RevuoWidget::onOpenLink);
-    m_contextMenu->addAction("Donate to author", this, &RevuoWidget::onDonate);
-
-    ui->splitter->setStretchFactor(1, 5);
+    ui->btn_openLink->setIcon(icons()->icon("external-link.svg"));
+    connect(ui->btn_openLink, &QPushButton::clicked, this, &RevuoWidget::onOpenLink);
 
-    connect(ui->listWidget, &QListWidget::currentTextChanged, this, &RevuoWidget::onSelectItem);
-    connect(ui->listWidget, &QListWidget::customContextMenuRequested, this, &RevuoWidget::showContextMenu);
+    connect(ui->combo_issue, &QComboBox::currentIndexChanged, this, &RevuoWidget::onSelectItem);
 
     connect(websocketNotifier(), &WebsocketNotifier::dataReceived, this, [this](const QString& type, const QJsonValue& json) {
         if (type == "revuo") {
@@ -39,18 +35,21 @@ RevuoWidget::RevuoWidget(QWidget *parent)
             for (const auto &entry: revuo_data) {
                 auto obj = entry.toObject();
 
-                QStringList newsbytes;
+                QSharedPointer<RevuoItem> item = QSharedPointer<RevuoItem>(new RevuoItem(this));
+
                 for (const auto &n : obj.value("newsbytes").toArray()) {
-                    newsbytes.append(n.toString());
+                    item->newsbytes.append(n.toString());
+                }
+
+                for (const auto &e : obj.value("events").toArray()) {
+                    auto f = e.toObject();
+                    item->events.append({f.value("date").toString(), f.value("description").toString()});
                 }
 
-                auto revuoItem = new RevuoItem(
-                        obj.value("title").toString(),
-                        obj.value("url").toString(),
-                        newsbytes);
+                item->title = obj.value("title").toString();
+                item->url = obj.value("url").toString();
 
-                QSharedPointer<RevuoItem> r = QSharedPointer<RevuoItem>(revuoItem);
-                l.append(r);
+                l.append(item);
             }
 
             this->updateItems(l);
@@ -59,6 +58,10 @@ RevuoWidget::RevuoWidget(QWidget *parent)
 }
 
 void RevuoWidget::updateItems(const QList<QSharedPointer<RevuoItem>> &items) {
+    m_items.clear();
+    m_links.clear();
+    ui->combo_issue->clear();
+
     QStringList titles;
     for (const auto &item : items) {
         titles << item->title;
@@ -67,26 +70,34 @@ void RevuoWidget::updateItems(const QList<QSharedPointer<RevuoItem>> &items) {
         for (const auto &newsbyte : item->newsbytes) {
             text += "<p> • " + newsbyte + "</p>\n";
         }
-        text += QString("<br>\nRead the whole issue in your <a href=\"%1\">browser</a>.").arg(item->url);
+        text += "<h3>Upcoming Events</h3>\n";
+        if (item->events.isEmpty()) {
+            text += "<p>There are no upcoming events.</p>\n";
+        }
+        for (const auto &event : item->events) {
+            text += "<h4>" + event.first + "</h4>\n";
+            text += "<p>" + event.second + "</p>\n";
+        }
+        text += "<hr>";
+        text += QString("Read the whole issue in your <a href=\"%1\">browser</a>.").arg(item->url);
         text += "<br><br>\nEnjoy Revuo? Consider a <a href=\"feather://donate-revuo\">donation</a> to the author.";
 
-        m_items[item->title] = text;
-        m_links[item->title] = item->url;
+        m_items.append(text);
+        m_links.append(item->url);
+        ui->combo_issue->addItem(item->title);
     }
 
-    ui->listWidget->clear();
-    ui->listWidget->addItems(titles);
-    ui->listWidget->setCurrentRow(0);
-    ui->listWidget->setMinimumWidth(ui->listWidget->sizeHintForColumn(0) + 10);
+    ui->combo_issue->setCurrentIndex(0);
+
 }
 
-void RevuoWidget::onSelectItem(const QString &item) {
-    auto *currentItem = ui->listWidget->currentItem();
-    if (currentItem == nullptr) {
+void RevuoWidget::onSelectItem(int index) {
+    if (index >= m_items.length()) {
+        ui->textBrowser->setText("<h4>No item selected</h4>");
         return;
     }
-    QString title = currentItem->text();
-    ui->textBrowser->setText(m_items[title]);
+
+    ui->textBrowser->setText(m_items[index]);
 }
 
 void RevuoWidget::onLinkActivated(const QUrl &link) {
@@ -98,12 +109,8 @@ void RevuoWidget::onLinkActivated(const QUrl &link) {
     Utils::externalLinkWarning(this, link.toString());
 }
 
-void RevuoWidget::showContextMenu(const QPoint &pos) {
-    m_contextMenu->exec(ui->listWidget->viewport()->mapToGlobal(pos));
-}
-
 void RevuoWidget::onOpenLink() {
-    QString currentItem = ui->listWidget->currentItem()->text();
+    int currentItem = ui->combo_issue->currentIndex();
     Utils::externalLinkWarning(this, m_links[currentItem]);
 }
 
@@ -119,7 +126,7 @@ void RevuoWidget::skinChanged() {
     auto stylesheet = QString("a {color: %1; }").arg(color);
 
     ui->textBrowser->document()->setDefaultStyleSheet(stylesheet);
-    this->onSelectItem("");
+    this->onSelectItem(0);
 }
 
-RevuoWidget::~RevuoWidget() = default;
\ No newline at end of file
+RevuoWidget::~RevuoWidget() = default;
index 334b0afcb3eb76c72b7ed5a5ed264b6f4d420506..a583a2c74182fac748e8fcd6498e86c93a429712 100644 (file)
@@ -30,17 +30,15 @@ public slots:
 
 private slots:
     void onLinkActivated(const QUrl &link);
-    void onSelectItem(const QString &item);
+    void onSelectItem(int index);
     void onOpenLink();
     void onDonate();
-    void showContextMenu(const QPoint &pos);
 
 private:
     QScopedPointer<Ui::RevuoWidget> ui;
 
-    QMenu *m_contextMenu;
-    QHash<QString, QString> m_items;
-    QHash<QString, QString> m_links;
+    QStringList m_items;
+    QStringList m_links;
 };
 
 
index a44477ab942737ea72e691e11f135c8560142668..ed0c4c7b3ccb2c8cdccc419b5def6b53cad2ce67 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
    <item>
-    <widget class="QSplitter" name="splitter">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <widget class="QListWidget" name="listWidget">
-      <property name="contextMenuPolicy">
-       <enum>Qt::CustomContextMenu</enum>
-      </property>
-     </widget>
-     <widget class="QTextBrowser" name="textBrowser">
-      <property name="html">
-       <string></string>
-      </property>
-     </widget>
-    </widget>
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QComboBox" name="combo_issue"/>
+       </item>
+       <item>
+        <widget class="QPushButton" name="btn_openLink">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QTextBrowser" name="textBrowser">
+       <property name="html">
+        <string></string>
+       </property>
+      </widget>
+     </item>
+    </layout>
    </item>
   </layout>
  </widget>