1 #include "GetDeviceTimeCommand.h"
3 #include <system_settings.h>
4 #include <utils_i18n.h>
11 GetDeviceTimeCommand::GetDeviceTimeCommand(
12 const ::aurum::ReqGetDeviceTime* request,
13 ::aurum::RspGetDeviceTime* response)
14 : mRequest{request}, mResponse{response}
18 class TizenLocaleTimeConverter {
20 static std::string convert(long long timestamp, const char *pattern)
22 if (timestamp < 0 || pattern == NULL) return "";
24 char *locale, *timezone;
26 i18n_udatepg_h pattern_generator = NULL;
27 i18n_udate_format_h formatter = NULL;
29 i18n_uchar timezone_i18[64] = {0,};
30 i18n_uchar pattern_i18[64]= {0,};
31 i18n_uchar best_pattern_i18[64]= {0,};
32 i18n_uchar result_i18[64]= {0,};
33 char result[64]= {0,};
35 int pattern_len, best_pattern_len, result_i18n_len;
37 if (SYSTEM_SETTINGS_ERROR_NONE != system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &locale))
40 if (SYSTEM_SETTINGS_ERROR_NONE != system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, &timezone)) {
41 if (locale) free(locale);
45 i18n_udatepg_create(locale, &pattern_generator);
47 if (!pattern_generator) {
53 i18n_ustring_copy_ua_n(pattern_i18, pattern, strlen(pattern));
54 pattern_len = i18n_ustring_get_length(pattern_i18);
56 i18n_udatepg_get_best_pattern(pattern_generator,
57 pattern_i18, pattern_len,
58 best_pattern_i18, 64, &best_pattern_len);
60 i18n_ustring_copy_ua_n(timezone_i18, timezone, strlen(timezone));
62 i18n_udatepg_destroy(pattern_generator);
64 if (I18N_ERROR_NONE !=
65 i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, locale,
66 timezone_i18, -1, best_pattern_i18, -1,
74 i18n_udate date = timestamp;
75 i18n_udate_format_date(formatter, date, result_i18, 64, NULL, &result_i18n_len);
76 i18n_ustring_copy_au_n(result , result_i18, 64);
77 i18n_udate_destroy(formatter);
78 return std::string{result};
87 ::grpc::Status GetDeviceTimeCommand::execute()
89 LOG_SCOPE_F(INFO, "GetDeviceTime --------------- ");
91 UiDevice* obj = UiDevice::getInstance(DeviceType::DEFAULT);
92 ::aurum::ReqGetDeviceTime_TimeType type = mRequest->type();
96 case ::aurum::ReqGetDeviceTime_TimeType::ReqGetDeviceTime_TimeType_WALLCLOCK:
97 utcStampMs = obj->getSystemTime(TypeRequestType::WALLCLOCK);
98 mResponse->set_localedatetime(
99 TizenLocaleTimeConverter::convert(utcStampMs, "EEE, MMM d, yyyy 'at' HH:mm:ss zzz").c_str()
101 mResponse->set_timestamputc(utcStampMs);
104 case ::aurum::ReqGetDeviceTime_TimeType::ReqGetDeviceTime_TimeType_SYSTEM:
106 utcStampMs = obj->getSystemTime(TypeRequestType::MONOTONIC);
107 mResponse->set_timestamputc(utcStampMs);
111 mResponse->set_status(::aurum::RspStatus::OK);
112 return grpc::Status::OK;