diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 105 |
1 files changed, 78 insertions, 27 deletions
diff --git a/src/main.cpp b/src/main.cpp index 36afdd4b..3f72be7f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,6 @@ /** + * Copyright (C) 2021 Saturneric + * * This file is part of GpgFrontend. * * GpgFrontend is free software: you can redistribute it and/or modify @@ -6,49 +8,90 @@ * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Foobar is distributed in the hope that it will be useful, + * GpgFrontend is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with Foobar. If not, see <https://www.gnu.org/licenses/>. + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. * - * The initial version of the source code is inherited from gpg4usb-team. - * Their source code version also complies with GNU General Public License. + * All the source code of GpgFrontend was modified and released by + * Saturneric<[email protected]> starting on May 12, 2021. * - * The source code version of this software was modified and released - * by Saturneric<[email protected]> starting on May 12, 2021. + * SPDX-License-Identifier: GPL-3.0-or-later * */ +/** + * \mainpage GpgFrontend Develop Document Main Page + */ + #include <csetjmp> #include <csignal> #include <cstdlib> #include "GpgFrontendBuildInfo.h" -#include "gpg/GpgFunctionObject.h" -#include "ui/MainWindow.h" +#include "core/GpgFunctionObject.h" +#include "ui/main_window/MainWindow.h" #include "ui/thread/CtxCheckThread.h" #if !defined(RELEASE) && defined(WINDOWS) -#include "ui/settings/GlobalSettingStation.h" +#include "core/function/GlobalSettingStation.h" #endif -// Easy Logging Cpp +/** + * \brief initialize the easylogging++ library. + */ INITIALIZE_EASYLOGGINGPP -// Recover buff +/** + * \brief Store the jump buff and make it possible to recover from a crash. + */ jmp_buf recover_env; +/** + * @brief + * + */ extern void init_logging(); + +/** + * @brief + * + */ extern void init_certs(); + +/** + * @brief + * + */ extern void init_locale(); + +/** + * @brief + * + * @param sig + */ extern void handle_signal(int sig); + +/** + * @brief + * + */ extern void before_exit(); +/** + * + * @param argc + * @param argv + * @return + */ int main(int argc, char* argv[]) { - // Register Signals + // re signal(SIGSEGV, handle_signal); signal(SIGFPE, handle_signal); signal(SIGILL, handle_signal); @@ -56,10 +99,10 @@ int main(int argc, char* argv[]) { // clean something before exit atexit(before_exit); - // Qt + // initialize qt resources Q_INIT_RESOURCE(gpgfrontend); - // Qt App + // create qt application QApplication app(argc, argv); #ifndef MACOS @@ -71,13 +114,13 @@ int main(int argc, char* argv[]) { QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); #endif - // config logging system + // initialize logging system init_logging(); - // root certs for tls connection + // init certs for tls connection init_certs(); - // App config + // set the extra information of the build QApplication::setApplicationVersion(BUILD_VERSION); QApplication::setApplicationName(PROJECT_NAME); @@ -89,8 +132,8 @@ int main(int argc, char* argv[]) { #if !defined(RELEASE) && defined(WINDOWS) // css - boost::filesystem::path css_path = - GpgFrontend::UI::GlobalSettingStation::GetInstance().GetResourceDir() / + std::filesystem::path css_path = + GpgFrontend::GlobalSettingStation::GetInstance().GetResourceDir() / "css" / "default.qss"; QFile file(css_path.string().c_str()); file.open(QFile::ReadOnly); @@ -101,9 +144,9 @@ int main(int argc, char* argv[]) { #ifdef GPG_STANDALONE_MODE LOG(INFO) << "GPG_STANDALONE_MODE Enabled"; - auto gpg_path = GpgFrontend::UI::GlobalSettingStation::GetInstance() + auto gpg_path = GpgFrontend::GlobalSettingStation::GetInstance() .GetStandaloneGpgBinDir(); - auto db_path = GpgFrontend::UI::GlobalSettingStation::GetInstance() + auto db_path = GpgFrontend::GlobalSettingStation::GetInstance() .GetStandaloneDatabaseDir(); GpgFrontend::GpgContext::CreateInstance( GpgFrontend::SingletonFunctionObject< @@ -112,12 +155,12 @@ int main(int argc, char* argv[]) { gpg_path.string())); #endif + // create the thread to load the gpg context auto* init_ctx_thread = new GpgFrontend::UI::CtxCheckThread(); - QApplication::connect(init_ctx_thread, &QThread::finished, init_ctx_thread, &QThread::deleteLater); - // Waiting Dialog + // create and show loading window before starting the main window auto* waiting_dialog = new QProgressDialog(); waiting_dialog->setMaximum(0); waiting_dialog->setMinimum(0); @@ -141,10 +184,11 @@ int main(int argc, char* argv[]) { exit(0); }); - // Show Waiting Dialog + // show the loading window waiting_dialog->show(); waiting_dialog->setFocus(); + // start the thread to load the gpg context init_ctx_thread->start(); QEventLoop loop; QApplication::connect(init_ctx_thread, &QThread::finished, &loop, @@ -164,18 +208,22 @@ int main(int argc, char* argv[]) { int r = setjmp(recover_env); #endif if (!r) { +#ifdef RELEASE try { - // i18n +#endif + // init the i18n support init_locale(); QApplication::setQuitOnLastWindowClosed(true); + // create main window and show it auto main_window = std::make_unique<GpgFrontend::UI::MainWindow>(); - main_window->init(); + main_window->Init(); main_window->show(); return_from_event_loop_code = QApplication::exec(); - +#ifdef RELEASE } catch (...) { + // catch all unhandled exceptions and notify the user QMessageBox::information( nullptr, _("Unhandled Exception Thrown"), _("Oops, an unhandled exception was thrown " @@ -186,8 +234,10 @@ int main(int argc, char* argv[]) { return_from_event_loop_code = RESTART_CODE; continue; } +#endif } else { + // when signal is caught, restart the main window QMessageBox::information( nullptr, _("A serious error has occurred"), _("Oh no! GpgFrontend caught a serious error in the software, so it " @@ -201,5 +251,6 @@ int main(int argc, char* argv[]) { LOG(INFO) << "loop refresh"; } while (return_from_event_loop_code == RESTART_CODE); + // exit the program return return_from_event_loop_code; } |