PiScan/client/py/connect.py

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)