437 lines
19 KiB
QML
437 lines
19 KiB
QML
import QtQuick 2.2
|
|
import Sailfish.Silica 1.0
|
|
import QtQuick.LocalStorage 2.0
|
|
import QtGraphicalEffects 1.0
|
|
import "../items"
|
|
import "../models"
|
|
import "../delegates"
|
|
import "../helpers/db.js" as Favorites
|
|
import "../helpers/jsFunctions.js" as JS
|
|
|
|
Page {
|
|
|
|
id: page
|
|
anchors.fill: parent
|
|
anchors.bottomMargin: mediaPlayerPanel.visibleSize
|
|
|
|
property bool stationOk: radioPlayer.stationOk
|
|
property bool online: radioBrowser.online
|
|
property GetCountryStations getTrending1: GetCountryStations {id: getTrending1}
|
|
property GetCountryStations getTrending2: GetCountryStations {id: getTrending2}
|
|
property GetCountryStations getTrendingWorld: GetCountryStations {id: getTrendingWorld}
|
|
property GetCountryStations getTags1: GetCountryStations {id: getTags1}
|
|
property GetCountryStations getTags2: GetCountryStations {id: getTags2}
|
|
property GetCountryStations getTags3: GetCountryStations {id: getTags3}
|
|
property ListModel playedCountries: ListModel {id: playedCountries}
|
|
property ListModel playedTags: ListModel {id: playedTags}
|
|
property ListModel favorites: ListModel {id: favorites}
|
|
|
|
onOnlineChanged: if (online) reloadDbData()
|
|
onStationOkChanged: if (stationOk) reloadDbData()
|
|
|
|
Splash {
|
|
id: splashItem
|
|
visible: radioBrowser.loading ? true : false
|
|
}
|
|
|
|
SilicaFlickable {
|
|
anchors.fill: parent
|
|
contentHeight: mainColumn.height
|
|
clip: mediaPlayerPanel.expanded
|
|
visible: !splashItem.visible
|
|
|
|
onVisibleChanged: if (visible) reloadDbData()
|
|
|
|
PullDownMenu {
|
|
MenuItem {
|
|
text: qsTr("About")
|
|
onClicked: pageStack.push("AboutPage.qml")
|
|
}
|
|
MenuItem {
|
|
text: qsTr("Settings")
|
|
onClicked: pageStack.push("SettingsPage.qml")
|
|
}
|
|
MenuItem {
|
|
text: qsTr("Sleep timer")
|
|
onClicked: {
|
|
pageStack.push("SleepTimerPage.qml")
|
|
}
|
|
|
|
/* var dialog = pageStack.push("Sailfish.Silica.TimePickerDialog", {
|
|
hour: 0,
|
|
minute: 30,
|
|
hourMode: DateTime.TwentyFourHours
|
|
})
|
|
dialog.accepted.connect(function() {
|
|
})
|
|
} */
|
|
}
|
|
}
|
|
|
|
Column {
|
|
id: mainColumn
|
|
width: parent.width
|
|
spacing: Theme.paddingMedium
|
|
|
|
Item {
|
|
width: parent.width
|
|
height: Theme.itemSizeHuge
|
|
Label {
|
|
id: hlabel
|
|
font.pixelSize: Theme.fontSizeExtraLarge
|
|
text: JS.getGreeting()
|
|
color: Theme.highlightColor
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: Theme.paddingLarge
|
|
}
|
|
|
|
Image {
|
|
id: logo
|
|
anchors.verticalCenter: hlabel.verticalCenter
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Theme.paddingLarge
|
|
height: Theme.itemSizeMedium
|
|
width: height
|
|
smooth: true
|
|
source: "../images/community.png"
|
|
}
|
|
ColorOverlay {
|
|
anchors.fill: logo
|
|
source: logo
|
|
color: Theme.highlightColor
|
|
}
|
|
}
|
|
|
|
BackgroundItem {
|
|
width: parent.width
|
|
height: Theme.itemSizeMedium
|
|
|
|
ButtonRect {fill: false}
|
|
|
|
Row {
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: Theme.paddingLarge
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
spacing: Theme.paddingMedium
|
|
|
|
Image {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
source: "image://theme/icon-m-search"
|
|
}
|
|
|
|
Label {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: qsTr("Search")
|
|
font.pixelSize: Theme.fontSizeLarge
|
|
}
|
|
}
|
|
|
|
Image {
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Theme.paddingLarge
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
source: "image://theme/icon-m-right"
|
|
}
|
|
|
|
onClicked: pageStack.push("SearchStationsPage.qml",{searchby:"name"})}
|
|
|
|
// Most played countries
|
|
Column {
|
|
//visible: playedCountries.count > 0
|
|
width: parent.width
|
|
|
|
Item {height: Theme.paddingLarge;width: parent.width}
|
|
|
|
HeaderButton {
|
|
headerText: qsTr("Countries")
|
|
onClicked: pageStack.push("CountryListPage.qml")
|
|
}
|
|
|
|
Item {height: Theme.paddingMedium;width: parent.width}
|
|
|
|
SilicaGridView {
|
|
clip: true
|
|
visible: playedCountries.count > 0
|
|
width: parent.width
|
|
height: playedCountries.count > 0 ? Theme.itemSizeExtraSmall * Math.round(playedCountries.count / 2) : 0
|
|
cellWidth: parent.width / 2
|
|
cellHeight: Theme.itemSizeExtraSmall
|
|
model: playedCountries
|
|
delegate: FavoriteCountryList {onClicked: pageStack.push("CountryStationsPage.qml",{searchby:"name",_countrycode: alpha_2})}
|
|
}
|
|
}
|
|
|
|
// Most played favorites
|
|
Item {height: Theme.paddingLarge;width: parent.width;visible: favorites.count > 0}
|
|
|
|
HeaderButton {
|
|
visible: favorites.count > 0
|
|
headerText: qsTr("My Favorites")
|
|
onClicked: pageStack.push("FavoritesPage.qml")
|
|
}
|
|
|
|
GridView {
|
|
//clip: true
|
|
id: favoriteView
|
|
clip: true
|
|
height: Theme.itemSizeHuge * 1.35
|
|
width: page.width
|
|
cellHeight: height
|
|
cellWidth: cellHeight * 0.75//Theme.itemSizeHuge + Theme.itemSizeMedium * 2
|
|
flow: GridView.TopToBottom
|
|
snapMode: SlideshowView.NoSnap
|
|
layoutDirection: Qt.LeftToRight
|
|
visible: favorites.count > 0//radioBrowser.getCountryName(_country) || playedCountries.count > 0 ? true : false
|
|
|
|
model: favorites
|
|
|
|
delegate: SmallStationsDelegate {
|
|
flagVisible: true
|
|
|
|
onClicked: {
|
|
if (model.url_resolved !== radioPlayer._url_resolved) {
|
|
radioPlayer._favicon = model.favicon
|
|
radioPlayer._name = model.name
|
|
radioPlayer._countrycode = model.countrycode
|
|
radioPlayer._tags = model.tags
|
|
radioPlayer._codec = model.codec//getCodec(model.codec)
|
|
radioPlayer._bitrate = model.bitrate //getBitrate(model.bitrate)
|
|
radioPlayer._hls = model.hls
|
|
radioPlayer._url_resolved = model.url_resolved
|
|
radioPlayer._homepage = model.homepage
|
|
radioPlayer._stationuuid = model.stationuuid
|
|
radioPlayer.getStationFavorite(model.stationuuid)
|
|
radioPlayer.playlistIndex = index
|
|
|
|
//console.log("Index: "+index)
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Recently played
|
|
Item {height: Theme.paddingLarge;width: parent.width;visible: radioPlayer.playHistory.count > 0}
|
|
|
|
HeaderButton {
|
|
visible: radioPlayer.playHistory.count > 0
|
|
headerText: qsTr("Play history")//playedCountries.count > 0 ? "Trending in " + radioBrowser.getCountryName(playedCountries.get(0).alpha_2) : "Trending in " + radioBrowser.getCountryName(_country)
|
|
onClicked: pageStack.push("HistoryPage.qml")
|
|
}
|
|
|
|
GridView {
|
|
visible: radioPlayer.playHistory.count > 0
|
|
clip: true
|
|
height: playedTags.count > 0 ? Theme.itemSizeHuge * 1.35 : 0
|
|
width: page.width
|
|
cellHeight: height
|
|
cellWidth: cellHeight * 0.75//Theme.itemSizeHuge + Theme.itemSizeMedium * 2
|
|
flow: GridView.TopToBottom
|
|
snapMode: SlideshowView.NoSnap
|
|
layoutDirection: Qt.LeftToRight
|
|
|
|
model: radioPlayer.playHistory
|
|
|
|
delegate: SmallStationsDelegate {
|
|
flagVisible: true
|
|
onClicked: {
|
|
if (model.url_resolved !== radioPlayer._url_resolved) {
|
|
radioPlayer._favicon = model.favicon
|
|
radioPlayer._name = model.name
|
|
radioPlayer._countrycode = model.countrycode
|
|
radioPlayer._tags = model.tags
|
|
radioPlayer._codec = model.codec//getCodec(model.codec)
|
|
radioPlayer._bitrate = model.bitrate //getBitrate(model.bitrate)
|
|
radioPlayer._hls = model.hls
|
|
radioPlayer._url_resolved = model.url_resolved
|
|
radioPlayer._homepage = model.homepage
|
|
radioPlayer._stationuuid = model.stationuuid
|
|
radioPlayer.getStationFavorite(model.stationuuid)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Most played tags
|
|
Item {height: Theme.paddingLarge;width: parent.width;visible: radioPlayer.playHistory.count > 0}
|
|
|
|
HeaderButton {
|
|
visible: radioPlayer.playHistory.count > 0
|
|
headerText: qsTr("My most played Tags")//playedCountries.count > 0 ? "Trending in " + radioBrowser.getCountryName(playedCountries.get(0).alpha_2) : "Trending in " + radioBrowser.getCountryName(_country)
|
|
onClicked: pageStack.push("TagListPage.qml",{})
|
|
}
|
|
|
|
GridView {
|
|
visible: radioPlayer.playHistory.count > 0
|
|
clip: true
|
|
height: playedTags.count > 0 ? Theme.itemSizeHuge * 1.35 : 0
|
|
width: page.width
|
|
cellHeight: height
|
|
cellWidth: cellHeight * 0.75//Theme.itemSizeHuge + Theme.itemSizeMedium * 2
|
|
flow: GridView.TopToBottom
|
|
snapMode: SlideshowView.NoSnap
|
|
layoutDirection: Qt.LeftToRight
|
|
model: playedTags
|
|
delegate: SmallTagsDelegate {
|
|
onClicked: pageStack.push("CountryStationsPage.qml",{filterby: "tag",searchby: "clicktrend",stext: tag,comboIndex: 1 })
|
|
}
|
|
}
|
|
|
|
Item {height: Theme.paddingLarge;width: parent.width;visible: radioBrowser.getCountryName(_country) || playedCountries.count > 0 ? true : false}
|
|
|
|
HeaderButton {
|
|
visible: radioBrowser.getCountryName(_country) || playedCountries.count > 0 ? true : false
|
|
headerText: playedCountries.count > 0 ? qsTr("Trending in")+ " " + radioBrowser.getCountryName(playedCountries.get(0).alpha_2) : qsTr("Trending in") + " " + radioBrowser.getCountryName(_country)
|
|
onClicked: pageStack.push("CountryStationsPage.qml",{searchby:"clicktrend",_countrycode: playedCountries.get(0).alpha_2})
|
|
}
|
|
|
|
GridView {
|
|
clip: true
|
|
height: Theme.itemSizeHuge * 1.35
|
|
width: page.width
|
|
cellHeight: height
|
|
cellWidth: cellHeight * 0.75//Theme.itemSizeHuge + Theme.itemSizeMedium * 2
|
|
flow: GridView.TopToBottom
|
|
snapMode: SlideshowView.NoSnap
|
|
layoutDirection: Qt.LeftToRight
|
|
visible: radioBrowser.getCountryName(_country) || playedCountries.count > 0 ? true : false
|
|
|
|
model: getTrending1.searchModel
|
|
|
|
delegate: SmallStationsDelegate {
|
|
flagVisible: false
|
|
onClicked: {
|
|
if (model.url_resolved !== radioPlayer._url_resolved) {
|
|
radioPlayer._favicon = model.favicon
|
|
radioPlayer._name = model.name
|
|
radioPlayer._countrycode = model.countrycode
|
|
radioPlayer._tags = model.tags
|
|
radioPlayer._codec = model.codec//getCodec(model.codec)
|
|
radioPlayer._bitrate = model.bitrate //getBitrate(model.bitrate)
|
|
radioPlayer._hls = model.hls
|
|
radioPlayer._url_resolved = model.url_resolved
|
|
radioPlayer._homepage = model.homepage
|
|
radioPlayer._stationuuid = model.stationuuid
|
|
radioPlayer.getStationFavorite(model.stationuuid)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Item {height: Theme.paddingLarge;width: parent.width;visible: playedCountries.count > 1}
|
|
|
|
HeaderButton {
|
|
visible: playedCountries.count > 1
|
|
// headerText: playedCountries.count > 0 ? "Trending in " + radioBrowser.getCountryName(playedCountries.get(1).alpha_2) : "Trending in " + radioBrowser.getCountryName(_country)
|
|
headerText: playedCountries.count > 1 ? qsTr("Trending in")+" " + radioBrowser.getCountryName(playedCountries.get(1).alpha_2) : qsTr("Trending in")+" " + radioBrowser.getCountryName(_country)
|
|
onClicked: pageStack.push("CountryStationsPage.qml",{searchby:"clicktrend",_countrycode: playedCountries.get(1).alpha_2})
|
|
}
|
|
|
|
GridView {
|
|
clip: true
|
|
height: Theme.itemSizeHuge * 1.35
|
|
width: page.width
|
|
cellHeight: height
|
|
cellWidth: cellHeight * 0.75//Theme.itemSizeHuge + Theme.itemSizeMedium * 2
|
|
flow: GridView.TopToBottom
|
|
snapMode: SlideshowView.NoSnap
|
|
layoutDirection: Qt.LeftToRight
|
|
visible: playedCountries.count > 1
|
|
|
|
model: getTrending2.searchModel
|
|
|
|
delegate: SmallStationsDelegate {
|
|
flagVisible: false
|
|
onClicked: {
|
|
if (model.url_resolved !== radioPlayer._url_resolved) {
|
|
radioPlayer._favicon = model.favicon
|
|
radioPlayer._name = model.name
|
|
radioPlayer._countrycode = model.countrycode
|
|
radioPlayer._tags = model.tags
|
|
radioPlayer._codec = model.codec//getCodec(model.codec)
|
|
radioPlayer._bitrate = model.bitrate //getBitrate(model.bitrate)
|
|
radioPlayer._hls = model.hls
|
|
radioPlayer._url_resolved = model.url_resolved
|
|
radioPlayer._homepage = model.homepage
|
|
radioPlayer._stationuuid = model.stationuuid
|
|
radioPlayer.getStationFavorite(model.stationuuid)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Item {height: Theme.paddingLarge;width: parent.width}
|
|
|
|
HeaderButton {
|
|
headerText: qsTr("Trending in the world")//playedCountries.count > 0 ? "Trending in " + radioBrowser.getCountryName(playedCountries.get(0).alpha_2) : "Trending in " + radioBrowser.getCountryName(_country)
|
|
onClicked: pageStack.push("CountryStationsPage.qml",{searchby:"clicktrend",_countrycode: ""})
|
|
}
|
|
|
|
GridView {
|
|
clip: true
|
|
height: Theme.itemSizeHuge * 1.35
|
|
width: page.width
|
|
cellHeight: height
|
|
cellWidth: cellHeight * 0.75//Theme.itemSizeHuge + Theme.itemSizeMedium * 2
|
|
flow: GridView.TopToBottom
|
|
snapMode: SlideshowView.NoSnap
|
|
layoutDirection: Qt.LeftToRight
|
|
model: getTrendingWorld.searchModel
|
|
delegate: SmallStationsDelegate {
|
|
flagVisible: true
|
|
onClicked: {
|
|
if (model.url_resolved !== radioPlayer._url_resolved) {
|
|
radioPlayer._favicon = model.favicon
|
|
radioPlayer._name = model.name
|
|
radioPlayer._countrycode = model.countrycode
|
|
radioPlayer._tags = model.tags
|
|
radioPlayer._codec = model.codec//getCodec(model.codec)
|
|
radioPlayer._bitrate = model.bitrate //getBitrate(model.bitrate)
|
|
radioPlayer._hls = model.hls
|
|
radioPlayer._url_resolved = model.url_resolved
|
|
radioPlayer._homepage = model.homepage
|
|
radioPlayer._stationuuid = model.stationuuid
|
|
radioPlayer.getStationFavorite(model.stationuuid)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function reloadDbData() {
|
|
Favorites.getTagsRecentClicked(playedTags,15)
|
|
Favorites.getFavorites(favorites,"myclickcount",15)
|
|
Favorites.getCountryRecentClicked(playedCountries,4)
|
|
|
|
|
|
getTrending1.countrycode = playedCountries.count > 0 ? playedCountries.get(0).alpha_2 : _country
|
|
getTrending1.order = "clicktrend"
|
|
getTrending1.offset = 0
|
|
getTrending1.limit = 15
|
|
if (getTrending1.searchModel.count !== 0) getTrending1.clear = true; else getTrending1.getStations()
|
|
|
|
if (playedCountries.count > 1) {
|
|
getTrending2.countrycode = playedCountries.get(1).alpha_2
|
|
getTrending2.order = "clicktrend"
|
|
getTrending2.offset = 0
|
|
getTrending2.limit = 15
|
|
if (getTrending2.searchModel.count !== 0) getTrending2.clear = true; else getTrending2.getStations()
|
|
}
|
|
|
|
getTrendingWorld.countrycode = ""
|
|
getTrendingWorld.order = "clicktrend"
|
|
getTrendingWorld.offset = 0
|
|
getTrendingWorld.limit = 15
|
|
if (getTrendingWorld.searchModel.count !== 0) getTrendingWorld.clear=true; else getTrendingWorld.getStations()
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
Favorites.init()
|
|
radioBrowser.getList()
|
|
reloadDbData()
|
|
}
|
|
}
|
|
|