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 }