chore: baseline usable version

This commit is contained in:
dela
2026-06-10 11:17:51 +08:00
commit a2f82a86b6
932 changed files with 172551 additions and 0 deletions
@@ -0,0 +1,88 @@
#include "libraryactionmenu.h"
#include "../managers/thememanager.h"
#include <QAction>
#include <QFile>
#include <QIcon>
#include <QVariant>
LibraryActionMenu::LibraryActionMenu(const VirtualFolder& folder,
bool scanActive, QWidget* parent)
: QMenu(parent), m_folder(folder), m_scanActive(scanActive)
{
setObjectName("media-action-menu");
setWindowFlags(windowFlags() | Qt::FramelessWindowHint |
Qt::NoDropShadowWindowHint);
setAttribute(Qt::WA_TranslucentBackground);
setupMenu();
}
LibraryContextMenuRequest LibraryActionMenu::execRequest(const QPoint& globalPos)
{
return requestFromAction(exec(globalPos));
}
QAction* LibraryActionMenu::addMenuAction(LibraryContextMenuAction action,
const QIcon& icon,
const QString& text,
const QString& stringValue)
{
auto* menuAction = new QAction(icon, text, this);
LibraryContextMenuRequest request;
request.action = action;
request.stringValue = stringValue;
menuAction->setData(QVariant::fromValue(request));
addAction(menuAction);
return menuAction;
}
LibraryContextMenuRequest
LibraryActionMenu::requestFromAction(const QAction* action)
{
if (!action) {
return {};
}
const QVariant requestData = action->data();
if (!requestData.canConvert<LibraryContextMenuRequest>()) {
return {};
}
return requestData.value<LibraryContextMenuRequest>();
}
void LibraryActionMenu::setupMenu()
{
const QString themeDir =
ThemeManager::instance()->isDarkMode() ? "dark" : "light";
auto adaptiveIcon = [&themeDir](const QString& baseName) -> QIcon {
const QString themePath = QString(":/svg/%1/%2").arg(themeDir, baseName);
if (QFile::exists(themePath)) {
return QIcon(themePath);
}
return ThemeManager::getAdaptiveIcon(
QString(":/svg/player/%1").arg(baseName));
};
const bool hasItemId = !m_folder.itemId.trimmed().isEmpty();
QAction* editImagesAction = addMenuAction(LibraryContextMenuAction::EditImages,
adaptiveIcon("edit-images.svg"),
tr("Edit Images"));
editImagesAction->setEnabled(hasItemId && !m_scanActive);
QAction* refreshAction = addMenuAction(LibraryContextMenuAction::RefreshMetadata,
adaptiveIcon("refresh.svg"),
tr("Refresh Metadata"));
refreshAction->setEnabled(hasItemId && !m_scanActive);
QAction* scanAction = addMenuAction(LibraryContextMenuAction::ScanLibraryFiles,
adaptiveIcon("scan-library.svg"),
tr("Scan Library Files"));
scanAction->setEnabled(hasItemId && !m_scanActive);
}