og-revive/ReviveOverlay/main.cpp

100 lines
3.1 KiB
C++
Raw Permalink Normal View History

#include "trayiconcontroller.h"
2016-04-30 10:35:01 +00:00
#include "openvroverlaycontroller.h"
#include "revivemanifestcontroller.h"
#include "windowsservices.h"
#include <qt_windows.h>
#include <winsparkle.h>
#include <QApplication>
2016-04-30 10:35:01 +00:00
#include <QQmlEngine>
#include <QQmlComponent>
#include <QQuickItem>
#include <QQmlContext>
#include <QUrl>
#include <QDir>
#include <QFile>
#include <QTextStream>
#include <QStandardPaths>
QFile* g_LogFile = nullptr;
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
QTextStream log(g_LogFile);
log << localMsg.constData() << "\n";
OutputDebugStringA(localMsg.constData());
2016-09-16 17:07:03 +02:00
OutputDebugStringA("\n");
if (type == QtFatalMsg)
abort();
}
2016-04-30 10:35:01 +00:00
int main(int argc, char *argv[])
{
// Open the log file and install our handler.
QString logPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
2017-02-15 17:11:35 +01:00
logPath.append("/Revive");
if (QDir().mkpath(logPath)) {
g_LogFile = new QFile(logPath + "/ReviveOverlay.txt");
g_LogFile->open(QIODevice::WriteOnly | QIODevice::Truncate);
2017-02-15 17:11:35 +01:00
// Remove obsolete log files
QDir logDir(logPath);
logDir.remove("ReviveOverlay.log");
logDir.remove("ReviveInjector.log");
}
qInstallMessageHandler(myMessageOutput);
QApplication a(argc, argv);
a.setQuitOnLastWindowClosed(false);
2016-04-30 10:35:01 +00:00
// Handle command-line arguments
if (a.arguments().contains("-manifest")) {
// Only initialize the manifest
vr::EVRInitError err = vr::VRInitError_None;
vr::VR_Init( &err, vr::VRApplication_Utility );
if ( err != vr::VRInitError_None )
return -1;
QString filePath = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + "/app.vrmanifest");
vr::VRApplications()->AddApplicationManifest(qPrintable(filePath));
vr::VRApplications()->SetApplicationAutoLaunch(CReviveManifestController::SharedInstance()->AppKey, true);
vr::VR_Shutdown();
return 0;
}
// Initialize singletons
2016-09-16 17:07:03 +02:00
if (!COpenVROverlayController::SharedInstance()->Init())
return -1;
if (!CTrayIconController::SharedInstance()->Init())
return -1;
2016-09-16 17:07:03 +02:00
if (!CReviveManifestController::SharedInstance()->Init())
return -1;
2016-04-30 10:35:01 +00:00
// Create a QML engine.
QQmlEngine qmlEngine;
qmlEngine.rootContext()->setContextProperty("Revive", CReviveManifestController::SharedInstance());
2016-09-15 15:59:56 +02:00
qmlEngine.rootContext()->setContextProperty("OpenVR", COpenVROverlayController::SharedInstance());
QQmlComponent qmlComponent( &qmlEngine, QUrl("qrc:/Overlay.qml"));
if (qmlComponent.isError())
{
qDebug(qUtf8Printable(qmlComponent.errorString()));
return -1;
}
2016-04-30 10:35:01 +00:00
QObject *rootObject = qmlComponent.create();
2016-04-30 10:35:01 +00:00
QQuickItem *rootItem = qobject_cast<QQuickItem*>( rootObject );
COpenVROverlayController::SharedInstance()->SetQuickItem( rootItem );
win_sparkle_set_appcast_url("https://raw.githubusercontent.com/LibreVR/Revive/master/appcast.xml");
win_sparkle_set_can_shutdown_callback([]() { return (BOOL)!QApplication::startingUp(); });
win_sparkle_set_shutdown_request_callback([]() { CTrayIconController::SharedInstance()->quit(); });
win_sparkle_init();
QObject::connect(&a, &QApplication::aboutToQuit, win_sparkle_cleanup);
2016-04-30 10:35:01 +00:00
return a.exec();
}