Files
qemby/src/qEmbyApp/views/media/libraryview.cpp
T

92 lines
3.4 KiB
C++

#include "libraryview.h"
#include "../../quick/embyimageprovider.h"
#include "../../quick/quickpagehost.h"
#include "libraryviewmodel.h"
#include <QCursor>
#include <QMetaObject>
#include <QQuickItem>
#include <QQuickWidget>
#include <QVBoxLayout>
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<void> LibraryView::loadLibrary(const QString &libraryId,
const QString &libraryName) {
co_await m_viewModel->loadLibrary(libraryId, libraryName);
}
QCoro::Task<void> LibraryView::loadPerson(const QString &personId,
const QString &personName) {
co_await m_viewModel->loadPerson(personId, personName);
}
QCoro::Task<void> 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);
}