-
Notifications
You must be signed in to change notification settings - Fork 1
/
App.cpp
136 lines (122 loc) · 4.33 KB
/
App.cpp
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
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
* =====================================================================================
*
* Filename: App.cpp
*
* Description: Main application
*
* Version: 1.0
* Created: 06/01/2011 09:38:06 AM
* Revision: none
* Compiler: gcc
*
* Author: Matthew Sherborne (), msherborne@gmail.com
* Company:
*
* =====================================================================================
*/
#include "App.hpp"
#include <Wt/WApplication>
#include <Wt/WString>
#include <Wt/WServer>
#include <Wt/WLogger>
#include <Wt/WPushButton>
#include <Wt/WFileResource>
#include <string>
#include "LoginWindow.hpp"
#include "SessionStore.hpp"
namespace Wt {
class WEnvironment;
}
using Wt::WString;
using Wt::WApplication;
using Wt::WEnvironment;
using Wt::WServer;
using mongo::ScopedDbConnection;
namespace vidanueva {
VidaApp::VidaApp(const WEnvironment &environment) : WApplication(environment), _pages(this) {
log("NOTICE") << "Resources URL: " << resourcesUrl();
_userSession = new SessionHandle(this);
// Set up our signals
_userChanged = new AppSignal(this);
// Add some styles
useStyleSheet(resourcesUrl() + "/themes/" + cssTheme() + "/forms.css");
useStyleSheet(resourcesUrl() + "/themes/" + cssTheme() + "/fonts.css");
useStyleSheet(resourcesUrl() + "/themes/" + cssTheme() + "/controlPanel.css");
// Configure our user login look up tool
std::string mongoUsersTable;
readConfigurationProperty("mongo-host", _mongoHostName);
readConfigurationProperty("mongo-db", _mongoDB);
readConfigurationProperty("mongo-users-table", mongoUsersTable);
_userSession->configureMongo(_mongoHostName, _mongoDB, mongoUsersTable);
// Load our message bundles
// Bundles we'll use a lot
messageResourceBundle().use(appRoot() + "messages/MainWindow");
messageResourceBundle().use(appRoot() + "messages/DialogButtonBar");
messageResourceBundle().use(appRoot() + "messages/misc");
messageResourceBundle().use(appRoot() + "messages/Page");
messageResourceBundle().use(appRoot() + "messages/ButtonBar");
// Bundles we won't use quite so much
messageResourceBundle().use(appRoot() + "messages/LoginWindow", false);
messageResourceBundle().use(appRoot() + "messages/ControlPanel", false);
messageResourceBundle().use(appRoot() + "messages/PageEdit", false);
// Set up the UI
setTitle(WString::tr("main-title"));
_mainWindow = new MainWindow(root());
setBodyClass("yui-skin-sam");
// Show the stuff from the right thing for the right path the entered on
setInternalPath(internalPath(), true);
}
/**
* @brief Insert/Update a record in the mongo DB.
*
* Probably shouldn't be called much, better to use something like app.pages().save(...)
*
* @param tableName The name of the table to insert/update on
* @param index The index to look up the existing record
* @param data The data to replace/insert into the table
*/
void VidaApp::mongoSave(const string& tableName, mongo::BSONObj& index, mongo::BSONObj& data) {
ScopedDbConnection db(_mongoHostName);
db->update(mongoNSFor(tableName), index, data, true);
db.done();
}
/**
* @brief The main vidanueva app
*
* @param env
*
* @return
*/
WApplication *createApplication(const WEnvironment& env) { return new VidaApp(env); }
/**
* @brief If someone goes to / .. redirect them to /vida
*
* @param env
*
* @return
*/
WApplication *createRedirectApp(const WEnvironment& env) {
WApplication* app = new WApplication(env);
app->redirect("/vida#" + app->internalPath());
app->quit();
return app;
}
} // namespace vidanueva
int main(int argc, char **argv) {
try {
WServer server(argv[0]);
server.setServerConfiguration(argc, argv, WTHTTP_CONFIGURATION);
server.addEntryPoint(Wt::Application, vidanueva::createApplication, "", "/css/favicon.ico");
//server.addEntryPoint(Wt::Application, vidanueva::createApplication, "/", "/css/favicon.ico");
//server.addEntryPoint(Wt::Application, vidanueva::createRedirectApp, "/", "/css/favicon.ico");
if (server.start()) {
WServer::waitForShutdown();
server.stop();
}
} catch (Wt::WServer::Exception& e) {
std::cerr << e.what() << std::endl;
} catch (std::exception &e) {
std::cerr << "exception: " << e.what() << std::endl;
}
}