/* * synergy -- mouse and keyboard sharing utility * Copyright (C) 2024 Symless Ltd. * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. * * This package 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 * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "messages.h" #include "constants.h" #include "styles.h" #include #include #include namespace synergy::gui::messages { void messageHandler( QtMsgType type, const QMessageLogContext &context, const QString &message) { auto datetime = QDateTime::currentDateTime().toString("yyyy-MM-ddTHH:mm:ss"); const auto filename = QString(context.file).split("/").last(); auto function = context.function ? context.function : ""; QString typeString; auto out = stdout; switch (type) { case QtDebugMsg: typeString = "DEBUG"; break; case QtInfoMsg: typeString = "INFO"; break; case QtWarningMsg: typeString = "WARNING"; out = stderr; break; case QtCriticalMsg: typeString = "CRITICAL"; out = stderr; break; case QtFatalMsg: typeString = "FATAL"; out = stderr; break; } auto logLine = QString("[%1] %2: %3\n\t%4:%5, %6") .arg(datetime) .arg(typeString) .arg(message) .arg(filename) .arg(context.line) .arg(function); auto logLineUtf = logLine.toUtf8(); auto logLine_c = logLineUtf.constData(); fprintf(out, "%s\n", logLine_c); if (type == QtFatalMsg) { auto contextString = QString("%1:%2\n%3").arg(filename).arg(context.line).arg(function); QMessageBox::critical( nullptr, "Fatal error", QString("

Sorry, a fatal error has occurred " "and the application must now exit.

" "

Please " R"(contact us)" " and copy/paste the following error:

" "
%3\n\n%4
") .arg(kUrlContact, kColorSecondary, message, contextString)); // developers: if you hit this line in your debugger, traverse the stack to // find the cause of the fatal error. // important: crash the app on fatal error to prevent the app being used in // a broken state. abort(); } } void showCloseReminder(QWidget *parent) { QString message = "

Synergy will continue to run in the background and can be accessed " "via the Synergy icon in your system notifications area. This setting " "can be disabled.

"; #if defined(Q_OS_LINUX) message += QString("

On some Linux systems such as GNOME 3, the " "notification area might be disabled. " "You may need to " R"(enable an extension)" " to see the Synergy tray icon.

") .arg(kUrlGnomeTrayFix, kStyleLink); #endif QMessageBox::information(parent, "Notification area icon", message); } void showFirstRunMessage( QWidget *parent, bool closeToTray, bool enableService, bool isServer) { auto message = QString("

Synergy is now connected!

"); if (isServer) { message += "

Try moving your mouse to your other computer. Once there, go ahead " "and type something.

" "

Don't forget, you can copy and paste between computers too.

"; } else { message += "

Try controlling this computer remotely.

"; } if (!closeToTray && !enableService) { message += "

As you do not have the setting enabled to keep Synergy running in " "the background, you'll need to keep this window open or minimized to " "keep Synergy running.

"; } else { message += "

You can now close this window and Synergy will continue to run in " "the background. This setting can be disabled.

"; } QMessageBox::information(parent, "Connected", message); } void showDevThanks(QWidget *parent, const QString &productName) { if (productName.isEmpty()) { qFatal("product name not set"); } QMessageBox::information( parent, "Thank you!", QString( "

Thanks for using %1.

" "

If you enjoy using this app, you can support the developers by " R"(purchasing a license)" " or " R"(contributing code.)" "

" "

This message will only appear once.

") .arg( productName, kUrlPurchase, kColorSecondary, kUrlContribute, kColorSecondary)); } } // namespace synergy::gui::messages