2
* Copyright (C) 2010-2011 Daniel Richter <danielrichter2007@web.de>
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 3 of the License, or
7
* (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
21
#include "../Bootstrap/Regex.hpp"
22
#include "../Bootstrap/Thread.hpp"
23
#include "../Bootstrap/View.hpp"
24
#include "../Controller/AboutControllerImpl.hpp"
25
#include "../Controller/ControllerCollection.hpp"
26
#include "../Controller/EntryEditControllerImpl.hpp"
27
#include "../Controller/EnvEditorControllerImpl.hpp"
28
#include "../Controller/ErrorControllerImpl.hpp"
29
#include "../Controller/InstallerControllerImpl.hpp"
30
#include "../Controller/MainControllerImpl.hpp"
31
#include "../Controller/SettingsControllerImpl.hpp"
32
#include "../Controller/ThemeControllerImpl.hpp"
33
#include "../Controller/TrashControllerImpl.hpp"
34
#include "../lib/ArrayStructure.hpp"
35
#include "../lib/ContentParser/Chainloader.hpp"
36
#include "../lib/ContentParser/FactoryImpl.hpp"
37
#include "../lib/ContentParser/Linux.hpp"
38
#include "../lib/ContentParser/LinuxIso.hpp"
39
#include "../lib/ContentParser/Memtest.hpp"
40
#include "../lib/Logger/Stream.hpp"
41
#include "../Mapper/EntryNameImpl.hpp"
42
#include "../Model/Env.hpp"
43
#include "../Model/ThemeManager.hpp"
47
int main(int argc, char** argv){
48
if (getuid() != 0 && (argc == 1 || argv[1] != std::string("no-fork"))) {
49
return system((std::string("pkexec ") + argv[0] + (argc == 2 ? std::string(" ") + argv[1] : "") + " no-fork").c_str());
51
setlocale( LC_ALL, "");
52
bindtextdomain( "grub-customizer", LOCALEDIR);
53
textdomain( "grub-customizer" );
55
Logger_Stream logger(std::cout);
60
Bootstrap_View view(argc, argv);
61
Bootstrap_Thread thread;
62
Bootstrap_Regex regex;
64
Model_ListCfg listcfg;
65
Model_SettingsManagerData settings;
66
Model_SettingsManagerData settingsOnDisk;
67
Model_Installer installer;
68
Model_MountTable mountTable;
69
Model_ListCfg savedListCfg;
70
Model_FbResolutionsGetter fbResolutionsGetter;
71
Model_DeviceDataList deviceDataList;
72
ContentParser_FactoryImpl contentParserFactory;
73
Mapper_EntryNameImpl entryNameMapper;
74
Model_ThemeManager themeManager;
75
Model_DeviceMap deviceMap;
77
deviceMap.setRegexEngine(*regex.engine);
79
entryNameMapper.setView(*view.main);
81
view.setDeviceDataList(deviceDataList);
83
EntryEditControllerImpl entryEditController;
84
entryEditController.setContentParserFactory(contentParserFactory);
85
entryEditController.setView(*view.entryEditor);
86
entryEditController.setDeviceDataList(deviceDataList);
87
entryEditController.setListCfg(listcfg);
89
MainControllerImpl mainController;
90
mainController.setListCfg(listcfg);
91
mainController.setSettingsManager(settings);
92
mainController.setSettingsBuffer(settingsOnDisk);
93
mainController.setSavedListCfg(savedListCfg);
94
mainController.setFbResolutionsGetter(fbResolutionsGetter);
95
mainController.setDeviceDataList(deviceDataList);
96
mainController.setMountTable(mountTable);
97
mainController.setContentParserFactory(contentParserFactory);
98
mainController.setView(*view.main);
99
mainController.setEntryNameMapper(entryNameMapper);
101
SettingsControllerImpl settingsController;
102
settingsController.setListCfg(listcfg);
103
settingsController.setView(*view.settings);
104
settingsController.setSettingsManager(settings);
105
settingsController.setFbResolutionsGetter(fbResolutionsGetter);
107
EnvEditorControllerImpl envEditController;
108
envEditController.setMountTable(mountTable);
109
envEditController.setView(*view.envEditor);
110
envEditController.setDeviceMap(deviceMap);
112
TrashControllerImpl trashController;
113
trashController.setEntryNameMapper(entryNameMapper);
114
trashController.setListCfg(listcfg);
115
trashController.setDeviceDataList(deviceDataList);
116
trashController.setContentParserFactory(contentParserFactory);
117
trashController.setView(*view.trash);
119
InstallerControllerImpl installController;
120
installController.setInstaller(installer);
121
installController.setView(*view.installer);
123
AboutControllerImpl aboutController;
124
aboutController.setView(*view.about);
126
ErrorControllerImpl errorController;
127
errorController.setView(*view.error);
129
ThemeControllerImpl themeController;
130
themeController.setView(*view.theme);
131
themeController.setThemeManager(themeManager);
132
themeController.setSettingsManager(settings);
133
themeController.setListCfg(listcfg);
135
ControllerCollection controllerCollection;
136
controllerCollection.entryEditController = &entryEditController;
137
controllerCollection.mainController = &mainController;
138
controllerCollection.settingsController = &settingsController;
139
controllerCollection.envEditController = &envEditController;
140
controllerCollection.trashController = &trashController;
141
controllerCollection.installerController = &installController;
142
controllerCollection.aboutController = &aboutController;
143
controllerCollection.errorController = &errorController;
144
controllerCollection.themeController = &themeController;
146
dynamic_cast<ControllerCollection_Connection&>(*thread.threadController).setControllerCollection(controllerCollection);
147
entryEditController.setControllerCollection(controllerCollection);
148
mainController.setControllerCollection(controllerCollection);
149
settingsController.setControllerCollection(controllerCollection);
150
envEditController.setControllerCollection(controllerCollection);
151
trashController.setControllerCollection(controllerCollection);
152
installController.setControllerCollection(controllerCollection);
153
aboutController.setControllerCollection(controllerCollection);
154
errorController.setControllerCollection(controllerCollection);
155
themeController.setControllerCollection(controllerCollection);
157
mainController.setThreadController(*thread.threadController);
158
settingsController.setThreadController(*thread.threadController);
159
installController.setThreadController(*thread.threadController);
160
errorController.setThreadController(*thread.threadController);
161
entryEditController.setThreadController(*thread.threadController);
162
themeController.setThreadController(*thread.threadController);
164
//assign event listener
165
view.main->setController(mainController);
166
view.installer->setController(installController);
167
view.trash->setController(trashController);
168
view.entryEditor->setController(entryEditController);
169
view.settings->setController(settingsController);
170
listcfg.setController(mainController);
171
installer.setController(installController);
172
fbResolutionsGetter.setController(settingsController);
173
view.envEditor->setController(envEditController);
174
view.error->setController(errorController);
175
view.theme->setController(themeController);
178
listcfg.setLogger(logger);
179
view.main->setLogger(logger);
180
settings.setLogger(logger);
181
settingsOnDisk.setLogger(logger);
182
installer.setLogger(logger);
183
view.installer->setLogger(logger);
184
view.trash->setLogger(logger);
185
view.entryEditor->setLogger(logger);
186
mountTable.setLogger(logger);
187
savedListCfg.setLogger(logger);
188
fbResolutionsGetter.setLogger(logger);
189
view.settings->setLogger(logger);
190
deviceDataList.setLogger(logger);
191
view.about->setLogger(logger);
192
thread.mutex1->setLogger(logger);
193
thread.mutex2->setLogger(logger);
194
thread.threadController->setLogger(logger);
195
env.setLogger(logger);
196
view.envEditor->setLogger(logger);
197
mainController.setLogger(logger);
198
entryEditController.setLogger(logger);
199
settingsController.setLogger(logger);
200
envEditController.setLogger(logger);
201
trashController.setLogger(logger);
202
errorController.setLogger(logger);
203
installController.setLogger(logger);
204
aboutController.setLogger(logger);
205
view.theme->setLogger(logger);
206
themeController.setLogger(logger);
209
logger.setLogLevel(Logger_Stream::LOG_EVENT);
211
std::string logParam = argv[1];
212
if (logParam == "debug") {
213
logger.setLogLevel(Logger_Stream::LOG_DEBUG_ONLY);
214
} else if (logParam == "log-important") {
215
logger.setLogLevel(Logger_Stream::LOG_IMPORTANT);
216
} else if (logParam == "quiet") {
217
logger.setLogLevel(Logger_Stream::LOG_NOTHING);
218
} else if (logParam == "verbose") {
219
logger.setLogLevel(Logger_Stream::LOG_VERBOSE);
223
//configure contentParser factory
224
ContentParser_Linux linuxParser(deviceMap);
225
ContentParser_LinuxIso linuxIsoParser(deviceMap);
226
ContentParser_Chainloader chainloadParser(deviceMap);
227
ContentParser_Memtest memtestParser(deviceMap);
229
contentParserFactory.registerParser(linuxParser, gettext("Linux"));
230
contentParserFactory.registerParser(linuxIsoParser, gettext("Linux-ISO"));
231
contentParserFactory.registerParser(chainloadParser, gettext("Chainloader"));
232
contentParserFactory.registerParser(memtestParser, gettext("Memtest"));
234
linuxParser.setRegexEngine(*regex.engine);
235
linuxIsoParser.setRegexEngine(*regex.engine);
236
chainloadParser.setRegexEngine(*regex.engine);
237
memtestParser.setRegexEngine(*regex.engine);
239
view.entryEditor->setAvailableEntryTypes(contentParserFactory.getNames());
243
savedListCfg.setEnv(env);
244
settings.setEnv(env);
245
settingsOnDisk.setEnv(env);
246
installer.setEnv(env);
247
themeManager.setEnv(env);
248
entryEditController.setEnv(env);
249
mainController.setEnv(env);
250
settingsController.setEnv(env);
251
envEditController.setEnv(env);
252
trashController.setEnv(env);
253
installController.setEnv(env);
254
themeController.setEnv(env);
255
deviceMap.setEnv(env);
258
listcfg.setMutex(*thread.mutex1);
259
savedListCfg.setMutex(*thread.mutex2);
261
mainController.initAction();
262
errorController.setApplicationStarted(true);
265
} catch (Exception const& e) {
266
logger.log(e, Logger::ERROR);