Rework to raise navigation app and improve behavior
[apps/poi-yelp.git] / main.cpp
1 #include <QApplication>
2 #include <iostream>
3 #include "MainApp.h"
4 #include <getopt.h>
5
6 #include <libhomescreen.hpp>
7 #include <qlibwindowmanager.h>
8
9 #include <navigation.h>
10
11 #define DEFAULT_CREDENTIALS_FILE "/etc/poikey"
12
13 using namespace std;
14
15 static QLibWindowmanager* qwm;
16 static LibHomeScreen* hs;
17 static QString graphic_role;
18 static MainApp *mainapp;
19
20 static void SyncDrawHandler(json_object *object)
21 {
22     qwm->endDraw(graphic_role);
23 }
24
25 static void ShowWindowHandler(json_object *object)
26 {
27     qwm->activateWindow(graphic_role);
28 }
29
30 // Callback to drive raising navigation app
31 static void NavWindowRaiseHandler(void)
32 {
33     if (hs) {
34         hs->showWindow("navigation", nullptr);
35     }
36 }
37
38 int main(int argc, char *argv[], char *env[])
39 {
40     int opt;
41     QApplication a(argc, argv);
42     QString credentialsFile(DEFAULT_CREDENTIALS_FILE);
43     qwm = new QLibWindowmanager();
44     hs = new LibHomeScreen();
45     graphic_role = QString("poi");
46
47     QString pt = QString(argv[1]);
48     int port = pt.toInt();
49     QString secret = QString(argv[2]);
50     std::string token = secret.toStdString();
51
52     QUrl bindingAddress;
53     bindingAddress.setScheme(QStringLiteral("ws"));
54     bindingAddress.setHost(QStringLiteral("localhost"));
55     bindingAddress.setPort(port);
56     bindingAddress.setPath(QStringLiteral("/api"));
57     QUrlQuery query;
58     query.addQueryItem(QStringLiteral("token"), secret);
59     bindingAddress.setQuery(query);
60
61     if (qwm->init(port, secret) != 0) {
62         exit(EXIT_FAILURE);
63     }
64
65     if (qwm->requestSurface(graphic_role) != 0) {
66         cerr << "Error: wm check failed" << endl;
67         exit(EXIT_FAILURE);
68     }
69
70     qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw, SyncDrawHandler);
71
72     mainapp = new MainApp(new Navigation(bindingAddress));
73
74     hs->init(port, token.c_str());
75
76     hs->set_event_handler(LibHomeScreen::Event_ShowWindow, ShowWindowHandler);
77
78     // force setting
79     mainapp->setInfoScreen(true);
80     mainapp->setKeyboard(true);
81
82     // hook up callback to start/raise navigation app
83     mainapp->setNavWindowRaiseCallback(NavWindowRaiseHandler);
84
85     /* then, authenticate connexion to POI service: */
86     if (mainapp->AuthenticatePOI(credentialsFile) < 0)
87     {
88         cerr << "Error: POI server authentication failed" << endl;
89         return -1;
90     }
91
92     cerr << "authentication succes !" << endl;
93
94     /* now, let's start monitor user inut (register callbacks): */
95     if (mainapp->StartMonitoringUserInput() < 0)
96         return -1;
97
98     qwm->activateWindow(graphic_role);
99
100     /* main loop: */
101     return a.exec();
102 }