//
#include "Any.h"
+
+#include <stdexcept>
//#include <JSUtil.h>
namespace extension {
std::tm* Any::toDateTm() const
{
- //TODO is it ok?
- std::time_t time = static_cast<std::time_t>(m_value.get<double>());
- return gmtime(&time);
+ std::tm* tm = new std::tm();
+ strptime(toString().c_str(), "%Y-%m-%dT%H:%M:%S.%zZ", tm);
+ return tm;
}
std::time_t Any::toTimeT() const
{
- //TODO is it ok?
- return static_cast<std::time_t>(m_value.get<double>());
+ std::time_t current_time;
+ std::time(¤t_time);
+ std::tm* timeinfo = std::localtime(¤t_time);
+ long offset = timeinfo->tm_gmtoff;
+ return (mktime(toDateTm()) + offset) * 1000;
}
} // Tizen
E: 1 << 1, // ENUMERABLE
C: 1 << 2 // CONFIGURABLE
}
+
//TODO remove CommonFS when C++ filesystem will be available
function CommonFS(){};
CommonFS.cacheVirtualToReal = {
_uriPrefix = 'file://',
i;
if (aPath.indexOf(_uriPrefix) === 0) {
- _fileRealPath = aPath.substr(_uriPrefix.length);
+ _fileRealPath = aPath; /*.substr(_uriPrefix.length);*/
} else if (aPath[0] != '/') {
//virtual path$
var _pathTokens = aPath.split('/');
return _fileRealPath;
};
+function addTypeToFilter_(data)
+{
+ var filter = {};
+
+ for(var field in data) {
+ filter[field] = data[field];
+ }
+
+ if (data instanceof tizen.AttributeFilter) {
+ filter.type = "AttributeFilter";
+ }
+ if (data instanceof tizen.AttributeRangeFilter) {
+ filter.type = "AttributeRangeFilter";
+ }
+
+ return filter;
+}
+
/**
* Example usage:
* function Messaging () {
this,
'timestamp',
{
- get: function () {return _internal.timestamp;},
+ get: function () {return new Date(_internal.timestamp);},
set: function (value) {
if (value instanceof InternalValues_) _internal.timestamp = value.timestamp;
},
bridge.async({
cmd: 'MessageStorage_findMessages',
args: {
- filter: args.filter || null,
+ filter: addTypeToFilter_(args.filter) || null,
sort: args.sort || null,
limit: args.limit || null,
offset: args.offset || null,
bridge.async({
cmd: 'MessageStorage_findConversations',
args: {
- filter: args.filter,
+ filter: addTypeToFilter_(args.filter),
sort: args.sort || null,
limit: args.limit || null,
offset: args.offset || null,
bridge.async({
cmd: 'MessageStorage_findFolders',
args: {
- filter: args.filter,
+ filter: addTypeToFilter_(args.filter),
sort: args.sort || null,
limit: args.limit || null,
offset: args.offset || null,
cmd: 'MessageStorage_addMessagesChangeListener',
cid: cid,
args: {
- filter: args.filter || null,
+ filter: addTypeToFilter_(args.filter) || null,
serviceId: self.service.id
}
});
cmd: 'MessageStorage_addConversationsChangeListener',
cid: cid,
args: {
- filter: args.filter || null,
+ filter: addTypeToFilter_(args.filter) || null,
serviceId: self.service.id
}
});
picojson::object data = args.get(JSON_DATA).get<picojson::object>();
const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
- // TODO add support to AttributeRangeFilter
- auto filter = MessagingUtil::jsonToAttributeFilter(data);
+ // TODO add support to CompositeFilter
+ auto filter = MessagingUtil::jsonToAbstractFilter(data);
auto sortMode = MessagingUtil::jsonToSortMode(data);
long limit = static_cast<long>
picojson::object data = args.get(JSON_DATA).get<picojson::object>();
const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
- // TODO add support to AttributeRangeFilter
- auto filter = MessagingUtil::jsonToAttributeFilter(data);
+ // TODO add support to CompositeFilter
+ auto filter = MessagingUtil::jsonToAbstractFilter(data);
auto sortMode = MessagingUtil::jsonToSortMode(data);
long limit = static_cast<long>
(MessagingUtil::getValueFromJSONObject<double>(data, FIND_CONVERSATIONS_ARGS_LIMIT));
picojson::object data = args.get(JSON_DATA).get<picojson::object>();
const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
- // TODO add support to AttributeRangeFilter
- auto filter = MessagingUtil::jsonToAttributeFilter(data);
+ // TODO add support to CompositeFilter
+ auto filter = MessagingUtil::jsonToAbstractFilter(data);
int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
FoldersCallbackData* callback = new FoldersCallbackData();
std::shared_ptr<MessagesChangeCallback> callback(new MessagesChangeCallback(
callbackId, serviceId, service->getMsgServiceType()));
- // TODO filter
- // callback->setFilter(tizen::AbstractFilterPtr(new tizen::AbstractFilter()));
+ callback->setFilter(MessagingUtil::jsonToAbstractFilter(data));
long op_id = service->getMsgStorage()->addMessagesChangeListener(callback);
std::shared_ptr<ConversationsChangeCallback> callback(new ConversationsChangeCallback(
callbackId, serviceId, service->getMsgServiceType()));
- // TODO filter
- // callback->setFilter(tizen::AbstractFilterPtr(new tizen::AbstractFilter()));
+ callback->setFilter(MessagingUtil::jsonToAbstractFilter(data));
long op_id = service->getMsgStorage()->addConversationsChangeListener(callback);
std::shared_ptr<FoldersChangeCallback> callback(new FoldersChangeCallback(
callbackId, serviceId, service->getMsgServiceType()));
- // TODO filter
- // callback->setFilter(tizen::AbstractFilterPtr(new tizen::AbstractFilter()));
+ callback->setFilter(MessagingUtil::jsonToAbstractFilter(data));
long op_id = service->getMsgStorage()->addFoldersChangeListener(callback);
const std::string JSON_TO_FILTER = "filter";
const std::string JSON_TO_MATCH_FLAG = "matchFlag";
const std::string JSON_TO_MATCH_VALUE = "matchValue";
+const std::string JSON_TO_INITIAL_VALUE = "initialValue";
+const std::string JSON_TO_END_VALUE = "endValue";
+
+const char* JSON_FILTER_ATTRIBUTE_TYPE = "AttributeFilter";
+const char* JSON_FILTER_ATTRIBUTERANGE_TYPE = "AttributeRangeFilter";
+const char* JSON_FILTER_COMPOSITE_TYPE = "CompositeFilter";
const std::map<std::string, MessageType> stringToTypeMap = {
{TYPE_SMS, MessageType::SMS},
return SortModePtr(new SortMode(name, order));
}
-tizen::AttributeFilterPtr MessagingUtil::jsonToAttributeFilter(const picojson::object& json)
+tizen::AbstractFilterPtr MessagingUtil::jsonToAbstractFilter(const picojson::object& json)
+{
+ LoggerD("Entered");
+
+ auto filter = getValueFromJSONObject<picojson::object>(json, JSON_TO_FILTER);
+ std::string type = getValueFromJSONObject<std::string>(filter, "type");
+
+ if( JSON_FILTER_ATTRIBUTE_TYPE == type ){
+ return jsonFilterToAttributeFilter(filter);
+ }
+ if( JSON_FILTER_ATTRIBUTERANGE_TYPE == type ){
+ return jsonFilterToAttributeRangeFilter(filter);
+ }
+ if( JSON_FILTER_COMPOSITE_TYPE == type ) {
+ //TODO jsonToCompositeFilter
+ LoggerD("Composite filter currently not supported");
+ }
+
+ LoggerE("Unsupported filter type");
+ throw common::TypeMismatchException("Unsupported filter type");
+ return AbstractFilterPtr();
+}
+
+tizen::AttributeFilterPtr MessagingUtil::jsonFilterToAttributeFilter(const picojson::object& filter)
{
LoggerD("Entered");
using namespace tizen;
- auto filter = getValueFromJSONObject<picojson::object>(json, JSON_TO_FILTER);
auto name = getValueFromJSONObject<std::string>(filter, JSON_TO_ATTRIBUTE_NAME);
auto matchFlagStr = getValueFromJSONObject<std::string>(filter, JSON_TO_MATCH_FLAG);
return attributePtr;
}
+tizen::AttributeRangeFilterPtr MessagingUtil::jsonFilterToAttributeRangeFilter(const picojson::object& filter)
+{
+ LoggerD("Entered");
+
+ auto name = getValueFromJSONObject<std::string>(filter, JSON_TO_ATTRIBUTE_NAME);
+
+ auto attributeRangePtr = tizen::AttributeRangeFilterPtr(new tizen::AttributeRangeFilter(name));
+ attributeRangePtr->setInitialValue(AnyPtr(new Any(filter.at(JSON_TO_INITIAL_VALUE))));
+ attributeRangePtr->setEndValue(AnyPtr(new Any(filter.at(JSON_TO_END_VALUE))));
+
+ return attributeRangePtr;
+}
+
std::shared_ptr<MessageAttachment> MessagingUtil::jsonToMessageAttachment(const picojson::value& json)
{
LoggerD("Entered");
static std::shared_ptr<MessageBody> jsonToMessageBody(const picojson::value& json);
static std::shared_ptr<MessageFolder> jsonToMessageFolder(const picojson::value& json);
static tizen::SortModePtr jsonToSortMode(const picojson::object& json);
- static tizen::AttributeFilterPtr jsonToAttributeFilter(const picojson::object& json);
+ static tizen::AbstractFilterPtr jsonToAbstractFilter(const picojson::object& json);
static std::shared_ptr<MessageConversation> jsonToMessageConversation(const picojson::value& json);
static std::shared_ptr<MessageAttachment> jsonToMessageAttachment(const picojson::value& json);
*/
static std::string loadFileContentToString(const std::string& file_path);
static std::string messageStatusToString(MessageStatus status);
+
+private:
+ static tizen::AttributeFilterPtr jsonFilterToAttributeFilter(const picojson::object& json);
+ static tizen::AttributeRangeFilterPtr jsonFilterToAttributeRangeFilter(const picojson::object& json);
};
} // messaging