2f360f353822a6790aba8cdb26d7abb88217ac71
[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 QLibWindowmanager* qwm;
16 LibHomeScreen* hs;
17 QString graphic_role;
18 MainApp *mainapp;
19
20 void SyncDrawHandler(json_object *object)
21 {
22     qwm->endDraw(graphic_role);
23 }
24
25 void TapShortcutHandler(json_object *object)
26 {
27     qwm->activateWindow(graphic_role);
28 }
29
30 int main(int argc, char *argv[], char *env[])
31 {
32     int opt;
33     QApplication a(argc, argv);
34     QString credentialsFile(DEFAULT_CREDENTIALS_FILE);
35     qwm = new QLibWindowmanager();
36     hs = new LibHomeScreen();
37     graphic_role = QString("poi");
38
39     QString pt = QString(argv[1]);
40     int port = pt.toInt();
41     QString secret = QString(argv[2]);
42     std::string token = secret.toStdString();
43
44     QUrl bindingAddress;
45     bindingAddress.setScheme(QStringLiteral("ws"));
46     bindingAddress.setHost(QStringLiteral("localhost"));
47     bindingAddress.setPort(port);
48     bindingAddress.setPath(QStringLiteral("/api"));
49     QUrlQuery query;
50     query.addQueryItem(QStringLiteral("token"), secret);
51     bindingAddress.setQuery(query);
52
53     if (qwm->init(port, secret) != 0) {
54         exit(EXIT_FAILURE);
55     }
56
57     if (qwm->requestSurface(graphic_role) != 0) {
58         cerr << "Error: wm check failed" << endl;
59         exit(EXIT_FAILURE);
60     }
61
62     qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw, SyncDrawHandler);
63
64     mainapp = new MainApp(new Navigation(bindingAddress));
65
66     hs->init(port, token.c_str());
67
68     hs->set_event_handler(LibHomeScreen::Event_TapShortcut, TapShortcutHandler);
69
70     //force setting
71     mainapp->setInfoScreen(true);
72     mainapp->setKeyboard(true);
73
74     /* then, authenticate connexion to POI service: */
75     if (mainapp->AuthenticatePOI(credentialsFile) < 0)
76     {
77         cerr << "Error: POI server authentication failed" << endl;
78         return -1;
79     }
80
81     cerr << "authentication succes !" << endl;
82
83     /* now, let's start monitor user inut (register callbacks): */
84     if (mainapp->StartMonitoringUserInput() < 0)
85         return -1;
86
87     qwm->activateWindow(graphic_role);
88
89     /* main loop: */
90     return a.exec();
91 }