forked from Silverfish/proton-bridge
We build too many walls and not enough bridges
This commit is contained in:
233
internal/frontend/qml/BridgeUI/DialogPortChange.qml
Normal file
233
internal/frontend/qml/BridgeUI/DialogPortChange.qml
Normal file
@ -0,0 +1,233 @@
|
||||
// Copyright (c) 2020 Proton Technologies AG
|
||||
//
|
||||
// This file is part of ProtonMail Bridge.
|
||||
//
|
||||
// ProtonMail Bridge is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// ProtonMail Bridge is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
// Dialog with Yes/No buttons
|
||||
|
||||
import QtQuick 2.8
|
||||
import BridgeUI 1.0
|
||||
import ProtonUI 1.0
|
||||
import QtQuick.Controls 2.2 as QC
|
||||
|
||||
Dialog {
|
||||
id: root
|
||||
|
||||
title : "Set IMAP & SMTP settings"
|
||||
subtitle : "Changes require reconfiguration of Mail client. (Bridge will automatically restart)"
|
||||
isDialogBusy: currentIndex==1
|
||||
|
||||
Column {
|
||||
id: dialogMessage
|
||||
property int heightInputs : imapPort.height + middleSep.height + smtpPort.height + buttonSep.height + buttonRow.height + secSMTPSep.height + securitySMTP.height
|
||||
|
||||
Rectangle { color : "transparent"; width : Style.main.dummy; height : (root.height-dialogMessage.heightInputs)/1.6 }
|
||||
|
||||
InputField {
|
||||
id: imapPort
|
||||
iconText : Style.fa.hashtag
|
||||
label : qsTr("IMAP port", "entry field to choose port used for the IMAP server")
|
||||
text : "undef"
|
||||
}
|
||||
|
||||
Rectangle { id:middleSep; color : "transparent"; width : Style.main.dummy; height : Style.dialog.heightSeparator }
|
||||
|
||||
InputField {
|
||||
id: smtpPort
|
||||
iconText : Style.fa.hashtag
|
||||
label : qsTr("SMTP port", "entry field to choose port used for the SMTP server")
|
||||
text : "undef"
|
||||
}
|
||||
|
||||
Rectangle { id:secSMTPSep; color : Style.transparent; width : Style.main.dummy; height : Style.dialog.heightSeparator }
|
||||
|
||||
// SSL button group
|
||||
Rectangle {
|
||||
anchors.horizontalCenter : parent.horizontalCenter
|
||||
width : Style.dialog.widthInput
|
||||
height : securitySMTPLabel.height + securitySMTP.height
|
||||
color : "transparent"
|
||||
|
||||
AccessibleText {
|
||||
id: securitySMTPLabel
|
||||
anchors.left : parent.left
|
||||
text:qsTr("SMTP connection mode")
|
||||
color: Style.dialog.text
|
||||
font {
|
||||
pointSize : Style.dialog.fontSize * Style.pt
|
||||
bold : true
|
||||
}
|
||||
}
|
||||
|
||||
QC.ButtonGroup {
|
||||
buttons: securitySMTP.children
|
||||
}
|
||||
Row {
|
||||
id: securitySMTP
|
||||
spacing: Style.dialog.spacing
|
||||
anchors.top: securitySMTPLabel.bottom
|
||||
anchors.topMargin: Style.dialog.fontSize
|
||||
|
||||
CheckBoxLabel {
|
||||
id: securitySMTPSSL
|
||||
text: qsTr("SSL")
|
||||
}
|
||||
|
||||
CheckBoxLabel {
|
||||
checked: true
|
||||
id: securitySMTPSTARTTLS
|
||||
text: qsTr("STARTTLS")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { id:buttonSep; color : "transparent"; width : Style.main.dummy; height : 2*Style.dialog.heightSeparator }
|
||||
|
||||
Row {
|
||||
id: buttonRow
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
spacing: Style.dialog.spacing
|
||||
ButtonRounded {
|
||||
id:buttonNo
|
||||
color_main: Style.dialog.text
|
||||
fa_icon: Style.fa.times
|
||||
text: qsTr("Cancel", "dismisses current action")
|
||||
onClicked : root.hide()
|
||||
}
|
||||
ButtonRounded {
|
||||
id: buttonYes
|
||||
color_main: Style.dialog.text
|
||||
color_minor: Style.main.textBlue
|
||||
isOpaque: true
|
||||
fa_icon: Style.fa.check
|
||||
text: qsTr("Okay", "confirms and dismisses a notification")
|
||||
onClicked : root.confirmed()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
Rectangle { color : "transparent"; width : Style.main.dummy; height : (root.height-answ.height)/2 }
|
||||
Text {
|
||||
id: answ
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width : parent.width/2
|
||||
color: Style.dialog.text
|
||||
font {
|
||||
pointSize : Style.dialog.fontSize * Style.pt
|
||||
bold : true
|
||||
}
|
||||
text : "IMAP: " + imapPort.text + "\nSMTP: " + smtpPort.text + "\nSMTP Connection Mode: " + getSelectedSSLMode() + "\n\n" +
|
||||
qsTr("Settings will be applied after the next start. You will need to reconfigure your email client(s).", "after user changes their ports they will see this notification to reconfigure their setup") +
|
||||
"\n\n" +
|
||||
qsTr("Bridge will now restart.", "after user changes their ports this appears to notify the user of restart")
|
||||
wrapMode: Text.Wrap
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
}
|
||||
|
||||
function areInputsOK() {
|
||||
var isOK = true
|
||||
var imapUnchanged = false
|
||||
var secSMTPUnchanged = (securitySMTPSTARTTLS.checked == go.isSMTPSTARTTLS())
|
||||
root.warning.text = ""
|
||||
|
||||
if (imapPort.text!=go.getIMAPPort()) {
|
||||
if (go.isPortOpen(imapPort.text)!=0) {
|
||||
imapPort.rightIcon = Style.fa.exclamation_triangle
|
||||
root.warning.text = qsTr("Port number is not available.", "if the user changes one of their ports to a port that is occupied by another application")
|
||||
isOK=false
|
||||
} else {
|
||||
imapPort.rightIcon = Style.fa.check_circle
|
||||
}
|
||||
} else {
|
||||
imapPort.rightIcon = ""
|
||||
imapUnchanged = true
|
||||
}
|
||||
|
||||
if (smtpPort.text!=go.getSMTPPort()) {
|
||||
if (go.isPortOpen(smtpPort.text)!=0) {
|
||||
smtpPort.rightIcon = Style.fa.exclamation_triangle
|
||||
root.warning.text = qsTr("Port number is not available.", "if the user changes one of their ports to a port that is occupied by another application")
|
||||
isOK=false
|
||||
} else {
|
||||
smtpPort.rightIcon = Style.fa.check_circle
|
||||
}
|
||||
} else {
|
||||
smtpPort.rightIcon = ""
|
||||
if (imapUnchanged && secSMTPUnchanged) {
|
||||
root.warning.text = qsTr("Please change at least one port number or SMTP security.", "if the user tries to change IMAP/SMTP ports to the same ports as before")
|
||||
isOK=false
|
||||
}
|
||||
}
|
||||
|
||||
if (imapPort.text == smtpPort.text) {
|
||||
smtpPort.rightIcon = Style.fa.exclamation_triangle
|
||||
root.warning.text = qsTr("Port numbers must be different.", "if the user sets both the IMAP and SMTP ports to the same number")
|
||||
isOK=false
|
||||
}
|
||||
|
||||
root.warning.visible = !isOK
|
||||
return isOK
|
||||
}
|
||||
|
||||
function confirmed() {
|
||||
if (areInputsOK()) {
|
||||
incrementCurrentIndex()
|
||||
timer.start()
|
||||
}
|
||||
}
|
||||
|
||||
function getSelectedSSLMode() {
|
||||
if (securitySMTPSTARTTLS.checked == true) {
|
||||
return "STARTTLS"
|
||||
} else {
|
||||
return "SSL"
|
||||
}
|
||||
}
|
||||
|
||||
onShow : {
|
||||
imapPort.text = go.getIMAPPort()
|
||||
smtpPort.text = go.getSMTPPort()
|
||||
if (go.isSMTPSTARTTLS()) {
|
||||
securitySMTPSTARTTLS.checked = true
|
||||
} else {
|
||||
securitySMTPSSL.checked = true
|
||||
}
|
||||
areInputsOK()
|
||||
root.warning.visible = false
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.Cancel
|
||||
onActivated: root.hide()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Enter"
|
||||
onActivated: root.confirmed()
|
||||
}
|
||||
|
||||
timer.interval : 3000
|
||||
|
||||
Connections {
|
||||
target: timer
|
||||
onTriggered: {
|
||||
go.setPortsAndSecurity(imapPort.text, smtpPort.text, securitySMTPSTARTTLS.checked)
|
||||
go.isRestarting = true
|
||||
Qt.quit()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user