Add functionality to ensure that the basic system works

There are some things missing:

- Configuration
- Resuming downloads when the list doesn't scroll past the window
This commit is contained in:
Luca Beltrame 2015-02-08 23:53:57 +01:00
parent d94084bc25
commit 735d08f1a8
3 changed files with 63 additions and 11 deletions

View file

@ -4,9 +4,9 @@ set(danbooru_client_SRCS
danbooruconnectwidget.cpp danbooruconnectwidget.cpp
model/danboorupostdelegate.cpp model/danboorupostdelegate.cpp
model/danboorupostmodel.cpp model/danboorupostmodel.cpp
test.cpp # test.cpp
# mainwindow.cpp mainwindow.cpp
# danbooru_client.cpp danbooru_client.cpp
testwidget.cpp testwidget.cpp
testpostdata.cpp testpostdata.cpp
) )

View file

@ -23,37 +23,53 @@
#include <QQuickWidget> #include <QQuickWidget>
#include <QQmlContext> #include <QQmlContext>
#include <QApplication> #include <QApplication>
#include <QGuiApplication>
#include <QStandardPaths> #include <QStandardPaths>
#include <QUrl> #include <QUrl>
#include <QDebug>
#include <kactioncollection.h> #include <kactioncollection.h>
#include <KStandardAction> #include <KStandardAction>
#include <KLocalizedString> #include <KLocalizedString>
#include <kdeclarative.h> #include <KDeclarative/KDeclarative>
#include "libdanbooru/danbooruservice.h" #include "libdanbooru/danbooruservice.h"
#include "libdanbooru/danboorupost.h" #include "libdanbooru/danboorupost.h"
#include "model/danboorupostmodel.h" #include "model/danboorupostmodel.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "danbooruconnectwidget.h"
namespace Danbooru namespace Danbooru
{ {
DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
: KXmlGuiWindow(parent), : KXmlGuiWindow(parent),
m_view(0), m_view(new QQuickWidget(this)),
m_model(0), m_model(new DanbooruPostModel(this)),
m_service(0) m_service(new DanbooruService()),
m_cache(0)
{ {
auto *m_view = new QQuickWidget(this);
// tell the KXmlGuiWindow that this is indeed the main widget m_service->setParent(this);
auto *m_model = new DanbooruPostModel(this);
setCentralWidget(m_view); setCentralWidget(m_view);
// QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
qmlRegisterType<Danbooru::DanbooruPost>("DanbooruClient", 1, 0, "DanbooruPost"); qmlRegisterType<Danbooru::DanbooruPost>("DanbooruClient", 1, 0, "DanbooruPost");
qmlRegisterType<Danbooru::DanbooruService>("DanbooruClient", 1, 0, "DanbooruService"); qmlRegisterType<Danbooru::DanbooruService>("DanbooruClient", 1, 0, "DanbooruService");
qRegisterMetaType<DanbooruPost::Rating>(); qRegisterMetaType<DanbooruPost::Rating>();
// TODO Configurable
m_cache = new KImageCache(qApp->applicationName(), 20000000);
m_service->setImageCache(m_cache);
// Set up declarative bindings for the QQuickWidget
m_view->setResizeMode(QQuickWidget::SizeRootObjectToView);
KDeclarative::KDeclarative declarative;
declarative.setDeclarativeEngine(m_view->engine());
declarative.setupBindings();
auto qmlViewPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, auto qmlViewPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
qApp->applicationName() + QChar('/') + QLatin1Literal("danbooruimageview.qml")); qApp->applicationName() + QChar('/') + QLatin1Literal("danbooruimageview.qml"));
@ -62,6 +78,12 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
ctxt->setContextProperty("danbooruService", m_service); ctxt->setContextProperty("danbooruService", m_service);
m_view->setSource(QUrl::fromLocalFile(qmlViewPath)); m_view->setSource(QUrl::fromLocalFile(qmlViewPath));
QVector<QUrl> boardsList = { QUrl("http://konachan.com"), QUrl("https://yande.re") };
m_connectWidget = new DanbooruConnectWidget(boardsList);
statusBar()->addPermanentWidget(m_connectWidget);
m_connectWidget->hide();
// then, setup our actions // then, setup our actions
setupActions(); setupActions();
@ -70,6 +92,28 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
setupGUI(KXmlGuiWindow::ToolBar|Keys|Save|Create|StatusBar, "danbooru-clientui.rc"); setupGUI(KXmlGuiWindow::ToolBar|Keys|Save|Create|StatusBar, "danbooru-clientui.rc");
// connections
connect(m_connectWidget, &DanbooruConnectWidget::accepted, [this]() {
m_service->setBoardUrl(m_connectWidget->boardUrl());
if (!m_connectWidget->isAnonymous() && !m_connectWidget->username().isEmpty()
&& !m_connectWidget->password().isEmpty()) {
m_service->setUserName(m_connectWidget->username());
m_service->setPassword(m_connectWidget->password());
}
actionCollection()->action(QLatin1String("fetch"))->setEnabled(true);
m_connectWidget->hide();
});
connect(m_connectWidget, &DanbooruConnectWidget::rejected, [this]() {
m_connectWidget->hide();
});
connect(m_service, &Danbooru::DanbooruService::postDownloaded, m_model, &Danbooru::DanbooruPostModel::addPost);
} }
DanbooruMainWindow::~DanbooruMainWindow() DanbooruMainWindow::~DanbooruMainWindow()
@ -95,7 +139,7 @@ void DanbooruMainWindow::setupActions()
actionCollection()->setDefaultShortcut(fetchAction, KStandardShortcut::Find); actionCollection()->setDefaultShortcut(fetchAction, KStandardShortcut::Find);
// actionCollection()->removeAction(actionCollection()->action("help_contents")); // actionCollection()->removeAction(actionCollection()->action("help_contents"));
KStandardAction::quit(qApp, SLOT(close()), actionCollection()); KStandardAction::quit(qApp, SLOT(quit()), actionCollection());
connect(connectAction, &QAction::triggered, this, &DanbooruMainWindow::connectToBoard); connect(connectAction, &QAction::triggered, this, &DanbooruMainWindow::connectToBoard);
connect(fetchAction, &QAction::triggered, this, &DanbooruMainWindow::downloadPosts); connect(fetchAction, &QAction::triggered, this, &DanbooruMainWindow::downloadPosts);
@ -108,6 +152,9 @@ void DanbooruMainWindow::connectToBoard()
return; return;
} }
m_model->clear();
m_connectWidget->show();
} }
void DanbooruMainWindow::downloadPosts() void DanbooruMainWindow::downloadPosts()
@ -116,6 +163,7 @@ void DanbooruMainWindow::downloadPosts()
return; return;
} }
// TODO Pick from configuration
m_service->getPostList(1, QStringList(), 10); m_service->getPostList(1, QStringList(), 10);
} }

View file

@ -24,6 +24,9 @@
#define DANBOORU_CLIENT_H #define DANBOORU_CLIENT_H
#include <kxmlguiwindow.h> #include <kxmlguiwindow.h>
#include <KSharedDataCache>
#include <KImageCache>
class QQuickWidget; class QQuickWidget;
@ -71,6 +74,7 @@ private:
DanbooruPostModel *m_model; DanbooruPostModel *m_model;
DanbooruService *m_service; DanbooruService *m_service;
DanbooruConnectWidget *m_connectWidget; DanbooruConnectWidget *m_connectWidget;
KImageCache *m_cache;
}; };
} // namespace Danbooru } // namespace Danbooru