diff options
Diffstat (limited to 'app/MediaPlayer.qml')
-rw-r--r-- | app/MediaPlayer.qml | 105 |
1 files changed, 32 insertions, 73 deletions
diff --git a/app/MediaPlayer.qml b/app/MediaPlayer.qml index fbd889c..d37e097 100644 --- a/app/MediaPlayer.qml +++ b/app/MediaPlayer.qml @@ -25,63 +25,14 @@ import 'api' as API ApplicationWindow { id: root - Item { - id: bluetooth - property bool connected: false - property string state - - property string artist - property string title - property int duration: 0 - property int position: 0 - property int pos_offset: 0 - - function disableBluetooth() { - bluetooth.artist = '' - bluetooth.title = '' - bluetooth.duration = 0 - bluetooth.position = 0 - bluetooth.pos_offset = 0 - bluetooth.connected = false - } - } - API.LightMediaScanner { id: binding url: bindingAddress } - Connections { - target: dbus - - onProcessPlaylistHide: { - playlistview.visible = false - player.stop() - } - - onProcessPlaylistShow: { - playlistview.visible = true - bluetooth.disableBluetooth() - } - - onDisplayBluetoothMetadata: { - if (avrcp_artist) - bluetooth.artist = avrcp_artist - if (avrcp_title) - bluetooth.title = avrcp_title - bluetooth.duration = avrcp_duration - bluetooth.pos_offset = 0 - } - - onUpdatePlayerStatus: { - bluetooth.connected = true - bluetooth.state = status - } - - onUpdatePosition: { - slider.value = current_position - bluetooth.position = current_position - } + API.BluetoothManager { + id: bluetooth + url: bindingAddress } MediaPlayer { @@ -90,20 +41,18 @@ ApplicationWindow { autoLoad: true playlist: playlist - property bool is_bluetooth: false function time2str(value) { return Qt.formatTime(new Date(value), 'mm:ss') } - onPositionChanged: slider.value = player.position } Timer { id: timer interval: 250 - running: (bluetooth.connected && bluetooth.state == "playing") + running: (bluetooth.av_connected && bluetooth.state == "playing") repeat: true onTriggered: { - bluetooth.position = dbus.getCurrentPosition() - bluetooth.pos_offset + bluetooth.position = bluetooth.position + 250 slider.value = bluetooth.position } } @@ -169,13 +118,13 @@ ApplicationWindow { Label { id: title Layout.alignment: Layout.Center - text: bluetooth.title ? bluetooth.title : (player.metaData.title ? player.metaData.title : '') + text: bluetooth.av_connected ? bluetooth.title : (player.metaData.title ? player.metaData.title : '') horizontalAlignment: Label.AlignHCenter verticalAlignment: Label.AlignVCenter } Label { Layout.alignment: Layout.Center - text: bluetooth.artist ? bluetooth.artist : (player.metaData.contributingArtist ? player.metaData.contributingArtist : '') + text: bluetooth.av_connected ? bluetooth.artist : (player.metaData.contributingArtist ? player.metaData.contributingArtist : '') horizontalAlignment: Label.AlignHCenter verticalAlignment: Label.AlignVCenter font.pixelSize: title.font.pixelSize * 0.6 @@ -185,10 +134,11 @@ ApplicationWindow { Slider { id: slider Layout.fillWidth: true - to: bluetooth.connected ? bluetooth.duration : player.duration - enabled: bluetooth.connected == false + to: bluetooth.av_connected ? bluetooth.duration : player.duration + enabled: bluetooth.av_connected == false + value: bluetooth.av_connected ? bluetooth.position : player.position function getPosition() { - if (bluetooth.connected && bluetooth.position) { + if (bluetooth.av_connected) { return player.time2str(bluetooth.position) } return player.time2str(player.position) @@ -205,7 +155,7 @@ ApplicationWindow { anchors.right: parent.right anchors.bottom: parent.top font.pixelSize: 32 - text: bluetooth.connected ? player.time2str(bluetooth.duration) : player.time2str(player.duration) + text: bluetooth.av_connected ? player.time2str(bluetooth.duration) : player.time2str(player.duration) } onPressedChanged: player.seek(value) } @@ -222,9 +172,9 @@ ApplicationWindow { id: previous offImage: './images/AGL_MediaPlayer_BackArrow.svg' onClicked: { - if (bluetooth.connected) { - bluetooth.pos_offset = dbus.getCurrentPosition() - dbus.processQMLEvent("Previous") + if (bluetooth.av_connected) { + bluetooth.sendMediaCommand("Previous") + bluetooth.position = 0 } else { playlist.previous() } @@ -234,8 +184,8 @@ ApplicationWindow { id: play offImage: './images/AGL_MediaPlayer_Player_Play.svg' onClicked: { - if (bluetooth.connected) { - dbus.processQMLEvent("Play") + if (bluetooth.av_connected) { + bluetooth.sendMediaCommand("Play") } else { player.play() } @@ -250,11 +200,11 @@ ApplicationWindow { } }, State { - when: bluetooth.connected && bluetooth.state == "playing" + when: bluetooth.av_connected && bluetooth.state == "playing" PropertyChanges { target: play offImage: './images/AGL_MediaPlayer_Player_Pause.svg' - onClicked: dbus.processQMLEvent("Pause") + onClicked: bluetooth.sendMediaCommand("Pause") } } @@ -264,8 +214,8 @@ ApplicationWindow { id: forward offImage: './images/AGL_MediaPlayer_ForwardArrow.svg' onClicked: { - if (bluetooth.connected) { - dbus.processQMLEvent("Next") + if (bluetooth.av_connected) { + bluetooth.sendMediaCommand("Next") } else { playlist.next() } @@ -275,10 +225,18 @@ ApplicationWindow { Item { Layout.fillWidth: true } ToggleButton { - enabled: false - checked: bluetooth.connected + enabled: bluetooth.connected + checked: bluetooth.av_connected offImage: './images/AGL_MediaPlayer_Bluetooth_Inactive.svg' onImage: './images/AGL_MediaPlayer_Bluetooth_Active.svg' + + onClicked: { + if (bluetooth.av_connected) { + bluetooth.disconnect_profiles() + } else { + bluetooth.connect_profiles() + } + } } } } @@ -297,6 +255,7 @@ ApplicationWindow { ListView { anchors.fill: parent id: playlistview + visible: bluetooth.av_connected == false clip: true header: Label { x: 50 |