mirror of
				https://git.wownero.com/wowlet/wowlet.git
				synced 2024-08-15 01:03:14 +00:00 
			
		
		
		
	Merge pull request 'SuchWow improvements' (#55) from dsc/wowlet:suchwow-improvements into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/55
This commit is contained in:
		
						commit
						096b28318c
					
				
					 5 changed files with 74 additions and 35 deletions
				
			
		| 
						 | 
					@ -4,6 +4,8 @@
 | 
				
			||||||
#ifndef MAINWINDOW_H
 | 
					#ifndef MAINWINDOW_H
 | 
				
			||||||
#define MAINWINDOW_H
 | 
					#define MAINWINDOW_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <QtGlobal>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef Q_OS_MAC
 | 
					#ifdef Q_OS_MAC
 | 
				
			||||||
#include "src/kdmactouchbar.h"
 | 
					#include "src/kdmactouchbar.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@ void UtilsNetworking::setUserAgent(const QString &userAgent) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UtilsNetworking::get(const QString &url) {
 | 
					void UtilsNetworking::get(const QString &url) {
 | 
				
			||||||
 | 
					    busy = true;
 | 
				
			||||||
    QNetworkRequest request;
 | 
					    QNetworkRequest request;
 | 
				
			||||||
    request.setUrl(QUrl(url));
 | 
					    request.setUrl(QUrl(url));
 | 
				
			||||||
    request.setRawHeader("User-Agent", m_userAgent.toUtf8());
 | 
					    request.setRawHeader("User-Agent", m_userAgent.toUtf8());
 | 
				
			||||||
| 
						 | 
					@ -26,6 +27,7 @@ void UtilsNetworking::get(const QString &url) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QNetworkReply* UtilsNetworking::getJson(const QString &url) {
 | 
					QNetworkReply* UtilsNetworking::getJson(const QString &url) {
 | 
				
			||||||
 | 
					    busy = true;
 | 
				
			||||||
    QNetworkRequest request;
 | 
					    QNetworkRequest request;
 | 
				
			||||||
    request.setUrl(QUrl(url));
 | 
					    request.setUrl(QUrl(url));
 | 
				
			||||||
    request.setRawHeader("User-Agent", m_userAgent.toUtf8());
 | 
					    request.setRawHeader("User-Agent", m_userAgent.toUtf8());
 | 
				
			||||||
| 
						 | 
					@ -35,6 +37,7 @@ QNetworkReply* UtilsNetworking::getJson(const QString &url) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QNetworkReply* UtilsNetworking::postJson(const QString &url, const QJsonObject &data) {
 | 
					QNetworkReply* UtilsNetworking::postJson(const QString &url, const QJsonObject &data) {
 | 
				
			||||||
 | 
					    busy = true;
 | 
				
			||||||
    QNetworkRequest request;
 | 
					    QNetworkRequest request;
 | 
				
			||||||
    request.setUrl(QUrl(url));
 | 
					    request.setUrl(QUrl(url));
 | 
				
			||||||
    request.setRawHeader("User-Agent", m_userAgent.toUtf8());
 | 
					    request.setRawHeader("User-Agent", m_userAgent.toUtf8());
 | 
				
			||||||
| 
						 | 
					@ -61,6 +64,8 @@ void UtilsNetworking::webResponse(QNetworkReply *reply) {
 | 
				
			||||||
        emit webErrorReceived(err);
 | 
					        emit webErrorReceived(err);
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        emit webReceived(data);
 | 
					        emit webReceived(data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    busy = false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString UtilsNetworking::validateJSON(QNetworkReply *reply){
 | 
					QString UtilsNetworking::validateJSON(QNetworkReply *reply){
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,6 +26,8 @@ public:
 | 
				
			||||||
    void setUserAgent(const QString &userAgent);
 | 
					    void setUserAgent(const QString &userAgent);
 | 
				
			||||||
    static QString validateJSON(QNetworkReply *reply);
 | 
					    static QString validateJSON(QNetworkReply *reply);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool busy = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
    void webResponse(QNetworkReply *reply);
 | 
					    void webResponse(QNetworkReply *reply);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,31 +57,33 @@ void SuchWowWidget::setupTable() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SuchWowWidget::onWS(QJsonArray such_data) {
 | 
					void SuchWowWidget::onWS(QJsonArray such_data) {
 | 
				
			||||||
    if(this->m_rendered) return; // only draw once
 | 
					    if(this->m_ctx == nullptr)
 | 
				
			||||||
    if(this->m_ctx == nullptr) {
 | 
					 | 
				
			||||||
        m_ctx = MainWindow::getContext();
 | 
					        m_ctx = MainWindow::getContext();
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (auto &&such_post: such_data) {
 | 
					    for (auto &&such_post: such_data) {
 | 
				
			||||||
        auto obj = such_post.toObject();
 | 
					        auto obj = such_post.toObject();
 | 
				
			||||||
        auto s = new SuchWowPost(m_ctx, this);
 | 
					        auto uid = obj.value("id").toInt();
 | 
				
			||||||
        s->added_by = obj.value("added_by").toString();
 | 
					        if(m_lookup.contains(uid)) continue;
 | 
				
			||||||
        s->addy = obj.value("addy").toString();
 | 
					 | 
				
			||||||
        s->title = obj.value("title").toString();
 | 
					 | 
				
			||||||
        s->img = obj.value("img").toString();
 | 
					 | 
				
			||||||
        s->thumb = obj.value("thumb").toString();
 | 
					 | 
				
			||||||
        s->href = obj.value("href").toString();
 | 
					 | 
				
			||||||
        m_posts.push_back(s);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        connect(s, &SuchWowPost::thumbReceived, this, &SuchWowWidget::addThumb);
 | 
					        auto post = new SuchWowPost(m_ctx, this);
 | 
				
			||||||
        s->download_thumb();
 | 
					        post->added_by = obj.value("added_by").toString();
 | 
				
			||||||
        s->download_img();
 | 
					        post->addy = obj.value("addy").toString();
 | 
				
			||||||
 | 
					        post->title = obj.value("title").toString();
 | 
				
			||||||
 | 
					        post->img = obj.value("img").toString();
 | 
				
			||||||
 | 
					        post->thumb = obj.value("thumb").toString();
 | 
				
			||||||
 | 
					        post->href = obj.value("href").toString();;
 | 
				
			||||||
 | 
					        post->uid = uid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        m_lookup[post->uid] = post;
 | 
				
			||||||
 | 
					        connect(post, &SuchWowPost::thumbReceived, this, &SuchWowWidget::addThumb);
 | 
				
			||||||
 | 
					        post->download_thumb();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SuchWowWidget::addThumb(SuchWowPost *test) {
 | 
					void SuchWowWidget::addThumb(SuchWowPost *post) {
 | 
				
			||||||
    auto *item = new QListWidgetItem(QIcon(test->thumb_data), test->title);
 | 
					    auto *item = new SuchWidgetItem(QIcon(post->thumb_data), post->title, post);
 | 
				
			||||||
    ui->listWidget->addItem(item);
 | 
					    ui->listWidget->addItem(item);
 | 
				
			||||||
 | 
					    ui->listWidget->sortItems();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SuchWowWidget::showContextMenu(const QPoint &pos) {
 | 
					void SuchWowWidget::showContextMenu(const QPoint &pos) {
 | 
				
			||||||
| 
						 | 
					@ -95,12 +97,18 @@ void SuchWowWidget::suchImage() {
 | 
				
			||||||
    auto *post = this->itemToPost();
 | 
					    auto *post = this->itemToPost();
 | 
				
			||||||
    if(post == nullptr)
 | 
					    if(post == nullptr)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    if(!post->img_data) {
 | 
					
 | 
				
			||||||
        QMessageBox::warning(this, "wh00pz", "Image not dowloaded yet.");
 | 
					    if(!post->img_data && !post->isFetchingImage()) {
 | 
				
			||||||
 | 
					        connect(post, &SuchWowPost::imgReceived, this, &SuchWowWidget::showImage);
 | 
				
			||||||
 | 
					        post->download_img();
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const auto title = QString("%1 - %2").arg(post->title).arg(post->added_by);
 | 
					    this->showImage(post);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SuchWowWidget::showImage(SuchWowPost *post) {
 | 
				
			||||||
 | 
					    const auto title = QString("%1 - %2").arg(post->title, post->added_by);
 | 
				
			||||||
    QMessageBox mb(title, "",
 | 
					    QMessageBox mb(title, "",
 | 
				
			||||||
                   QMessageBox::NoIcon,
 | 
					                   QMessageBox::NoIcon,
 | 
				
			||||||
                   QMessageBox::Ok,
 | 
					                   QMessageBox::Ok,
 | 
				
			||||||
| 
						 | 
					@ -119,11 +127,12 @@ void SuchWowWidget::suchDonate() {
 | 
				
			||||||
SuchWowPost *SuchWowWidget::itemToPost() {
 | 
					SuchWowPost *SuchWowWidget::itemToPost() {
 | 
				
			||||||
    QListWidgetItem *item = ui->listWidget->currentItem();
 | 
					    QListWidgetItem *item = ui->listWidget->currentItem();
 | 
				
			||||||
    QString title = item->text();
 | 
					    QString title = item->text();
 | 
				
			||||||
    for(auto &post: m_posts){
 | 
					
 | 
				
			||||||
        if(post->title == title) {
 | 
					    for(const auto &such_key: m_lookup.keys()) {
 | 
				
			||||||
            return post;
 | 
					        if(m_lookup[such_key]->title == title)
 | 
				
			||||||
        }
 | 
					            return m_lookup[such_key];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return nullptr;
 | 
					    return nullptr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,9 +4,11 @@
 | 
				
			||||||
#ifndef SUCHWOWWIDGET_H
 | 
					#ifndef SUCHWOWWIDGET_H
 | 
				
			||||||
#define SUCHWOWWIDGET_H
 | 
					#define SUCHWOWWIDGET_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <QObject>
 | 
				
			||||||
#include <QMenu>
 | 
					#include <QMenu>
 | 
				
			||||||
#include <QWidget>
 | 
					#include <QWidget>
 | 
				
			||||||
#include <QItemSelection>
 | 
					#include <QItemSelection>
 | 
				
			||||||
 | 
					#include <QListWidgetItem>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "utils/networking.h"
 | 
					#include "utils/networking.h"
 | 
				
			||||||
#include "appcontext.h"
 | 
					#include "appcontext.h"
 | 
				
			||||||
| 
						 | 
					@ -15,7 +17,6 @@ namespace Ui {
 | 
				
			||||||
    class SuchWowWidget;
 | 
					    class SuchWowWidget;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
class SuchWowPost : public QObject
 | 
					class SuchWowPost : public QObject
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
Q_OBJECT
 | 
					Q_OBJECT
 | 
				
			||||||
| 
						 | 
					@ -30,31 +31,33 @@ public:
 | 
				
			||||||
    QString img;
 | 
					    QString img;
 | 
				
			||||||
    QString addy;
 | 
					    QString addy;
 | 
				
			||||||
    QString href;
 | 
					    QString href;
 | 
				
			||||||
 | 
					    uint uid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QPixmap thumb_data;
 | 
					    QPixmap thumb_data;
 | 
				
			||||||
    QPixmap img_data;
 | 
					    QPixmap img_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void download_thumb() {
 | 
					    void download_thumb() {
 | 
				
			||||||
        const QString url = QString("%1/%2").arg(m_weburl).arg(this->thumb);
 | 
					        const QString url = QString("%1/%2").arg(m_weburl, this->thumb);
 | 
				
			||||||
        qDebug() << url;
 | 
					 | 
				
			||||||
        connect(m_networkThumb, &UtilsNetworking::webReceived, this, &SuchWowPost::onThumbReceived);
 | 
					        connect(m_networkThumb, &UtilsNetworking::webReceived, this, &SuchWowPost::onThumbReceived);
 | 
				
			||||||
        m_networkThumb->get(url);
 | 
					        m_networkThumb->get(url);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void download_img() {
 | 
					    void download_img() {
 | 
				
			||||||
        const QString url = QString("%1/%2").arg(m_weburl).arg(this->img);
 | 
					        const QString url = QString("%1/%2").arg(m_weburl, this->img);
 | 
				
			||||||
        qDebug() << url;
 | 
					 | 
				
			||||||
        connect(m_networkImg, &UtilsNetworking::webReceived, this, &SuchWowPost::onImgReceived);
 | 
					        connect(m_networkImg, &UtilsNetworking::webReceived, this, &SuchWowPost::onImgReceived);
 | 
				
			||||||
        m_networkImg->get(url);
 | 
					        m_networkImg->get(url);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool isFetchingImage() { return m_networkImg->busy; }
 | 
				
			||||||
 | 
					    bool isFetchingThumb() { return m_networkThumb->busy; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
    void onThumbReceived(QByteArray data);
 | 
					    void onThumbReceived(QByteArray data);
 | 
				
			||||||
    void onImgReceived(QByteArray data);
 | 
					    void onImgReceived(QByteArray data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
signals:
 | 
					signals:
 | 
				
			||||||
    void imgReceived(SuchWowPost *test);
 | 
					    void imgReceived(SuchWowPost *post);
 | 
				
			||||||
    void thumbReceived(SuchWowPost *test);
 | 
					    void thumbReceived(SuchWowPost *post);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    QString m_weburl;
 | 
					    QString m_weburl;
 | 
				
			||||||
| 
						 | 
					@ -75,11 +78,12 @@ public slots:
 | 
				
			||||||
    void onWS(QJsonArray such_data);
 | 
					    void onWS(QJsonArray such_data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
    void addThumb(SuchWowPost *test);
 | 
					    void addThumb(SuchWowPost *post);
 | 
				
			||||||
 | 
					    void showImage(SuchWowPost *post);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
signals:
 | 
					signals:
 | 
				
			||||||
    void donate(QString donate);
 | 
					    void donate(QString donate);
 | 
				
			||||||
    void openImage(SuchWowPost *test);
 | 
					    void openImage(SuchWowPost *post);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    void setupTable();
 | 
					    void setupTable();
 | 
				
			||||||
| 
						 | 
					@ -88,11 +92,28 @@ private:
 | 
				
			||||||
    SuchWowPost* itemToPost();
 | 
					    SuchWowPost* itemToPost();
 | 
				
			||||||
    void showContextMenu(const QPoint &pos);
 | 
					    void showContextMenu(const QPoint &pos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool m_rendered = false;  // because we're too lazy to re-render on changes.
 | 
					    QMap<uint, SuchWowPost*> m_lookup;
 | 
				
			||||||
    Ui::SuchWowWidget *ui;
 | 
					    Ui::SuchWowWidget *ui;
 | 
				
			||||||
    QList<SuchWowPost*> m_posts;
 | 
					 | 
				
			||||||
    AppContext *m_ctx = nullptr;
 | 
					    AppContext *m_ctx = nullptr;
 | 
				
			||||||
    QMenu *m_contextMenu;
 | 
					    QMenu *m_contextMenu;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SuchWidgetItem : public QListWidgetItem
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    explicit SuchWidgetItem(const QIcon &icon, const QString &text, SuchWowPost *post, QListWidget *parent = nullptr, int type = Type) {
 | 
				
			||||||
 | 
					        this->setIcon(icon);
 | 
				
			||||||
 | 
					        this->setText(text);
 | 
				
			||||||
 | 
					        this->post = post;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    SuchWowPost *post;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // sort
 | 
				
			||||||
 | 
					    virtual bool operator< (const QListWidgetItem &other) const {
 | 
				
			||||||
 | 
					        auto const *_other = dynamic_cast<const SuchWidgetItem *>(&other);
 | 
				
			||||||
 | 
					        return this->post->uid > _other->post->uid;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // SUCHWOWWIDGET_H
 | 
					#endif // SUCHWOWWIDGET_H
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue