summaryrefslogtreecommitdiffstats
path: root/homescreen/src/homescreenhandler.cpp
blob: 3aaef26bc963c2d8c3d58145fddc397881b66a15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
 * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <QFileInfo>
#include "homescreenhandler.h"
#include <functional>
#include "hmi-debug.h"

void* HomescreenHandler::myThis = 0;

HomescreenHandler::HomescreenHandler(QObject *parent) :
    QObject(parent),
    mp_hs(NULL)
{

}

HomescreenHandler::~HomescreenHandler()
{
    if (mp_hs != NULL) {
        delete mp_hs;
    }
}

void HomescreenHandler::init(int port, const char *token)
{
    mp_hs = new LibHomeScreen();
    mp_hs->init(port, token);

    myThis = this;

    mp_hs->registerCallback(nullptr, HomescreenHandler::onRep_static);

    mp_hs->set_event_handler(LibHomeScreen::Event_OnScreenMessage, [this](json_object *object){
        const char *display_message = json_object_get_string(
            json_object_object_get(object, "display_message"));
        HMI_DEBUG("HomeScreen","set_event_handler Event_OnScreenMessage display_message = %s", display_message);
    });

    mp_hs->set_event_handler(LibHomeScreen::Event_ShowNotification,[this](json_object *object){
       const char *application_id = json_object_get_string(
                   json_object_object_get(object, "application_id"));

       json_object *p_obj = json_object_object_get(object, "parameter");
       const char *icon = json_object_get_string(
                   json_object_object_get(p_obj, "icon"));
       const char *text = json_object_get_string(
                   json_object_object_get(p_obj, "text"));
       QFileInfo icon_file(icon);
       QString icon_path;
       if (icon_file.isFile() && icon_file.exists()) {
           icon_path = QString(QLatin1String(icon));
       } else {
           icon_path = "./images/Utility_Logo_Grey-01.svg";
       }

       emit showNotification(QString(QLatin1String(application_id)), icon_path, QString(QLatin1String(text)));
    });

    mp_hs->set_event_handler(LibHomeScreen::Event_ShowInformation,[this](json_object *object){
       json_object *p_obj = json_object_object_get(object, "parameter");
       const char *info = json_object_get_string(
                   json_object_object_get(p_obj, "info"));

       emit showInformation(QString(QLatin1String(info)));
    });
}

void HomescreenHandler::tapShortcut(QString application_id)
{
    HMI_DEBUG("HomeScreen","tapShortcut %s", application_id.toStdString().c_str());
    struct json_object* j_json = json_object_new_object();
    struct json_object* value;
    value = json_object_new_string("normal");
    json_object_object_add(j_json, "area", value);

    mp_hs->showWindow(application_id.toStdString().c_str(), j_json);
}

void HomescreenHandler::onRep_static(struct json_object* reply_contents)
{
    static_cast<HomescreenHandler*>(HomescreenHandler::myThis)->onRep(reply_contents);
}

void HomescreenHandler::onEv_static(const string& event, struct json_object* event_contents)
{
    static_cast<HomescreenHandler*>(HomescreenHandler::myThis)->onEv(event, event_contents);
}

void HomescreenHandler::onRep(struct json_object* reply_contents)
{
    const char* str = json_object_to_json_string(reply_contents);
    HMI_DEBUG("HomeScreen","HomeScreen onReply %s", str);
}

void HomescreenHandler::onEv(const string& event, struct json_object* event_contents)
{
    const char* str = json_object_to_json_string(event_contents);
    HMI_DEBUG("HomeScreen","HomeScreen onEv %s, contents: %s", event.c_str(), str);

    if (event.compare("homescreen/on_screen_message") == 0) {
        struct json_object *json_data = json_object_object_get(event_contents, "data");
        struct json_object *json_display_message = json_object_object_get(json_data, "display_message");
        const char* display_message = json_object_get_string(json_display_message);

        HMI_DEBUG("HomeScreen","display_message = %s", display_message);
    }
}
pan class="kt">int rc; char *result; size_t size; char errbuf[CURL_ERROR_SIZE]; curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); rc = curl_wrap_perform(curl, &result, &size); if (rc) callback(closure, rc, curl, result, size); else callback(closure, rc, curl, errbuf, 0); free(result); curl_easy_cleanup(curl); } int curl_wrap_content_type_is(CURL *curl, const char *value) { char *actual; CURLcode code; code = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &actual); if (code != CURLE_OK || !actual) return 0; return !strncasecmp(actual, value, strcspn(actual, "; ")); } long curl_wrap_response_code_get(CURL *curl) { long rc; CURLcode code; code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &rc); return (code == CURLE_OK) ? rc : 0; } CURL *curl_wrap_prepare_get_url(const char *url) { CURL *curl; CURLcode code; curl = curl_easy_init(); if(curl) { code = curl_easy_setopt(curl, CURLOPT_URL, url); if (code == CURLE_OK) return curl; curl_easy_cleanup(curl); } return NULL; } CURL *curl_wrap_prepare_get(const char *base, const char *path, const char * const *args) { CURL *res; char *url; url = escape_url(base, path, args, NULL); res = url ? curl_wrap_prepare_get_url(url) : NULL; free(url); return res; } int curl_wrap_add_header(CURL *curl, const char *header) { int rc; struct curl_slist *list; list = curl_slist_append(NULL, header); rc = list ? curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list) == CURLE_OK : 0; /* curl_slist_free_all(list); */ return rc; } int curl_wrap_add_header_value(CURL *curl, const char *name, const char *value) { char *h; int rc; rc = asprintf(&h, "%s: %s", name, value); rc = rc < 0 ? 0 : curl_wrap_add_header(curl, h); free(h); return rc; } CURL *curl_wrap_prepare_post_url_data(const char *url, const char *datatype, const char *data, size_t szdata) { CURL *curl; curl = curl_easy_init(); if (curl && CURLE_OK == curl_easy_setopt(curl, CURLOPT_URL, url) && (!szdata || CURLE_OK == curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, szdata)) && CURLE_OK == curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data) && (!datatype || curl_wrap_add_header_value(curl, "content-type", datatype))) return curl; curl_easy_cleanup(curl); return NULL; } static CURL *curl_wrap_prepare_post(const char *base, const char *path, int unescape_flag, const char *separator, const char * const *args, const char *simple_args) { CURL *res; char *url; const char *data = NULL; size_t szdata = 0; url = escape_url(base, path, NULL, NULL); if(args) { data = unescape_flag ? curl_concatenate_args(args, separator, &szdata) : escape_args(args, &szdata); } else { data = unescape_flag ? escape_str(simple_args, &szdata) : simple_args; } szdata = szdata ? szdata : strlen(data); res = url ? curl_wrap_prepare_post_url_data(url, NULL, data, szdata) : NULL; free(url); return res; } CURL *curl_wrap_prepare_post_simple_unescaped(const char *base, const char *path, const char *args) { return curl_wrap_prepare_post(base, path, 1, NULL, NULL, args); } CURL *curl_wrap_prepare_post_simple_escaped(const char *base, const char *path, char *args) { return curl_wrap_prepare_post(base, path, 0, NULL, NULL, args); } CURL *curl_wrap_prepare_post_unescaped(const char *base, const char *path, const char *separator, const char * const *args) { return curl_wrap_prepare_post(base, path, 1, separator, args, NULL); } CURL *curl_wrap_prepare_post_escaped(const char *base, const char *path, const char * const *args) { return curl_wrap_prepare_post(base, path, 0, NULL, args, NULL); } /* vim: set colorcolumn=80: */