Skip to content
Snippets Groups Projects
Commit d6067ce8 authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Move view creation out of app creation

parent bc086ee9
No related branches found
No related tags found
No related merge requests found
exit
......@@ -6,3 +6,5 @@ harbour-matrix.pro.user
RPMS
documentation.list
*.swp
/.gdb_history
/sysroot-dir/
......@@ -26,6 +26,37 @@ QDataStream &operator>>(QDataStream &in, std::string &s) {
return in;
}
namespace spoon {
Login *login;
RoomListModel *rooms;
RoomListSortProxy *roomsSorted;
Sync *sync;
MXCImageProvider *imageProvider;
MXCDownloader *downloader;
QQuickView *v;
static void showApp(QGuiApplication *app) {
qmlRegisterUncreatableType<EventType>("dev.neko.spoon", 1, 0, "EventType", "Can't instantiate EventType");
qRegisterMetaType<std::vector<mtx::events::collections::TimelineEvents>>(
"std::vector<mtx::events::collections::TimelineEvents>");
qRegisterMetaType<std::vector<mtx::events::collections::StateEvents>>(
"std::vector<mtx::events::collections::StateEvents>");
qRegisterMetaType<std::vector<std::string>>("std::vector<std::string>");
qRegisterMetaType<QSharedPointer<Room>>("QSharedPointer<Room>");
qRegisterMetaType<std::string>("std::string");
qRegisterMetaTypeStreamOperators<std::string>("std::string");
v = SailfishApp::createView();
v->engine()->addImageProvider("MXCImage", imageProvider);
v->rootContext()->setContextProperty("login", login);
v->rootContext()->setContextProperty("mxcDownloader", downloader);
v->rootContext()->setContextProperty("rooms", roomsSorted);
v->setSource(SailfishApp::pathTo("qml/harbour-spoon.qml"));
v->show();
}
} // namespace spoon
int main(int argc, char *argv[]) {
// SailfishApp::main() will display "qml/harbour-spoon.qml", if you need more
// control over initialization, you can use:
......@@ -41,39 +72,22 @@ int main(int argc, char *argv[]) {
// To display the view, call "show()" (will show fullscreen on device).
// Set up QML engine.
// qRegisterMetaType<Room>("Room");
qmlRegisterUncreatableType<EventType>("dev.neko.spoon", 1, 0, "EventType", "Can't instantiate EventType");
qRegisterMetaType<std::vector<mtx::events::collections::TimelineEvents>>(
"std::vector<mtx::events::collections::TimelineEvents>");
qRegisterMetaType<std::vector<mtx::events::collections::StateEvents>>(
"std::vector<mtx::events::collections::StateEvents>");
qRegisterMetaType<std::vector<std::string>>("std::vector<std::string>");
qRegisterMetaType<QSharedPointer<Room>>("QSharedPointer<Room>");
qRegisterMetaType<std::string>("std::string");
qRegisterMetaTypeStreamOperators<std::string>("std::string");
QScopedPointer<QGuiApplication> app(SailfishApp::application(argc, argv));
QScopedPointer<QQuickView> v(SailfishApp::createView());
v->engine()->addImageProvider("MXCImage", new MXCImageProvider());
Login login;
v->rootContext()->setContextProperty("login", &login);
MXCDownloader downloader;
v->rootContext()->setContextProperty("mxcDownloader", &downloader);
RoomListModel rooms;
Sync sync(rooms, &login);
QObject::connect(&login, &Login::loginSuccess, &sync, &Sync::startSync, Qt::QueuedConnection);
QObject::connect(&sync, &Sync::newRoom, &rooms, &RoomListModel::addRoom, Qt::QueuedConnection);
QObject::connect(&sync, &Sync::roomUpdated, &rooms, &RoomListModel::updateRoom, Qt::QueuedConnection);
QObject::connect(app.data(), &QGuiApplication::aboutToQuit, &sync, &Sync::exitSync, Qt::QueuedConnection);
RoomListSortProxy roomsSorted;
roomsSorted.setSourceModel(&rooms);
roomsSorted.setDynamicSortFilter(true);
roomsSorted.sort(0);
v->rootContext()->setContextProperty("rooms", &roomsSorted);
app->setQuitOnLastWindowClosed(false);
spoon::login = new Login();
spoon::downloader = new MXCDownloader();
spoon::imageProvider = new MXCImageProvider();
spoon::rooms = new RoomListModel();
spoon::sync = new Sync(*spoon::rooms, spoon::login);
QObject::connect(spoon::login, &Login::loginSuccess, spoon::sync, &Sync::startSync, Qt::QueuedConnection);
QObject::connect(spoon::sync, &Sync::newRoom, spoon::rooms, &RoomListModel::addRoom, Qt::QueuedConnection);
QObject::connect(spoon::sync, &Sync::roomUpdated, spoon::rooms, &RoomListModel::updateRoom, Qt::QueuedConnection);
QObject::connect(app.data(), &QGuiApplication::aboutToQuit, spoon::sync, &Sync::exitSync, Qt::QueuedConnection);
spoon::roomsSorted = new RoomListSortProxy();
spoon::roomsSorted->setSourceModel(spoon::rooms);
spoon::roomsSorted->setDynamicSortFilter(true);
spoon::roomsSorted->sort(0);
// If you wish to publish your app on the Jolla harbour, it is recommended
// that you prefix your internal namespaces with "harbour.".
......@@ -83,8 +97,7 @@ int main(int argc, char *argv[]) {
// qmlRegisterType<DemoModel>("com.example", 1, 0, "DemoModel");
// Start the application.
v->setSource(SailfishApp::pathTo("qml/harbour-spoon.qml"));
v->show();
spoon::showApp(app.data());
return app->exec();
}
......@@ -10,12 +10,21 @@
#include "client.h"
#include "debug_out.h"
namespace {
bool first_val = true;
}
Sync::Sync(RoomListModel &rooms, Login *login, QObject *parent)
: QThread(parent), rooms(rooms), stop(false), exit(false) {
static ContextProperty *prop = new ContextProperty("Internet.NetworkState");
connect(this, &Sync::nextSync, this, &Sync::sync, Qt::QueuedConnection);
connect(prop, &ContextProperty::valueChanged, [this]() {
if (first_val) {
first_val = false;
return;
}
qDebug() << "Value changed: " << prop->value();
if (prop->value() == QString("connected")) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment