2014-07-07 00:19:45 +08:00
|
|
|
/*
|
|
|
|
Copyright (C) 2014 by Project Tox <https://tox.im>
|
|
|
|
|
|
|
|
This file is part of qTox, a Qt-based graphical interface for Tox.
|
|
|
|
|
|
|
|
This program is libre software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
|
|
See the COPYING file for more details.
|
|
|
|
*/
|
|
|
|
|
2014-06-27 06:32:08 +08:00
|
|
|
#include "widget/widget.h"
|
2014-09-30 02:28:59 +08:00
|
|
|
#include "misc/settings.h"
|
2014-11-06 22:12:10 +08:00
|
|
|
#include "src/ipc.h"
|
|
|
|
#include "src/widget/toxuri.h"
|
2014-06-25 04:11:11 +08:00
|
|
|
#include <QApplication>
|
2014-06-30 08:24:27 +08:00
|
|
|
#include <QFontDatabase>
|
2014-09-11 21:44:34 +08:00
|
|
|
#include <QDebug>
|
2014-11-01 13:27:10 +08:00
|
|
|
#include <QFile>
|
|
|
|
#include <QDir>
|
|
|
|
#include <QDateTime>
|
2014-11-07 12:53:05 +08:00
|
|
|
#include <QMutexLocker>
|
2014-11-01 13:27:10 +08:00
|
|
|
|
|
|
|
#ifdef LOG_TO_FILE
|
|
|
|
static QtMessageHandler dflt;
|
2014-11-02 15:55:11 +08:00
|
|
|
static QTextStream* logFile {nullptr};
|
2014-11-07 12:53:05 +08:00
|
|
|
static QMutex mutex;
|
2014-11-01 13:27:10 +08:00
|
|
|
|
|
|
|
void myMessageHandler(QtMsgType type, const QMessageLogContext& ctxt, const QString& msg)
|
|
|
|
{
|
2014-11-02 15:55:11 +08:00
|
|
|
if (!logFile)
|
|
|
|
return;
|
|
|
|
|
2014-11-02 21:17:50 +08:00
|
|
|
// Silence qWarning spam due to bug in QTextBrowser (trying to open a file for base64 images)
|
|
|
|
if (ctxt.function == QString("virtual bool QFSFileEngine::open(QIODevice::OpenMode)")
|
|
|
|
&& msg == QString("QFSFileEngine::open: No file name specified"))
|
|
|
|
return;
|
|
|
|
|
2014-11-07 12:53:05 +08:00
|
|
|
dflt(type, ctxt, msg); // this must be thread safe, otherwise qDebug() would never ever work
|
|
|
|
QMutexLocker locker(&mutex);
|
2014-11-02 15:55:11 +08:00
|
|
|
*logFile << QTime::currentTime().toString("HH:mm:ss' '") << msg << '\n';
|
|
|
|
logFile->flush();
|
2014-11-01 13:27:10 +08:00
|
|
|
}
|
|
|
|
#endif
|
2014-06-25 04:11:11 +08:00
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
QApplication a(argc, argv);
|
2014-07-12 00:05:18 +08:00
|
|
|
a.setApplicationName("qTox");
|
2014-06-25 04:11:11 +08:00
|
|
|
a.setOrganizationName("Tox");
|
2014-06-30 08:24:27 +08:00
|
|
|
|
2014-11-01 13:27:10 +08:00
|
|
|
#ifdef LOG_TO_FILE
|
2014-11-02 15:55:11 +08:00
|
|
|
logFile = new QTextStream;
|
2014-11-01 13:27:10 +08:00
|
|
|
dflt = qInstallMessageHandler(nullptr);
|
|
|
|
QFile logfile(QDir(Settings::getSettingsDirPath()).filePath("qtox.log"));
|
2014-11-04 09:08:02 +08:00
|
|
|
if (logfile.open(QIODevice::Append))
|
|
|
|
{
|
|
|
|
logFile->setDevice(&logfile);
|
|
|
|
*logFile << QDateTime::currentDateTime().toString("\nyyyy-dd-MM HH:mm:ss' file logger starting\n'");
|
|
|
|
qInstallMessageHandler(myMessageHandler);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Couldn't open log file!!!\n");
|
|
|
|
delete logFile;
|
|
|
|
logFile = nullptr;
|
|
|
|
}
|
2014-11-01 13:27:10 +08:00
|
|
|
#endif
|
|
|
|
|
2014-10-01 22:49:54 +08:00
|
|
|
// Windows platform plugins DLL hell fix
|
|
|
|
QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath());
|
|
|
|
a.addLibraryPath("platforms");
|
2014-10-18 15:47:42 +08:00
|
|
|
|
|
|
|
qDebug() << "built on: " << __TIME__ << __DATE__;
|
|
|
|
qDebug() << "commit: " << GIT_VERSION << "\n";
|
2014-10-01 22:49:54 +08:00
|
|
|
|
2014-07-04 21:30:47 +08:00
|
|
|
// Install Unicode 6.1 supporting font
|
2014-06-30 08:24:27 +08:00
|
|
|
QFontDatabase::addApplicationFont("://DejaVuSans.ttf");
|
|
|
|
|
2014-11-06 22:12:10 +08:00
|
|
|
// Inter-process communication
|
|
|
|
IPC ipc;
|
|
|
|
ipc.registerEventHandler(&toxURIEventHandler);
|
2014-06-25 04:11:11 +08:00
|
|
|
|
2014-11-06 22:12:10 +08:00
|
|
|
// Process arguments
|
|
|
|
if (argc >= 2)
|
|
|
|
{
|
|
|
|
QString firstParam(argv[1]);
|
|
|
|
// Tox URIs. If there's already another qTox instance running, we ask it to handle the URI and we exit
|
|
|
|
// Otherwise we start a new qTox instance and process it ourselves
|
|
|
|
if (firstParam.startsWith("tox:"))
|
|
|
|
{
|
|
|
|
if (ipc.isCurrentOwner()) // Don't bother sending an event if we're going to process it ourselves
|
|
|
|
{
|
|
|
|
handleToxURI(firstParam.toUtf8());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
time_t event = ipc.postEvent(firstParam.toUtf8());
|
|
|
|
ipc.waitUntilProcessed(event);
|
|
|
|
// If someone else processed it, we're done here, no need to actually start qTox
|
|
|
|
if (!ipc.isCurrentOwner())
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Run
|
|
|
|
Widget* w = Widget::getInstance();
|
2014-06-25 04:11:11 +08:00
|
|
|
int errorcode = a.exec();
|
|
|
|
|
|
|
|
delete w;
|
2014-11-02 15:55:11 +08:00
|
|
|
#ifdef LOG_TO_FILE
|
|
|
|
delete logFile;
|
|
|
|
logFile = nullptr;
|
|
|
|
#endif
|
2014-06-25 04:11:11 +08:00
|
|
|
|
|
|
|
return errorcode;
|
|
|
|
}
|