import QtQuick 2.0 import QtMultimedia 5.6 import QtQuick.LocalStorage 2.0 import "../helpers/jsFunctions.js" as JsFunctions import "../helpers/db.js" as Favorites import "../items" MediaPlayer { // Media info from clicking play property string _stationuuid: "" property string _name: "" property string _favicon: "" property string _countrycode: "" property string _tags: "" property string _codec: "" property string _bitrate: "" property string _hls: "" property string _url_resolved: "" property string _homepage: "" // property string _votes: "" // property string _plays: "" // property string _trend: "" property bool _favorite: false //-------------------------------- // property bool videoP: false property bool playerPageOpen: false // property bool jupiiOn: false property string radioId: "" property string metaInfo: metaData.title ? metaData.title : "" property string radioArtist: "" property string radioSong: "" property bool radioVideo: false property bool radioAudio: false property string radioCountryName property string radioHLS: JsFunctions.getHLS(_hls) property string radioCodec: JsFunctions.getCodec(_codec) property string radioBitrate: JsFunctions.getBitrate(_bitrate) property real radioBufferProgress: bufferProgress property int radioStatus property string radioStatusString property bool isPlaying: false property bool isPaused: false property int stationOk: 3 property int maxTagClicks: 0 property int playlistCount: playlist.count - 1 property int playlistIndex: allradioSettings.value("currentFavorite",-1) property QDtimer timer: QDtimer {id: qdTimer} //property string videoOut: "" // property ListModel mostPlayedFavorites: ListModel {id: mostPlayedFavorites} //videoOutput: videoOut // property variant magnitudeArray: null // property int millisecondsPerBar: 68 property ListModel playHistory: ListModel {id: playHistory} property ListModel playlist: ListModel {id: playlist} autoPlay: false autoLoad: true //on_FavoriteChanged: {setStationFavorite(_stationuuid,_name,_countrycode,_homepage,_url_resolved,_favicon,_tags,_codec,_bitrate,_hls,_favorite);Favorites.getMostPlayedFavorites(mostPlayedFavorites,15)} onPlaying: if (!playerPageOpen) pageStack.push("../pages/RadioPlayerPage.qml") // onPlaylistIndexChanged: loadPlaylistSelected() onMetaInfoChanged: { // console.log(" ******* METAINFO: "+metaInfo) if (metaInfo.search(" - ") > -1) { var res = metaInfo.split(" - ") radioArtist = res[0] radioSong = res[1] } else { radioArtist = metaInfo radioSong = "" } } onRadioAudioChanged: { // if (hasVideo) console.log(" *** VIDEO"); else console.log(" *** AUDIO") } onStationOkChanged: { // console.log("StationOK?: "+stationOk) if (stationOk === 1) { setStationClick() getStationFavorite(_stationuuid) playStream() stationOk === 0 reloadDbData() if (_favorite) allradioSettings.setValue("currentFavorite",playlistIndex) } } on_StationuuidChanged: { //if (_stationuuid !== "") {getStationUrl(_stationuuid);radioPlayUrl = _url_resolved} else radioPlayUrl = "" radioCountryName = radioBrowser.getCountryName(_countrycode) stop() source = "" //metaInfo = "" radioVideo = false radioAudio = false isPaused = false isPlaying = false stationOk = 3 getStationUrl(_stationuuid); } //onIsPausedChanged: if (_paused) { //radioPlaying = false ///radioPaused = true // radioSource = "" // metaInfo = "" // if(radioVideo) { // videoPlayer.visible = false // radioSource = "" // } // } onHasVideoChanged: if (hasVideo) radioVideo = true onHasAudioChanged: if (hasAudio) radioAudio = true function stopStream() { // stop and clear stream source = "" isPaused = false isPlaying = false radioArtist = "" radioSong = "" radioVideo = false radioAudio = false stationOk = 3 _stationuuid = "" _name = "" _favicon = "" _countrycode = "" _tags = "" _codec = "" _bitrate = "" _hls = "" _homepage = "" stop() // metaInfo = "" } function videoPause() { source = "" stop() } function pauseStream() { // stop stream without clear isPaused = true isPlaying = false source = "" stop() // metaInfo = "" } function resumeStream() { isPlaying = true isPaused = false playStream() } function playStream() { // resume paused stream //radioSource = "" source = _url_resolved play() isPlaying = true isPaused = false qdTimer.start() // play() } onError: { notification.category = "Error" notification.summary = _name //notification.subText = _name notification.body = errorString notification.publish() radioPlayer.stopStream() } /* onRadioStatusChanged: { notification.body = radioStatusString notification.publish() }*/ onStatusChanged: { //console.log(" ___ STATUS: "+status) switch (status) { case 1: status1();break; // NoMedia case 2: status2();break; // Loading case 3: status3();break; // Loaded case 4: status4();break; // Buffering case 5: status5();break; // Stalled case 6: status6();break; // Buffered case 7: status7();break; // EndOfMedia case 8: status8();break; // InvalidMedia case 9: status9();break; // UnknownStatus } } function tryagain() { tryTimer.running = true } function status1 () { // NoMedia radioStatus = status radioStatusString = "No Media" //console.log("Status: No Media") } function status2 () { // Loading radioStatus = status radioStatusString = "Loading" //console.log("Status: Loading") } function status3 () { // Loaded radioStatus = status radioStatusString = "Loaded" //console.log("Status: Loaded") } function status4 () { // Buffering radioStatus = status radioStatusString = "Buffering" //console.log("Status: Buffering") } function status5 () { // Stalled radioStatus = status radioStatusString = "Stalled" notification.category = "Status" notification.summary = _name //notification.subText = _name notification.body = "Stalled" notification.publish() //console.log("Status: Stalled") radioPlayer.stopStream() } function status6 () { // Buffered radioStatus = status radioStatusString = "Buffered" //console.log("Status: Buffered") } function status7 () { // EndOfMedia /* if (errorCount<4) { //errorCount = errorCount + 1 tryTimer.start() }else{ */ radioStatus = status radioStatusString = "End Of Media" notification.category = "Status" notification.summary = _name //notification.subText = _name notification.body = "End of media" notification.publish() //console.log("Status: End Of Media") radioPlayer.stopStream() // } } function status8 () { // InvalidMedia radioStatus = status radioStatusString = "Invalid Media" notification.category = "Status" notification.summary = _name //notification.subText = _name notification.body = "Invalid media" notification.publish() //console.log("Status: Invalid Media") radioPlayer.stopStream() } function status9 () { // UnknownStatus radioStatus = status radioStatusString = "Unknown Status" //console.log("Status: Unknown Status") } function getStationUrl(id) { // Register as radio station click on community radio and get station info from Community Radio and save it to Db. Initiate playback. var req = new XMLHttpRequest(); req.open("post", radioBrowser.serverUrl + "/xml/url/" +id, true); // console.log(radioBrowser.serverUrl) req.responseType = "document"; req.setRequestHeader('User-Agent',radioBrowser._useragent); req.onreadystatechange = function () { if (req.readyState === 4 && req.status === 200) { var temp = req.responseText var ok = temp.indexOf('status ok="true"') !== -1 // console.log("OK: "+ok) if (ok) { stationOk = 1 } else { stationOk = 0 } } //else if (req.readyState === 4) {stationOk = 2} }; req.send(); } function setStationClick() { //getStationFavorite(_stationuuid) Favorites.setStationClicked(JsFunctions.getTimeStamp(),_stationuuid,_name,_countrycode,_homepage,_url_resolved,_favicon,_tags,_codec,_bitrate,_hls,_favorite) // property bool favo: isFavorite(stationuuid) ? true : false //getIfFavorite(_stationuuid) //getIfFavorite(_stationuuid) } // myclicktimestamp,id,name,countrycode,homepage,radiourlresolved,favicon,tagslist,codec,bitrate,hls,favorite function setStationFavorite(stationuuid,name,countrycode,homepage,url_resolved,favicon,tags,codec,bitrate,hls,favorite) { Favorites.setStationFavorite(stationuuid,name,countrycode,homepage,url_resolved,favicon,tags,codec,bitrate,hls,favorite) } function getStationFavorite(id){ _favorite = Favorites.getStationFavorite(id) } function reloadDbData() { Favorites.getStationRecentClicked(playHistory,15) Favorites.getFavorites(playlist,"name",10000) //Favorites.getStationMostClickedFav(radioPlayermostPlayed,settings._nrOfFavoritePreview) //Favorites.getCountryRecentClicked(playedCountries,2) //Favorites.getTagsRecentClicked(playedTags,10) //Favorites.getMostPlayedFavorites(mostPlayedFavorites,15) } function loadPlaylistSelected(){ if (playlist.get(playlistIndex).url_resolved) { _favicon = playlist.get(playlistIndex).favicon _name = playlist.get(playlistIndex).name _countrycode = playlist.get(playlistIndex).countrycode _tags = playlist.get(playlistIndex).tags _codec = playlist.get(playlistIndex).codec//getCodec(model.codec) _bitrate = playlist.get(playlistIndex).bitrate //getBitrate(model.bitrate) _hls = playlist.get(playlistIndex).hls _url_resolved = playlist.get(playlistIndex).url_resolved _homepage = playlist.get(playlistIndex).homepage _stationuuid = playlist.get(playlistIndex).stationuuid _favorite = playlist.get(playlistIndex).favorite isPlaying = true isPaused = false playStream() // pageStack.push("RadioPlayerPage.qml") } } function loadRecentPlay(){ if (playHistory.get(0).url_resolved) { _favicon = playHistory.get(0).favicon _name = playHistory.get(0).name _countrycode = playHistory.get(0).countrycode _tags = playHistory.get(0).tags _codec = playHistory.get(0).codec//getCodec(model.codec) _bitrate = playHistory.get(0).bitrate //getBitrate(model.bitrate) _hls = playHistory.get(0).hls _url_resolved = playHistory.get(0).url_resolved _homepage = playHistory.get(0).homepage _stationuuid = playHistory.get(0).stationuuid _favorite = playHistory.get(0).favorite isPlaying = false isPaused = true // pageStack.push("RadioPlayerPage.qml") } } function loadRandomPlay(){ var rnd = Math.floor(Math.random() * playlist.count) if (playlist.get(rnd).url_resolved) { _favicon = playlist.get(rnd).favicon _name = playlist.get(rnd).name _countrycode = playlist.get(rnd).countrycode _tags = playlist.get(rnd).tags _codec = playlist.get(rnd).codec//getCodec(model.codec) _bitrate = playlist.get(rnd).bitrate //getBitrate(model.bitrate) _hls = playlist.get(rnd).hls _url_resolved = playlist.get(rnd).url_resolved _homepage = playlist.get(rnd).homepage _stationuuid = playlist.get(rnd).stationuuid _favorite = playlist.get(rnd).favorite isPlaying = false isPaused = true // pageStack.push("RadioPlayerPage.qml") } } function updateMprisMetadata(){ mprisPlayer.song = metaInfo ? metaInfo : "" mprisPlayer.artist = radioStation === "" ? "AllRadio" : radioStation updatePlaybackStatus() } function updatePlaybackStatus (){ switch (playMusic.playbackState) { case Audio.PlayingState: mprisPlayer.playbackStatus = Mpris.Playing break; case Audio.PausedState: mprisPlayer.setCanPause(false) mprisPlayer.playbackStatus = Mpris.Paused break; case Audio.StoppedState: mprisPlayer.playbackStatus = Mpris.Paused break; default: mprisPlayer.playbackStatus = Mpris.Paused } } Component.onCompleted: {reloadDbData();loadRecentPlay()} }