blob: 8ecdb24adbe41def9767283e769c0091f707571f [file] [log] [blame]
Edric Milaret627500d2015-03-27 16:41:40 -04001/***************************************************************************
Edric Milaretbab169d2016-01-07 15:13:33 -05002 * Copyright (C) 2015-2016 by Savoir-faire Linux *
Edric Milaret627500d2015-03-27 16:41:40 -04003 * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 3 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
17 **************************************************************************/
18
19#include "mainwindow.h"
20#include <QApplication>
21#include <QFile>
22
Edric Milaret12353822015-05-14 14:41:09 -040023#include "callmodel.h"
Edric Milaret1b197eb2015-06-01 15:09:56 -040024#include "media/audio.h"
25#include "media/video.h"
26#include "media/text.h"
27#include "media/file.h"
Edric Milaretfe390942015-08-04 13:41:03 -040028
Edric Milaret12353822015-05-14 14:41:09 -040029
30#include <QThread>
Edric Milaret53ac6e52015-09-14 13:37:06 -040031#include <QTranslator>
32#include <QLibraryInfo>
Edric Milaret12353822015-05-14 14:41:09 -040033
Edric Milaretfe390942015-08-04 13:41:03 -040034
Edric Milaret36587362016-02-04 12:30:52 -050035#ifdef Q_OS_WIN
Edric Milaret12353822015-05-14 14:41:09 -040036#include <windows.h>
Edric Milaretb37aa1f2015-07-09 16:39:04 -040037#endif
Edric Milaret12353822015-05-14 14:41:09 -040038
Edric Milaretfe390942015-08-04 13:41:03 -040039#ifdef URI_PROTOCOL
40#include "shmclient.h"
41#endif
42
Edric Milaret1b197eb2015-06-01 15:09:56 -040043REGISTER_MEDIA();
44
Edric Milaret5c3ff7c2015-06-22 10:30:08 -040045void
46Console()
47{
Edric Milaret36587362016-02-04 12:30:52 -050048#ifdef Q_OS_WIN
Edric Milaret5c3ff7c2015-06-22 10:30:08 -040049 AllocConsole();
50 freopen("CONOUT$", "w", stdout);
51 freopen("CONOUT$", "w", stderr);
52
53 COORD coordInfo;
54 coordInfo.X = 130;
55 coordInfo.Y = 9000;
56
57 SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coordInfo);
58 SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),ENABLE_QUICK_EDIT_MODE| ENABLE_EXTENDED_FLAGS);
Edric Milaretb37aa1f2015-07-09 16:39:04 -040059#endif
Edric Milaret5c3ff7c2015-06-22 10:30:08 -040060}
61
Edric Milaret627500d2015-03-27 16:41:40 -040062int
63main(int argc, char *argv[])
64{
Edric Milaretac6eab52016-03-31 10:24:36 -040065 qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
Edric Milarete7dbb522016-01-20 13:30:08 -050066
Edric Milaret627500d2015-03-27 16:41:40 -040067 QApplication a(argc, argv);
68
Edric Milaret5c3ff7c2015-06-22 10:30:08 -040069 auto startMinimized = false;
Edric Milaretfe390942015-08-04 13:41:03 -040070 QString uri = "";
Edric Milaret5c3ff7c2015-06-22 10:30:08 -040071
72 for (auto string : QCoreApplication::arguments()) {
73 if (string == "-m" || string == "--minimized")
74 startMinimized = true;
75 if (string == "-d" || string == "--debug")
76 Console();
Edric Milaretfe390942015-08-04 13:41:03 -040077 if (string.startsWith("ring:")) {
78 uri = string;
79 }
Edric Milaret5c3ff7c2015-06-22 10:30:08 -040080 }
81
Edric Milaretfe390942015-08-04 13:41:03 -040082#ifdef URI_PROTOCOL
83 QSharedMemory* shm = new QSharedMemory("RingShm");
84 QSystemSemaphore* sem = new QSystemSemaphore("RingSem", 0);
85
86 if (not shm->create(1024)) {
87 if (not uri.isEmpty()) {
88 shm->attach();
89 shm->lock();
90 char *to = (char*) shm->data();
91 QChar *data = uri.data();
92 while (!data->isNull())
93 {
94 memset(to, data->toLatin1(), 1);
95 ++data;
96 ++to;
97 }
98 memset(to, 0, 1); //null terminator
99 shm->unlock();
100 }
101 sem->release();
102
103 delete shm;
104 exit(EXIT_SUCCESS);
105 }
106 //Client listening to shm event
107 memset((char*)shm->data(), 0, shm->size());
108 ShmClient* shmClient = new ShmClient(shm, sem);
109#endif
110
Edric Milaret53ac6e52015-09-14 13:37:06 -0400111 QTranslator qtTranslator;
112 qtTranslator.load("qt_" + QLocale::system().name(),
113 QLibraryInfo::location(QLibraryInfo::TranslationsPath));
114 a.installTranslator(&qtTranslator);
115
116 QTranslator lrcTranslator;
117 lrcTranslator.load("share/libringclient/translations/lrc_" + QLocale::system().name());
118 a.installTranslator(&lrcTranslator);
119
120 QTranslator mainTranslator;
121 mainTranslator.load("share/ring/translations/ring_client_windows_" + QLocale::system().name());
122 a.installTranslator(&mainTranslator);
123
Edric Milaret627500d2015-03-27 16:41:40 -0400124 QFont font;
125 font.setFamily("Segoe UI");
126 a.setFont(font);
127
128 QFile file(":/stylesheet.css");
129 if(file.open(QIODevice::ReadOnly | QIODevice::Text))
130 {
131 a.setStyleSheet(file.readAll());
132 file.close();
133 }
134
Edric Milaretb25af972015-06-17 16:55:45 -0400135 QCoreApplication::setOrganizationName("Savoir-faire Linux");
136 QCoreApplication::setOrganizationDomain("ring.cx");
137 QCoreApplication::setApplicationName("Ring");
138
Edric Milaretfe390942015-08-04 13:41:03 -0400139 if (not uri.isEmpty()) {
140 startMinimized = false;
Edric Milaret9c3e7f72016-01-27 10:48:20 -0500141 MainWindow::instance().onRingEvent(uri);
Edric Milaretfe390942015-08-04 13:41:03 -0400142 }
143
Edric Milaret90bd5a82015-06-08 10:07:59 -0400144 if (not startMinimized)
Edric Milaret9c3e7f72016-01-27 10:48:20 -0500145 MainWindow::instance().show();
Edric Milaret90bd5a82015-06-08 10:07:59 -0400146 else
Edric Milaret9c3e7f72016-01-27 10:48:20 -0500147 MainWindow::instance().showMinimized();
Edric Milaret627500d2015-03-27 16:41:40 -0400148
Edric Milaret9c3e7f72016-01-27 10:48:20 -0500149 MainWindow::instance().createThumbBar();
Edric Milaret2cf34292015-06-22 16:27:03 -0400150
Edric Milaretfe390942015-08-04 13:41:03 -0400151#ifdef URI_PROTOCOL
Edric Milaret9c3e7f72016-01-27 10:48:20 -0500152 QObject::connect(shmClient, SIGNAL(RingEvent(QString)), &MainWindow::instance(), SLOT(onRingEvent(QString)));
Edric Milaretfe390942015-08-04 13:41:03 -0400153
154 QObject::connect(&a, &QApplication::aboutToQuit, [&a, &shmClient, &shm, &sem]() {
155 shmClient->terminate();
156 delete shmClient;
157 delete shm;
158 delete sem;
159 });
160#endif
161
Edric Milaret627500d2015-03-27 16:41:40 -0400162 return a.exec();
163}