#include "libraryview.h" #include "../../quick/embyimageprovider.h" #include "../../quick/quickpagehost.h" #include "libraryviewmodel.h" #include #include #include #include #include LibraryView::LibraryView(QEmbyCore *core, QWidget *parent) : BaseView(core, parent) { setObjectName(QStringLiteral("library-view")); setProperty("showGlobalSearch", true); setAttribute(Qt::WA_StyledBackground, true); auto *layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); m_quickHost = new QuickPageHost(this); m_viewModel = new LibraryViewModel(core, m_quickHost); m_quickHost->setContextProperty(QStringLiteral("libraryPage"), m_viewModel); m_quickHost->addImageProvider(QStringLiteral("emby"), new EmbyImageProvider(core)); m_quickHost->addImageProvider(QStringLiteral("adaptiveicon"), new AdaptiveIconProvider()); m_quickHost->load( QUrl(QStringLiteral("qrc:/qt/qml/qEmby/qml/LibraryPage.qml"))); layout->addWidget(m_quickHost); connect(m_quickHost, &QuickPageHost::pageShown, this, [this]() { m_viewModel->setActive(true); }); connect(m_quickHost, &QuickPageHost::pageHidden, this, [this]() { m_viewModel->setActive(false); }); connect(m_viewModel, &LibraryViewModel::itemActivated, this, [this](const MediaItem &item) { if (item.type == QLatin1String("BoxSet") || item.type == QLatin1String("Playlist") || item.type == QLatin1String("Folder")) { emit navigateToFolder(item.id, item.name); } else if (item.type == QLatin1String("Person")) { emit navigateToPerson(item.id, item.name); } else { emit navigateToDetail(item.id, item.name, item); } }); connect(m_viewModel, &LibraryViewModel::playRequested, this, &BaseView::handlePlayRequested); connect(m_viewModel, &LibraryViewModel::favoriteRequested, this, &BaseView::handleFavoriteRequested); connect(m_viewModel, &LibraryViewModel::currentFavoriteRequested, this, &BaseView::handleFavoriteRequested); connect(m_viewModel, &LibraryViewModel::moreRequested, this, [this](const MediaItem &item) { handleMoreMenuRequested(item, QCursor::pos()); }); } QCoro::Task LibraryView::loadLibrary(const QString &libraryId, const QString &libraryName) { co_await m_viewModel->loadLibrary(libraryId, libraryName); } QCoro::Task LibraryView::loadPerson(const QString &personId, const QString &personName) { co_await m_viewModel->loadPerson(personId, personName); } QCoro::Task LibraryView::loadFiltered(const QString &filterType, const QString &filterValue) { co_await m_viewModel->loadFiltered(filterType, filterValue); } void LibraryView::prepareForStackLeave() { m_viewModel->setActive(false); } void LibraryView::scrollToTop() { if (QQuickItem *root = m_quickHost->quickWidget()->rootObject()) QMetaObject::invokeMethod(root, "scrollToTop"); } void LibraryView::onMediaItemUpdated(const MediaItem &item) { m_viewModel->updateItem(item); } void LibraryView::onMediaItemRemoved(const QString &itemId) { m_viewModel->removeItem(itemId); }