source: subsurface/subsurface-desktop-main.cpp

Last change on this file was 59ed9ea3, checked in by Dirk Hohndel <dirk@…>, 3 weeks ago

Add SPDX header to top level files

Signed-off-by: Dirk Hohndel <dirk@…>

  • Property mode set to 100644
File size: 3.3 KB
Line 
1// SPDX-License-Identifier: GPL-2.0
2/* main.c */
3#include <locale.h>
4#include <stdio.h>
5#include <string.h>
6#include <stdlib.h>
7#include <time.h>
8
9#include "core/dive.h"
10#include "core/qt-gui.h"
11#include "core/subsurfacestartup.h"
12#include "desktop-widgets/mainwindow.h"
13#include "desktop-widgets/tab-widgets/maintab.h"
14#include "profile-widget/profilewidget2.h"
15#include "desktop-widgets/preferences/preferencesdialog.h"
16#include "desktop-widgets/diveplanner.h"
17#include "core/color.h"
18#include "core/qthelper.h"
19
20#include <QStringList>
21#include <QApplication>
22#include <QLoggingCategory>
23#include <git2.h>
24
25static bool filesOnCommandLine = false;
26
27int main(int argc, char **argv)
28{
29        int i;
30        bool no_filenames = true;
31        QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true"));
32        QApplication *application = new QApplication(argc, argv);
33        (void)application;
34        QStringList files;
35        QStringList importedFiles;
36        QStringList arguments = QCoreApplication::arguments();
37
38        bool win32_log = arguments.length() > 1 &&
39                (arguments.at(1) == QString("--win32log"));
40        if (win32_log) {
41                subsurface_console_init(true, true);
42        } else {
43                bool dedicated_console = arguments.length() > 1 &&
44                        (arguments.at(1) == QString("--win32console"));
45                subsurface_console_init(dedicated_console, false);
46        }
47
48        const char *default_directory = system_default_directory();
49        const char *default_filename = system_default_filename();
50        subsurface_mkdir(default_directory);
51
52        for (i = 1; i < arguments.length(); i++) {
53                QString a = arguments.at(i);
54                if (a.isEmpty())
55                        continue;
56                if (a.at(0) == '-') {
57                        parse_argument(a.toLocal8Bit().data());
58                        continue;
59                }
60                if (imported) {
61                        importedFiles.push_back(a);
62                } else {
63                        no_filenames = false;
64                        files.push_back(a);
65                }
66        }
67        if (subsurface_user_is_root() && !force_root) {
68                printf("You are running Subsurface as root. This is not recommended.\n");
69                printf("If you insist to do so, run with option --allow_run_as_root.\n");
70                exit(0);
71        }
72#if !LIBGIT2_VER_MAJOR && LIBGIT2_VER_MINOR < 22
73        git_threads_init();
74#else
75        git_libgit2_init();
76#endif
77        /*
78         * Initialize the random number generator - not really secure as
79         * this is based only on current time, but it should not matter
80         * that much in our context. Moreover this is better than
81         * the constant numbers we used to get before.
82         */
83        qsrand(time(NULL));
84
85        setup_system_prefs();
86        copy_prefs(&default_prefs, &prefs);
87        fill_profile_color();
88        parse_xml_init();
89        taglist_init_global();
90        init_ui();
91        if (no_filenames) {
92                if (prefs.default_file_behavior == LOCAL_DEFAULT_FILE) {
93                        QString defaultFile(prefs.default_filename);
94                        if (!defaultFile.isEmpty())
95                                files.push_back(QString(prefs.default_filename));
96                } else if (prefs.default_file_behavior == CLOUD_DEFAULT_FILE) {
97                        QString cloudURL;
98                        if (getCloudURL(cloudURL) == 0)
99                                files.push_back(cloudURL);
100                }
101        }
102        MainWindow *m = MainWindow::instance();
103        filesOnCommandLine = !files.isEmpty() || !importedFiles.isEmpty();
104        m->loadFiles(files);
105        m->importFiles(importedFiles);
106        // in case something has gone wrong make sure we show the error message
107        m->showError();
108
109        if (verbose > 0)
110                print_files();
111        if (!quit)
112                run_ui();
113        exit_ui();
114        taglist_free(g_tag_list);
115        parse_xml_exit();
116        free((void *)default_directory);
117        free((void *)default_filename);
118        subsurface_console_exit();
119        free_prefs();
120        return 0;
121}
122
123bool haveFilesOnCommandLine()
124{
125        return filesOnCommandLine;
126}
Note: See TracBrowser for help on using the repository browser.