mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-27 14:22:37 +01:00
209 lines
6.9 KiB
Python
209 lines
6.9 KiB
Python
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)
|