mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-20 04:58:09 +00:00
167 lines
4.6 KiB
QML
167 lines
4.6 KiB
QML
import QtQuick 2.7
|
|
import QtWebView 1.1
|
|
import QtQuick.Controls 1.3 // Busy indicator
|
|
|
|
import Common 1.0
|
|
import Linphone 1.0 as Linphone
|
|
|
|
import App.Styles 1.0
|
|
|
|
// =============================================================================
|
|
|
|
AssistantAbstractView {
|
|
id: view
|
|
maximized:true
|
|
height: (parent?parent.height:0)
|
|
width: (parent?parent.width:0)
|
|
property string defaultUrl
|
|
property string defaultLogoutUrl
|
|
property string configFilename
|
|
property bool printed : stack.currentItem == view
|
|
onPrintedChanged: {
|
|
webviewLoader.active = printed
|
|
}
|
|
|
|
//-------------------------------
|
|
|
|
property int status : 0 // 0:nothing, -1:error, 1:ok
|
|
property bool newPage : true
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Menu.
|
|
// ---------------------------------------------------------------------------
|
|
// Note : Use opacity and not visibility to allow smooth updating (when moving visibility to true, we could show the old page)
|
|
Component{
|
|
id: webviewComponent
|
|
WebView{
|
|
id:webview
|
|
property bool isLogingOut : true
|
|
state: 'hidden'
|
|
Component.onCompleted: {if(webview.httpUserAgent != undefined) webview.httpUserAgent = Linphone.CoreManager.getUserAgent() // only available on Qt 5.15 (QtWebView 1.15)
|
|
isLogingOut = true
|
|
webview.url = view.defaultLogoutUrl
|
|
}
|
|
function getData(){// Check if account_infos exists in the page and retrieve data to make/update an account
|
|
if(webview.loading){
|
|
view.status = 0
|
|
}else {
|
|
var js = "(typeof account_infos !== 'undefined'?account_infos:'')";
|
|
webview.runJavaScript(js, function(result) {
|
|
if( result == ''){
|
|
view.status = 0
|
|
}else{
|
|
webview.state = 'hidden'
|
|
reloadTimer.stop();
|
|
console.log("[CreateAccount] SIP : " +result.sip);
|
|
console.log("[CreateAccount] Username : " +result.username);
|
|
console.log("[CreateAccount] Registrar : " +result.registrar_address);
|
|
console.log("[CreateAccount] Domain : " +result.domain);
|
|
if (Linphone.AccountSettingsModel.addOrUpdateAccount( {
|
|
sipAddress: result.sip,
|
|
serverAddress: result.registrar_address,
|
|
configFilename: view.configFilename
|
|
})) {
|
|
|
|
console.log("[CreateAccount] Account created")
|
|
view.status = 1
|
|
Linphone.AccountSettingsModel.setDefaultAccountFromSipAddress("sip:"+result.sip)
|
|
} else {
|
|
console.error("[CreateAccount] Cannot create account. Check logs.")
|
|
view.status = -1
|
|
}
|
|
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
Timer {// Check data
|
|
id:reloadTimer
|
|
interval: 1000;
|
|
running: true; repeat: true
|
|
onTriggered: {webview.getData();}
|
|
}
|
|
|
|
onLoadingChanged: {
|
|
if (loadRequest.errorString)
|
|
console.error("[CreateAccount] error on loading page : " +loadRequest.errorString);
|
|
if(loading){
|
|
view.newPage = true;
|
|
}else if(view.newPage) {
|
|
view.newPage = false;
|
|
webview.runJavaScript("document.querySelector('nav').remove(); document.querySelector('footer').remove();");
|
|
}
|
|
webview.state = (loading || isLogingOut ? 'hidden' : 'showed')
|
|
if(!loading){
|
|
if(isLogingOut){
|
|
isLogingOut = false
|
|
webview.url = view.defaultUrl
|
|
}else{
|
|
reloadTimer.stop();
|
|
webview.getData();
|
|
if(view.status == 0)
|
|
reloadTimer.start();
|
|
}
|
|
}else
|
|
reloadTimer.stop();
|
|
}
|
|
states: [
|
|
State {
|
|
name: 'hidden'
|
|
PropertyChanges { target: webview; opacity: 0 }
|
|
},
|
|
State {
|
|
name: 'showed'
|
|
PropertyChanges { target: webview; opacity: 1 }
|
|
}
|
|
]
|
|
transitions: [
|
|
Transition {
|
|
from: '*'; to: 'showed'
|
|
SequentialAnimation{
|
|
NumberAnimation{ properties: "opacity"; easing.type: Easing.OutBounce; duration: 500 }
|
|
}
|
|
},
|
|
Transition {
|
|
SequentialAnimation{
|
|
NumberAnimation{ properties: "opacity"; duration: 1000 }
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
Loader{
|
|
id: webviewLoader
|
|
active: false
|
|
anchors.fill:parent
|
|
sourceComponent: webviewComponent
|
|
|
|
}
|
|
|
|
Rectangle{
|
|
id:statusPage
|
|
anchors.fill:parent
|
|
visible: webviewLoader.item && (webviewLoader.item.loading || webviewLoader.item.isLogingOut || webviewLoader.item.state == 'hidden')
|
|
BusyIndicator{
|
|
id:busy
|
|
anchors.centerIn : parent
|
|
running:true
|
|
width:CreateAppSipAccountStyle.busy.size
|
|
height:CreateAppSipAccountStyle.busy.size
|
|
}
|
|
|
|
Icon{
|
|
visible: view.status != 0
|
|
icon: (view.status>0?"chat_read":"chat_error")
|
|
iconSize:busy.width
|
|
anchors.fill:busy
|
|
MouseArea{
|
|
anchors.fill:parent
|
|
onClicked: {
|
|
assistant.popView()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|