1
0
Fork 0
mirror of https://github.com/HenkKalkwater/harbour-sailfin.git synced 2024-11-20 08:15:17 +00:00
harbour-sailfin/sailfish/qml/pages/itemdetails/MusicLibraryPage.qml
Chris Josten 0fafb19c7d Add navigation to artists from tracks
I'm not to happy about the C++ sides. If anyone from the future finds
this commit with "git blame" while debugging this code: I apologise
2022-07-30 01:24:31 +02:00

153 lines
6.2 KiB
QML

import QtQuick 2.6
import Sailfish.Silica 1.0
import nl.netsoj.chris.Jellyfin 1.0 as J
import "../../components"
import "../.."
BaseDetailPage {
id: musicLibraryPage
property bool _firstTimeLoaded: false
onStatusChanged: {
if (status == PageStatus.Active) {
_firstTimeLoaded = true
}
}
SilicaFlickable {
anchors.fill: parent
contentHeight: content.height
Component {
id: latestMediaLoaderComponent
J.LatestMediaLoader {
apiClient: appWindow.apiClient
parentId: itemData.jellyfinId
includeItemTypes: "Audio"
autoReload: false
}
}
Component {
id: albumArtistLoaderComponent
J.AlbumArtistLoader {
apiClient: appWindow.apiClient
parentId: itemData.jellyfinId
autoReload: false
}
}
Component {
id: albumLoaderComponent
J.UserItemsLoader {
apiClient: appWindow.apiClient
parentId: itemData.jellyfinId
includeItemTypes: "MusicAlbum"
recursive: true
sortBy: "SortName"
autoReload: false
}
}
Component {
id: playlistLoaderComponent
J.UserItemsLoader {
apiClient: appWindow.apiClient
parentId: itemData.jellyfinId
includeItemTypes: "Playlist"
recursive: true
sortBy: "SortName"
autoReload: false
}
}
Column {
id: content
width: parent.width
PageHeader {
title: itemData.name
}
ItemChildrenShowcase {
//: Header on music library: Recently added music albums
text: qsTr("Recently added")
//collapseWhenEmpty: false
extraBusy: !_firstTimeLoaded
loader: J.LatestMediaLoader {
apiClient: appWindow.apiClient
parentId: itemData.jellyfinId
autoReload: _firstTimeLoaded && itemData.jellyfinId.length > 0
includeItemTypes: "Audio"
limit: 12
}
onHeaderClicked: pageStack.push(Qt.resolvedUrl("CollectionPage.qml"), {
"loader": latestMediaLoaderComponent.createObject(musicLibraryPage),
//: Page title for the list of all albums within the music library
"pageTitle": qsTr("Latest media"),
"allowSort": false
})
}
ItemChildrenShowcase {
text: qsTr("Albums")
//collapseWhenEmpty: false
extraBusy: !_firstTimeLoaded
loader: J.UserItemsLoader {
apiClient: appWindow.apiClient
parentId: itemData.jellyfinId
includeItemTypes: "MusicAlbum"
autoReload: _firstTimeLoaded && itemData.jellyfinId.length > 0
sortBy: "Random"
recursive: true
limit: 12
}
onHeaderClicked: pageStack.push(Qt.resolvedUrl("CollectionPage.qml"), {
"loader": albumLoaderComponent.createObject(musicLibraryPage),
//: Page title for the list of all albums within the music library
"pageTitle": qsTr("Albums")
})
}
ItemChildrenShowcase {
text: qsTr("Playlists")
//collapseWhenEmpty: false
extraBusy: !_firstTimeLoaded
loader: J.UserItemsLoader {
apiClient: appWindow.apiClient
parentId: itemData.jellyfinId
includeItemTypes: "Playlist"
autoReload: _firstTimeLoaded && itemData.jellyfinId.length > 0
sortBy: "Random"
recursive: true
limit: 12
}
onHeaderClicked: pageStack.push(Qt.resolvedUrl("CollectionPage.qml"), {
"loader": playlistLoaderComponent.createObject(musicLibraryPage),
//: Page title for the list of all playlists within the music library
"pageTitle": qsTr("Playlists")
})
}
ItemChildrenShowcase {
//: Header for music artists
text: qsTr("Artists")
//collapseWhenEmpty: false
extraBusy: !_firstTimeLoaded
loader: J.AlbumArtistLoader {
apiClient: appWindow.apiClient
parentId: itemData.jellyfinId
autoReload: _firstTimeLoaded && itemData.jellyfinId.length > 0
limit: 12
}
onHeaderClicked: pageStack.push(Qt.resolvedUrl("CollectionPage.qml"), {
"loader": albumArtistLoaderComponent.createObject(musicLibraryPage),
"allowSort": false,
//: Page title for the list of all artists within the music library
"pageTitle": qsTr("Artists")
})
}
}
}
}