Permalink
Switch branches/tags
Find file
Fetching contributors…
Cannot retrieve contributors at this time
326 lines (289 sloc) 7.64 KB
import QtQuick 2.4
import Konvergo 1.0
import QtWebEngine 1.1
import QtWebChannel 1.0
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
KonvergoWindow
{
id: mainWindow
title: "Plex Media Player"
objectName: "mainWindow"
minimumHeight: windowMinSize.height
minimumWidth: windowMinSize.width
function runWebAction(action)
{
if (mainWindow.webDesktopMode)
web.triggerWebAction(action)
}
Action
{
enabled: mainWindow.webDesktopMode
shortcut: {
if (components.system.isMacos) return "Ctrl+Shift+F";
return "F11";
}
onTriggered: mainWindow.toggleFullscreen()
}
Action
{
enabled: mainWindow.webDesktopMode
shortcut:
{
if (components.system.isMacos) return "Ctrl+Meta+F"
return "Shift+F11"
}
onTriggered: mainWindow.toggleFullscreenNoSwitch()
}
Action
{
shortcut: "Alt+Return"
enabled:
{
if (mainWindow.webDesktopMode && components.system.isWindows)
return true;
return false;
}
onTriggered: mainWindow.toggleFullscreen()
}
Action
{
enabled: mainWindow.webDesktopMode
shortcut: StandardKey.Close
onTriggered: mainWindow.close()
}
Action
{
enabled: mainWindow.webDesktopMode
shortcut: {
if (components.system.isMacos) return "Ctrl+M";
return "Meta+Down";
}
onTriggered: mainWindow.minimizeWindow()
}
Action
{
enabled: mainWindow.webDesktopMode
shortcut: StandardKey.Quit
onTriggered: mainWindow.close()
}
Action
{
shortcut: "Ctrl+Shift+D"
enabled: mainWindow.webDesktopMode
onTriggered: mainWindow.toggleDebug()
}
Action
{
shortcut: StandardKey.Copy
onTriggered: runWebAction(WebEngineView.Copy)
id: action_copy
}
Action
{
shortcut: StandardKey.Cut
onTriggered: runWebAction(WebEngineView.Cut)
id: action_cut
}
Action
{
shortcut: StandardKey.Paste
onTriggered: runWebAction(WebEngineView.Paste)
id: action_paste
}
Action
{
shortcut: StandardKey.SelectAll
onTriggered: runWebAction(WebEngineView.SelectAll)
id: action_selectall
}
Action
{
shortcut: StandardKey.Undo
onTriggered: runWebAction(WebEngineView.Undo)
id: action_undo
}
Action
{
shortcut: StandardKey.Redo
onTriggered: runWebAction(WebEngineView.Redo)
id: action_redo
}
function maxWebScale()
{
return webHeightMax ? ((webHeightMax / Screen.devicePixelRatio) / 720) : 10;
}
MpvVideo
{
id: video
objectName: "video"
// It's not a real item. Its renderer draws onto the view's background.
width: 0
height: 0
visible: false
}
WebEngineView
{
id: web
objectName: "web"
anchors.centerIn: parent
settings.errorPageEnabled: false
settings.localContentCanAccessRemoteUrls: true
profile.httpUserAgent: components.system.getUserAgent()
transformOrigin: Item.TopLeft
url: mainWindow.webUrl
focus: true
property string currentHoveredUrl: ""
onLinkHovered: web.currentHoveredUrl = hoveredUrl
width: mainWindow.webDesktopMode ? mainWindow.width : mainWindow.tvUIWidth
height: mainWindow.webDesktopMode ? mainWindow.height : mainWindow.tvUIHeight
scale:
{
if (mainWindow.webDesktopMode)
return 1;
if (mainWindow.windowScale < mainWindow.maxWebScale())
{
// Web renders at windows scale, no scaling
return 1;
}
else
{
// Web should max out at maximum scaling
return mainWindow.windowScale / mainWindow.maxWebScale();
}
}
Component.onCompleted:
{
// set the transparency
// (setting this here as a UserAgent workaround at least for qt5.5)
backgroundColor : "#111111"
forceActiveFocus()
mainWindow.reloadWebClient.connect(reload)
}
onLoadingChanged:
{
// we use a timer here to switch to the webview since
// it take a few moments for the webview to render
// after it has loaded.
//
if (loadRequest.status == WebEngineView.LoadStartedStatus)
{
console.log("WebEngineLoadRequest starting: " + loadRequest.url);
}
else if (loadRequest.status == WebEngineView.LoadSucceededStatus)
{
console.log("WebEngineLoadRequest success: " + loadRequest.url);
}
else if (loadRequest.status == WebEngineView.LoadFailedStatus)
{
console.log("WebEngineLoadRequest failure: " + loadRequest.url + " error code: " + loadRequest.errorCode);
errorLabel.visible = true
errorLabel.text = "Error loading client, this is bad and should not happen<br>" +
"You can try to <a href='reload'>reload</a> or head to our <a href='http://plex.tv/support'>support page</a><br><br>Actual Error: <pre>" +
loadRequest.errorString + " [" + loadRequest.errorCode + "]</pre><br><br>" +
"Provide the <a target='_blank' href='file://"+ components.system.logFilePath + "'>logfile</a> as well."
}
}
onNewViewRequested:
{
if (request.userInitiated)
{
console.log("Opening external URL: " + web.currentHoveredUrl)
components.system.openExternalUrl(web.currentHoveredUrl)
}
}
onFullScreenRequested:
{
console.log("Request fullscreen: " + request.toggleOn)
mainWindow.setFullScreen(request.toggleOn)
request.accept()
}
onJavaScriptConsoleMessage:
{
components.system.info(message)
}
onCertificateError:
{
console.log(error.url + " :" + error.description + error.error)
}
}
Text
{
id: errorLabel
z: 5
anchors.centerIn: parent
color: "#999999"
linkColor: "#cc7b19"
text: "Generic error"
font.pixelSize: 32
font.bold: true
visible: false
verticalAlignment: Text.AlignVCenter
textFormat: Text.StyledText
onLinkActivated:
{
if (link == "reload")
{
errorLabel.visible = false
web.reload()
}
else
{
Qt.openUrlExternally(link)
}
}
}
Rectangle
{
id: debug
color: "black"
z: 10
anchors.centerIn: parent
width: parent.width
height: parent.height
opacity: 0.7
visible: mainWindow.showDebugLayer
Text
{
id: debugLabel
width: (parent.width - 50) / 2
height: parent.height - 25
anchors.left: parent.left
anchors.leftMargin: 64
anchors.top: parent.top
anchors.topMargin: 54
anchors.bottomMargin: 54
color: "white"
font.pixelSize: Math.round(height / 65)
wrapMode: Text.WrapAnywhere
function windowDebug()
{
var dbg = mainWindow.debugInfo + "Window and web\n";
dbg += " Window size: " + parent.width + "x" + parent.height + " - " + web.width + "x" + web.height + "\n";
dbg += " DevicePixel ratio: " + Screen.devicePixelRatio + "\n";
dbg += " Web Max Height: " + (webHeightMax / Screen.devicePixelRatio) + " / Max scale: " + mainWindow.maxWebScale() + "\n";
dbg += " Web scale: " + webScale + " / Window scale: " + windowScale + "\n";
dbg += " Scale applied: " + web.scale + "\n";
return dbg;
}
text: windowDebug()
}
Text
{
id: videoLabel
width: (parent.width - 50) / 2
height: parent.height - 25
anchors.right: parent.right
anchors.left: debugLabel.right
anchors.rightMargin: 64
anchors.top: parent.top
anchors.topMargin: 54
anchors.bottomMargin: 54
color: "white"
font.pixelSize: Math.round(height / 65)
wrapMode: Text.WrapAnywhere
text: mainWindow.videoInfo
}
}
property QtObject webChannel: web.webChannel
}