Client OPDS per Calibre Web (Sailfish OS): core C++ testato, UI Silica, packaging RPM
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
Page {
|
||||
id: page
|
||||
|
||||
property bool loading: false
|
||||
property string errorMessage: ""
|
||||
|
||||
SilicaListView {
|
||||
id: listView
|
||||
anchors.fill: parent
|
||||
header: PageHeader { title: "Calibre Web" }
|
||||
model: sectionModel
|
||||
|
||||
delegate: ListItem {
|
||||
id: sectionItem
|
||||
contentHeight: Theme.itemSizeMedium
|
||||
|
||||
Label {
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: Theme.horizontalPageMargin
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: model.title
|
||||
color: sectionItem.highlighted ? Theme.highlightColor : Theme.primaryColor
|
||||
}
|
||||
|
||||
Icon {
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Theme.horizontalPageMargin
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
source: "image://theme/icon-m-right"
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("FeedPage.qml"),
|
||||
{ feedUrl: model.linkUrl, pageTitle: model.title })
|
||||
}
|
||||
}
|
||||
|
||||
PullDownMenu {
|
||||
MenuItem {
|
||||
text: "Cerca"
|
||||
onClicked: pageStack.push(Qt.resolvedUrl("SearchPage.qml"))
|
||||
}
|
||||
MenuItem {
|
||||
text: "Impostazioni"
|
||||
onClicked: pageStack.push(Qt.resolvedUrl("SettingsPage.qml"))
|
||||
}
|
||||
MenuItem {
|
||||
text: "Aggiorna"
|
||||
onClicked: loadIndex()
|
||||
}
|
||||
}
|
||||
|
||||
ViewPlaceholder {
|
||||
enabled: sectionModel.count === 0 && !page.loading
|
||||
text: page.errorMessage.length > 0
|
||||
? page.errorMessage
|
||||
: "Apri le impostazioni e inserisci l'indirizzo del tuo Calibre Web"
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
anchors.centerIn: parent
|
||||
running: page.loading
|
||||
size: BusyIndicatorSize.Large
|
||||
}
|
||||
}
|
||||
|
||||
ListModel {
|
||||
id: sectionModel
|
||||
}
|
||||
|
||||
function loadIndex() {
|
||||
var base = appSettings.baseUrl
|
||||
if (base.length === 0) {
|
||||
page.errorMessage = "Server non configurato"
|
||||
return
|
||||
}
|
||||
page.loading = true
|
||||
page.errorMessage = ""
|
||||
apiClient.getFeed(base + "/opds")
|
||||
}
|
||||
|
||||
Component.onCompleted: loadIndex()
|
||||
|
||||
Connections {
|
||||
target: apiClient
|
||||
onFeedReady: {
|
||||
if (pageStack.currentPage !== page)
|
||||
return
|
||||
page.loading = false
|
||||
sectionModel.clear()
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
var e = entries[i]
|
||||
if (e.isNavigation)
|
||||
sectionModel.append({ title: e.title, linkUrl: e.linkUrl })
|
||||
}
|
||||
if (sectionModel.count === 0)
|
||||
page.errorMessage = "Nessuna sezione trovata nel feed OPDS"
|
||||
}
|
||||
onFeedError: {
|
||||
page.loading = false
|
||||
page.errorMessage = message
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user