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