summaryrefslogtreecommitdiff
path: root/controller.cxx
diff options
context:
space:
mode:
authorꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id>2021-07-12 10:54:05 +0800
committerꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id>2021-07-12 10:54:05 +0800
commite5429cf6eb8f83be50b4fb7d764375f7c3713265 (patch)
treef5a400d5b7373350544c57a212e8f458d8a0b581 /controller.cxx
parentb3f865c86c7a000efec39222c4c22b53f757f1b6 (diff)
Link view to give it some delay
before user goes to their catalog. Update the handler to conform to the updated shop results page. Make the stack push relation more generic, that what view gets pushed is decided in the C++ controller, not the QML views. Refactor code.
Diffstat (limited to 'controller.cxx')
-rw-r--r--controller.cxx82
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;
}