1
0
Fork 0
VideoPlayer/src/main.cpp

144 lines
3.6 KiB
C++
Raw Normal View History

2020-04-22 10:56:45 +01:00
#include <QtCore/qglobal.h>
#include <locale.h>
#include <qapplication.h>
#include <qbytearray.h>
#include <qmetatype.h>
#include <qprocess.h>
#include <qqml.h>
#include <qqmlapplicationengine.h>
#include <qsettings.h>
#include <qstring.h>
#include <qstringliteral.h>
#include <qurl.h>
#include <qvariant.h>
#include <spdlog/fmt/fmt.h>
#include <cstdlib>
#include <exception>
#include <iosfwd>
#include <memory>
#include "Backends/MPV/MPVBackend.hpp"
2020-04-16 18:19:46 +01:00
#include "Backends/MPVNoFBO/MPVNoFBOBackend.hpp"
2020-04-22 10:56:45 +01:00
#include "Process.h"
#include "ThumbnailCache.h"
#include "enums.hpp"
2020-04-22 10:56:45 +01:00
#include "logger.h"
#include "qmldebugger.h"
2020-04-22 10:56:45 +01:00
#include "spdlog/logger.h"
#include "utils.hpp"
2018-10-31 07:53:38 +00:00
#ifdef WIN32
#include "setenv_mingw.hpp"
#endif
2018-11-11 13:43:18 +00:00
#ifdef __linux__
#include <initializer_list>
#include <signal.h>
#include <unistd.h>
void
catchUnixSignals(std::initializer_list<int> quitSignals)
{
auto handler = [](int sig) -> void { QCoreApplication::quit(); };
sigset_t blocking_mask;
sigemptyset(&blocking_mask);
for (auto sig : quitSignals)
sigaddset(&blocking_mask, sig);
struct sigaction sa;
sa.sa_handler = handler;
sa.sa_mask = blocking_mask;
sa.sa_flags = 0;
for (auto sig : quitSignals)
sigaction(sig, &sa, nullptr);
2018-11-11 13:43:18 +00:00
}
#endif
auto qmlLogger = initLogger("qml");
auto miscLogger = initLogger("misc");
void
spdLogger(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
std::string localMsg = msg.toUtf8().constData();
std::shared_ptr<spdlog::logger> logger;
if (QString(context.category).startsWith(QString("qml"))) {
logger = qmlLogger;
} else {
logger = miscLogger;
}
switch (type) {
case QtDebugMsg:
logger->debug("{}", localMsg);
break;
case QtInfoMsg:
logger->info("{}", localMsg);
break;
case QtWarningMsg:
logger->warn("{}", localMsg);
break;
case QtCriticalMsg:
logger->critical("{}", localMsg);
break;
case QtFatalMsg:
logger->critical("{}", localMsg);
abort();
}
}
int
main(int argc, char* argv[])
2018-10-13 15:38:31 +01:00
{
qInstallMessageHandler(spdLogger);
auto launcherLogger = initLogger("launcher");
launcherLogger->info("Starting up!");
2018-12-18 16:22:17 +00:00
setenv("QT_QUICK_CONTROLS_STYLE", "Desktop", 1);
QApplication app(argc, argv);
2018-11-16 09:10:26 +00:00
app.setOrganizationName("KittehPlayer");
app.setOrganizationDomain("namedkitten.pw");
app.setApplicationName("KittehPlayer");
2018-12-18 16:22:17 +00:00
#ifdef __linux__
catchUnixSignals({ SIGQUIT, SIGINT, SIGTERM, SIGHUP });
#endif
QSettings settings;
Utils::SetDPMS(false);
QString newpath =
QProcessEnvironment::systemEnvironment().value("APPDIR", "") +
"/usr/bin:" + QProcessEnvironment::systemEnvironment().value("PATH", "");
setenv("PATH", newpath.toUtf8().constData(), 1);
2018-10-23 23:56:24 +01:00
qmlRegisterUncreatableMetaObject(
Enums::staticMetaObject, "player", 1, 0, "Enums", "Error: only enums");
qRegisterMetaType<Enums::PlayStatus>("Enums.PlayStatus");
qRegisterMetaType<Enums::VolumeStatus>("Enums.VolumeStatus");
qRegisterMetaType<Enums::Backends>("Enums.Backends");
qRegisterMetaType<Enums::Commands>("Enums.Commands");
qmlRegisterType<Process>("player", 1, 0, "Process");
qmlRegisterType<QMLDebugger>("player", 1, 0, "QMLDebugger");
qmlRegisterType<ThumbnailCache>("player", 1, 0, "ThumbnailCache");
qmlRegisterType<UtilsClass>("player", 1, 0, "Utils");
2020-04-16 18:19:46 +01:00
if (settings.value("Backend/fbo", true).toBool()) {
qmlRegisterType<MPVBackend>("player", 1, 0, "PlayerBackend");
2020-04-16 18:28:31 +01:00
} else {
qmlRegisterType<MPVNoFBOBackend>("player", 1, 0, "PlayerBackend");
2020-04-16 18:19:46 +01:00
}
2020-04-11 14:07:32 +01:00
setlocale(LC_NUMERIC, "C");
launcherLogger->info("Loading player...");
2018-10-13 15:38:31 +01:00
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
2018-10-27 16:11:29 +01:00
return app.exec();
2018-10-13 15:38:31 +01:00
}