2025-07-23 21:20:34 +08:00
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
//
// SPDX-License-Identifier: MIT
# include "mainwindow.h"
# include "playlistmanager.h"
# include "settings.h"
# ifdef Q_OS_MACOS
# include "fileopeneventhandler.h"
# endif // Q_OS_MACOS
# include <QApplication>
# include <QCommandLineParser>
# include <QDir>
# include <QTranslator>
# include <QUrl>
using namespace Qt : : Literals : : StringLiterals ;
int main ( int argc , char * argv [ ] )
{
QCoreApplication : : setApplicationName ( u " Pineapple Pictures " _s ) ;
QCoreApplication : : setApplicationVersion ( PPIC_VERSION_STRING ) ;
QGuiApplication : : setHighDpiScaleFactorRoundingPolicy ( Settings : : instance ( ) - > hiDpiScaleFactorBehavior ( ) ) ;
QApplication a ( argc , argv ) ;
QTranslator translator ;
# if defined(TRANSLATION_RESOURCE_EMBEDDING)
const QString qmDir = u " :/i18n/ " _s ;
# elif defined(QM_FILE_INSTALL_ABSOLUTE_DIR)
const QString qmDir = QT_STRINGIFY ( QM_FILE_INSTALL_ABSOLUTE_DIR ) ;
# else
const QString qmDir = QDir ( QCoreApplication : : applicationDirPath ( ) ) . absoluteFilePath ( " translations " ) ;
# endif
if ( translator . load ( QLocale ( ) , u " PineapplePictures " _s , u " _ " _s , qmDir ) ) {
QCoreApplication : : installTranslator ( & translator ) ;
}
QGuiApplication : : setApplicationDisplayName ( QCoreApplication : : translate ( " main " , " Pineapple Pictures " ) ) ;
// commandline options
QCommandLineOption supportedImageFormats ( u " supported-image-formats " _s , QCoreApplication : : translate ( " main " , " List supported image format suffixes, and quit program. " ) ) ;
// parse commandline arguments
QCommandLineParser parser ;
parser . addOption ( supportedImageFormats ) ;
parser . addPositionalArgument ( " File list " , QCoreApplication : : translate ( " main " , " File list. " ) ) ;
parser . addHelpOption ( ) ;
parser . process ( a ) ;
if ( parser . isSet ( supportedImageFormats ) ) {
# if QT_VERSION < QT_VERSION_CHECK(6, 9, 0)
fputs ( qPrintable ( MainWindow : : supportedImageFormats ( ) . join ( QChar ( ' \n ' ) ) ) , stdout ) ;
: : exit ( EXIT_SUCCESS ) ;
# else
QCommandLineParser : : showMessageAndExit ( QCommandLineParser : : MessageType : : Information ,
MainWindow : : supportedImageFormats ( ) . join ( QChar ( ' \n ' ) ) ) ;
# endif
}
MainWindow w ;
w . show ( ) ;
# ifdef Q_OS_MACOS
FileOpenEventHandler * fileOpenEventHandler = new FileOpenEventHandler ( & a ) ;
a . installEventFilter ( fileOpenEventHandler ) ;
a . connect ( fileOpenEventHandler , & FileOpenEventHandler : : fileOpen , [ & w ] ( const QUrl & url ) {
if ( w . isHidden ( ) ) {
w . setWindowOpacity ( 1 ) ;
w . showNormal ( ) ;
} else {
w . activateWindow ( ) ;
}
w . showUrls ( { url } ) ;
w . initWindowSize ( ) ;
} ) ;
// Handle dock icon clicks to show hidden window
a . connect ( & a , & QApplication : : applicationStateChanged , [ & w ] ( Qt : : ApplicationState state ) {
if ( state = = Qt : : ApplicationActive & & w . isHidden ( ) ) {
w . showUrls ( { } ) ;
w . galleryCurrent ( true , true ) ;
w . setWindowOpacity ( 1 ) ;
w . showNormal ( ) ;
w . raise ( ) ;
w . activateWindow ( ) ;
}
} ) ;
# endif // Q_OS_MACOS
QStringList urlStrList = parser . positionalArguments ( ) ;
QList < QUrl > & & urlList = PlaylistManager : : convertToUrlList ( urlStrList ) ;
if ( ! urlList . isEmpty ( ) ) {
w . showUrls ( urlList ) ;
}
w . initWindowSize ( ) ;
return QApplication : : exec ( ) ;
}