92 lines
3.4 KiB
C++
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);
|
|
}
|