mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
Added event server, seems like working properly
This commit is contained in:
parent
a87b3fda7a
commit
bf1994a074
3 changed files with 155 additions and 103 deletions
|
|
@ -7,19 +7,24 @@ import time
|
|||
from app import style
|
||||
from app.vendor.Qt import QtCore, QtGui, QtWidgets
|
||||
from pype.ftrack import credentials, login_dialog as login_dialog
|
||||
from app.api import Logger
|
||||
import actionServer, eventServer
|
||||
|
||||
log = Logger.getLogger(__name__)
|
||||
# Validation if alredy logged into Ftrack
|
||||
class FtrackRunner:
|
||||
def __init__(self, main_parent=None, parent=None):
|
||||
|
||||
self.parent = parent
|
||||
self.loginWidget = login_dialog.Login_Dialog_ui()
|
||||
self.loginWidget = login_dialog.Login_Dialog_ui(self)
|
||||
self.actionThread = None
|
||||
self.actionServer = actionServer.FtrackActionServer()
|
||||
self.eventThread = None
|
||||
self.eventServer = eventServer.FtrackEventServer()
|
||||
|
||||
self.setServer()
|
||||
try:
|
||||
self.validate()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.boolLogged = False
|
||||
self.boolActionServer = False
|
||||
self.boolEventServer = False
|
||||
|
||||
def showLoginWidget(self):
|
||||
self.loginWidget.show()
|
||||
|
|
@ -39,66 +44,158 @@ class FtrackRunner:
|
|||
self.showLoginWidget()
|
||||
|
||||
except Exception as e:
|
||||
print("We are unable to connect to Ftrack")
|
||||
print(e)
|
||||
log.error("We are unable to connect to Ftrack: {0}".format(e))
|
||||
|
||||
validation = credentials._check_credentials()
|
||||
if validation is True:
|
||||
print("You are connected to Ftrack")
|
||||
log.info("Connected to Ftrack successfully")
|
||||
self.loginChange()
|
||||
else:
|
||||
print("Please sign in")
|
||||
log.warning("Please sign in to Ftrack")
|
||||
self.boolLogged = False
|
||||
self.setMenuVisibility()
|
||||
|
||||
return validation
|
||||
|
||||
# Necessary - login_dialog works with this method after logging in
|
||||
def loginChange(self):
|
||||
self.boolLogged = True
|
||||
self.setMenuVisibility()
|
||||
self.runActionServer()
|
||||
|
||||
def logout(self):
|
||||
credentials._clear_credentials()
|
||||
print("Logged out of Ftrack")
|
||||
self.stopActionServer()
|
||||
self.stopEventServer()
|
||||
|
||||
log.info("Logged out of Ftrack")
|
||||
self.boolLogged = False
|
||||
self.setMenuVisibility()
|
||||
|
||||
# Actions part
|
||||
def runActionServer(self):
|
||||
if self.actionThread is None:
|
||||
self.actionThread = threading.Thread(target=self.setActionServer)
|
||||
self.actionThread.daemon=True
|
||||
self.actionThread.start()
|
||||
|
||||
log.info("Ftrack action server launched")
|
||||
self.boolActionServer = True
|
||||
self.setMenuVisibility()
|
||||
|
||||
def setActionServer(self):
|
||||
self.actionServer.run_action_server()
|
||||
|
||||
def resetActionServer(self):
|
||||
self.stopActionServer()
|
||||
self.runActionServer()
|
||||
|
||||
def stopActionServer(self):
|
||||
try:
|
||||
self.actionServer.stop_action_session()
|
||||
if self.actionThread is not None:
|
||||
self.actionThread.join()
|
||||
self.actionThread = None
|
||||
|
||||
log.info("Ftrack action server stopped")
|
||||
self.boolActionServer = False
|
||||
self.setMenuVisibility()
|
||||
except Exception as e:
|
||||
log.error("During Killing action server: {0}".format(e))
|
||||
|
||||
# Events part
|
||||
def runEventServer(self):
|
||||
if self.eventThread is None:
|
||||
self.eventThread = threading.Thread(target=self.setEventServer)
|
||||
self.eventThread.daemon=True
|
||||
self.eventThread.start()
|
||||
|
||||
log.info("Ftrack event server launched")
|
||||
self.boolEventServer = True
|
||||
self.setMenuVisibility()
|
||||
|
||||
def setEventServer(self):
|
||||
self.eventServer.run_event_server()
|
||||
|
||||
def resetEventServer(self):
|
||||
self.stopEventServer()
|
||||
self.runEventServer()
|
||||
|
||||
def stopEventServer(self):
|
||||
try:
|
||||
self.eventServer.stop_event_session()
|
||||
if self.eventThread is not None:
|
||||
self.eventThread.join()
|
||||
self.eventThread = None
|
||||
|
||||
log.info("Ftrack event server stopped")
|
||||
self.boolEventServer = False
|
||||
self.setMenuVisibility()
|
||||
except Exception as e:
|
||||
log.error("During Killing Event server: {0}".format(e))
|
||||
|
||||
# Definition of Tray menu
|
||||
def trayMenu(self, parent):
|
||||
# Menu for Tray App
|
||||
menu = QtWidgets.QMenu('Ftrack', parent)
|
||||
menu.setProperty('submenu', 'on')
|
||||
menu.setStyleSheet(style.load_stylesheet())
|
||||
self.menu = QtWidgets.QMenu('Ftrack', parent)
|
||||
self.menu.setProperty('submenu', 'on')
|
||||
self.menu.setStyleSheet(style.load_stylesheet())
|
||||
|
||||
# Actions - server
|
||||
smActionS = menu.addMenu("Servers")
|
||||
aRunActionS = QtWidgets.QAction("Run action server", smActionS)
|
||||
aRunActionS.triggered.connect(self.runServer)
|
||||
aStopActionS = QtWidgets.QAction("Stop action server", smActionS)
|
||||
aStopActionS.triggered.connect(self.stopServer)
|
||||
self.smActionS = self.menu.addMenu("Action server")
|
||||
self.aRunActionS = QtWidgets.QAction("Run action server", self.smActionS)
|
||||
self.aRunActionS.triggered.connect(self.runActionServer)
|
||||
self.aResetActionS = QtWidgets.QAction("Reset action server", self.smActionS)
|
||||
self.aResetActionS.triggered.connect(self.resetActionServer)
|
||||
self.aStopActionS = QtWidgets.QAction("Stop action server", self.smActionS)
|
||||
self.aStopActionS.triggered.connect(self.stopActionServer)
|
||||
|
||||
smActionS.addAction(aRunActionS)
|
||||
smActionS.addAction(aStopActionS)
|
||||
self.smActionS.addAction(self.aRunActionS)
|
||||
self.smActionS.addAction(self.aResetActionS)
|
||||
self.smActionS.addAction(self.aStopActionS)
|
||||
|
||||
# Actions - server
|
||||
self.smEventS = self.menu.addMenu("Event server")
|
||||
self.aRunEventS = QtWidgets.QAction("Run event server", self.smEventS)
|
||||
self.aRunEventS.triggered.connect(self.runEventServer)
|
||||
self.aResetEventS = QtWidgets.QAction("Reset event server", self.smEventS)
|
||||
self.aResetEventS.triggered.connect(self.resetEventServer)
|
||||
self.aStopEventS = QtWidgets.QAction("Stop event server", self.smEventS)
|
||||
self.aStopEventS.triggered.connect(self.stopEventServer)
|
||||
|
||||
self.smEventS.addAction(self.aRunEventS)
|
||||
self.smEventS.addAction(self.aResetEventS)
|
||||
self.smEventS.addAction(self.aStopEventS)
|
||||
|
||||
# Actions - basic
|
||||
aLogin = QtWidgets.QAction("Login",menu)
|
||||
aLogin.triggered.connect(self.validate)
|
||||
aLogout = QtWidgets.QAction("Logout",menu)
|
||||
aLogout.triggered.connect(self.logout)
|
||||
self.aLogin = QtWidgets.QAction("Login",self.menu)
|
||||
self.aLogin.triggered.connect(self.validate)
|
||||
self.aLogout = QtWidgets.QAction("Logout",self.menu)
|
||||
self.aLogout.triggered.connect(self.logout)
|
||||
|
||||
menu.addAction(aLogin)
|
||||
menu.addAction(aLogout)
|
||||
self.menu.addAction(self.aLogin)
|
||||
self.menu.addAction(self.aLogout)
|
||||
|
||||
return menu
|
||||
self.boolLogged = False
|
||||
self.setMenuVisibility()
|
||||
|
||||
def setServer(self):
|
||||
fname = os.path.join(os.environ["FTRACK_ACTION_SERVER"], "actionServer.py")
|
||||
print(fname)
|
||||
DETACHED_PROCESS = 0x00000008
|
||||
self.aServer = subprocess.Popen(
|
||||
[fname],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True,
|
||||
bufsize=1,
|
||||
cwd=None,
|
||||
env=os.environ,
|
||||
executable=sys.executable,
|
||||
creationflags=DETACHED_PROCESS
|
||||
)
|
||||
return self.menu
|
||||
|
||||
def runServer(self):
|
||||
print("Running server")
|
||||
self.aServer.wait()
|
||||
# Definition of visibility of each menu actions
|
||||
def setMenuVisibility(self):
|
||||
|
||||
def stopServer(self):
|
||||
print("Stopping server")
|
||||
self.aServer.close()
|
||||
self.smActionS.menuAction().setVisible(self.boolLogged)
|
||||
self.smEventS.menuAction().setVisible(self.boolLogged)
|
||||
self.aLogin.setVisible(not self.boolLogged)
|
||||
self.aLogout.setVisible(self.boolLogged)
|
||||
|
||||
if self.boolLogged is False:
|
||||
return
|
||||
|
||||
self.aRunActionS.setVisible(not self.boolActionServer)
|
||||
self.aResetActionS.setVisible(self.boolActionServer)
|
||||
self.aStopActionS.setVisible(self.boolActionServer)
|
||||
|
||||
self.aRunEventS.setVisible(not self.boolEventServer)
|
||||
self.aResetEventS.setVisible(self.boolEventServer)
|
||||
self.aStopEventS.setVisible(self.boolEventServer)
|
||||
|
|
|
|||
|
|
@ -19,8 +19,13 @@ class Login_Dialog_ui(QtWidgets.QWidget):
|
|||
|
||||
def __init__(self, parent=None):
|
||||
|
||||
super(Login_Dialog_ui, self).__init__(parent)
|
||||
super(Login_Dialog_ui, self).__init__()
|
||||
|
||||
self.parent = parent
|
||||
|
||||
self.setWindowIcon(self.parent.parent.icon)
|
||||
self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint)
|
||||
|
||||
self.loginSignal.connect(self.loginWithCredentials)
|
||||
self._translate = QtCore.QCoreApplication.translate
|
||||
|
||||
|
|
@ -33,10 +38,11 @@ class Login_Dialog_ui(QtWidgets.QWidget):
|
|||
|
||||
self.resize(self.SIZE_W, self.SIZE_H)
|
||||
self.setMinimumSize(QtCore.QSize(self.SIZE_W, self.SIZE_H))
|
||||
self.setMaximumSize(QtCore.QSize(self.SIZE_W+100, self.SIZE_H+100))
|
||||
self.setStyleSheet(style.load_stylesheet())
|
||||
|
||||
self.setLayout(self._main())
|
||||
self.setWindowTitle('FTrack Login')
|
||||
self.setWindowTitle('Pype - Ftrack Login')
|
||||
|
||||
def _main(self):
|
||||
self.main = QtWidgets.QVBoxLayout()
|
||||
|
|
@ -279,6 +285,7 @@ class Login_Dialog_ui(QtWidgets.QWidget):
|
|||
if verification is True:
|
||||
credentials._save_credentials(username, apiKey)
|
||||
credentials._set_env(username, apiKey)
|
||||
self.parent.loginChange()
|
||||
self._close_widget()
|
||||
|
||||
def closeEvent(self, event):
|
||||
|
|
|
|||
|
|
@ -1,52 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import textwrap
|
||||
from pype.ftrack.ftrackRun import FtrackRunner, login_dialog
|
||||
from app import style
|
||||
from app.vendor.Qt import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class SystemTrayIcon(QtWidgets.QSystemTrayIcon):
|
||||
def __init__(self, parent=None):
|
||||
|
||||
icon = r'C:\Users\jakub.trllo\CODE\pype-setup\repos\avalon-launcher\launcher\res\icon\main.png'
|
||||
icon = QtGui.QIcon(icon)
|
||||
|
||||
QtWidgets.QSystemTrayIcon.__init__(self, icon, parent)
|
||||
|
||||
# Store parent - QtWidgets.QMainWindow()
|
||||
self.parent = parent
|
||||
|
||||
# Setup menu in Tray
|
||||
self.menu = QtWidgets.QMenu()
|
||||
self.menu.setStyleSheet(style.load_stylesheet())
|
||||
|
||||
# Add ftrack menu (TODO - Recognize that ftrack is used!!!!!!)
|
||||
self.ftrack = FtrackRunner(self.parent, self)
|
||||
self.menu.addMenu(self.ftrack.trayMenu(self.menu))
|
||||
|
||||
# Add Exit action to menu
|
||||
aExit = QtWidgets.QAction("Exit", self)
|
||||
aExit.triggered.connect(self.exit)
|
||||
self.menu.addAction(aExit)
|
||||
|
||||
# Add menu to Context of SystemTrayIcon
|
||||
self.setContextMenu(self.menu)
|
||||
|
||||
def exit(self):
|
||||
QtCore.QCoreApplication.exit()
|
||||
|
||||
|
||||
def _sys_tray():
|
||||
# code source: https://stackoverflow.com/questions/893984/pyqt-show-menu-in-a-system-tray-application - add answer PyQt5
|
||||
#PyQt4 to PyQt5 version: https://stackoverflow.com/questions/20749819/pyqt5-failing-import-of-qtgui
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
# app.setQuitOnLastWindowClosed(True)
|
||||
w = QtWidgets.QMainWindow()
|
||||
# w = QtWidgets.QWidget()
|
||||
trayIcon = SystemTrayIcon(w)
|
||||
trayIcon.show()
|
||||
sys.exit(app.exec_())
|
||||
|
||||
if (__name__ == ('__main__')):
|
||||
_sys_tray()
|
||||
Loading…
Add table
Add a link
Reference in a new issue