Warning, /maui/clip/src/controllers/YouTube.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick 2.10
0002 import QtQuick.Controls 2.10
0003 import QtQuick.Layouts 1.3
0004 import "../../view_models"
0005 import "../../view_models/BabeTable"
0006 import org.kde.kirigami 2.2 as Kirigami
0007 import org.kde.mauikit 1.0 as Maui
0008 import org.maui.vvave 1.0 as Vvave
0009 import QtWebView 1.1
0010 
0011 Maui.Page
0012 {
0013     id: youtubeViewRoot
0014     property var searchRes : []
0015     clip: true
0016     property alias viewer : youtubeViewer
0017     property int openVideo : 0
0018     headBar.visible: false
0019 
0020     Connections
0021     {
0022         target: Vvave.YouTube
0023         onQueryResultsReady:
0024         {
0025             searchRes = res;
0026             populate(searchRes)
0027             youtubeTable.forceActiveFocus()
0028 
0029             if(openVideo > 0)
0030             {
0031                 console.log("trying to open video")
0032                 watchVideo(youtubeTable.model.get(openVideo-1))
0033                 openVideo = 0
0034             }
0035         }
0036     }
0037 
0038 
0039     /*this is for playing the track sin the background without showing the actual video*/
0040 
0041     WebView
0042     {
0043         id: webView
0044         anchors.fill: parent
0045         visible: false
0046         clip: true
0047         property bool wasPlaying: false
0048 
0049         onLoadingChanged:
0050         {
0051             if (loadRequest.errorString)
0052                 console.error(loadRequest.errorString);
0053         }
0054 
0055     //    onRecentlyAudibleChanged:
0056     //    {
0057     //        console.log("is playing", recentlyAudible)
0058     //        if(recentlyAudible && isPlaying)
0059     //            Player.pauseTrack()
0060 
0061     //        if(!recentlyAudible && wasPlaying)
0062     //            Player.resumeTrack()
0063     //    }
0064     }
0065 
0066     Maui.Dialog
0067     {
0068         id: configPopup
0069         parent: parent
0070         page.margins: Maui.Style.contentMargins
0071         widthHint: 0.9
0072         heightHint: 0.9
0073 
0074         maxHeight: 200
0075         maxWidth: 300
0076         defaultButtons: false
0077 
0078         GridLayout
0079         {
0080             anchors.fill: parent
0081             columns: 1
0082             rows: 6
0083             clip: true
0084 
0085             Item
0086             {
0087                 Layout.column: 1
0088                 Layout.row: 1
0089                 Layout.fillWidth: true
0090                 Layout.fillHeight: true
0091             }
0092 
0093             Label
0094             {
0095                 text: i18n("Custom API Key")
0096                 verticalAlignment:  Qt.AlignVCenter
0097                 elide: Text.ElideRight
0098                 font.pointSize: Maui.Style.fontSizes.default
0099                 Layout.column: 1
0100                 Layout.row: 2
0101                 Layout.fillWidth: true
0102             }
0103 
0104             TextField
0105             {
0106                 Layout.column: 1
0107                 Layout.row: 3
0108                 Layout.fillWidth: true
0109                 text: Maui.FM.loadSettings("YOUTUBEKEY", "BABE",  Vvave.YouTube.getKey())
0110             }
0111 
0112             Label
0113             {
0114                 text: i18n("Search results")
0115                 verticalAlignment:  Qt.AlignVCenter
0116                 elide: Text.ElideRight
0117                 font.pointSize: Maui.Style.fontSizes.default
0118                 Layout.column: 1
0119                 Layout.row: 4
0120                 Layout.fillWidth: true
0121             }
0122 
0123             SpinBox
0124             {
0125                 Layout.alignment: Qt.AlignRight
0126                 Layout.column: 1
0127                 Layout.row: 5
0128                 Layout.fillWidth: true
0129                 from: 1
0130                 to: 50
0131                 value: Maui.FM.loadSettings("YOUTUBELIMIT", "BABE", 25)
0132                 editable: true
0133                 onValueChanged:
0134                 {
0135                     Maui.FM.saveSettings("YOUTUBELIMIT", value, "BABE")
0136                 }
0137             }
0138 
0139             Item
0140             {
0141                 Layout.column: 1
0142                 Layout.row: 6
0143                 Layout.fillWidth: true
0144                 Layout.fillHeight: true
0145             }
0146 
0147         }
0148     }
0149 
0150 
0151     StackView
0152     {
0153         id: stackView
0154         anchors.fill: parent
0155         focus: true
0156 
0157         pushEnter: Transition
0158         {
0159             PropertyAnimation
0160             {
0161                 property: "opacity"
0162                 from: 0
0163                 to:1
0164                 duration: 200
0165             }
0166         }
0167 
0168         pushExit: Transition
0169         {
0170             PropertyAnimation
0171             {
0172                 property: "opacity"
0173                 from: 1
0174                 to:0
0175                 duration: 200
0176             }
0177         }
0178 
0179         popEnter: Transition
0180         {
0181             PropertyAnimation {
0182                 property: "opacity"
0183                 from: 0
0184                 to:1
0185                 duration: 200
0186             }
0187         }
0188 
0189         popExit: Transition
0190         {
0191             PropertyAnimation
0192             {
0193                 property: "opacity"
0194                 from: 1
0195                 to:0
0196                 duration: 200
0197             }
0198         }
0199 
0200 
0201         initialItem: BabeTable
0202         {
0203             id: youtubeTable
0204             trackNumberVisible: false
0205             headBar.visible: false
0206             holder.visible: count === 0
0207             holder.emoji: "qrc:/assets/dialog-information.svg"
0208             holder.isMask: true
0209             holder.title : i18n("No Results!")
0210             holder.body: i18n("Try with another query")
0211             holder.emojiSize: Maui.Style.iconSizes.huge
0212             coverArtVisible: true
0213             model: ListModel{}
0214             onRowClicked:
0215             {
0216                 watchVideo(youtubeTable.model.get(index))
0217             }
0218 
0219             onQuickPlayTrack:
0220             {
0221                 playTrack(youtubeTable.model.get(index).url)
0222             }
0223         }
0224 
0225         YoutubeViewer
0226         {
0227             id: youtubeViewer
0228         }
0229     }
0230 
0231     footBar.leftContent: ToolButton
0232     {
0233         id: menuBtn
0234         icon.name: "application-menu"
0235         onClicked: configPopup.open()
0236     }
0237 
0238     footBar.rightContent: ToolButton
0239     {
0240         icon.name: "edit-clear"
0241         onClicked: clearSearch()
0242     }
0243 
0244     footBar.middleContent: Maui.TextField
0245     {
0246         id: searchInput
0247         Layout.fillWidth: true
0248 
0249         placeholderText: i18n("Search videos...")
0250         wrapMode: TextEdit.Wrap
0251         onAccepted: runSearch(searchInput.text)
0252     }
0253 
0254     function watchVideo(track)
0255     {
0256         if(track && track.url)
0257         {
0258             var url = track.url
0259             if(url && url.length > 0)
0260             {
0261                 youtubeViewer.currentYt = track
0262                 youtubeViewer.webView.url = url+"?autoplay=1"
0263                 stackView.push(youtubeViewer)
0264 
0265             }
0266         }
0267     }
0268 
0269     function playTrack(url)
0270     {
0271         if(url && url.length > 0)
0272         {
0273             var newURL = url.replace("embed/", "watch?v=")
0274             console.log(newURL)
0275             webView.url = newURL+"?autoplay=1+&vq=tiny"
0276             webView.runJavaScript("document.title", function(result) { console.log(result); });
0277         }
0278     }
0279 
0280     function runSearch(searchTxt)
0281     {
0282         if(searchTxt)
0283             if(searchTxt !== youtubeTable.title)
0284             {
0285                 youtubeTable.title = searchTxt
0286                 Vvave.YouTube.getQuery(searchTxt, Maui.FM.loadSettings("YOUTUBELIMIT", "BABE", 25))
0287             }
0288     }
0289 
0290     function clearSearch()
0291     {
0292         searchInput.clear()
0293         youtubeTable.listView.model.clear()
0294         youtubeTable.title = ""
0295         searchRes = []
0296     }
0297 
0298     function populate(tracks)
0299     {
0300         youtubeTable.model.clear()
0301         for(var i in tracks)
0302             youtubeTable.model.append(tracks[i])
0303     }
0304 }