~rohangarg/grub-customizer/use-pkexec

« back to all changes in this revision

Viewing changes to src/main/client.cpp

  • Committer: daniel
  • Date: 2014-12-05 15:59:27 UTC
  • Revision ID: svn-v4:be7c28b6-f33a-4d9b-8ecf-65c8357c33c1:trunk:736
headerless: combined headers with cpp files

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2010-2011 Daniel Richter <danielrichter2007@web.de>
 
3
 *
 
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.
 
8
 *
 
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.
 
13
 *
 
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
 
17
 */
 
18
 
 
19
#include <iostream>
 
20
 
 
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"
 
44
 
 
45
 
 
46
 
 
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());
 
50
        }
 
51
        setlocale( LC_ALL, "");
 
52
        bindtextdomain( "grub-customizer", LOCALEDIR);
 
53
        textdomain( "grub-customizer" );
 
54
 
 
55
        Logger_Stream logger(std::cout);
 
56
 
 
57
        try {
 
58
                Model_Env env;
 
59
 
 
60
                Bootstrap_View view(argc, argv);
 
61
                Bootstrap_Thread thread;
 
62
                Bootstrap_Regex regex;
 
63
 
 
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;
 
76
 
 
77
                deviceMap.setRegexEngine(*regex.engine);
 
78
 
 
79
                entryNameMapper.setView(*view.main);
 
80
 
 
81
                view.setDeviceDataList(deviceDataList);
 
82
 
 
83
                EntryEditControllerImpl entryEditController;
 
84
                entryEditController.setContentParserFactory(contentParserFactory);
 
85
                entryEditController.setView(*view.entryEditor);
 
86
                entryEditController.setDeviceDataList(deviceDataList);
 
87
                entryEditController.setListCfg(listcfg);
 
88
 
 
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);
 
100
 
 
101
                SettingsControllerImpl settingsController;
 
102
                settingsController.setListCfg(listcfg);
 
103
                settingsController.setView(*view.settings);
 
104
                settingsController.setSettingsManager(settings);
 
105
                settingsController.setFbResolutionsGetter(fbResolutionsGetter);
 
106
 
 
107
                EnvEditorControllerImpl envEditController;
 
108
                envEditController.setMountTable(mountTable);
 
109
                envEditController.setView(*view.envEditor);
 
110
                envEditController.setDeviceMap(deviceMap);
 
111
 
 
112
                TrashControllerImpl trashController;
 
113
                trashController.setEntryNameMapper(entryNameMapper);
 
114
                trashController.setListCfg(listcfg);
 
115
                trashController.setDeviceDataList(deviceDataList);
 
116
                trashController.setContentParserFactory(contentParserFactory);
 
117
                trashController.setView(*view.trash);
 
118
 
 
119
                InstallerControllerImpl installController;
 
120
                installController.setInstaller(installer);
 
121
                installController.setView(*view.installer);
 
122
 
 
123
                AboutControllerImpl aboutController;
 
124
                aboutController.setView(*view.about);
 
125
 
 
126
                ErrorControllerImpl errorController;
 
127
                errorController.setView(*view.error);
 
128
 
 
129
                ThemeControllerImpl themeController;
 
130
                themeController.setView(*view.theme);
 
131
                themeController.setThemeManager(themeManager);
 
132
                themeController.setSettingsManager(settings);
 
133
                themeController.setListCfg(listcfg);
 
134
 
 
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;
 
145
 
 
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);
 
156
 
 
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);
 
163
 
 
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);
 
176
 
 
177
                //assign logger
 
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);
 
207
 
 
208
                // configure logger
 
209
                logger.setLogLevel(Logger_Stream::LOG_EVENT);
 
210
                if (argc > 1) {
 
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);
 
220
                        }
 
221
                }
 
222
 
 
223
                //configure contentParser factory
 
224
                ContentParser_Linux linuxParser(deviceMap);
 
225
                ContentParser_LinuxIso linuxIsoParser(deviceMap);
 
226
                ContentParser_Chainloader chainloadParser(deviceMap);
 
227
                ContentParser_Memtest memtestParser(deviceMap);
 
228
 
 
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"));
 
233
 
 
234
                linuxParser.setRegexEngine(*regex.engine);
 
235
                linuxIsoParser.setRegexEngine(*regex.engine);
 
236
                chainloadParser.setRegexEngine(*regex.engine);
 
237
                memtestParser.setRegexEngine(*regex.engine);
 
238
 
 
239
                view.entryEditor->setAvailableEntryTypes(contentParserFactory.getNames());
 
240
 
 
241
                //set env
 
242
                listcfg.setEnv(env);
 
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);
 
256
 
 
257
                //set mutex
 
258
                listcfg.setMutex(*thread.mutex1);
 
259
                savedListCfg.setMutex(*thread.mutex2);
 
260
 
 
261
                mainController.initAction();
 
262
                errorController.setApplicationStarted(true);
 
263
 
 
264
                view.run();
 
265
        } catch (Exception const& e) {
 
266
                logger.log(e, Logger::ERROR);
 
267
                return 1;
 
268
        }
 
269
}
 
270