File indexing completed on 2024-04-14 15:50:48

0001 /**
0002  * SPDX-FileCopyrightText: (C) 2003 by Sébastien Laoût <slaout@linux62.org>
0003  * SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 
0006 #include "application.h"
0007 
0008 #include <QCommandLineParser>
0009 #include <QDir>
0010 #include <QFile>
0011 #include <QFileInfo>
0012 #include <QString>
0013 #include <QTimer>
0014 
0015 #include <KLocalizedString>
0016 
0017 #include "aboutdata.h"
0018 #include "bnpview.h"
0019 #include "config.h"
0020 #include "global.h"
0021 #include "mainwindow.h"
0022 
0023 #ifdef WITH_LIBGIT2
0024 extern "C" {
0025 #include <git2.h>
0026 }
0027 #endif
0028 
0029 Application::Application(int &argc, char **argv)
0030     : QApplication(argc, argv)
0031     , m_service(KDBusService::Unique)
0032 {
0033     KLocalizedString::setApplicationDomain("basket");
0034     KAboutData::setApplicationData(AboutData());
0035     // BasketPart::createAboutData();
0036 
0037     connect(&m_service, &KDBusService::activateRequested, this, &Application::onActivateRequested);
0038 
0039 #ifdef WITH_LIBGIT2
0040 #if LIBGIT2_VER_MAJOR > 0 || (LIBGIT2_VER_MAJOR == 0 && LIBGIT2_VER_MINOR >= 22)
0041     git_libgit2_init();
0042 #else
0043     git_threads_init();
0044 #endif
0045 #endif
0046 }
0047 
0048 Application::~Application()
0049 {
0050 #ifdef WITH_LIBGIT2
0051 #if LIBGIT2_VER_MAJOR > 0 || (LIBGIT2_VER_MAJOR == 0 && LIBGIT2_VER_MINOR >= 22)
0052     git_libgit2_shutdown();
0053 #else
0054     git_threads_shutdown();
0055 #endif
0056 #endif
0057 }
0058 
0059 void Application::tryLoadFile(const QStringList &args, const QString &workingDir)
0060 {
0061     // Open the basket archive or template file supplied as argument:
0062     if (args.count() >= 1) {
0063         QString fileName = QDir(workingDir).filePath(args.last());
0064 
0065         if (QFile::exists(fileName)) {
0066             QFileInfo fileInfo(fileName);
0067             if (fileInfo.absoluteFilePath().contains(Global::basketsFolder())) {
0068                 QString folder = fileInfo.absolutePath().split('/').last();
0069                 folder.append("/");
0070                 BNPView::s_basketToOpen = folder;
0071                 QTimer::singleShot(100, Global::bnpView, SLOT(delayedOpenBasket()));
0072             } else if (!fileInfo.isDir()) { // Do not mis-interpret data-folder param!
0073                 // Tags are not loaded until Global::bnpView::lateInit() is called.
0074                 // It is called 0ms after the application start.
0075                 BNPView::s_fileToOpen = fileName;
0076                 QTimer::singleShot(100, Global::bnpView, SLOT(delayedOpenArchive()));
0077                 //              Global::bnpView->openArchive(fileName);
0078             }
0079         }
0080     }
0081 }
0082 
0083 void Application::onActivateRequested(const QStringList &args, const QString &workingDir)
0084 {
0085     if (MainWindow *wnd = Global::mainWindow()) {
0086         // Restore window:
0087         wnd->show();                           // from tray
0088         wnd->setWindowState(Qt::WindowActive); // from minimized
0089         // Raise to the top
0090         wnd->raise();
0091     }
0092     tryLoadFile(args, workingDir);
0093 }