diff options
Diffstat (limited to 'qicclient')
-rw-r--r-- | qicclient/catalog.hxx | 81 | ||||
-rw-r--r-- | qicclient/client.hxx | 9 |
2 files changed, 90 insertions, 0 deletions
diff --git a/qicclient/catalog.hxx b/qicclient/catalog.hxx new file mode 100644 index 0000000..07b4c81 --- /dev/null +++ b/qicclient/catalog.hxx @@ -0,0 +1,81 @@ +#ifndef QICCLIENT_CATALOG_HXX +#define QICCLIENT_CATALOG_HXX + +#include <QAbstractListModel> +#include <QLocale> +#include <icclient/product.h> + +struct icclient_catalog; + +namespace ICClient { + + class Product + { + public: + Product(icclient_product* product) : m_sku{product->sku} + { + if (product->description) + m_description + = QString{product->description}; + if (product->comment) + m_comment = QString{product->comment}; + if (product->image) + m_image = QString{product->image}; + QLocale locale; + if (product->price) + m_price = locale.toCurrencyString + (product->price, "Rp"); + } + QString const& sku() const { return m_sku; } + QString const& description() const { return m_description; } + QString const& comment() const { return m_comment; } + QString const& image() const { return m_image; } + QString const& price() const { return m_price; } + + private: + QString m_sku; + QString m_description; + QString m_comment; + QString m_image; + QString m_price; + }; + + class Catalog : public QAbstractListModel + { + Q_OBJECT + + public: + enum ProductRoles { + SkuRole = Qt::UserRole + 1, + DescriptionRole, + CommentRole, + ImageRole, + PriceRole + }; + + explicit Catalog(QObject* parent = nullptr) + : QAbstractListModel{parent} {} + + int rowCount(QModelIndex const& parent + = QModelIndex()) const Q_DECL_OVERRIDE; + QVariant data(const QModelIndex& index + , int role = Qt::DisplayRole + ) const Q_DECL_OVERRIDE; + + signals: + void updated(); + + protected: + QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE; + + private slots: + void update(icclient_catalog* catalog); + + private: + QList<Product> products; + void addProduct(Product const& product); + }; + +} + +#endif // QICCLIENT_CATALOG_HXX diff --git a/qicclient/client.hxx b/qicclient/client.hxx index 14c3652..27ba2af 100644 --- a/qicclient/client.hxx +++ b/qicclient/client.hxx @@ -2,6 +2,9 @@ #define QRTCLIENT_CLIENT_HXX #include <QObject> +#include <icclient/product.h> + +struct icclient_catalog; namespace ICClient { @@ -13,11 +16,17 @@ namespace ICClient { Client(char const* url, char const* certificate = nullptr); ~Client(); + void productAll(icclient_catalog** catalogptr + , size_t (*callback)(void* contents + , size_t size, size_t nmemb + , void* userdata)); + public slots: void logIn(QString const& username, QString const& password); void logOut(); signals: + void gotProductAll(icclient_catalog* catalog); void loggedIn(QString const& username); void loggedOut(); }; |