File indexing completed on 2024-04-28 15:40:16
0001 // SPDX-FileCopyrightText: 2019-2022 The KPhotoAlbum Development Team 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 #include "PurposeMenu.h" 0006 0007 #include "Logging.h" 0008 0009 #include <MainWindow/Window.h> 0010 0011 #include <KLocalizedString> 0012 #include <Purpose/AlternativesModel> 0013 #include <PurposeWidgets/Menu> 0014 #include <QJsonArray> 0015 #include <QJsonObject> 0016 #include <QMenu> 0017 0018 Plugins::PurposeMenu::PurposeMenu(QMenu *parent) 0019 : Purpose::Menu(parent) 0020 , m_parentMenu(parent) 0021 , m_menuUpdateNeeded(true) 0022 { 0023 loadPurposeMenu(); 0024 } 0025 0026 void Plugins::PurposeMenu::slotSelectionChanged() 0027 { 0028 m_menuUpdateNeeded = true; 0029 clear(); 0030 qCDebug(PluginsLog) << "Purpose menu items invalidated..."; 0031 } 0032 0033 void Plugins::PurposeMenu::loadPurposeMenu() 0034 { 0035 // attach the menu 0036 QAction *purposeMenu = m_parentMenu->addMenu(this); 0037 purposeMenu->setText(i18n("Share")); 0038 purposeMenu->setIcon(QIcon::fromTheme(QStringLiteral("document-share"))); 0039 0040 // set up the callback signal 0041 connect(this, &Purpose::Menu::finished, this, [this](const QJsonObject &output, int error, const QString &message) { 0042 if (error) { 0043 qCDebug(PluginsLog) << "Failed to share image:" << message; 0044 Q_EMIT imageSharingFailed(message); 0045 } else { 0046 // Note: most plugins don't seem to actually return anything in the url field... 0047 const QUrl returnUrl = QUrl(output[QStringLiteral("url")].toString(), QUrl::ParsingMode::StrictMode); 0048 qCDebug(PluginsLog) << "Image shared successfully."; 0049 qCDebug(PluginsLog) << "Raw json data: " << output; 0050 Q_EMIT imageShared(returnUrl); 0051 } 0052 }); 0053 0054 // update available options based on the latest picture 0055 connect(this, &QMenu::aboutToShow, this, &PurposeMenu::loadPurposeItems); 0056 qCDebug(PluginsLog) << "Purpose menu loaded..."; 0057 } 0058 0059 void Plugins::PurposeMenu::loadPurposeItems() 0060 { 0061 if (!m_menuUpdateNeeded) { 0062 return; 0063 } 0064 m_menuUpdateNeeded = false; 0065 0066 const DB::FileNameList images = MainWindow::Window::theMainWindow()->selected(ThumbnailView::NoExpandCollapsedStacks); 0067 QJsonArray urls; 0068 for (const auto &image : images) { 0069 urls.append(QUrl(image).toString()); 0070 } 0071 0072 // "image/jpeg" is certainly not always true, but the interface does not allow a mimeType list 0073 // and the plugins likely won't care... 0074 model()->setInputData(QJsonObject { 0075 { QStringLiteral("mimeType"), QStringLiteral("image/jpeg") }, 0076 { QStringLiteral("urls"), urls } }); 0077 model()->setPluginType(QStringLiteral("Export")); 0078 reload(); 0079 qCDebug(PluginsLog) << "Purpose menu items loaded..."; 0080 } 0081 0082 #include "moc_PurposeMenu.cpp"