diff --git a/src/plugins/revuo/RevuoItem.h b/src/plugins/revuo/RevuoItem.h index 2499608..4b466e5 100644 --- a/src/plugins/revuo/RevuoItem.h +++ b/src/plugins/revuo/RevuoItem.h @@ -7,13 +7,18 @@ #include #include -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> events; }; #endif //FEATHER_REVUOITEM_H diff --git a/src/plugins/revuo/RevuoWidget.cpp b/src/plugins/revuo/RevuoWidget.cpp index a2442e3..304e04e 100644 --- a/src/plugins/revuo/RevuoWidget.cpp +++ b/src/plugins/revuo/RevuoWidget.cpp @@ -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; }"); + ui->textBrowser->setText("

No item selected

"); connect(ui->textBrowser, &QTextBrowser::anchorClicked, this, &RevuoWidget::onLinkActivated); - ui->textBrowser->setText("

No item selected

"); + ui->btn_openLink->setIcon(icons()->icon("external-link.svg")); + connect(ui->btn_openLink, &QPushButton::clicked, this, &RevuoWidget::onOpenLink); - m_contextMenu->addAction("Open link", this, &RevuoWidget::onOpenLink); - m_contextMenu->addAction("Donate to author", this, &RevuoWidget::onDonate); - - ui->splitter->setStretchFactor(1, 5); - - 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 item = QSharedPointer(new RevuoItem(this)); + for (const auto &n : obj.value("newsbytes").toArray()) { - newsbytes.append(n.toString()); + item->newsbytes.append(n.toString()); } - auto revuoItem = new RevuoItem( - obj.value("title").toString(), - obj.value("url").toString(), - newsbytes); + for (const auto &e : obj.value("events").toArray()) { + auto f = e.toObject(); + item->events.append({f.value("date").toString(), f.value("description").toString()}); + } - QSharedPointer r = QSharedPointer(revuoItem); - l.append(r); + item->title = obj.value("title").toString(); + item->url = obj.value("url").toString(); + + l.append(item); } this->updateItems(l); @@ -59,6 +58,10 @@ RevuoWidget::RevuoWidget(QWidget *parent) } void RevuoWidget::updateItems(const QList> &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> &items) { for (const auto &newsbyte : item->newsbytes) { text += "

• " + newsbyte + "

\n"; } - text += QString("
\nRead the whole issue in your browser.").arg(item->url); + text += "

Upcoming Events

\n"; + if (item->events.isEmpty()) { + text += "

There are no upcoming events.

\n"; + } + for (const auto &event : item->events) { + text += "

" + event.first + "

\n"; + text += "

" + event.second + "

\n"; + } + text += "
"; + text += QString("Read the whole issue in your browser.").arg(item->url); text += "

\nEnjoy Revuo? Consider a donation 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("

No item selected

"); 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; diff --git a/src/plugins/revuo/RevuoWidget.h b/src/plugins/revuo/RevuoWidget.h index 334b0af..a583a2c 100644 --- a/src/plugins/revuo/RevuoWidget.h +++ b/src/plugins/revuo/RevuoWidget.h @@ -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; - QMenu *m_contextMenu; - QHash m_items; - QHash m_links; + QStringList m_items; + QStringList m_links; }; diff --git a/src/plugins/revuo/RevuoWidget.ui b/src/plugins/revuo/RevuoWidget.ui index a44477a..ed0c4c7 100644 --- a/src/plugins/revuo/RevuoWidget.ui +++ b/src/plugins/revuo/RevuoWidget.ui @@ -14,34 +14,36 @@ Form - - 0 - - - 0 - - - 0 - - - 0 - - - - Qt::Horizontal - - - - Qt::CustomContextMenu - - - - - - - - + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + +