1 #include "mainwindow.h"
2 #include "rnjesus.h"
3 #include "ipc/instance.h"
4 #include "track.h"
5 #include "streammetadata.h"
6 #include "config/global.h"
7 #include "config/local.h"
8
9 #include <QApplication>
10 #include <QDebug>
11 #include <QTranslator>
12 #include <QLocale>
13 #include <iostream>
14
registerMetaTypes()15 void registerMetaTypes() {
16 qRegisterMetaType<Track>("Track");
17 qRegisterMetaType<StreamMetaData>("StreamMetaData");
18 }
19
args(int argc,char * argv[])20 QStringList args(int argc, char *argv[]) {
21 QStringList result;
22 for (int i = 1; i < argc; i++) {
23 result << argv[i];
24 }
25 return result;
26 }
27
load_locale(QApplication & a,const QString & conf_language)28 void load_locale(QApplication &a, const QString &conf_language) {
29 QString system_language = QLocale::system().name().split("_").first();
30 QString lang;
31 if (conf_language.isEmpty()) {
32 lang = system_language;
33 } else {
34 lang = conf_language;
35 }
36
37 auto trans = new QTranslator;
38 bool load_ok = trans->load(lang, ":/app/resources/translations/");
39 qDebug() << "system language:" << system_language << "config language:" << conf_language << "| transaltions load:" << load_ok;
40 if (load_ok) {
41 a.installTranslator(trans);
42 }
43 }
44
ipc_port(Config::Global & global_conf)45 int ipc_port(Config::Global &global_conf) {
46 if (global_conf.ipcPort() == 0) {
47 global_conf.saveIpcPort(31341);
48 }
49 return global_conf.ipcPort();
50 }
51
main(int argc,char * argv[])52 int main(int argc, char *argv[]) {
53 registerMetaTypes();
54 RNJesus::seed();
55
56 QApplication a(argc, argv);
57 a.setApplicationName("mpz");
58 a.setApplicationVersion(VERSION);
59 a.setApplicationDisplayName(QString("%1 v%2").arg(a.applicationName()).arg(a.applicationVersion()));
60
61 auto arguments = args(argc, argv);
62 if (arguments.size() == 1 && arguments.first() == "--version") {
63 std::cout << a.applicationVersion().toStdString() << std::endl;
64 return 0;
65 }
66
67 Config::Global global_conf;
68 Config::Local local_conf;
69
70 load_locale(a, global_conf.language());
71
72 IPC::Instance instance(ipc_port(global_conf));
73 if (global_conf.singleInstance()) {
74 int another_pid = instance.anotherPid();
75 if (another_pid > 0) {
76 qDebug() << "reusing another instance with pid" << another_pid;
77 return instance.load_files_send(arguments) == true ? 0 : 1;
78 } else {
79 instance.start();
80 }
81 }
82
83 MainWindow w(arguments, &instance, local_conf, global_conf);
84
85 w.show();
86 return a.exec();
87 }
88