Merge pull request #8160 from zzmp/fix/metadata-mac

fix metadata hours parsing on mac
This commit is contained in:
Stephen Birarda 2016-06-29 16:18:38 -07:00 committed by GitHub
commit a3189345d6

View file

@ -50,8 +50,8 @@ const QString DomainMetadata::Descriptors::Hours::CLOSE = "close";
// "tags": [ String ], // capped list of tags // "tags": [ String ], // capped list of tags
// "hours": { // "hours": {
// "utc_offset": Number, // "utc_offset": Number,
// "weekday": [ { "open": Time, "close": Time } ], // "weekday": [ [ Time, Time ] ],
// "weekend": [ { "open": Time, "close": Time } ], // "weekend": [ [ Time, Time ] ],
// } // }
// } // }
@ -65,13 +65,10 @@ const QString DomainMetadata::Descriptors::Hours::CLOSE = "close";
// delta should be of the form [ { open: Time, close: Time } ] // delta should be of the form [ { open: Time, close: Time } ]
void parseHours(QVariant delta, QVariant& target) { void parseHours(QVariant delta, QVariant& target) {
using Hours = DomainMetadata::Descriptors::Hours; using Hours = DomainMetadata::Descriptors::Hours;
static const QVariantList DEFAULT_HOURS{
assert(target.canConvert<QVariantList>()); { QVariantList{ "00:00", "23:59" } }
auto& targetList = *static_cast<QVariantList*>(target.data()); };
target.setValue(DEFAULT_HOURS);
// if/when multiple ranges are allowed, this list will need to be iterated
assert(targetList[0].canConvert<QVariantList>());
auto& hours = *static_cast<QVariantList*>(targetList[0].data());
if (!delta.canConvert<QVariantList>()) { if (!delta.canConvert<QVariantList>()) {
return; return;
@ -83,25 +80,21 @@ void parseHours(QVariant delta, QVariant& target) {
} }
auto& deltaHours = *static_cast<QVariantMap*>(deltaList.first().data()); auto& deltaHours = *static_cast<QVariantMap*>(deltaList.first().data());
if (deltaHours.isEmpty()) { auto open = deltaHours.find(Hours::OPEN);
auto close = deltaHours.find(Hours::CLOSE);
if (open == deltaHours.end() || close == deltaHours.end()) {
return; return;
} }
// merge delta into base // merge delta into new hours
static const int OPEN_INDEX = 0; static const int OPEN_INDEX = 0;
static const int CLOSE_INDEX = 1; static const int CLOSE_INDEX = 1;
auto open = deltaHours.find(Hours::OPEN); auto& hours = *static_cast<QVariantList*>(static_cast<QVariantList*>(target.data())->first().data());
if (open != deltaHours.end()) { hours[OPEN_INDEX] = open.value();
hours[OPEN_INDEX] = open.value(); hours[CLOSE_INDEX] = close.value();
}
assert(hours[OPEN_INDEX].canConvert<QString>()); assert(hours[OPEN_INDEX].canConvert<QString>());
auto close = deltaHours.find(Hours::CLOSE);
if (close != deltaHours.end()) {
hours[CLOSE_INDEX] = close.value();
}
assert(hours[CLOSE_INDEX].canConvert<QString>()); assert(hours[CLOSE_INDEX].canConvert<QString>());
} }
DomainMetadata::DomainMetadata(QObject* domainServer) : QObject(domainServer) { DomainMetadata::DomainMetadata(QObject* domainServer) : QObject(domainServer) {
@ -109,12 +102,8 @@ DomainMetadata::DomainMetadata(QObject* domainServer) : QObject(domainServer) {
_metadata[USERS] = QVariantMap {}; _metadata[USERS] = QVariantMap {};
_metadata[DESCRIPTORS] = QVariantMap { { _metadata[DESCRIPTORS] = QVariantMap { {
Descriptors::HOURS, QVariantMap { Descriptors::HOURS, QVariantMap {
{ Descriptors::Hours::WEEKDAY, QVariantList { { Descriptors::Hours::WEEKDAY, QVariant{} },
QVariantList{ QVariant{}, QVariant{} } } { Descriptors::Hours::WEEKEND, QVariant{} }
},
{ Descriptors::Hours::WEEKEND, QVariantList {
QVariantList{ QVariant{}, QVariant{} } }
}
} }
} }; } };