From a1e538564d4b2a60be70a32ec39afdba249ce37d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=A6=8C=EA=A6=AB=EA=A6=B6=EA=A6=8F=EA=A7=80=EA=A6=A6?= =?UTF-8?q?=EA=A6=BF=EA=A6=A7=EA=A6=AE=EA=A6=91=EA=A6=A9=EA=A6=AD=EA=A7=80?= Date: Wed, 9 Jun 2021 19:55:28 +0800 Subject: Add support for Emscripten --- CMakeLists.txt | 24 ++++++++++++++++++------ admin.cxx | 3 ++- catalog.cxx | 1 + client.cxx | 14 ++++++++------ libicclient | 2 +- member.cxx | 3 ++- qicclient/admin.hxx | 4 ++-- qicclient/client.hxx | 15 +++++++++------ qicclient/member.hxx | 4 ++-- 9 files changed, 45 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 852c035..15a39d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,21 +6,33 @@ find_package(Qt5Core) set(HDRS ${PROJECT_NAME}/product.hxx ${PROJECT_NAME}/catalog.hxx - ${PROJECT_NAME}/ord.hxx - ${PROJECT_NAME}/member.hxx - ${PROJECT_NAME}/admin.hxx ${PROJECT_NAME}/client.hxx ) +if (NOT EMSCRIPTEN) + set(HDRS + ${HDRS} + ${PROJECT_NAME}/ord.hxx + ${PROJECT_NAME}/member.hxx + ${PROJECT_NAME}/admin.hxx + ) +endif() + set(SRCS ${HDRS} catalog.cxx - ord.cxx - member.cxx - admin.cxx client.cxx ) +if (NOT EMSCRIPTEN) + set(SRCS + ${SRCS} + ord.cxx + member.cxx + admin.cxx + ) +endif() + if (EMSCRIPTEN OR IOS) add_library(${PROJECT_NAME} STATIC ${SRCS}) else() diff --git a/admin.cxx b/admin.cxx index f59082f..97f036e 100644 --- a/admin.cxx +++ b/admin.cxx @@ -1,5 +1,6 @@ #include #include +#include #include #include "qicclient/admin.hxx" @@ -8,7 +9,7 @@ namespace QICClient { std::shared_ptr Admin::logIn(QString const& username, QString const& password, QString const& successPage, QString const& nextPage, QString const& failPage, - size_t (*handler)(void*, size_t, size_t, void*)) + icclient_handler handler) { auto admin = new Admin{}; admin->setData(icclient_admin_login(username.toLatin1().constData(), diff --git a/catalog.cxx b/catalog.cxx index a4bf800..2fdd826 100644 --- a/catalog.cxx +++ b/catalog.cxx @@ -1,5 +1,6 @@ #include #include +#include #include #include "qicclient/catalog.hxx" diff --git a/client.cxx b/client.cxx index edb1c84..ff28eaa 100644 --- a/client.cxx +++ b/client.cxx @@ -1,10 +1,12 @@ #include #include #include +#include #include -#include #include "qicclient/catalog.hxx" +#ifndef __EMSCRIPTEN__ #include "qicclient/ord.hxx" +#endif #include "qicclient/client.hxx" namespace QICClient { @@ -19,29 +21,28 @@ namespace QICClient { icclient_cleanup(); } - void Client::results(QString const& prodGroup, - size_t (*handler)(void*, size_t, size_t, void*)) + void Client::results(QString const& prodGroup, icclient_handler handler) { icclient_catalog* catalog = nullptr; icclient_results(prodGroup.toLatin1().constData(), handler, &catalog); if (catalog) emit gotResults(new Catalog{catalog}); } - void Client::allProducts(size_t (*handler)(void*, size_t, size_t, void*)) + void Client::allProducts(icclient_handler handler) { icclient_catalog* catalog = nullptr; icclient_allproducts(handler, &catalog); if (catalog) emit gotResults(new Catalog{catalog}); } - void Client::flyPage(QString const& sku, - size_t (*handler)(void*, size_t, size_t, void*)) + void Client::flyPage(QString const& sku,icclient_handler handler) { icclient_product* product = nullptr; icclient_flypage(sku.toLatin1().constData(), handler, &product); if (product) emit gotFlyPage(shared_ptr{new Product{product}}); } +#ifndef __EMSCRIPTEN__ void Client::order(QString const& sku, Catalog const& catalog, Ord& order) { auto c_order = order.data(); @@ -49,5 +50,6 @@ namespace QICClient { &c_order); order.setData(c_order); } +#endif } diff --git a/libicclient b/libicclient index 37b3483..c6e5f42 160000 --- a/libicclient +++ b/libicclient @@ -1 +1 @@ -Subproject commit 37b3483ea690318b9dfcbc840bfc8dd0d959b642 +Subproject commit c6e5f421e2738b6005f6c3da6700b1343214f7e5 diff --git a/member.cxx b/member.cxx index 82222bb..bd7b02f 100644 --- a/member.cxx +++ b/member.cxx @@ -1,5 +1,6 @@ #include #include +#include #include #include "qicclient/member.hxx" @@ -8,7 +9,7 @@ namespace QICClient { std::shared_ptr Member::logIn(QString const& username, QString const& password, QString const& successPage, QString const& nextPage, QString const& failPage, - size_t (*handler)(void*, size_t, size_t, void*)) + icclient_handler handler) { auto member = new Member{}; member->setData(icclient_member_login(username.toLatin1().constData(), diff --git a/qicclient/admin.hxx b/qicclient/admin.hxx index f19f167..c123a2d 100644 --- a/qicclient/admin.hxx +++ b/qicclient/admin.hxx @@ -2,6 +2,7 @@ #define QICCLIENT_ADMIN_HXX #include +#include #include struct icclient_admin; @@ -31,8 +32,7 @@ namespace QICClient { QString const& successPage = nullptr, QString const& nextPage = nullptr, QString const& failPage = nullptr, - size_t (*handler)(void*, size_t, size_t, - void*) = nullptr); + icclient_handler handler = nullptr); QString const& userName() const { return m_userName; } QString const& password() const { return m_password; } diff --git a/qicclient/client.hxx b/qicclient/client.hxx index 488a093..dfe1888 100644 --- a/qicclient/client.hxx +++ b/qicclient/client.hxx @@ -2,12 +2,15 @@ #define QICCLIENT_CLIENT_HXX #include +#include namespace QICClient { using std::shared_ptr; class Catalog; +#ifndef __EMSCRIPTEN__ class Ord; +#endif class Client : public QObject { @@ -27,23 +30,22 @@ namespace QICClient { * \param prodGroup The name of the product group. * \param handler A pointer to a cURL write function callback. */ - void results(QString const& prodGroup, - size_t (*handler)(void*, size_t, size_t, void*)); + void results(QString const& prodGroup, icclient_handler handler); /*! * \brief For fetching data about all active products. * \param handler A pointer to a cURL write function callback. */ - void allProducts(size_t (*handler)(void*, size_t, size_t, void*)); + void allProducts(icclient_handler handler); /*! * \brief For fetching data about a specific product. * \param sku The SKU of the item to order. * \param handler A pointer to a cURL write function callback. */ - void flyPage(QString const& sku, - size_t (*handler)(void*, size_t, size_t, void*)); + void flyPage(QString const& sku, icclient_handler handler); +#ifndef __EMSCRIPTEN__ /*! * \brief For putting an item to a cart. * \param sku The SKU of the item to order. @@ -51,6 +53,7 @@ namespace QICClient { * \param order The order. */ void order(QString const& sku, Catalog const& catalog, Ord& order); +#endif signals: void gotResults(Catalog* catalog); @@ -59,4 +62,4 @@ namespace QICClient { } -#endif // QICCLIENT_CLIENT_HXX +#endif diff --git a/qicclient/member.hxx b/qicclient/member.hxx index fc3c77e..4e8010f 100644 --- a/qicclient/member.hxx +++ b/qicclient/member.hxx @@ -2,6 +2,7 @@ #define QICCLIENT_MEMBER_HXX #include +#include #include struct icclient_member; @@ -61,8 +62,7 @@ namespace QICClient { QString const& successPage = nullptr, QString const& nextPage = nullptr, QString const& failPage = nullptr, - size_t (*handler)(void*, size_t, size_t, - void*) = nullptr); + icclient_handler handler = nullptr); QString const& userName() const { return m_userName; } QString const& userNick() const { return m_userNick; } -- cgit v1.2.3