From 796388b3307c368becca76b92f32e9db57bd7311 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Thu, 6 Dec 2018 11:54:52 +0100 Subject: [PATCH] ftrackRun.py renamed to ftrack_run.py --- pype/ftrack/ftrack_run.py | 209 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 pype/ftrack/ftrack_run.py diff --git a/pype/ftrack/ftrack_run.py b/pype/ftrack/ftrack_run.py new file mode 100644 index 0000000000..7fddf171da --- /dev/null +++ b/pype/ftrack/ftrack_run.py @@ -0,0 +1,209 @@ +import sys +import os +import argparse +import subprocess +import threading +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 FtrackServer import FtrackServer + +from pype import api as pype + + +# load data from templates +pype.load_data_from_templates() + +log = pype.Logger.getLogger(__name__, "ftrack") +# 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) + self.actionThread = None + self.actionServer = FtrackServer('action') + self.eventThread = None + self.eventServer = FtrackServer('event') + + self.boolLogged = False + self.boolActionServer = False + self.boolEventServer = False + + def showLoginWidget(self): + self.loginWidget.show() + + def validate(self): + validation = False + cred = credentials._get_credentials() + try: + if 'username' in cred and 'apiKey' in cred: + validation = credentials._check_credentials( + cred['username'], + cred['apiKey'] + ) + if validation is False: + self.showLoginWidget() + else: + self.showLoginWidget() + + except Exception as e: + log.error("We are unable to connect to Ftrack: {0}".format(e)) + + validation = credentials._check_credentials() + if validation is True: + log.info("Connected to Ftrack successfully") + self.loginChange() + else: + 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() + 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_server() + + def resetActionServer(self): + self.stopActionServer() + self.runActionServer() + + def stopActionServer(self): + try: + self.actionServer.stop_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_server() + + def resetEventServer(self): + self.stopEventServer() + self.runEventServer() + + def stopEventServer(self): + try: + self.eventServer.stop_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 + self.menu = QtWidgets.QMenu('Ftrack', parent) + self.menu.setProperty('submenu', 'on') + self.menu.setStyleSheet(style.load_stylesheet()) + + # Actions - server + 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) + + 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 + 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) + + self.menu.addAction(self.aLogin) + self.menu.addAction(self.aLogout) + + self.boolLogged = False + self.setMenuVisibility() + + return self.menu + + # Definition of visibility of each menu actions + def setMenuVisibility(self): + + 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)