File indexing completed on 2024-04-28 05:11:01
0001 /* 0002 This file is part of Akregator. 0003 0004 SPDX-FileCopyrightText: 2004 Stanislav Karchebny <Stanislav.Karchebny@kdemail.net> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0007 */ 0008 0009 #include "aboutdata.h" 0010 #include "akregator_debug.h" 0011 #include "akregator_options.h" 0012 #include "mainwindow.h" 0013 #include "trayicon.h" 0014 #ifdef WITH_KUSERFEEDBACK 0015 #include "userfeedback/akregatoruserfeedbackprovider.h" 0016 #endif 0017 #include <KontactInterface/PimUniqueApplication> 0018 0019 #include <KCrash> 0020 0021 #include <QDBusInterface> 0022 0023 namespace Akregator 0024 { 0025 class Application : public KontactInterface::PimUniqueApplication 0026 { 0027 public: 0028 Application(int &argc, char **argv[]) 0029 : KontactInterface::PimUniqueApplication(argc, argv) 0030 { 0031 } 0032 0033 ~Application() override = default; 0034 0035 int activate(const QStringList &args, const QString &workingDir) override; 0036 0037 private: 0038 Akregator::MainWindow *mMainWindow = nullptr; 0039 }; 0040 0041 int Application::activate(const QStringList &args, const QString &workingDir) 0042 { 0043 if (!isSessionRestored()) { 0044 QDBusInterface akr(QStringLiteral("org.kde.akregator"), QStringLiteral("/Akregator"), QStringLiteral("org.kde.akregator.part")); 0045 0046 QCommandLineParser *parser = cmdArgs(); 0047 parser->process(args); 0048 0049 if (!mMainWindow) { 0050 mMainWindow = new Akregator::MainWindow(); 0051 mMainWindow->loadPart(); 0052 mMainWindow->setupProgressWidgets(); 0053 if (!parser->isSet(QStringLiteral("hide-mainwindow"))) { 0054 mMainWindow->show(); 0055 } 0056 if (Akregator::TrayIcon::getInstance() && !Akregator::TrayIcon::getInstance()->associatedWindow()) { 0057 Akregator::TrayIcon::getInstance()->setAssociatedWindow(mMainWindow->windowHandle()); 0058 } 0059 akr.call(QStringLiteral("openStandardFeedList")); 0060 } 0061 0062 akr.call(QStringLiteral("handleCommandLine"), args); 0063 } 0064 return PimUniqueApplication::activate(args, workingDir); 0065 } 0066 } // namespace Akregator 0067 0068 int main(int argc, char **argv) 0069 { 0070 QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts); 0071 Akregator::Application app(argc, &argv); 0072 KLocalizedString::setApplicationDomain(QByteArrayLiteral("akregator")); 0073 0074 KCrash::initialize(); 0075 0076 app.setDesktopFileName(QStringLiteral("org.kde.akregator")); 0077 Akregator::AboutData about; 0078 app.setAboutData(about); 0079 0080 QCommandLineParser *cmdArgs = app.cmdArgs(); 0081 Akregator::akregator_options(cmdArgs); 0082 0083 const QStringList args = QCoreApplication::arguments(); 0084 cmdArgs->process(args); 0085 about.processCommandLine(cmdArgs); 0086 QApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("akregator"))); 0087 0088 #ifdef WITH_KUSERFEEDBACK 0089 if (cmdArgs->isSet(QStringLiteral("feedback"))) { 0090 auto userFeedBack = new Akregator::AkregatorUserFeedbackProvider(nullptr); 0091 QTextStream(stdout) << userFeedBack->describeDataSources() << '\n'; 0092 delete userFeedBack; 0093 return 0; 0094 } 0095 #endif 0096 if (!Akregator::Application::start(args)) { 0097 qCWarning(AKREGATOR_LOG) << "akregator is already running, exiting."; 0098 exit(0); 0099 } 0100 // see if we are starting with session management 0101 if (app.isSessionRestored()) { 0102 auto mainWindow = new Akregator::MainWindow(); 0103 mainWindow->loadPart(); 0104 if (KMainWindow::canBeRestored(1)) { 0105 mainWindow->restore(1, false); 0106 } 0107 } 0108 0109 return app.exec(); 0110 }