109 lines
3.9 KiB
Python
109 lines
3.9 KiB
Python
import sys
|
|
|
|
from PySide2.QtUiTools import QUiLoader
|
|
from PySide2.QtWidgets import QWidget, QLabel, QPushButton, QLineEdit, QCheckBox
|
|
from PySide2.QtCore import QObject
|
|
from PySide2.QtGui import QMovie, QPixmap
|
|
|
|
from socket import *
|
|
|
|
import common
|
|
import constants
|
|
|
|
class ConnectDialog:
|
|
def __init__(self, parentWindow, address=None, port=None, use_audio=False, rtsp_port=None):
|
|
self.widget = parentWindow.connectPage
|
|
self.errorLabel = parentWindow.connect_errorLabel
|
|
self.confirmButton = parentWindow.connect_confirmButton
|
|
self.connectIndicator = parentWindow.connect_indicator
|
|
self.hostLineEdit = parentWindow.connect_hostnameLineEdit
|
|
self.portLineEdit = parentWindow.connect_portLineEdit
|
|
self.logo = parentWindow.connect_logoImage
|
|
self.hostLabel = parentWindow.hostLabel
|
|
self.portLabel = parentWindow.hostPortLabel
|
|
self.audioCheckBox = parentWindow.connect_audioCheckBox
|
|
self.rtspPortPanel = parentWindow.connect_rtspPortPanel
|
|
self.rtspPortLineEdit = parentWindow.connect_rtspPortLineEdit
|
|
|
|
self.logo.setPixmap(QPixmap("resources/icon-256.png"))
|
|
self.logo.setVisible(False)
|
|
|
|
movie = QMovie("resources/loader-small.gif")
|
|
movie.start()
|
|
self.connectIndicator.setMovie(movie)
|
|
self.connectIndicator.setVisible(False)
|
|
|
|
self.errorLabel.setVisible(False)
|
|
|
|
self.hostLineEdit.setText(constants.DEFAULT_ADDRESS)
|
|
self.portLineEdit.setText(str(constants.DEFAULT_TCP_PORT))
|
|
|
|
self.confirmButton.clicked.connect(self.onConfirm)
|
|
self.hostLineEdit.returnPressed.connect(self.onConfirm)
|
|
self.portLineEdit.returnPressed.connect(self.onConfirm)
|
|
|
|
self.rtspPortPanel.setVisible(False)
|
|
|
|
def onConfirm(self):
|
|
host = self.hostLineEdit.text()
|
|
port = int(self.portLineEdit.text())
|
|
audio = self.audioCheckBox.isChecked()
|
|
rtsp_port = int(self.rtspPortLineEdit.text())
|
|
self.tryConnect(host, port, audio, rtsp_port)
|
|
|
|
def tryConnect(self, address, port, use_audio=False, rtsp_port=8554):
|
|
print('connect confirm')
|
|
try:
|
|
self.connectIndicator.setVisible(True)
|
|
self.errorLabel.setVisible(False)
|
|
self.hostLineEdit.setText(address)
|
|
self.portLineEdit.setText(str(port))
|
|
self.audioCheckBox.setChecked(use_audio)
|
|
self.rtspPortLineEdit.setText(str(rtsp_port))
|
|
self.widget.repaint()
|
|
|
|
print('Connecting to ', address, ':', port)
|
|
dest = (address, port)
|
|
|
|
sock = socket(AF_INET, SOCK_STREAM)
|
|
sock.connect(dest)
|
|
print('Connection success')
|
|
|
|
self.connectIndicator.setVisible(False)
|
|
|
|
common.getApp().completeConnection(sock, address, use_audio, rtsp_port)
|
|
except ConnectionRefusedError:
|
|
self.connectFailed('Connect failed - Connection refused')
|
|
except gaierror as err:
|
|
self.connectFailed('Connect failed - ' + str(err))
|
|
except TimeoutError:
|
|
self.connectFailed('Connect failed - Timed out')
|
|
except:
|
|
e = sys.exc_info()[0]
|
|
self.connectFailed('Connect failed - Unhandled exception: ' + str(e))
|
|
|
|
|
|
def contextWait(self):
|
|
self.connectIndicator.setVisible(True)
|
|
self.errorLabel.setVisible(False)
|
|
self.hostLineEdit.setVisible(False)
|
|
self.portLineEdit.setVisible(False)
|
|
self.confirmButton.setVisible(False)
|
|
self.hostLabel.setVisible(False)
|
|
self.portLabel.setVisible(False)
|
|
|
|
def connectFailed(self, message):
|
|
self.connectIndicator.setVisible(False)
|
|
self.errorLabel.setText(str(message))
|
|
self.errorLabel.setVisible(True)
|
|
self.hostLineEdit.setVisible(True)
|
|
self.portLineEdit.setVisible(True)
|
|
self.confirmButton.setVisible(True)
|
|
self.hostLabel.setVisible(True)
|
|
self.portLabel.setVisible(True)
|
|
|
|
|
|
|
|
|
|
|