diff options
author | ꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id> | 2019-09-15 18:42:35 +0800 |
---|---|---|
committer | ꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id> | 2019-09-15 18:42:35 +0800 |
commit | cd679da218281c5716001a4e2055451ab9bcc926 (patch) | |
tree | 43c1a719690062d4c0f65bbff593b7e5e23b5eb9 |
A Qt Core based library that depends on librtclient
and can be used for a Qt based project
-rw-r--r-- | .gitignore | 7 | ||||
-rw-r--r-- | .gitmodules | 3 | ||||
-rw-r--r-- | COPYING | 20 | ||||
-rw-r--r-- | client.cxx | 34 | ||||
m--------- | librtclient | 0 | ||||
-rw-r--r-- | qrtclient.pro | 29 | ||||
-rw-r--r-- | qrtclient/client.hxx | 30 | ||||
-rw-r--r-- | qrtclient/ticket.hxx | 56 | ||||
-rw-r--r-- | qrtclient/user.hxx | 165 | ||||
-rw-r--r-- | ticket.cxx | 49 | ||||
-rw-r--r-- | user.cxx | 225 |
11 files changed, 618 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..984b9cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.pro.user +*.o +*.qmake.stash +*.so* +*.swp +Makefile +moc_* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8a122f9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "librtclient"] + path = librtclient + url = git@github.com:darapsa/librtclient.git @@ -0,0 +1,20 @@ +Copyright (c) 2019 Erik Prabowo Kamal + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/client.cxx b/client.cxx new file mode 100644 index 0000000..2f30b49 --- /dev/null +++ b/client.cxx @@ -0,0 +1,34 @@ +#include <rtclient/client.h> +#include "qrtclient/client.hxx" + +namespace RTClient { + + Client::Client(QString const& url) + { + rtclient_init(url.toLatin1().constData()); + } + + void Client::logIn(QString const& name, QString const& password) + { + rtclient_login(name.toLatin1().constData(), password.toLatin1().constData()); + struct rt_user* user = NULL; + rtclient_user_show(&user, name.toLatin1().constData()); + if (user) emit logged(user); + } + + void Client::search(QString const& owner) + { + QString query{"Owner='"}; + query.append(owner); + query.append("'"); + rt_ticketlist* taskList = NULL; + rtclient_ticket_search(&taskList, query.toLatin1().constData()); + if (taskList) emit foundTasks(taskList); + } + + Client::~Client() + { + rtclient_cleanup(); + } + +} diff --git a/librtclient b/librtclient new file mode 160000 +Subproject cb9020218b20470b483197dd6662c0fae3237e3 diff --git a/qrtclient.pro b/qrtclient.pro new file mode 100644 index 0000000..195110c --- /dev/null +++ b/qrtclient.pro @@ -0,0 +1,29 @@ +TEMPLATE = lib + +HEADERS += \ + qrtclient/user.hxx \ + qrtclient/ticket.hxx \ + qrtclient/client.hxx + +SOURCES += \ + user.cxx \ + ticket.cxx \ + client.cxx + +INCLUDEPATH += $$PWD/librtclient + +LIBS += \ + $$PWD/librtclient/librtclient.a \ + -lcurl + +contains(ANDROID_TARGET_ARCH,arm64-v8a) { + QMAKE_CFLAGS += -I/usr/local/aarch64-linux-android/sysroot/usr/include + LIBS += -L/usr/local/aarch64-linux-android/sysroot/usr/lib +} + +contains(ANDROID_TARGET_ARCH,armeabi-v7a) { + QMAKE_CFLAGS += -I/usr/local/arm-linux-androideabi/sysroot/usr/include + LIBS += -L/usr/local/arm-linux-androideabi/sysroot/usr/lib +} + +debug: DEFINES += DEBUG diff --git a/qrtclient/client.hxx b/qrtclient/client.hxx new file mode 100644 index 0000000..e32e83b --- /dev/null +++ b/qrtclient/client.hxx @@ -0,0 +1,30 @@ +#ifndef QRTCLIENT_HXX +#define QRTCLIENT_HXX + +#include <QObject> + +struct rt_user; +struct rt_ticketlist; + +namespace RTClient { + + class Client : public QObject + { + Q_OBJECT + + public: + Client(QString const& url); + ~Client(); + + public slots: + void logIn(QString const& name, QString const& password); + void search(QString const& owner); + + signals: + void logged(struct rt_user* user); + void foundTasks(struct rt_ticketlist* list); + }; + +} + +#endif // QRTCLIENT_HXX diff --git a/qrtclient/ticket.hxx b/qrtclient/ticket.hxx new file mode 100644 index 0000000..af438ae --- /dev/null +++ b/qrtclient/ticket.hxx @@ -0,0 +1,56 @@ +#ifndef QRTCLIENT_TICKET_HXX +#define QRTCLIENT_TICKET_HXX + +#include <QAbstractListModel> + +struct rt_ticketlist; + +namespace RTClient { + + class Ticket + { + public: + Ticket(QString subject) : m_subject{subject} {} + QString const& subject() const { return m_subject; } + + private: + QString m_subject; + }; + + class TicketList : public QAbstractListModel + { + Q_OBJECT + Q_PROPERTY(int rowCount READ rowCount NOTIFY rowCountChanged) + + public: + enum TicketRoles { + SubjectRole = Qt::UserRole + 1, + }; + + explicit TicketList(QObject* parent = nullptr) + : QAbstractListModel{parent} {} + ~TicketList() {} + + int rowCount(QModelIndex const& parent + = QModelIndex()) const Q_DECL_OVERRIDE; + QVariant data(const QModelIndex& index + , int role = Qt::DisplayRole + ) const Q_DECL_OVERRIDE; + + protected: + QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE; + + signals: + void rowCountChanged(); + + private: + QList<Ticket> tickets; + void addTicket(Ticket const& ticket); + + private slots: + void addTickets(struct rt_ticketlist* ticketList); + }; + +} + +#endif // QRTCLIENT_TICKET_HXX diff --git a/qrtclient/user.hxx b/qrtclient/user.hxx new file mode 100644 index 0000000..06d6a71 --- /dev/null +++ b/qrtclient/user.hxx @@ -0,0 +1,165 @@ +#ifndef QRTCLIENT_USER_HXX +#define QRTCLIENT_USER_HXX + +#include <QObject> + +struct rt_user; + +namespace RTClient { + + class User : public QObject + { + Q_OBJECT + Q_PROPERTY(QString id READ id WRITE setId NOTIFY idChanged) + Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged) + Q_PROPERTY(QString emailAddress READ emailAddress WRITE setEmailAddress NOTIFY emailAddressChanged) + Q_PROPERTY(QString realName READ realName WRITE setRealName NOTIFY realNameChanged) + Q_PROPERTY(QString nickName READ nickName WRITE setNickName NOTIFY nickNameChanged) + Q_PROPERTY(QString organization READ organization WRITE setOrganization NOTIFY organizationChanged) + Q_PROPERTY(QString address1 READ address1 WRITE setAddress1 NOTIFY address1Changed) + Q_PROPERTY(QString address2 READ address2 WRITE setAddress2 NOTIFY address2Changed) + Q_PROPERTY(QString city READ city WRITE setCity NOTIFY cityChanged) + Q_PROPERTY(QString state READ state WRITE setState NOTIFY stateChanged) + Q_PROPERTY(QString zip READ zip WRITE setZip NOTIFY zipChanged) + Q_PROPERTY(QString country READ country WRITE setCountry NOTIFY countryChanged) + Q_PROPERTY(QString homePhone READ homePhone WRITE setHomePhone NOTIFY homePhoneChanged) + Q_PROPERTY(QString workPhone READ workPhone WRITE setWorkPhone NOTIFY workPhoneChanged) + Q_PROPERTY(QString mobilePhone READ mobilePhone WRITE setMobilePhone NOTIFY mobilePhoneChanged) + Q_PROPERTY(QString pagerPhone READ pagerPhone WRITE setPagerPhone NOTIFY pagerPhoneChanged) + Q_PROPERTY(QString lang READ lang WRITE setLang NOTIFY langChanged) + Q_PROPERTY(bool privileged READ privileged WRITE setPrivileged NOTIFY privilegedChanged) + Q_PROPERTY(bool disabled READ disabled WRITE setDisabled NOTIFY disabledChanged) + Q_PROPERTY(bool loggedIn READ loggedIn WRITE setLoggedIn NOTIFY loggedInChanged) + + public: + explicit User(QObject* parent = nullptr) + : QObject{parent} + , m_id{""} + , m_name{""} + , m_password{""} + , m_emailAddress{""} + , m_realName{""} + , m_nickName{""} + , m_organization{""} + , m_gecos{""} + , m_address1{""} + , m_address2{""} + , m_city{""} + , m_state{""} + , m_zip{""} + , m_country{""} + , m_homePhone{""} + , m_workPhone{""} + , m_mobilePhone{""} + , m_pagerPhone{""} + , m_contactInfo{""} + , m_comments{""} + , m_lang{""} + , m_privileged{false} + , m_disabled{true} + , m_loggedIn{false} + {} + ~User() {} + + QString const& id() const { return m_id; } + QString const& name() const { return m_name; } + QString const& password() const { return m_password; } + QString const& emailAddress() const { return m_emailAddress; } + QString const& realName() const { return m_realName; } + QString const& nickName() const { return m_nickName; } + QString const& organization() const { return m_organization; } + QString const& address1() const { return m_address1; } + QString const& address2() const { return m_address2; } + QString const& city() const { return m_city; } + QString const& state() const { return m_state; } + QString const& zip() const { return m_zip; } + QString const& country() const { return m_country; } + QString const& homePhone() const { return m_homePhone; } + QString const& workPhone() const { return m_workPhone; } + QString const& mobilePhone() const { return m_mobilePhone; } + QString const& pagerPhone() const { return m_pagerPhone; } + QString const& lang() const { return m_lang; } + bool privileged() const { return m_privileged; } + bool disabled() const { return m_disabled; } + bool loggedIn() const { return m_loggedIn; } + + void setId(QString const& id); + void setName(QString const& name); + void setPassword(QString const& password); + void setEmailAddress(QString const& emailAddress); + void setRealName(QString const& realName); + void setNickName(QString const& nickName); + void setOrganization(QString const& organization); + void setAddress1(QString const& address1); + void setAddress2(QString const& address2); + void setCity(QString const& city); + void setState(QString const& state); + void setZip(QString const& zip); + void setCountry(QString const& country); + void setHomePhone(QString const& homePhone); + void setWorkPhone(QString const& workPhone); + void setMobilePhone(QString const& mobilePhone); + void setPagerPhone(QString const& pagerPhone); + void setLang(QString const& lang); + void setPrivileged(bool privileged); + void setDisabled(bool disabled); + void setLoggedIn(bool loggedIn); + + signals: + void idChanged(); + void nameChanged(); + void passwordChanged(); + void emailAddressChanged(); + void realNameChanged(); + void nickNameChanged(); + void organizationChanged(); + void gecosChanged(); + void address1Changed(); + void address2Changed(); + void cityChanged(); + void stateChanged(); + void zipChanged(); + void countryChanged(); + void homePhoneChanged(); + void workPhoneChanged(); + void mobilePhoneChanged(); + void pagerPhoneChanged(); + void langChanged(); + void privilegedChanged(); + void disabledChanged(); + void loggedInChanged(); + + private slots: + void update(struct rt_user* user); + + private: + QString m_id; + QString m_name; + QString m_password; + QString m_emailAddress; + QString m_realName; + QString m_nickName; + QString m_organization; + QString m_gecos; + QString m_address1; + QString m_address2; + QString m_city; + QString m_state; + QString m_zip; + QString m_country; + QString m_homePhone; + QString m_workPhone; + QString m_mobilePhone; + QString m_pagerPhone; + QString m_contactInfo; + QString m_comments; + QString m_lang; + bool m_privileged; + bool m_disabled; + bool m_loggedIn; + }; + +} + +#endif // QRTCLIENT_USER_HXX diff --git a/ticket.cxx b/ticket.cxx new file mode 100644 index 0000000..381e573 --- /dev/null +++ b/ticket.cxx @@ -0,0 +1,49 @@ +#include <rtclient/client.h> +#include "qrtclient/ticket.hxx" + +namespace RTClient { + + int TicketList::rowCount(QModelIndex const& parent) const + { + Q_UNUSED(parent) + return tickets.count(); + } + + QVariant TicketList::data(QModelIndex const& index, int role) const + { + auto row = index.row(); + + if (row < 0 || row >= tickets.count()) return QVariant(); + + auto ticket = tickets[row]; + switch (role) { + case SubjectRole: + return ticket.subject(); + default: + return QVariant(); + } + } + + QHash<int, QByteArray> TicketList::roleNames() const + { + return QHash<int, QByteArray>{ + {SubjectRole, "subject"} + }; + } + + void TicketList::addTicket(Ticket const& ticket) + { + beginInsertRows(QModelIndex(), rowCount(), rowCount()); + tickets << ticket; + endInsertRows(); + emit rowCountChanged(); + } + + void TicketList::addTickets(rt_ticketlist* ticketList) + { + for (unsigned int i = 0; i < ticketList->length; i++) + addTicket(Ticket{ticketList->tickets[i]}); + rtclient_ticket_freelist(ticketList); + } + +} diff --git a/user.cxx b/user.cxx new file mode 100644 index 0000000..3c22df4 --- /dev/null +++ b/user.cxx @@ -0,0 +1,225 @@ +#include <rtclient/client.h> +#include "qrtclient/user.hxx" + +namespace RTClient { + + void User::setId(QString const& id) + { + if (m_id != id) { + m_id = id; + emit idChanged(); + } + } + + void User::setName(QString const& name) + { + if (m_name != name) { + m_name = name; + emit nameChanged(); + } + } + + void User::setPassword(QString const& password) + { + if (m_password != password) { + m_password = password; + emit passwordChanged(); + } + } + + void User::setEmailAddress(QString const& emailAddress) + { + if (m_emailAddress != emailAddress) { + m_emailAddress = emailAddress; + emit emailAddressChanged(); + } + } + + void User::setRealName(QString const& realName) + { + if (m_realName != realName) { + m_realName = realName; + emit realNameChanged(); + } + } + + void User::setNickName(QString const& nickName) + { + if (m_nickName != nickName) { + m_nickName = nickName; + emit nickNameChanged(); + } + } + + void User::setOrganization(QString const& organization) + { + if (m_organization != organization) { + m_organization = organization; + emit organizationChanged(); + } + } + + void User::setAddress1(QString const& address1) + { + if (m_address1 != address1) { + m_address1 = address1; + emit address1Changed(); + } + } + + void User::setAddress2(QString const& address2) + { + if (m_address2 != address2) { + m_address2 = address2; + emit address2Changed(); + } + } + + void User::setCity(QString const& city) + { + if (m_city != city) { + m_city = city; + emit cityChanged(); + } + } + + void User::setState(QString const& state) + { + if (m_state != state) { + m_state = state; + emit stateChanged(); + } + } + + void User::setZip(QString const& zip) + { + if (m_zip != zip) { + m_zip = zip; + emit zipChanged(); + } + } + + void User::setCountry(QString const& country) + { + if (m_country != country) { + m_country = country; + emit countryChanged(); + } + } + + void User::setHomePhone(QString const& homePhone) + { + if (m_homePhone != homePhone) { + m_homePhone = homePhone; + emit homePhoneChanged(); + } + } + + void User::setWorkPhone(QString const& workPhone) + { + if (m_workPhone != workPhone) { + m_workPhone = workPhone; + emit workPhoneChanged(); + } + } + + void User::setMobilePhone(QString const& mobilePhone) + { + if (m_mobilePhone != mobilePhone) { + m_mobilePhone = mobilePhone; + emit mobilePhoneChanged(); + } + } + + void User::setPagerPhone(QString const& pagerPhone) + { + if (m_pagerPhone != pagerPhone) { + m_pagerPhone = pagerPhone; + emit pagerPhoneChanged(); + } + } + + void User::setLang(QString const& lang) + { + if (m_lang != lang) { + m_lang = lang; + emit langChanged(); + } + } + + void User::setPrivileged(bool privileged) + { + if (m_privileged != privileged) { + m_privileged = privileged; + emit privilegedChanged(); + } + } + + void User::setDisabled(bool disabled) + { + if (m_disabled != disabled) { + m_disabled = disabled; + emit disabledChanged(); + } + } + + void User::setLoggedIn(bool loggedIn) + { + if (m_loggedIn != loggedIn) { + m_loggedIn = loggedIn; + emit loggedInChanged(); + } + } + + void User::update(rt_user* user) + { + if (user) { + m_id = user->id; + m_emailAddress = user->emailaddress; + emit emailAddressChanged(); + m_realName = user->realname; + emit realNameChanged(); + m_nickName = user->nickname; + m_gecos = user->gecos; + m_organization = user->organization; + m_address1 = user->address1; + m_address2 = user->address2; + m_city = user->city; + m_state = user->state; + m_zip = user->zip; + m_country = user->country; + m_homePhone = user->homephone; + m_workPhone = user->workphone; + m_mobilePhone = user->mobilephone; + m_pagerPhone = user->pagerphone; + m_lang = user->lang; + m_privileged = user->privileged; + m_disabled = user->disabled; + m_loggedIn = true; + rtclient_user_free(user); + } else { + m_id = ""; + m_name = ""; + m_password = ""; + m_emailAddress = ""; + m_realName = ""; + m_nickName = ""; + m_organization = ""; + m_address1 = ""; + m_address2 = ""; + m_city = ""; + m_state = ""; + m_zip = ""; + m_country = ""; + m_homePhone = ""; + m_workPhone = ""; + m_mobilePhone = ""; + m_pagerPhone = ""; + m_lang = ""; + m_privileged = false; + m_disabled = true; + m_loggedIn = false; + } + } + +} |