Skip to content
Snippets Groups Projects
Select Git revision
  • 12353822b0d9c6e1e8b75e65be383b4a7883d9da
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • release/201811
  • release/201808
  • releases/beta1
  • packaging
  • native
  • release-0.2.x
  • 1.0.0
  • 0.2.0
  • 0.1.1
  • 0.1.0
25 results

wizarddialog.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    main.cpp 6.51 KiB
    /***************************************************************************
     * Copyright (C) 2015-2017 by Savoir-faire Linux                                *
     * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
     *                                                                         *
     * This program is free software; you can redistribute it and/or modify    *
     * it under the terms of the GNU General Public License as published by    *
     * the Free Software Foundation; either version 3 of the License, or       *
     * (at your option) any later version.                                     *
     *                                                                         *
     * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.   *
     **************************************************************************/
    
    #include "mainwindow.h"
    #include <QApplication>
    #include <QFile>
    
    #include "callmodel.h"
    #include "media/audio.h"
    #include "media/video.h"
    #include "media/text.h"
    #include "media/file.h"
    #include "globalinstances.h"
    #include "pixbufmanipulator.h"
    #include "lrcinstance.h"
    
    #include <QTranslator>
    #include <QLibraryInfo>
    #include <QFontDatabase>
    
    #include <ciso646>
    
    #ifdef Q_OS_WIN
    #include <windows.h>
    #endif
    
    #ifdef _MSC_VER
    #include <gnutls/gnutls.h>
    #endif
    
    #ifdef URI_PROTOCOL
    #include "shmclient.h"
    #endif
    
    REGISTER_MEDIA();
    
    void
    Console()
    {
    #ifdef Q_OS_WIN
    #ifdef _MSC_VER
        // Print debug to output window if using VS
        QObject::connect(
            &LRCInstance::behaviorController(),
            &lrc::api::BehaviorController::debugMessageReceived,
            [](const std::string& message) {
                OutputDebugStringA((message + "\n").c_str());
            });
    #else
        AllocConsole();
        freopen("CONOUT$", "w", stdout);
        freopen("CONOUT$", "w", stderr);
    
        COORD coordInfo;
        coordInfo.X = 130;
        coordInfo.Y = 9000;
    
        SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coordInfo);
        SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),ENABLE_QUICK_EDIT_MODE| ENABLE_EXTENDED_FLAGS);
    #endif
    #endif
    }
    
    int
    main(int argc, char *argv[])
    {
        QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    
        QApplication a(argc, argv);
    
        GlobalInstances::setPixmapManipulator(std::unique_ptr<PixbufManipulator>(new PixbufManipulator()));
    
        auto startMinimized = false;
        QString uri = "";
    
    #ifdef _MSC_VER
        gnutls_global_init();
    #endif
    
        LRCInstance::init();
    
        for (auto string : QCoreApplication::arguments()) {
            if (string == "-m" || string == "--minimized")
                startMinimized = true;
            if (string == "-d" || string == "--debug")
                Console();
            if (string.startsWith("ring:")) {
                uri = string;
            }
        }
    
    #ifdef URI_PROTOCOL
        QSharedMemory* shm = new QSharedMemory("RingShm");
        QSystemSemaphore* sem = new QSystemSemaphore("RingSem", 0);
    
        if (not shm->create(1024)) {
            if (not uri.isEmpty()) {
                shm->attach();
                shm->lock();
                char *to = (char*) shm->data();
                QChar *data = uri.data();
                while (!data->isNull())
                {
                    memset(to, data->toLatin1(), 1);
                    ++data;
                    ++to;
                }
                memset(to, 0, 1); //null terminator
                shm->unlock();
            }
            sem->release();
    
            delete shm;
            exit(EXIT_SUCCESS);
        }
        //Client listening to shm event
        memset((char*)shm->data(), 0, shm->size());
        ShmClient* shmClient = new ShmClient(shm, sem);
    #endif
    
        const auto locale_name = QLocale::system().name();
        const auto locale_lang = locale_name.split('_')[0];
    
        QTranslator qtTranslator_lang;
        QTranslator qtTranslator_name;
        if (locale_name != locale_lang) {
            qtTranslator_lang.load("qt_" + locale_lang, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
            a.installTranslator(&qtTranslator_lang);
        }
        qtTranslator_name.load("qt_" + locale_name, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
        a.installTranslator(&qtTranslator_name);
    
        QTranslator lrcTranslator_lang;
        QTranslator lrcTranslator_name;
        if (locale_name != locale_lang) {
            lrcTranslator_lang.load("share/libringclient/translations/lrc_" + locale_lang);
            a.installTranslator(&lrcTranslator_lang);
        }
        lrcTranslator_name.load("share/libringclient/translations/lrc_" + locale_name);
        a.installTranslator(&lrcTranslator_name);
    
        QTranslator mainTranslator_lang;
        QTranslator mainTranslator_name;
        if (locale_name != locale_lang) {
            mainTranslator_lang.load("share/ring/translations/ring_client_windows_" + locale_lang);
            a.installTranslator(&mainTranslator_lang);
        }
        mainTranslator_name.load("share/ring/translations/ring_client_windows_" + locale_name);
        a.installTranslator(&mainTranslator_name);
    
        QFont font;
        font.setFamily("Segoe UI");
        a.setFont(font);
    
        QFile file(":/stylesheet.css");
        if(file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            a.setStyleSheet(file.readAll());
            file.close();
        }
    
        QCoreApplication::setOrganizationName("Savoir-faire Linux");
        QCoreApplication::setOrganizationDomain("ring.cx");
        QCoreApplication::setApplicationName("Ring");
    
        QFontDatabase::addApplicationFont(":/images/FontAwesome.otf");
    
        MainWindow::instance().createThumbBar();
    
        if (not uri.isEmpty()) {
            startMinimized = false;
            MainWindow::instance().onRingEvent(uri);
        }
    
        if (not startMinimized)
            MainWindow::instance().show();
        else {
            MainWindow::instance().showMinimized();
            MainWindow::instance().hide();
        }
    
    
    #ifdef URI_PROTOCOL
        QObject::connect(shmClient, SIGNAL(RingEvent(QString)), &MainWindow::instance(), SLOT(onRingEvent(QString)));
    
        QObject::connect(&a, &QApplication::aboutToQuit, [&a, &shmClient, &shm, &sem]() {
            shmClient->terminate();
            delete shmClient;
            delete shm;
            delete sem;
        });
    #endif
    
        auto ret = a.exec();
    
        QCoreApplication::exit();
        GlobalSystemTray::instance().deleteLater();
        GlobalSystemTray::instance().hide();
    
        return ret;
    }