diff options
Diffstat (limited to 'controller.cxx')
| -rw-r--r-- | controller.cxx | 82 |
1 files changed, 46 insertions, 36 deletions
diff --git a/controller.cxx b/controller.cxx index aa676af..c1dd2ca 100644 --- a/controller.cxx +++ b/controller.cxx @@ -11,57 +11,67 @@ static Client* shop = nullptr; static Catalog* allProducts = nullptr; extern "C" { - void sign_up(char const*, char const*, void (*)(icclient_response*)); + void sign_up(char const*, char const*, void (*)(icclient_response*)); struct icclient_catalog* catalog(char const*, char const*); } Controller::Controller(QObject* parent) : QObject{parent} { controller = this; - engine = static_cast<QQmlApplicationEngine*>(parent); + engine = qobject_cast<QQmlApplicationEngine*>(parent); engine->load(QUrl{QStringLiteral("qrc:/main.qml")}); auto window = engine->rootObjects()[0]; - connect(window, SIGNAL(signUp(QString)), this, SIGNAL(signUp(QString))); - connect(this, &Controller::signUp, [](QString const& brand) { + connect(window, SIGNAL(signUp(QString)), this, SLOT(signUp(QString))); +} + +void Controller::signUp(QString const& brand) +{ #ifdef __ANDROID__ - QString certAsset{CA_BUNDLE}; - certFile = new QString{QDir{ - QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) - }.absolutePath() % certAsset.remove(0, certAsset.lastIndexOf("/"))}; - QFile{"assets:" % certAsset}.copy(*certFile); + QString certAsset{CA_BUNDLE}; + certFile = new QString{QDir{ + QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + }.absolutePath() % certAsset.remove(0, certAsset.lastIndexOf("/"))}; + QFile{"assets:" % certAsset}.copy(*certFile); #endif - sign_up(brand.toLatin1().constData(), certFile ? certFile->toLatin1().constData() : nullptr, - [](icclient_response* response) { - const_cast<char*>(response->data)[response->numBytes] = '\0'; - QString brand{response->data}; - icclient_free_response(response); - QString sampleUrl{QString{SECURE_SERVER} % "/" % brand}; - QString imageDir{"/" % brand % "/images"}; - shop = new Client{ - sampleUrl.toLatin1().constData(), - imageDir.toLatin1().constData(), - certFile ? certFile->toLatin1().constData() : nullptr - }; - if (certFile) delete certFile; - auto window = engine->rootObjects()[0]; - window->setProperty("imageBase", QString{sampleUrl % "/images/"}); - controller->connect(shop, &Client::gotCatalog, - [imageDir,window](QString const& response) { - allProducts = new Catalog{catalog( - response.toLatin1().constData(), - imageDir.toLatin1().constData())}; - engine->rootContext()->setContextProperty("catalog", - allProducts); - QMetaObject::invokeMethod(window, "pushCatalog"); - }); - shop->allProducts(); - } - ); + sign_up(brand.toLatin1().constData(), certFile ? certFile->toLatin1().constData() : nullptr, + [](icclient_response* response) { + const_cast<char*>(response->data)[response->numBytes] = '\0'; + QString brand{response->data}; + icclient_free_response(response); + auto window = engine->rootObjects()[0]; + QMetaObject::invokeMethod(window, "push", Q_ARG(QVariant, "Link"), Q_ARG(QVariant, brand)); + controller->connect(window, SIGNAL(pushed()), controller, SIGNAL(pushed())); + controller->connect(controller, &Controller::pushed, [window]() { + controller->connect(window->findChild<QObject*>("link"), SIGNAL(catalog(QString)), + controller, SLOT(catalog(QString))); + }); + }); +} + +void Controller::catalog(QString const& brand) +{ + QString sampleUrl{QString{SECURE_SERVER} % "/" % brand}; + QString imageDir{"/" % brand % "/images"}; + shop = new Client{sampleUrl.toLatin1().constData(), imageDir.toLatin1().constData(), + certFile ? certFile->toLatin1().constData() : nullptr}; + if (certFile) { + delete certFile; + certFile = nullptr; + } + connect(shop, &Client::gotCatalog, [sampleUrl,imageDir](QString const& response) { + allProducts = new Catalog{::catalog(response.toLatin1().constData(), + imageDir.toLatin1().constData())}; + engine->rootContext()->setContextProperty("catalog", allProducts); + QMetaObject::invokeMethod(engine->rootObjects()[0]->findChild<QObject*>("link"), "push", + Q_ARG(QVariant, "Catalog"), + Q_ARG(QVariant, QString{sampleUrl % "/images/"})); }); + shop->allProducts(); } Controller::~Controller() { + if (certFile) delete certFile; if (allProducts) delete allProducts; if (shop) delete shop; } |