2024-01-02 20:43:45 +00:00
|
|
|
/*
|
|
|
|
Sailfin: a Jellyfin client written using Qt
|
|
|
|
Copyright (C) 2022-2024 Chris Josten
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with this library; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*/
|
2022-07-29 12:26:25 +00:00
|
|
|
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
|
2024-01-02 20:43:45 +00:00
|
|
|
|
|
|
|
PullDownMenu {
|
|
|
|
MenuItem {
|
|
|
|
//: Pulley menu item: navigate to application settings page
|
|
|
|
text: qsTr("Settings")
|
|
|
|
onClicked: pageStack.push(Qt.resolvedUrl("../SettingsPage.qml"))
|
|
|
|
}
|
|
|
|
MenuItem {
|
|
|
|
//: Pulley menu item: shows controllable device page
|
|
|
|
text: qsTr("Remote control")
|
|
|
|
onClicked: pageStack.push(Qt.resolvedUrl("../ControllableDevicesPage.qml"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-07-29 23:16:40 +00:00
|
|
|
Component {
|
|
|
|
id: latestMediaLoaderComponent
|
|
|
|
J.LatestMediaLoader {
|
|
|
|
apiClient: appWindow.apiClient
|
|
|
|
parentId: itemData.jellyfinId
|
|
|
|
includeItemTypes: "Audio"
|
|
|
|
autoReload: false
|
|
|
|
}
|
|
|
|
}
|
2022-07-29 12:26:25 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2022-07-29 23:16:40 +00:00
|
|
|
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
|
|
|
|
})
|
2022-07-29 12:26:25 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
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")
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|