M .idea/runConfigurations/PurePhone.xml => .idea/runConfigurations/PurePhone.xml +1 -1
@@ 1,5 1,5 @@
<component name="ProjectRunConfigurationManager">
- <configuration default="false" name="PurePhone" type="CMakeRunConfiguration" factoryName="Application" activateToolWindowBeforeRun="false" WORKING_DIR="file://$PROJECT_DIR$/build-linux" PASS_PARENT_ENVS_2="true" PROJECT_NAME="PurePhone" TARGET_NAME="PurePhone" CONFIG_NAME="Linux" RUN_TARGET_PROJECT_NAME="PurePhone" RUN_TARGET_NAME="PurePhone">
+ <configuration default="false" name="PurePhone" type="CMakeRunConfiguration" factoryName="Application" activateToolWindowBeforeRun="false" REDIRECT_INPUT="false" WORKING_DIR="file://$CMakeCurrentBuildDir$" PASS_PARENT_ENVS_2="true" PROJECT_NAME="PurePhone" TARGET_NAME="PurePhone" CONFIG_NAME="Linux" RUN_TARGET_PROJECT_NAME="PurePhone" RUN_TARGET_NAME="PurePhone">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
M changelog.md => changelog.md +3 -0
@@ 38,6 38,9 @@
* `[gui]` Fixed label padding handling.
* `[settings]` Fixed settings info.
+### Other
+* `[desktop]` Rewritten message handling.
+
## [0.34.2 - 2020-08-21]
### Changed
M module-apps/DatabaseModel.hpp => module-apps/DatabaseModel.hpp +1 -1
@@ 57,7 57,7 @@ namespace app
{
auto index = modelIndex;
- if ((index < 0) || (index >= records.size())) {
+ if (index >= records.size()) {
return nullptr;
}
M module-db/Common/Query.cpp => module-db/Common/Query.cpp +7 -7
@@ 5,23 5,23 @@
using namespace db;
-Query::Query(Type type, QueryListener *listener) : type(type), listener(listener)
+Query::Query(Type type, QueryListener *listener) : type(type), queryListener(listener)
{}
QueryListener *Query::getQueryListener() const noexcept
{
- return listener;
+ return queryListener;
}
-void Query::setQueryListener(QueryListener *queryListener) noexcept
+void Query::setQueryListener(QueryListener *listener) noexcept
{
- listener = queryListener;
+ queryListener = listener;
}
-void Query::setQueryListener(std::unique_ptr<EndpointListener> _listener) noexcept
+void Query::setQueryListener(std::unique_ptr<QueryListener> listener) noexcept
{
- endpointListener = std::move(_listener);
- listener = dynamic_cast<QueryListener *>(endpointListener.get());
+ queryListenerUniqueptr = std::move(listener);
+ queryListener = dynamic_cast<QueryListener *>(queryListenerUniqueptr.get());
}
QueryResult::QueryResult(std::shared_ptr<Query> requestQuery) : requestQuery(std::move(requestQuery))
M module-db/Common/Query.hpp => module-db/Common/Query.hpp +14 -9
@@ 4,6 4,9 @@
#include <string>
#include <functional>
#include <log/log.hpp>
+#include <module-services/service-desktop/endpoints/Context.hpp>
+
+using namespace parserFSM;
namespace db
{
@@ 13,25 16,27 @@ namespace db
{
public:
virtual bool handleQueryResponse(QueryResult *) = 0;
+ virtual ~QueryListener() = default;
};
- using QueryCallback = std::function<bool(db::QueryResult *, uint32_t)>;
+ using QueryCallback = std::function<bool(db::QueryResult *, Context &)>;
class EndpointListener : public db::QueryListener
{
private:
- uint32_t uuid;
+ Context context = Context();
public:
- EndpointListener(QueryCallback _callback, uint32_t uuid) : uuid(uuid), callback(std::move(_callback)){};
+ EndpointListener(QueryCallback callback, Context &context)
+ : context(std::move(context)), callback(std::move(callback)){};
EndpointListener() : callback(nullptr){};
- ~EndpointListener() = default;
- QueryCallback callback;
+ ~EndpointListener() = default;
+ QueryCallback callback = nullptr;
auto handleQueryResponse(db::QueryResult *result) -> bool override
{
if (callback != nullptr) {
LOG_DEBUG("Executing callback...");
- auto ret = callback(result, uuid);
+ auto ret = callback(result, context);
LOG_DEBUG("Callback finished");
return ret;
}
@@ 60,15 65,15 @@ namespace db
QueryListener *getQueryListener() const noexcept;
void setQueryListener(QueryListener *queryListener) noexcept;
- void setQueryListener(std::unique_ptr<EndpointListener> listener) noexcept;
+ void setQueryListener(std::unique_ptr<QueryListener> listener) noexcept;
const Type type;
[[nodiscard]] virtual auto debugInfo() const -> std::string = 0;
private:
- QueryListener *listener = nullptr;
- std::unique_ptr<EndpointListener> endpointListener = nullptr;
+ QueryListener *queryListener = nullptr;
+ std::unique_ptr<QueryListener> queryListenerUniqueptr = nullptr;
};
/// virtual query output (result) interface
M module-db/Interface/ContactRecord.cpp => module-db/Interface/ContactRecord.cpp +93 -59
@@ 142,6 142,32 @@ std::unique_ptr<db::QueryResult> ContactRecordInterface::runQuery(std::shared_pt
return nullptr;
}
+ if (typeid(*query) == typeid(db::query::ContactGet)) {
+ return getQuery(query);
+ }
+ else if (typeid(*query) == typeid(db::query::ContactGetByID)) {
+ return getByIDQuery(query);
+ }
+ else if (typeid(*query) == typeid(db::query::ContactGetSize)) {
+ return getSizeQuery(query);
+ }
+ else if (typeid(*query) == typeid(db::query::ContactAdd)) {
+ return addQuery(query);
+ }
+ else if (typeid(*query) == typeid(db::query::ContactUpdate)) {
+ return updateQuery(query);
+ }
+ else if (typeid(*query) == typeid(db::query::ContactRemove)) {
+ return removeQuery(query);
+ }
+ else {
+ LOG_ERROR("Unexpected query type.");
+ return nullptr;
+ }
+}
+
+std::unique_ptr<db::QueryResult> ContactRecordInterface::getQuery(std::shared_ptr<db::Query> query)
+{
auto textFilter = dynamic_cast<const db::query::TextFilter *>(query.get());
assert(query != nullptr);
bool searchByNumber = false;
@@ 150,8 176,6 @@ std::unique_ptr<db::QueryResult> ContactRecordInterface::runQuery(std::shared_pt
LOG_INFO("Filtering by number: %s", textFilter->getFilterData().c_str());
}
- if (typeid(*query) == typeid(db::query::ContactGet)) {
-
auto readQuery = static_cast<const db::query::ContactGet *>(query.get());
LOG_DEBUG("Contact read query, filter: \"%s\", offset=%lu, limit=%lu",
readQuery->getFilterData().c_str(),
@@ 178,71 202,81 @@ std::unique_ptr<db::QueryResult> ContactRecordInterface::runQuery(std::shared_pt
auto response = std::make_unique<db::query::ContactGetResult>(result);
response->setRequestQuery(query);
return response;
+}
+
+std::unique_ptr<db::QueryResult> ContactRecordInterface::getByIDQuery(std::shared_ptr<db::Query> query)
+{
+ auto readQuery = static_cast<db::query::ContactGetByID *>(query.get());
+ auto record = ContactRecordInterface::GetByID(readQuery->getID());
+ auto response = std::make_unique<db::query::ContactGetByIDResult>(record);
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> ContactRecordInterface::getSizeQuery(std::shared_ptr<db::Query> query)
+{
+ auto textFilter = dynamic_cast<const db::query::TextFilter *>(query.get());
+ assert(query != nullptr);
+ bool searchByNumber = false;
+ if (textFilter != nullptr && textFilter->isFilterPresent() && utils::is_number(textFilter->getFilterData())) {
+ searchByNumber = true;
+ LOG_INFO("Filtering by number: %s", textFilter->getFilterData().c_str());
}
- else if (typeid(*query) == typeid(db::query::ContactGetByID)) {
- auto readQuery = static_cast<db::query::ContactGetByID *>(query.get());
- auto record = ContactRecordInterface::GetByID(readQuery->getID());
- LOG_DEBUG("ID: %d", readQuery->getID());
- auto response = std::make_unique<db::query::ContactGetByIDResult>(record);
- response->setRequestQuery(query);
- return response;
- }
- else if (typeid(*query) == typeid(db::query::ContactGetSize)) {
- auto countQuery = static_cast<const db::query::ContactGetSize *>(query.get());
- LOG_DEBUG("Contact count query, filter: \"%s\"", countQuery->getFilterData().c_str());
-
- std::size_t count = 0;
- if (!countQuery->isFilterPresent()) {
- uint32_t groupID = countQuery->getGroupFilterData();
- if (groupID != DB_ID_NONE) {
- count = contactDB->contacts
- .GetIDsSortedByField(ContactsTable::MatchType::Group, countQuery->getFilterData(), groupID)
- .size();
- }
- else
- count = contactDB->contacts.count();
- }
- else if (searchByNumber) {
+
+ auto countQuery = static_cast<const db::query::ContactGetSize *>(query.get());
+ LOG_DEBUG("Contact count query, filter: \"%s\"", countQuery->getFilterData().c_str());
+
+ std::size_t count = 0;
+ if (!countQuery->isFilterPresent()) {
+ uint32_t groupID = countQuery->getGroupFilterData();
+ if (groupID != DB_ID_NONE) {
count = contactDB->contacts
- .GetIDsSortedByField(
- ContactsTable::MatchType::TextNumber, countQuery->getFilterData(), favouritesGroupId)
+ .GetIDsSortedByField(ContactsTable::MatchType::Group, countQuery->getFilterData(), groupID)
.size();
}
- else {
- count = contactDB->name.GetCountByName(countQuery->getFilterData());
- }
-
- LOG_DEBUG("Contact count query result: %lu", static_cast<unsigned long>(count));
-
- auto response = std::make_unique<db::query::RecordsSizeQueryResult>(count);
- response->setRequestQuery(query);
- return response;
- }
- else if (typeid(*query) == typeid(db::query::ContactAdd)) {
- auto addQuery = static_cast<const db::query::ContactAdd *>(query.get());
- auto ret = ContactRecordInterface::Add(addQuery->rec);
- auto response = std::make_unique<db::query::ContactAddResult>(ret);
- response->setRequestQuery(query);
- return response;
- }
- else if (typeid(*query) == typeid(db::query::ContactUpdate)) {
- auto updateQuery = static_cast<const db::query::ContactUpdate *>(query.get());
- auto ret = ContactRecordInterface::Update(updateQuery->rec);
- auto response = std::make_unique<db::query::ContactUpdateResult>(ret);
- response->setRequestQuery(query);
- return response;
+ else
+ count = contactDB->contacts.count();
}
- else if (typeid(*query) == typeid(db::query::ContactRemove)) {
- auto removeQuery = static_cast<db::query::ContactRemove *>(query.get());
- auto ret = ContactRecordInterface::RemoveByID(removeQuery->getID());
- auto response = std::make_unique<db::query::ContactRemoveResult>(ret);
- response->setRequestQuery(query);
- return response;
+ else if (searchByNumber) {
+ count = contactDB->contacts
+ .GetIDsSortedByField(
+ ContactsTable::MatchType::TextNumber, countQuery->getFilterData(), favouritesGroupId)
+ .size();
}
else {
- LOG_ERROR("Unexpected query type.");
- return nullptr;
+ count = contactDB->name.GetCountByName(countQuery->getFilterData());
}
+
+ LOG_DEBUG("Contact count query result: %lu", static_cast<unsigned long>(count));
+
+ auto response = std::make_unique<db::query::RecordsSizeQueryResult>(count);
+ response->setRequestQuery(query);
+ return response;
+}
+
+std::unique_ptr<db::QueryResult> ContactRecordInterface::addQuery(std::shared_ptr<db::Query> query)
+{
+ auto addQuery = static_cast<const db::query::ContactAdd *>(query.get());
+ auto ret = ContactRecordInterface::Add(addQuery->rec);
+ auto response = std::make_unique<db::query::ContactAddResult>(ret);
+ response->setRequestQuery(query);
+ return response;
+}
+
+std::unique_ptr<db::QueryResult> ContactRecordInterface::updateQuery(std::shared_ptr<db::Query> query)
+{
+ auto updateQuery = static_cast<const db::query::ContactUpdate *>(query.get());
+ auto ret = ContactRecordInterface::Update(updateQuery->rec);
+ auto response = std::make_unique<db::query::ContactUpdateResult>(ret);
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> ContactRecordInterface::removeQuery(std::shared_ptr<db::Query> query)
+{
+ auto removeQuery = static_cast<db::query::ContactRemove *>(query.get());
+ auto ret = ContactRecordInterface::RemoveByID(removeQuery->getID());
+ auto response = std::make_unique<db::query::ContactRemoveResult>(ret);
+ response->setRequestQuery(query);
+ return response;
}
std::vector<std::uint32_t> ContactRecordInterface::splitNumberIDs(const std::string &numberIDs)
M module-db/Interface/ContactRecord.hpp => module-db/Interface/ContactRecord.hpp +6 -0
@@ 186,4 186,10 @@ class ContactRecordInterface : public RecordInterface<ContactRecord, ContactReco
bool unbindNumber(std::uint32_t contactId, std::uint32_t numberId);
const std::uint32_t favouritesGroupId;
+ std::unique_ptr<db::QueryResult> getQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> getByIDQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> getSizeQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> addQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> updateQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> removeQuery(std::shared_ptr<db::Query> query);
};
M module-db/Interface/SMSRecord.cpp => module-db/Interface/SMSRecord.cpp +108 -82
@@ 297,100 297,25 @@ SMSRecord SMSRecordInterface::GetByID(uint32_t id)
std::unique_ptr<db::QueryResult> SMSRecordInterface::runQuery(std::shared_ptr<db::Query> query)
{
if (typeid(*query) == typeid(db::query::SMSSearchByType)) {
- return runQueryImpl(dynamic_cast<const db::query::SMSSearchByType *>(query.get()));
+ return runQueryImpl(static_cast<const db::query::SMSSearchByType *>(query.get()));
}
else if (typeid(*query) == typeid(db::query::SMSGetByID)) {
- const auto localQuery = dynamic_cast<const db::query::SMSGetByID *>(query.get());
- auto sms = smsDB->sms.getById(localQuery->id);
- SMSRecord record;
-
- record.body = sms.body;
- record.contactID = sms.contactID;
- record.date = sms.date;
- record.dateSent = sms.dateSent;
- record.errorCode = sms.errorCode;
- record.threadID = sms.threadID;
- record.type = sms.type;
- record.ID = sms.ID;
- auto response = std::make_unique<db::query::SMSGetByIDResult>(record);
- response->setRequestQuery(query);
- return response;
+ return getByIDQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSGetByContactID)) {
- const auto localQuery = dynamic_cast<const db::query::SMSGetByContactID *>(query.get());
- auto smsVector = smsDB->sms.getByContactId(localQuery->contactId);
- std::vector<SMSRecord> recordVector;
- for (auto sms : smsVector) {
- SMSRecord record;
- record.body = sms.body;
- record.contactID = sms.contactID;
- record.date = sms.date;
- record.dateSent = sms.dateSent;
- record.errorCode = sms.errorCode;
- record.threadID = sms.threadID;
- record.type = sms.type;
- record.ID = sms.ID;
- recordVector.emplace_back(record);
- }
-
- auto response = std::make_unique<db::query::SMSGetByContactIDResult>(recordVector);
- response->setRequestQuery(query);
- return response;
+ return getByContactIDQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSGetByText)) {
- const auto localQuery = dynamic_cast<const db::query::SMSGetByText *>(query.get());
- auto smsVector = smsDB->sms.getByText(localQuery->text);
- std::vector<SMSRecord> recordVector;
- for (auto sms : smsVector) {
- SMSRecord record;
- record.body = sms.body;
- record.contactID = sms.contactID;
- record.date = sms.date;
- record.dateSent = sms.dateSent;
- record.errorCode = sms.errorCode;
- record.threadID = sms.threadID;
- record.type = sms.type;
- record.ID = sms.ID;
- recordVector.emplace_back(record);
- }
-
- auto response = std::make_unique<db::query::SMSGetByTextResult>(recordVector);
- response->setRequestQuery(query);
- return response;
+ return getByTextQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSGetCount)) {
- auto response = std::make_unique<db::query::SMSGetCountResult>(smsDB->sms.count());
- response->setRequestQuery(query);
- return response;
+ return getCountQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSRemove)) {
- const auto localQuery = dynamic_cast<const db::query::SMSRemove *>(query.get());
- auto ret = smsDB->sms.removeById(localQuery->id);
- auto response = std::make_unique<db::query::SMSRemoveResult>(ret);
- response->setRequestQuery(query);
- return response;
+ return removeQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSGet)) {
- const auto localQuery = dynamic_cast<const db::query::SMSGet *>(query.get());
-
- auto smsVector = smsDB->sms.getLimitOffset(localQuery->getOffset(), localQuery->getLimit());
- std::vector<SMSRecord> recordVector;
- for (auto sms : smsVector) {
- SMSRecord record;
- record.body = sms.body;
- record.contactID = sms.contactID;
- record.date = sms.date;
- record.dateSent = sms.dateSent;
- record.errorCode = sms.errorCode;
- record.threadID = sms.threadID;
- record.type = sms.type;
- record.ID = sms.ID;
- recordVector.emplace_back(record);
- }
-
- auto response = std::make_unique<db::query::SMSGetResult>(recordVector);
- response->setRequestQuery(query);
- return response;
+ return getQuery(query);
}
return nullptr;
@@ 414,3 339,104 @@ std::unique_ptr<db::query::SMSSearchByTypeResult> SMSRecordInterface::runQueryIm
}
return std::make_unique<db::query::SMSSearchByTypeResult>(db_result.first, *records);
}
+
+std::unique_ptr<db::QueryResult> SMSRecordInterface::getByIDQuery(std::shared_ptr<db::Query> query)
+{
+ const auto localQuery = static_cast<const db::query::SMSGetByID *>(query.get());
+ auto sms = smsDB->sms.getById(localQuery->id);
+ SMSRecord record;
+
+ record.body = sms.body;
+ record.contactID = sms.contactID;
+ record.date = sms.date;
+ record.dateSent = sms.dateSent;
+ record.errorCode = sms.errorCode;
+ record.threadID = sms.threadID;
+ record.type = sms.type;
+ record.ID = sms.ID;
+ auto response = std::make_unique<db::query::SMSGetByIDResult>(record);
+ response->setRequestQuery(query);
+ return response;
+}
+
+std::unique_ptr<db::QueryResult> SMSRecordInterface::getByContactIDQuery(std::shared_ptr<db::Query> query)
+{
+ const auto localQuery = static_cast<const db::query::SMSGetByContactID *>(query.get());
+ auto smsVector = smsDB->sms.getByContactId(localQuery->contactId);
+ std::vector<SMSRecord> recordVector;
+ for (auto sms : smsVector) {
+ SMSRecord record;
+ record.body = sms.body;
+ record.contactID = sms.contactID;
+ record.date = sms.date;
+ record.dateSent = sms.dateSent;
+ record.errorCode = sms.errorCode;
+ record.threadID = sms.threadID;
+ record.type = sms.type;
+ record.ID = sms.ID;
+ recordVector.emplace_back(record);
+ }
+
+ auto response = std::make_unique<db::query::SMSGetByContactIDResult>(recordVector);
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> SMSRecordInterface::getByTextQuery(std::shared_ptr<db::Query> query)
+{
+ const auto localQuery = static_cast<const db::query::SMSGetByText *>(query.get());
+ auto smsVector = smsDB->sms.getByText(localQuery->text);
+ std::vector<SMSRecord> recordVector;
+ for (auto sms : smsVector) {
+ SMSRecord record;
+ record.body = sms.body;
+ record.contactID = sms.contactID;
+ record.date = sms.date;
+ record.dateSent = sms.dateSent;
+ record.errorCode = sms.errorCode;
+ record.threadID = sms.threadID;
+ record.type = sms.type;
+ record.ID = sms.ID;
+ recordVector.emplace_back(record);
+ }
+
+ auto response = std::make_unique<db::query::SMSGetByTextResult>(recordVector);
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> SMSRecordInterface::getCountQuery(std::shared_ptr<db::Query> query)
+{
+ auto response = std::make_unique<db::query::SMSGetCountResult>(smsDB->sms.count());
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> SMSRecordInterface::removeQuery(std::shared_ptr<db::Query> query)
+{
+ const auto localQuery = static_cast<const db::query::SMSRemove *>(query.get());
+ auto ret = smsDB->sms.removeById(localQuery->id);
+ auto response = std::make_unique<db::query::SMSRemoveResult>(ret);
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> SMSRecordInterface::getQuery(std::shared_ptr<db::Query> query)
+{
+ const auto localQuery = static_cast<const db::query::SMSGet *>(query.get());
+
+ auto smsVector = smsDB->sms.getLimitOffset(localQuery->getOffset(), localQuery->getLimit());
+ std::vector<SMSRecord> recordVector;
+ for (auto sms : smsVector) {
+ SMSRecord record;
+ record.body = sms.body;
+ record.contactID = sms.contactID;
+ record.date = sms.date;
+ record.dateSent = sms.dateSent;
+ record.errorCode = sms.errorCode;
+ record.threadID = sms.threadID;
+ record.type = sms.type;
+ record.ID = sms.ID;
+ recordVector.emplace_back(record);
+ }
+
+ auto response = std::make_unique<db::query::SMSGetResult>(recordVector);
+ response->setRequestQuery(query);
+ return response;
+}
M module-db/Interface/SMSRecord.hpp => module-db/Interface/SMSRecord.hpp +7 -2
@@ 63,7 63,12 @@ class SMSRecordInterface : public RecordInterface<SMSRecord, SMSRecordField>
SmsDB *smsDB = nullptr;
ContactsDB *contactsDB = nullptr;
- std::unique_ptr<db::query::SMSSearchByTypeResult> runQueryImpl(const db::query::SMSSearchByType *query);
-
static void UpdateThreadSummary(ThreadRecord &threadToUpdate, const SMSRecord &rec);
+ std::unique_ptr<db::query::SMSSearchByTypeResult> runQueryImpl(const db::query::SMSSearchByType *query);
+ std::unique_ptr<db::QueryResult> getByIDQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> getByContactIDQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> getByTextQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> getCountQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> removeQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> getQuery(std::shared_ptr<db::Query> query);
};
M module-db/Interface/SMSTemplateRecord.cpp => module-db/Interface/SMSTemplateRecord.cpp +54 -35
@@ 83,50 83,69 @@ SMSTemplateRecord SMSTemplateRecordInterface::GetByID(uint32_t id)
std::unique_ptr<db::QueryResult> SMSTemplateRecordInterface::runQuery(std::shared_ptr<db::Query> query)
{
if (typeid(*query) == typeid(db::query::SMSTemplateGetByID)) {
- const auto local_query = dynamic_cast<const db::query::SMSTemplateGetByID *>(query.get());
- auto smsTemplate = smsDB->templates.getById(local_query->id);
-
- auto response = std::make_unique<db::query::SMSTemplateGetByIDResult>(std::move(smsTemplate));
- response->setRequestQuery(query);
- return response;
+ return getByIDQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSTemplateGet)) {
- const auto localQuery = dynamic_cast<const db::query::SMSTemplateGet *>(query.get());
- auto dbResult = smsDB->templates.getLimitOffset(localQuery->offset, localQuery->limit);
- std::vector<SMSTemplateRecord> recordVector;
- for (auto SMStemplate : dbResult) {
- SMSTemplateRecord record;
- record.ID = SMStemplate.ID;
- record.text = SMStemplate.text;
- record.lastUsageTimestamp = SMStemplate.lastUsageTimestamp;
- recordVector.emplace_back(record);
- }
- auto response = std::make_unique<db::query::SMSTemplateGetResult>(std::move(recordVector));
- response->setRequestQuery(query);
- return response;
+ return getQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSTemplateGetCount)) {
- auto response = std::make_unique<db::query::SMSTemplateGetCountResult>(smsDB->templates.count());
- response->setRequestQuery(query);
- return response;
+ return getCountQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSTemplateAdd)) {
- const auto localQuery = dynamic_cast<const db::query::SMSTemplateAdd *>(query.get());
- auto ret = SMSTemplateRecordInterface::Add(localQuery->rec);
- auto response = std::make_unique<db::query::SMSTemplateAddResult>(ret);
- response->setRequestQuery(query);
- return response;
+ return addQuery(query);
}
else if (typeid(*query) == typeid(db::query::SMSTemplateRemove)) {
- const auto localQuery = dynamic_cast<const db::query::SMSTemplateRemove *>(query.get());
- auto ret = smsDB->templates.removeById(localQuery->id);
- auto response = std::make_unique<db::query::SMSTemplateRemoveResult>(ret);
- response->setRequestQuery(query);
- return response;
+ return removeQuery(query);
}
else {
- auto response = std::make_unique<db::query::SMSTemplateGetByIDResult>(SMSTemplateRecord());
- response->setRequestQuery(query);
- return response;
+ return getByIDQuery(query);
+ }
+}
+
+std::unique_ptr<db::QueryResult> SMSTemplateRecordInterface::getByIDQuery(std::shared_ptr<db::Query> query)
+{
+ const auto local_query = static_cast<const db::query::SMSTemplateGetByID *>(query.get());
+ auto smsTemplate = smsDB->templates.getById(local_query->id);
+
+ auto response = std::make_unique<db::query::SMSTemplateGetByIDResult>(std::move(smsTemplate));
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> SMSTemplateRecordInterface::getQuery(std::shared_ptr<db::Query> query)
+{
+ const auto localQuery = static_cast<const db::query::SMSTemplateGet *>(query.get());
+ auto dbResult = smsDB->templates.getLimitOffset(localQuery->offset, localQuery->limit);
+ std::vector<SMSTemplateRecord> recordVector;
+ for (auto SMStemplate : dbResult) {
+ SMSTemplateRecord record;
+ record.ID = SMStemplate.ID;
+ record.text = SMStemplate.text;
+ record.lastUsageTimestamp = SMStemplate.lastUsageTimestamp;
+ recordVector.emplace_back(record);
}
+ auto response = std::make_unique<db::query::SMSTemplateGetResult>(std::move(recordVector));
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> SMSTemplateRecordInterface::getCountQuery(std::shared_ptr<db::Query> query)
+{
+ auto response = std::make_unique<db::query::SMSTemplateGetCountResult>(smsDB->templates.count());
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> SMSTemplateRecordInterface::addQuery(std::shared_ptr<db::Query> query)
+{
+ const auto localQuery = static_cast<const db::query::SMSTemplateAdd *>(query.get());
+ auto ret = SMSTemplateRecordInterface::Add(localQuery->rec);
+ auto response = std::make_unique<db::query::SMSTemplateAddResult>(ret);
+ response->setRequestQuery(query);
+ return response;
+}
+std::unique_ptr<db::QueryResult> SMSTemplateRecordInterface::removeQuery(std::shared_ptr<db::Query> query)
+{
+ const auto localQuery = static_cast<const db::query::SMSTemplateRemove *>(query.get());
+ auto ret = smsDB->templates.removeById(localQuery->id);
+ auto response = std::make_unique<db::query::SMSTemplateRemoveResult>(ret);
+ response->setRequestQuery(query);
+ return response;
}
M module-db/Interface/SMSTemplateRecord.hpp => module-db/Interface/SMSTemplateRecord.hpp +5 -0
@@ 46,4 46,9 @@ class SMSTemplateRecordInterface : public RecordInterface<SMSTemplateRecord, SMS
private:
SmsDB *smsDB = nullptr;
+ std::unique_ptr<db::QueryResult> getByIDQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> getQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> getCountQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> addQuery(std::shared_ptr<db::Query> query);
+ std::unique_ptr<db::QueryResult> removeQuery(std::shared_ptr<db::Query> query);
};
M module-db/queries/phonebook/QueryContactGetByID.hpp => module-db/queries/phonebook/QueryContactGetByID.hpp +0 -5
@@ 24,11 24,6 @@ namespace db::query
unsigned int id;
};
- /**
- * @brief A response to the db::query::ContactGetByID query. Returns a vector of
- * ContactRecord data
- *
- */
class ContactGetByIDResult : public QueryResult
{
public:
M module-db/queries/phonebook/QueryContactRemove.hpp => module-db/queries/phonebook/QueryContactRemove.hpp +0 -5
@@ 24,11 24,6 @@ namespace db::query
unsigned int id;
};
- /**
- * @brief A response to the db::query::ContactGetByID query. Returns a vector of
- * ContactRecord data
- *
- */
class ContactRemoveResult : public QueryResult
{
public:
M module-db/queries/sms/QuerySMSGetByContactID.hpp => module-db/queries/sms/QuerySMSGetByContactID.hpp +1 -1
@@ 7,7 7,7 @@
namespace db::query
{
- /// implements search for SMS by type
+
class SMSGetByContactID : public Query
{
public:
M module-db/queries/sms/QuerySMSGetByID.hpp => module-db/queries/sms/QuerySMSGetByID.hpp +1 -1
@@ 7,7 7,7 @@
namespace db::query
{
- /// implements search for SMS by type
+
class SMSGetByID : public Query
{
public:
M module-db/queries/sms/QuerySMSGetByText.hpp => module-db/queries/sms/QuerySMSGetByText.hpp +1 -1
@@ 7,7 7,7 @@
namespace db::query
{
- /// implements search for SMS by type
+
class SMSGetByText : public Query
{
public:
M module-db/queries/sms/QuerySMSRemove.hpp => module-db/queries/sms/QuerySMSRemove.hpp +1 -1
@@ 7,7 7,7 @@
namespace db::query
{
- /// implements search for SMS by type
+
class SMSRemove : public Query
{
public:
M module-db/queries/sms/QuerySMSTemplateGet.hpp => module-db/queries/sms/QuerySMSTemplateGet.hpp +1 -1
@@ 7,7 7,7 @@
namespace db::query
{
- /// implements search for SMS by text
+
class SMSTemplateGet : public Query
{
public:
M module-db/queries/sms/QuerySMSTemplateGetByID.hpp => module-db/queries/sms/QuerySMSTemplateGetByID.hpp +1 -1
@@ 7,7 7,7 @@
namespace db::query
{
- /// implements search for SMS by type
+
class SMSTemplateGetByID : public Query
{
public:
M module-db/queries/sms/QuerySMSTemplateRemove.hpp => module-db/queries/sms/QuerySMSTemplateRemove.hpp +1 -1
@@ 7,7 7,7 @@
namespace db::query
{
- /// implements search for SMS by type
+
class SMSTemplateRemove : public Query
{
public:
M module-db/queries/sms/QuerySMSThreadsGet.hpp => module-db/queries/sms/QuerySMSThreadsGet.hpp +1 -1
@@ 6,7 6,7 @@
namespace db::query
{
- /// implements search for SMS by text
+
class SMSThreadsGet : public Query
{
public:
M module-services/service-desktop/ServiceDesktop.cpp => module-services/service-desktop/ServiceDesktop.cpp +0 -3
@@ 2,11 2,8 @@
#include "ServiceDesktop.hpp"
#include "BackupRestore.hpp"
#include "DesktopMessages.hpp"
-#include "Endpoint.hpp"
#include "module-services/service-desktop/endpoints/factoryReset/FactoryReset.hpp"
#include "log/log.hpp"
-#include "messages/DBSMSMessage.hpp"
-#include "messages/DBSMSTemplateMessage.hpp"
ServiceDesktop::ServiceDesktop() : sys::Service(service::name::service_desktop, "", sdesktop::service_stack)
{
M module-services/service-desktop/WorkerDesktop.cpp => module-services/service-desktop/WorkerDesktop.cpp +1 -1
@@ 43,7 43,7 @@ bool WorkerDesktop::init(std::list<sys::WorkerQueueInfo> queues)
return false;
}
- ParserStateMachine::MessageHandler::sendQueue = Worker::getQueueByName(WorkerDesktop::SEND_QUEUE_BUFFER_NAME);
+ parserFSM::MessageHandler::sendQueue = Worker::getQueueByName(WorkerDesktop::SEND_QUEUE_BUFFER_NAME);
return true;
}
M module-services/service-desktop/WorkerDesktop.hpp => module-services/service-desktop/WorkerDesktop.hpp +2 -2
@@ 12,7 12,7 @@ extern "C"
#include "Service/Message.hpp"
#include "Service/Service.hpp"
#include "Service/Worker.hpp"
-#include "parser/ParserStateMachine.hpp"
+#include "parser/ParserFSM.hpp"
#include "bsp/usb_cdc/usb_cdc.hpp"
@@ 29,5 29,5 @@ class WorkerDesktop : public sys::Worker
virtual bool deinit() override;
bool handleMessage(uint32_t queueID) override final;
sys::Service *ownerService = nullptr;
- ParserStateMachine::StateMachine parser;
+ parserFSM::StateMachine parser;
};
M module-services/service-desktop/endpoints/Context.hpp => module-services/service-desktop/endpoints/Context.hpp +47 -3
@@ 1,8 1,8 @@
#pragma once
-#include "ParserUtils.hpp"
#include "json/json11.hpp"
+#include "module-services/service-desktop/parser/ParserUtils.hpp"
-namespace ParserStateMachine
+namespace parserFSM
{
namespace json
@@ 14,6 14,12 @@ namespace ParserStateMachine
const inline std::string body = "body";
} // namespace json
+ struct endpointResponseContext
+ {
+ http::Code status = http::Code::OK;
+ json11::Json body = json11::Json();
+ };
+
class Context
{
private:
@@ 21,6 27,8 @@ namespace ParserStateMachine
EndpointType endpoint;
uint32_t uuid;
http::Method method;
+ endpointResponseContext responseContext;
+
auto validate() -> void
{
if (body.is_object() == false) {
@@ 30,6 38,18 @@ namespace ParserStateMachine
endpoint = EndpointType::invalid;
}
}
+ auto buildResponseStr(std::size_t responseSize, std::string responsePayloadString) -> std::string
+ {
+ constexpr auto pos = 0;
+ constexpr auto count = 1;
+ std::string responsePayloadSizeStr = std::to_string(responseSize);
+ while (responsePayloadSizeStr.length() < message::size_length) {
+ responsePayloadSizeStr.insert(pos, count, '0');
+ }
+
+ std::string responseStr = message::endpointChar + responsePayloadSizeStr + responsePayloadString;
+ return responseStr;
+ }
public:
Context(json11::Json &js)
@@ 40,6 60,30 @@ namespace ParserStateMachine
method = static_cast<http::Method>(js[json::method].int_value());
validate();
}
+ Context()
+ {
+ body = json11::Json();
+ endpoint = EndpointType::invalid;
+ uuid = 0;
+ method = http::Method::get;
+ }
+
+ auto createSimpleResponse() -> std::string
+ {
+ json11::Json responseJson = json11::Json::object{{json::endpoint, static_cast<int>(getEndpoint())},
+ {json::status, static_cast<int>(responseContext.status)},
+ {json::uuid, std::to_string(getUuid())},
+ {json::body, responseContext.body}};
+ return buildResponseStr(responseJson.dump().size(), responseJson.dump());
+ }
+ auto setResponseStatus(http::Code status)
+ {
+ responseContext.status = status;
+ }
+ auto setResponseBody(json11::Json respBody)
+ {
+ responseContext.body = respBody;
+ }
auto getBody() -> json11::Json
{
return body;
@@ 58,4 102,4 @@ namespace ParserStateMachine
}
};
-} // namespace ParserStateMachine
+} // namespace parserFSM
M module-services/service-desktop/endpoints/DBHelper.hpp => module-services/service-desktop/endpoints/DBHelper.hpp +3 -3
@@ 2,14 2,14 @@
#include "Common/Query.hpp"
#include "Context.hpp"
-#include "ParserStateMachine.hpp"
+#include "ParserFSM.hpp"
#include "messages/QueryMessage.hpp"
#include "queries/sms/QuerySMSSearch.hpp"
#include <Service/Common.hpp>
#include <Service/Service.hpp>
#include "Endpoint.hpp"
-namespace ParserStateMachine
+namespace parserFSM
{
class DBHelper
@@ 25,4 25,4 @@ namespace ParserStateMachine
protected:
sys::Service *ownerServicePtr = nullptr;
};
-} // namespace ParserStateMachine
+} // namespace parserFSM
M module-services/service-desktop/endpoints/Endpoint.hpp => module-services/service-desktop/endpoints/Endpoint.hpp +7 -42
@@ 1,12 1,12 @@
#pragma once
-#include "ParserUtils.hpp"
+#include "module-services/service-desktop/parser/ParserUtils.hpp"
#include "json/json11.hpp"
#include "Common/Query.hpp"
#include "Context.hpp"
#include "Service/Service.hpp"
#include <string>
-namespace ParserStateMachine
+namespace parserFSM
{
class Endpoint
@@ 14,51 14,16 @@ namespace ParserStateMachine
public:
Endpoint(sys::Service *_ownerServicePtr) : ownerServicePtr(_ownerServicePtr){};
- virtual ~Endpoint() = default;
- virtual auto handle(Context &context) -> std::string = 0;
+ virtual ~Endpoint() = default;
+ virtual auto handle(Context &context) -> void = 0;
auto c_str() -> const char *
{
return debugName.c_str();
}
- static auto buildResponseStr(std::size_t responseSize, std::string responsePayloadString) -> std::string
- {
- std::string responsePayloadSizeStr = std::to_string(responseSize);
- while (responsePayloadSizeStr.length() < message::size_length) {
- responsePayloadSizeStr.insert(0, 1, '0');
- }
-
- std::string responseStr = message::endpointChar + responsePayloadSizeStr + responsePayloadString;
- return responseStr;
- }
-
- static auto createSimpleResponse(sys::ReturnCodes status, int endpoint, uint32_t uuid, json11::Json body)
- -> std::string
- {
- json11::Json responseJson = json11::Json::object{
- {json::endpoint, endpoint},
- {json::status,
- static_cast<int>(status == sys::ReturnCodes::Success ? http::Code::OK
- : http::Code::InternalServerError)},
- {json::uuid, std::to_string(uuid)},
- {json::body, body}};
- return Endpoint::buildResponseStr(responseJson.dump().size(), responseJson.dump());
- }
-
- static auto createSimpleResponse(bool status, int endpoint, uint32_t uuid, json11::Json body) -> std::string
- {
- json11::Json responseJson = json11::Json::object{
- {json::endpoint, endpoint},
- {json::status, static_cast<int>(status ? http::Code::OK : http::Code::InternalServerError)},
- {json::uuid, std::to_string(uuid)},
- {json::body, body}};
-
- return Endpoint::buildResponseStr(responseJson.dump().size(), responseJson.dump());
- }
-
protected:
- std::string debugName;
- sys::Service *ownerServicePtr;
+ std::string debugName = "";
+ sys::Service *ownerServicePtr = nullptr;
};
-} // namespace ParserStateMachine
+} // namespace parserFSM
M module-services/service-desktop/endpoints/EndpointFactory.hpp => module-services/service-desktop/endpoints/EndpointFactory.hpp +1 -1
@@ 9,7 9,7 @@
#include "update/UpdateEndpoint.hpp"
#include "restore/RestoreEndpoint.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
class EndpointFactory
{
M module-services/service-desktop/endpoints/backup/BackupEndpoint.cpp => module-services/service-desktop/endpoints/backup/BackupEndpoint.cpp +10 -14
@@ 5,7 5,7 @@
static bool backupReady = false;
-auto BackupEndpoint::handle(Context &context) -> std::string
+auto BackupEndpoint::handle(Context &context) -> void
{
switch (context.getMethod()) {
case http::Method::get:
@@ 17,12 17,10 @@ auto BackupEndpoint::handle(Context &context) -> std::string
case http::Method::put:
[[fallthrough]];
case http::Method::del:
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- sys::ReturnCodes::Failure, static_cast<int>(EndpointType::backup), context.getUuid(), json11::Json()));
+ context.setResponseStatus(http::Code::BadRequest);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
break;
}
-
- return std::string();
}
auto BackupEndpoint::request(Context &context) -> sys::ReturnCodes
{
@@ 33,14 31,13 @@ auto BackupEndpoint::request(Context &context) -> sys::ReturnCodes
sys::Bus::SendUnicast(msg, service::name::service_desktop, ownerServicePtr);
backupReady = true;
- responseBodyJson = json11::Json::object({{json::backupRequest, true}});
+ context.setResponseBody(json11::Json::object({{json::backupRequest, true}}));
}
else {
- responseBodyJson = json11::Json::object({{json::backupRequest, false}});
+ context.setResponseBody(json11::Json::object({{json::backupRequest, false}}));
}
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- true, static_cast<int>(EndpointType::backup), context.getUuid(), responseBodyJson));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return sys::ReturnCodes::Success;
}
@@ 54,18 51,17 @@ auto BackupEndpoint::upload(Context &context) -> sys::ReturnCodes
}
else if (context.getBody()[json::backupUpload] == true) {
if (vfs.fileExists(purefs::dir::os_backup.c_str())) {
- responseBodyJson = json11::Json::object({{json::backupUpload, true}});
+ context.setResponseBody(json11::Json::object({{json::backupUpload, true}}));
}
else {
- responseBodyJson = json11::Json::object({{json::backupUpload, false}});
+ context.setResponseBody(json11::Json::object({{json::backupUpload, false}}));
}
}
else {
- responseBodyJson = json11::Json::object({{json::backupReady, false}});
+ context.setResponseBody(json11::Json::object({{json::backupReady, false}}));
}
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- true, static_cast<int>(EndpointType::backup), context.getUuid(), responseBodyJson));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return sys::ReturnCodes::Success;
}
M module-services/service-desktop/endpoints/backup/BackupEndpoint.hpp => module-services/service-desktop/endpoints/backup/BackupEndpoint.hpp +2 -2
@@ 2,7 2,7 @@
#include "ParserUtils.hpp"
#include "ServiceDesktop.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
class BackupEndpoint : public Endpoint
{
@@ 11,7 11,7 @@ class BackupEndpoint : public Endpoint
{
debugName = "BackupEndpoint";
}
- auto handle(Context &context) -> std::string override;
+ auto handle(Context &context) -> void override;
auto request(Context &context) -> sys::ReturnCodes;
auto upload(Context &context) -> sys::ReturnCodes;
};
M module-services/service-desktop/endpoints/contacts/ContactHelper.cpp => module-services/service-desktop/endpoints/contacts/ContactHelper.cpp +59 -28
@@ 4,7 4,6 @@
#include "ParserUtils.hpp"
#include "Service/Common.hpp"
#include "api/DBServiceAPI.hpp"
-#include "application-phonebook/models/NewContactModel.hpp"
#include "log/log.hpp"
#include "queries/phonebook/QueryContactGetByID.hpp"
#include "queries/phonebook/QueryContactUpdate.hpp"
@@ 13,7 12,7 @@
#include <queries/phonebook/QueryContactAdd.hpp>
#include <queries/phonebook/QueryContactRemove.hpp>
-using namespace ParserStateMachine;
+using namespace parserFSM;
auto ContactHelper::to_json(ContactRecord record) -> json11::Json
{
@@ 41,7 40,7 @@ auto ContactHelper::from_json(json11::Json contactJSON) -> ContactRecord
newRecord.alternativeName = UTF8(contactJSON[json::contacts::alternativeName].string_value());
newRecord.address = UTF8(contactJSON[json::contacts::address].string_value());
- newRecord.contactType = ContactType ::USER;
+ newRecord.contactType = ContactType::USER;
for (auto num : contactJSON[json::contacts::numbers].array_items()) {
utils::PhoneNumber phoneNumber(num.string_value());
@@ 59,12 58,15 @@ auto ContactHelper::requestDataFromDB(Context &context) -> sys::ReturnCodes
if (context.getBody()[json::contacts::id].int_value() != 0) {
return requestContactByID(context);
}
+ else if (context.getBody()[json::contacts::count].bool_value()) {
+ return requestCount(context);
+ }
auto limit = context.getBody()[json::contacts::count].int_value();
auto query = std::make_unique<db::query::ContactGet>(0, limit, "");
auto listener = std::make_unique<db::EndpointListener>(
- [](db::QueryResult *result, uint32_t uuid) {
+ [](db::QueryResult *result, Context context) {
if (auto contactResult = dynamic_cast<db::query::ContactGetResult *>(result)) {
auto recordsPtr = std::make_unique<std::vector<ContactRecord>>(contactResult->getRecords());
@@ 74,15 76,15 @@ auto ContactHelper::requestDataFromDB(Context &context) -> sys::ReturnCodes
contactsArray.emplace_back(ContactHelper::to_json(record));
}
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- true, static_cast<int>(EndpointType::contacts), uuid, contactsArray));
+ context.setResponseBody(contactsArray);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
@@ 91,12 93,35 @@ auto ContactHelper::requestDataFromDB(Context &context) -> sys::ReturnCodes
return sys::ReturnCodes::Success;
}
-auto ContactHelper::createDBEntry(Context &context) -> sys::ReturnCodes
+sys::ReturnCodes ContactHelper::requestCount(Context &context)
{
- LOG_DEBUG("Creating %s %s ...",
- context.getBody()[json::contacts::primaryName].string_value().c_str(),
- context.getBody()[json::contacts::alternativeName].string_value().c_str());
+ auto query = std::make_unique<db::query::ContactGetSize>();
+
+ auto listener = std::make_unique<db::EndpointListener>(
+ [](db::QueryResult *result, Context context) {
+ if (auto contactResult = dynamic_cast<db::query::RecordsSizeQueryResult *>(result)) {
+ auto count = contactResult->getSize();
+
+ context.setResponseBody(json11::Json::object({{json::contacts::count, static_cast<int>(count)}}));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
+ return true;
+ }
+ else {
+ return false;
+ }
+ },
+ context);
+
+ query->setQueryListener(std::move(listener));
+
+ DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::Contact, std::move(query));
+
+ return sys::ReturnCodes::Success;
+}
+
+auto ContactHelper::createDBEntry(Context &context) -> sys::ReturnCodes
+{
auto newRecord = from_json(context.getBody());
if (newRecord.numbers.empty()) {
LOG_ERROR("Empty number, not added!");
@@ 106,10 131,12 @@ auto ContactHelper::createDBEntry(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::ContactAdd>(newRecord);
auto listener = std::make_unique<db::EndpointListener>(
- [](db::QueryResult *result, uint32_t uuid) {
+ [](db::QueryResult *result, Context context) {
if (auto contactResult = dynamic_cast<db::query::ContactAddResult *>(result)) {
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- contactResult->getResult(), static_cast<int>(EndpointType::contacts), uuid, json11::Json()));
+
+ context.setResponseStatus(contactResult->getResult() ? http::Code::OK
+ : http::Code::InternalServerError);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
@@ 117,7 144,7 @@ auto ContactHelper::createDBEntry(Context &context) -> sys::ReturnCodes
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
@@ 131,11 158,12 @@ auto ContactHelper::requestContactByID(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::ContactGetByID>(id);
auto listener = std::make_unique<db::EndpointListener>(
- [](db::QueryResult *result, uint32_t uuid) {
+ [](db::QueryResult *result, Context context) {
if (auto contactResult = dynamic_cast<db::query::ContactGetByIDResult *>(result)) {
auto record = ContactHelper::to_json(contactResult->getResult());
- MessageHandler::putToSendQueue(
- Endpoint::createSimpleResponse(true, static_cast<int>(EndpointType::contacts), uuid, record));
+
+ context.setResponseBody(record);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
@@ 143,7 171,7 @@ auto ContactHelper::requestContactByID(Context &context) -> sys::ReturnCodes
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
@@ 157,10 185,12 @@ auto ContactHelper::updateDBEntry(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::ContactUpdate>(contact);
auto listener = std::make_unique<db::EndpointListener>(
- [](db::QueryResult *result, uint32_t uuid) {
+ [](db::QueryResult *result, Context context) {
if (auto contactResult = dynamic_cast<db::query::ContactUpdateResult *>(result)) {
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- contactResult->getResult(), static_cast<int>(EndpointType::contacts), uuid, json11::Json()));
+
+ context.setResponseStatus(contactResult->getResult() ? http::Code::OK
+ : http::Code::InternalServerError);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
@@ 168,11 198,10 @@ auto ContactHelper::updateDBEntry(Context &context) -> sys::ReturnCodes
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::Contact, std::move(query));
- LOG_DEBUG("Query done");
return sys::ReturnCodes::Success;
}
@@ 183,10 212,12 @@ auto ContactHelper::deleteDBEntry(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::ContactRemove>(id);
auto listener = std::make_unique<db::EndpointListener>(
- [](db::QueryResult *result, uint32_t uuid) {
+ [](db::QueryResult *result, Context context) {
if (auto contactResult = dynamic_cast<db::query::ContactRemoveResult *>(result)) {
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- contactResult->getResult(), static_cast<int>(EndpointType::contacts), uuid, json11::Json()));
+
+ context.setResponseStatus(contactResult->getResult() ? http::Code::OK
+ : http::Code::InternalServerError);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
@@ 194,7 225,7 @@ auto ContactHelper::deleteDBEntry(Context &context) -> sys::ReturnCodes
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
M module-services/service-desktop/endpoints/contacts/ContactHelper.hpp => module-services/service-desktop/endpoints/contacts/ContactHelper.hpp +3 -2
@@ 9,7 9,7 @@
#include <service-db/api/DBServiceAPI.hpp>
#include "ContactRecord.hpp"
-namespace ParserStateMachine
+namespace parserFSM
{
class ContactHelper : public DBHelper
@@ 22,6 22,7 @@ namespace ParserStateMachine
auto updateDBEntry(Context &context) -> sys::ReturnCodes override;
auto deleteDBEntry(Context &context) -> sys::ReturnCodes override;
+ auto requestCount(Context &context) -> sys::ReturnCodes;
auto requestContactByID(Context &context) -> sys::ReturnCodes;
static auto to_json(ContactRecord record) -> json11::Json;
static auto from_json(json11::Json contactJSON) -> ContactRecord;
@@ 39,4 40,4 @@ namespace ParserStateMachine
const inline std::string isFavourite = "favourite";
} // namespace json::contacts
-} // namespace ParserStateMachine
+} // namespace parserFSM
M module-services/service-desktop/endpoints/contacts/ContactsEndpoint.cpp => module-services/service-desktop/endpoints/contacts/ContactsEndpoint.cpp +2 -5
@@ 3,11 3,10 @@
#include <memory>
#include <string>
-using namespace ParserStateMachine;
+using namespace parserFSM;
-auto ContactsEndpoint::handle(Context &context) -> std::string
+auto ContactsEndpoint::handle(Context &context) -> void
{
-
switch (context.getMethod()) {
case http::Method::get:
helper->requestDataFromDB(context);
@@ 22,6 21,4 @@ auto ContactsEndpoint::handle(Context &context) -> std::string
helper->deleteDBEntry(context);
break;
}
-
- return std::string();
}
M module-services/service-desktop/endpoints/contacts/ContactsEndpoint.hpp => module-services/service-desktop/endpoints/contacts/ContactsEndpoint.hpp +2 -2
@@ 4,7 4,7 @@
#include "Service/Service.hpp"
#include "ContactHelper.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
class ContactsEndpoint : public Endpoint
{
@@ 17,5 17,5 @@ class ContactsEndpoint : public Endpoint
debugName = "ContactsEndpoint";
helper = std::make_unique<ContactHelper>(ownerServicePtr);
}
- auto handle(Context &context) -> std::string override;
+ auto handle(Context &context) -> void override;
};
M module-services/service-desktop/endpoints/deviceInfo/DeviceInfoEndpoint.cpp => module-services/service-desktop/endpoints/deviceInfo/DeviceInfoEndpoint.cpp +6 -14
@@ 6,30 6,23 @@
#include <service-desktop/ServiceDesktop.hpp>
#include <string>
-time_t FreeRTOS_time(time_t *pxTime)
-{
- return utils::time::Time().getTime();
-}
-
-auto DeviceInfoEndpoint::handle(Context &context) -> std::string
+auto DeviceInfoEndpoint::handle(Context &context) -> void
{
switch (context.getMethod()) {
case http::Method::get:
getDeviceInfo(context);
break;
default:
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- sys::ReturnCodes::Failure, static_cast<int>(EndpointType::deviceInfo), context.getUuid(), json11::Json()));
+ context.setResponseStatus(http::Code::BadRequest);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
break;
}
-
- return std::string();
}
auto DeviceInfoEndpoint::getDeviceInfo(Context &context) -> bool
{
vfs::FilesystemStats fsStats = vfs.getFilesystemStats();
- json11::Json responseBodyJson = json11::Json::object(
+ context.setResponseBody(json11::Json::object(
{{json::batteryLevel, std::to_string(Store::Battery::get().level)},
{json::batteryState, std::to_string(static_cast<int>(Store::Battery::get().state))},
{json::selectedSim, std::to_string(static_cast<int>(Store::GSM::get()->selected))},
@@ 41,9 34,8 @@ auto DeviceInfoEndpoint::getDeviceInfo(Context &context) -> bool
{json::gitRevision, (std::string)(GIT_REV)},
{json::gitTag, (std::string)GIT_TAG},
{json::gitBranch, (std::string)GIT_BRANCH},
- {json::currentRTCTime, std::to_string(static_cast<uint32_t>(utils::time::Time().getTime()))}});
+ {json::currentRTCTime, std::to_string(static_cast<uint32_t>(utils::time::Time().getTime()))}}));
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- true, static_cast<int>(EndpointType::deviceInfo), context.getUuid(), responseBodyJson));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
M module-services/service-desktop/endpoints/deviceInfo/DeviceInfoEndpoint.hpp => module-services/service-desktop/endpoints/deviceInfo/DeviceInfoEndpoint.hpp +2 -2
@@ 3,7 3,7 @@
#include "Endpoint.hpp"
#include "Service/Service.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
class DeviceInfoEndpoint : public Endpoint
{
@@ 13,6 13,6 @@ class DeviceInfoEndpoint : public Endpoint
{
debugName = "DeviceInfoEndpoint";
}
- auto handle(Context &context) -> std::string override;
+ auto handle(Context &context) -> void override;
auto getDeviceInfo(Context &context) -> bool;
};
M module-services/service-desktop/endpoints/factoryReset/FactoryResetEndpoint.cpp => module-services/service-desktop/endpoints/factoryReset/FactoryResetEndpoint.cpp +10 -13
@@ 2,32 2,29 @@
#include "DesktopMessages.hpp"
#include "ServiceDesktop.hpp"
-auto FactoryResetEndpoint::handle(Context &context) -> std::string
+auto FactoryResetEndpoint::handle(Context &context) -> void
{
- if (context.getMethod() == ParserStateMachine::http::Method::post) {
- json11::Json responseBodyJson;
+ if (context.getMethod() == parserFSM::http::Method::post) {
- if (context.getBody()[ParserStateMachine::json::factoryRequest] == true) {
+ if (context.getBody()[parserFSM::json::factoryRequest] == true) {
auto msg = std::make_shared<sdesktop::FactoryMessage>();
sys::Bus::SendUnicast(msg, service::name::service_desktop, ownerServicePtr);
- responseBodyJson = json11::Json::object({{ParserStateMachine::json::factoryRequest, true}});
+ context.setResponseBody(json11::Json::object({{parserFSM::json::factoryRequest, true}}));
}
else {
- responseBodyJson = json11::Json::object({{ParserStateMachine::json::factoryRequest, false}});
+ context.setResponseBody(json11::Json::object({{parserFSM::json::factoryRequest, false}}));
}
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- sys::ReturnCodes::Success, static_cast<int>(EndpointType::factory), context.getUuid(), json11::Json()));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
- return std::string();
+ return;
}
else {
- json11::Json responseBodyJson = json11::Json::object({{ParserStateMachine::json::factoryRequest, false}});
+ context.setResponseBody(json11::Json::object({{parserFSM::json::factoryRequest, false}}));
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- sys::ReturnCodes::Failure, static_cast<int>(EndpointType::factory), context.getUuid(), json11::Json()));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
- return std::string();
+ return;
}
}
M module-services/service-desktop/endpoints/factoryReset/FactoryResetEndpoint.hpp => module-services/service-desktop/endpoints/factoryReset/FactoryResetEndpoint.hpp +2 -2
@@ 3,7 3,7 @@
#include "Endpoint.hpp"
#include "Service/Service.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
class FactoryResetEndpoint : public Endpoint
{
@@ 13,6 13,6 @@ class FactoryResetEndpoint : public Endpoint
{
debugName = "FactoryResetEndpoint";
}
- auto handle(Context &context) -> std::string override;
+ auto handle(Context &context) -> void override;
auto makeFactoryReset(Context &context) -> bool;
};
M module-services/service-desktop/endpoints/messages/MessageHelper.cpp => module-services/service-desktop/endpoints/messages/MessageHelper.cpp +63 -55
@@ 25,7 25,7 @@
#include <memory>
#include <string>
-using namespace ParserStateMachine;
+using namespace parserFSM;
auto MessageHelper::to_json(SMSRecord record) -> json11::Json
{
@@ 91,19 91,19 @@ auto MessageHelper::requestSMS(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::SMSGetCount>();
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSResult = dynamic_cast<db::query::SMSGetCountResult *>(result)) {
- auto id = SMSResult->getResults();
- auto body = json11::Json::object{{json::messages::count, static_cast<int>(id)}};
- MessageHandler::putToSendQueue(
- Endpoint::createSimpleResponse(true, static_cast<int>(EndpointType::messages), uuid, body));
+ auto id = SMSResult->getResults();
+
+ context.setResponseBody(json11::Json::object{{json::messages::count, static_cast<int>(id)}});
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMS, std::move(query));
@@ 113,18 113,18 @@ auto MessageHelper::requestSMS(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::SMSGetByID>(context.getBody()[json::messages::id].int_value());
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSResult = dynamic_cast<db::query::SMSGetByIDResult *>(result)) {
- auto body = MessageHelper::to_json(SMSResult->getResults());
- MessageHandler::putToSendQueue(
- Endpoint::createSimpleResponse(true, static_cast<int>(EndpointType::messages), uuid, body));
+
+ context.setResponseBody(MessageHelper::to_json(SMSResult->getResults()));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMS, std::move(query));
@@ 135,7 135,7 @@ auto MessageHelper::requestSMS(Context &context) -> sys::ReturnCodes
std::make_unique<db::query::SMSGetByContactID>(context.getBody()[json::messages::contactID].int_value());
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSResult = dynamic_cast<db::query::SMSGetByContactIDResult *>(result)) {
json11::Json::array SMSarray;
@@ 143,15 143,15 @@ auto MessageHelper::requestSMS(Context &context) -> sys::ReturnCodes
SMSarray.emplace_back(MessageHelper::to_json(record));
}
- MessageHandler::putToSendQueue(
- Endpoint::createSimpleResponse(true, static_cast<int>(EndpointType::messages), uuid, SMSarray));
+ context.setResponseBody(SMSarray);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMS, std::move(query));
@@ 161,7 161,7 @@ auto MessageHelper::requestSMS(Context &context) -> sys::ReturnCodes
std::make_unique<db::query::SMSGetByText>(context.getBody()[json::messages::messageBody].string_value());
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSResult = dynamic_cast<db::query::SMSGetByTextResult *>(result)) {
json11::Json::array SMSarray;
@@ 169,15 169,15 @@ auto MessageHelper::requestSMS(Context &context) -> sys::ReturnCodes
SMSarray.emplace_back(MessageHelper::to_json(record));
}
- MessageHandler::putToSendQueue(
- Endpoint::createSimpleResponse(true, static_cast<int>(EndpointType::messages), uuid, SMSarray));
+ context.setResponseBody(SMSarray);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMS, std::move(query));
@@ 188,7 188,7 @@ auto MessageHelper::requestSMS(Context &context) -> sys::ReturnCodes
context.getBody()[json::messages::offset].int_value());
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSResult = dynamic_cast<db::query::SMSGetResult *>(result)) {
json11::Json::array SMSarray;
@@ 196,15 196,15 @@ auto MessageHelper::requestSMS(Context &context) -> sys::ReturnCodes
SMSarray.emplace_back(MessageHelper::to_json(record));
}
- MessageHandler::putToSendQueue(
- Endpoint::createSimpleResponse(true, static_cast<int>(EndpointType::messages), uuid, SMSarray));
+ context.setResponseBody(SMSarray);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMS, std::move(query));
@@ 220,19 220,19 @@ auto MessageHelper::requestTemplate(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::SMSTemplateGetCount>();
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSResult = dynamic_cast<db::query::SMSTemplateGetCountResult *>(result)) {
- auto id = SMSResult->getResults();
- auto body = json11::Json::object{{json::messages::count, static_cast<int>(id)}};
- MessageHandler::putToSendQueue(
- Endpoint::createSimpleResponse(true, static_cast<int>(EndpointType::messages), uuid, body));
+ auto id = SMSResult->getResults();
+
+ context.setResponseBody(json11::Json::object{{json::messages::count, static_cast<int>(id)}});
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMSTemplate, std::move(query));
@@ 241,18 241,18 @@ auto MessageHelper::requestTemplate(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::SMSTemplateGetByID>(context.getBody()[json::messages::id].int_value());
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSTemplateResult = dynamic_cast<db::query::SMSTemplateGetByIDResult *>(result)) {
- auto body = MessageHelper::to_json(SMSTemplateResult->getResults());
- MessageHandler::putToSendQueue(
- Endpoint::createSimpleResponse(true, static_cast<int>(EndpointType::messages), uuid, body));
+
+ context.setResponseBody(MessageHelper::to_json(SMSTemplateResult->getResults()));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMSTemplate, std::move(query));
@@ 262,22 262,23 @@ auto MessageHelper::requestTemplate(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::SMSTemplateGet>(context.getBody()[json::messages::offset].int_value(),
context.getBody()[json::messages::count].int_value());
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSTemplateResult = dynamic_cast<db::query::SMSTemplateGetResult *>(result)) {
json11::Json::array SMSTemplateArray;
for (auto record : SMSTemplateResult->getResults()) {
SMSTemplateArray.emplace_back(to_json(record));
}
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- true, static_cast<int>(EndpointType::messages), uuid, SMSTemplateArray));
+
+ context.setResponseBody(SMSTemplateArray);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMSTemplate, std::move(query));
@@ 303,17 304,19 @@ auto MessageHelper::createTemplate(Context &context) -> sys::ReturnCodes
auto query = std::make_unique<db::query::SMSTemplateAdd>(record);
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSTemplateResult = dynamic_cast<db::query::SMSTemplateAddResult *>(result)) {
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- SMSTemplateResult->getResult(), static_cast<int>(EndpointType::messages), uuid, json11::Json()));
+
+ context.setResponseStatus(SMSTemplateResult->getResult() ? http::Code::OK
+ : http::Code::InternalServerError);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMSTemplate, std::move(query));
@@ 342,17 345,19 @@ auto MessageHelper::deleteSMS(Context &context) -> sys::ReturnCodes
auto id = context.getBody()[json::messages::id].int_value();
auto query = std::make_unique<db::query::SMSRemove>(id);
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSTemplateResult = dynamic_cast<db::query::SMSRemoveResult *>(result)) {
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- SMSTemplateResult->getResults(), static_cast<int>(EndpointType::messages), uuid, json11::Json()));
+
+ context.setResponseStatus(SMSTemplateResult->getResults() ? http::Code::OK
+ : http::Code::InternalServerError);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMS, std::move(query));
@@ 365,17 370,19 @@ auto MessageHelper::deleteTemplate(Context &context) -> sys::ReturnCodes
auto id = context.getBody()[json::messages::id].int_value();
auto query = std::make_unique<db::query::SMSTemplateRemove>(id);
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSTemplateResult = dynamic_cast<db::query::SMSTemplateRemoveResult *>(result)) {
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- SMSTemplateResult->getResults(), static_cast<int>(EndpointType::messages), uuid, json11::Json()));
+
+ context.setResponseStatus(SMSTemplateResult->getResults() ? http::Code::OK
+ : http::Code::InternalServerError);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
else {
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::SMSTemplate, std::move(query));
@@ 402,10 409,11 @@ auto MessageHelper::updateSMS(Context &context) -> sys::ReturnCodes
(context.getBody()[json::messages::isUnread].bool_value() ? MarkAsRead::Read::False : MarkAsRead::Read::True));
auto listener = std::make_unique<db::EndpointListener>(
- [=](db::QueryResult *result, uint32_t uuid) {
+ [=](db::QueryResult *result, Context context) {
if (auto SMSResult = dynamic_cast<db::query::smsthread::MarkAsReadResult *>(result)) {
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- SMSResult->getResult(), static_cast<int>(EndpointType::messages), uuid, json11::Json()));
+
+ context.setResponseStatus(SMSResult->getResult() ? http::Code::OK : http::Code::InternalServerError);
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return true;
}
@@ 413,7 421,7 @@ auto MessageHelper::updateSMS(Context &context) -> sys::ReturnCodes
return false;
}
},
- context.getUuid());
+ context);
query->setQueryListener(std::move(listener));
M module-services/service-desktop/endpoints/messages/MessageHelper.hpp => module-services/service-desktop/endpoints/messages/MessageHelper.hpp +3 -4
@@ 9,7 9,7 @@
#include <service-db/api/DBServiceAPI.hpp>
#include "Endpoint.hpp"
-namespace ParserStateMachine
+namespace parserFSM
{
class MessageHelper final : public DBHelper
@@ 32,7 32,7 @@ namespace ParserStateMachine
auto updateSMS(Context &context) -> sys::ReturnCodes;
auto deleteSMS(Context &context) -> sys::ReturnCodes;
- auto requestMessagesCount(Context &context) -> sys::ReturnCodes;
+ // auto createSimpleResponse(Context &context) -> std::string override;
static auto to_json(SMSRecord record) -> json11::Json;
static auto to_json(ThreadRecord record) -> json11::Json;
@@ 49,7 49,6 @@ namespace ParserStateMachine
const inline std::string count = "count";
const inline std::string offset = "offset";
const inline std::string phoneNumber = "phoneNumber";
- const inline std::string messageBody = "messageBody";
const inline std::string isUnread = "unread";
const inline std::string contactID = "contactID";
const inline std::string date = "date";
@@ 67,4 66,4 @@ namespace ParserStateMachine
} // namespace thread
} // namespace messages
-} // namespace ParserStateMachine
+} // namespace parserFSM
M module-services/service-desktop/endpoints/messages/MessagesEndpoint.cpp => module-services/service-desktop/endpoints/messages/MessagesEndpoint.cpp +2 -8
@@ 1,15 1,10 @@
#include "MessagesEndpoint.hpp"
-#include "queries/sms/QuerySMSGetByID.hpp"
-#include "queries/sms/QuerySMSGetByContactID.hpp"
-#include "queries/sms/QuerySMSGetByText.hpp"
#include "queries/sms/QuerySMSTemplateGetByID.hpp"
-#include <memory>
-#include <string>
-using namespace ParserStateMachine;
+using namespace parserFSM;
-auto MessagesEndpoint::handle(Context &context) -> std::string
+auto MessagesEndpoint::handle(Context &context) -> void
{
switch (context.getMethod()) {
@@ 26,5 21,4 @@ auto MessagesEndpoint::handle(Context &context) -> std::string
helper->deleteDBEntry(context);
break;
}
- return std::string();
}
M module-services/service-desktop/endpoints/messages/MessagesEndpoint.hpp => module-services/service-desktop/endpoints/messages/MessagesEndpoint.hpp +2 -2
@@ 4,7 4,7 @@
#include "Service/Service.hpp"
#include "MessageHelper.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
class MessagesEndpoint : public Endpoint
{
@@ 17,5 17,5 @@ class MessagesEndpoint : public Endpoint
debugName = "MessagesEndpoint";
helper = std::make_shared<MessageHelper>(ownerServicePtr);
}
- auto handle(Context &context) -> std::string override;
+ auto handle(Context &context) -> void override;
};
M module-services/service-desktop/endpoints/restore/RestoreEndpoint.cpp => module-services/service-desktop/endpoints/restore/RestoreEndpoint.cpp +8 -10
@@ 3,27 3,25 @@
#include "ServiceDesktop.hpp"
#include "RestoreEndpoint.hpp"
-auto RestoreEndpoint::handle(Context &context) -> std::string
+auto RestoreEndpoint::handle(Context &context) -> void
{
- if (context.getMethod() == ParserStateMachine::http::Method::post) {
- json11::Json responseBodyJson;
+ if (context.getMethod() == parserFSM::http::Method::post) {
- if (context.getBody()[ParserStateMachine::json::restoreRequest] == true) {
+ if (context.getBody()[parserFSM::json::restoreRequest] == true) {
auto msg = std::make_shared<sdesktop::RestoreMessage>();
sys::Bus::SendUnicast(msg, service::name::service_desktop, ownerServicePtr);
- responseBodyJson = json11::Json::object({{ParserStateMachine::json::restoreRequest, true}});
+ context.setResponseBody(json11::Json::object({{parserFSM::json::restoreRequest, true}}));
}
else {
- responseBodyJson = json11::Json::object({{ParserStateMachine::json::restoreRequest, false}});
+ context.setResponseBody(json11::Json::object({{parserFSM::json::restoreRequest, false}}));
}
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- true, static_cast<int>(EndpointType::restore), context.getUuid(), responseBodyJson));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
- return std::string();
+ return;
}
else {
- return std::string();
+ return;
}
}
M module-services/service-desktop/endpoints/restore/RestoreEndpoint.hpp => module-services/service-desktop/endpoints/restore/RestoreEndpoint.hpp +2 -2
@@ 2,7 2,7 @@
#include "ParserUtils.hpp"
#include "ServiceDesktop.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
class RestoreEndpoint : public Endpoint
{
@@ 11,5 11,5 @@ class RestoreEndpoint : public Endpoint
{
debugName = "RestoreEndpoint";
}
- auto handle(Context &context) -> std::string override;
+ auto handle(Context &context) -> void override;
};
M module-services/service-desktop/endpoints/update/UpdateEndpoint.cpp => module-services/service-desktop/endpoints/update/UpdateEndpoint.cpp +5 -8
@@ 3,7 3,7 @@
#include "DesktopMessages.hpp"
#include "ServiceDesktop.hpp"
-auto UpdateEndpoint::handle(Context &context) -> std::string
+auto UpdateEndpoint::handle(Context &context) -> void
{
switch (context.getMethod()) {
case http::Method::post:
@@ 15,17 15,15 @@ auto UpdateEndpoint::handle(Context &context) -> std::string
default:
break;
}
- return std::string();
}
auto UpdateEndpoint::run(Context &context) -> sys::ReturnCodes
{
std::string fileName = context.getBody()["fileName"].string_value();
- json11::Json responseBodyJson = json11::Json::object({{ParserStateMachine::json::updateReady, true}});
+ context.setResponseBody(json11::Json::object({{parserFSM::json::updateReady, true}}));
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- true, static_cast<int>(EndpointType::update), context.getUuid(), responseBodyJson));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
auto msg = std::make_shared<sdesktop::UpdateOsMessage>(fileName, context.getUuid());
sys::Bus::SendUnicast(msg, service::name::service_desktop, ownerServicePtr);
@@ 37,10 35,9 @@ auto UpdateEndpoint::getUpdates(Context &context) -> sys::ReturnCodes
{
json11::Json fileList = vfs.listdir(purefs::dir::os_updates.c_str(), updateos::extension::update, true);
- json11::Json responseBodyJson = json11::Json::object{{ParserStateMachine::json::updateFileList, fileList}};
+ context.setResponseBody(json11::Json::object{{parserFSM::json::updateFileList, fileList}});
- MessageHandler::putToSendQueue(Endpoint::createSimpleResponse(
- true, static_cast<int>(EndpointType::update), context.getUuid(), responseBodyJson));
+ MessageHandler::putToSendQueue(context.createSimpleResponse());
return sys::ReturnCodes::Success;
}
M module-services/service-desktop/endpoints/update/UpdateEndpoint.hpp => module-services/service-desktop/endpoints/update/UpdateEndpoint.hpp +2 -2
@@ 3,7 3,7 @@
#include "Endpoint.hpp"
#include "Service/Service.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
class UpdateEndpoint : public Endpoint
{
@@ 13,7 13,7 @@ class UpdateEndpoint : public Endpoint
{
debugName = "UpdateEndpoint";
}
- auto handle(Context &context) -> std::string override;
+ auto handle(Context &context) -> void override;
auto run(Context &context) -> sys::ReturnCodes;
auto getUpdates(Context &context) -> sys::ReturnCodes;
};
M module-services/service-desktop/parser/CMakeLists.txt => module-services/service-desktop/parser/CMakeLists.txt +1 -1
@@ 5,7 5,7 @@ target_include_directories(${PROJECT_NAME}
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC "${CMAKE_CURRENT_LIST_DIR}")
target_sources(${PROJECT_NAME}
PRIVATE
- "${CMAKE_CURRENT_LIST_DIR}/ParserStateMachine.cpp"
+ "${CMAKE_CURRENT_LIST_DIR}/ParserFSM.cpp"
"${CMAKE_CURRENT_LIST_DIR}/ParserUtils.cpp"
"${CMAKE_CURRENT_LIST_DIR}/MessageHandler.cpp"
M module-services/service-desktop/parser/MessageHandler.cpp => module-services/service-desktop/parser/MessageHandler.cpp +1 -1
@@ 5,7 5,7 @@
#include "ParserUtils.hpp"
#include <memory>
-using namespace ParserStateMachine;
+using namespace parserFSM;
xQueueHandle MessageHandler::sendQueue;
M module-services/service-desktop/parser/MessageHandler.hpp => module-services/service-desktop/parser/MessageHandler.hpp +2 -2
@@ 9,7 9,7 @@ extern "C"
#include <queue.h>
}
-namespace ParserStateMachine
+namespace parserFSM
{
class MessageHandler
{
@@ 38,4 38,4 @@ namespace ParserStateMachine
std::string JsonErrorMsg;
sys::Service *OwnerServicePtr = nullptr;
};
-} // namespace ParserStateMachine
+} // namespace parserFSM
R module-services/service-desktop/parser/ParserStateMachine.cpp => module-services/service-desktop/parser/ParserFSM.cpp +2 -2
@@ 1,11 1,11 @@
-#include "ParserStateMachine.hpp"
+#include "ParserFSM.hpp"
#include <service-desktop/ServiceDesktop.hpp>
#include <log/log.hpp>
#include <json/json11.hpp>
#include <memory>
#include <string>
-using namespace ParserStateMachine;
+using namespace parserFSM;
StateMachine::StateMachine(sys::Service *OwnerService) : OwnerServicePtr(OwnerService)
{}
R module-services/service-desktop/parser/ParserStateMachine.hpp => module-services/service-desktop/parser/ParserFSM.hpp +4 -4
@@ 3,7 3,7 @@
#include "json/json11.hpp"
#include "MessageHandler.hpp"
-namespace ParserStateMachine
+namespace parserFSM
{
enum class State
{
@@ 24,8 24,8 @@ namespace ParserStateMachine
};
private:
- std::string *receivedMsgPtr = nullptr;
- ParserStateMachine::State state = State::NoMsg;
+ std::string *receivedMsgPtr = nullptr;
+ parserFSM::State state = State::NoMsg;
std::string payload;
std::string header;
unsigned long payloadLength = 0;
@@ 37,4 37,4 @@ namespace ParserStateMachine
void parsePartialMessage();
void parsePayload();
};
-} // namespace ParserStateMachine
+} // namespace parserFSM
M module-services/service-desktop/parser/ParserUtils.cpp => module-services/service-desktop/parser/ParserUtils.cpp +1 -1
@@ 1,6 1,6 @@
#include "ParserUtils.hpp"
-using namespace ParserStateMachine;
+using namespace parserFSM;
bool http::isMethodValid(uint8_t method)
{
M module-services/service-desktop/parser/ParserUtils.hpp => module-services/service-desktop/parser/ParserUtils.hpp +4 -4
@@ 4,14 4,14 @@
#include <vector>
#include <log/log.hpp>
-namespace ParserStateMachine
+namespace parserFSM
{
// Endpoint type definition
enum class EndpointType
{
- invalid = 0,
- deviceInfo = 1,
+ invalid = 0,
+ deviceInfo,
update,
backup,
restore,
@@ 137,4 137,4 @@ namespace ParserStateMachine
} // namespace json
-} // namespace ParserStateMachine
+} // namespace parserFSM
M module-services/service-desktop/tests/unittest.cpp => module-services/service-desktop/tests/unittest.cpp +2 -16
@@ 6,7 6,7 @@
#include "Service/Common.hpp"
#include "module-services/service-desktop/endpoints/update/UpdatePureOS.hpp"
#include "module-services/service-desktop/endpoints/factoryReset/FactoryReset.hpp"
-#include "ParserStateMachine.hpp"
+#include "ParserFSM.hpp"
#include "contacts/ContactHelper.hpp"
#include "messages/MessageHelper.hpp"
#include "queries/sms/QuerySMSSearchByType.hpp"
@@ 48,7 48,7 @@ TEST_CASE("Factory Reset Test")
REQUIRE(FactoryReset::CopyDirContent(factorydir, sysdir) == true);
}
-using namespace ParserStateMachine;
+using namespace parserFSM;
TEST_CASE("Parser Test")
{
@@ 230,17 230,3 @@ TEST_CASE("DB Helpers test - json encoding (messages)")
REQUIRE(messageTemplateJson[json::messages::id] == 1);
}
-TEST_CASE("Simple response builder test")
-{
- auto resp = Endpoint::createSimpleResponse(
- sys::ReturnCodes::Success, static_cast<int>(EndpointType::contacts), 1234, json11::Json());
- std::string err;
- REQUIRE(resp.substr(0, 10) == "#000000060");
- resp.erase(0, 10);
-
- auto responseJson = json11::Json::parse(resp, err);
- REQUIRE(err.empty());
- REQUIRE(responseJson[json::endpoint] == static_cast<int>(EndpointType::contacts));
- REQUIRE(responseJson[json::status] == static_cast<int>(http::Code::OK));
- REQUIRE(responseJson[json::uuid].dump() == "\"1234\"");
-}
M module-utils/log/debug.hpp => module-utils/log/debug.hpp +1 -1
@@ 4,7 4,7 @@
#define DEBUG_SCOPED_TIMINGS 1 /// show timings in measured functions
#define _RT1051_UART_DEBUG 0 /// show full modem uart communication
#define DEBUG_MODEM_OUTPUT_RESPONSE 1 /// show full modem output
-#define DEBUG_SERVICE_MESSAGES 1 /// show messages prior to handling in service
+#define DEBUG_SERVICE_MESSAGES 0 /// show messages prior to handling in service
#define DEBUG_DB_MODEL_DATA 0 /// show messages prior to handling in service
#define DEBUG_FONT 0 /// show Font debug messages
#define DEBUG_GUI_TEXT 0 /// show basic debug messages for gui::Text - warning this can be hard on cpu
R module-vfs/board/cross/freeRTOS_FAT/portable/common.c => module-vfs/board/cross/freeRTOS_FAT/portable/common.cpp +4 -12
@@ 7,7 7,7 @@
#include <stdint.h>
#include <string.h>
#include <time.h>
-
+#include <time/time_conversion.hpp>
#if 0
struct tm *gmtime_r( const time_t *pxTime, struct tm *tmStruct )
{
@@ 19,16 19,8 @@ struct tm *gmtime_r( const time_t *pxTime, struct tm *tmStruct )
#endif
/*-----------------------------------------------------------*/
-time_t FreeRTOS_time( time_t *pxTime )
+time_t FreeRTOS_time(time_t *pxTime)
{
-time_t xReturn;
-
- xReturn = 0;//time( &xReturn );
-
- if( pxTime != NULL )
- {
- *pxTime = xReturn;
- }
-
- return xReturn;
+ return utils::time::Time().getTime();
}
+
M module-vfs/targets/Target_Cross.cmake => module-vfs/targets/Target_Cross.cmake +2 -1
@@ 16,6 16,7 @@ set(BOARD_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/board/cross/freeRTOS_FAT/ff_time.c
${CMAKE_CURRENT_SOURCE_DIR}/board/cross/freeRTOS_FAT/portable/ff_eMMC_user_disk.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/board/cross/freeRTOS_FAT/portable/common.cpp
CACHE INTERNAL ""
@@ 27,4 28,4 @@ set(BOARD_DIR_INCLUDES
${CMAKE_CURRENT_SOURCE_DIR}/board/cross/freeRTOS_FAT/include
${CMAKE_CURRENT_SOURCE_DIR}/board/cross/freeRTOS_FAT/portable
- CACHE INTERNAL "")>
\ No newline at end of file
+ CACHE INTERNAL "")