mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
Timer can be restarted. Timer duration is taken from config file in templates.
This commit is contained in:
parent
fc0575d4a0
commit
617e7aced9
2 changed files with 92 additions and 20 deletions
|
|
@ -353,6 +353,7 @@ class AppAction(object):
|
|||
task = session.query('Task where id is {}'.format(entity['id'])).one()
|
||||
self.log.info('Starting timer for task: ' + task['name'])
|
||||
user.start_timer(task, force=True)
|
||||
os.environ["FTRACK_LAST_TASK_ID"] = entity['id']
|
||||
|
||||
return {
|
||||
'success': True,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
import sys
|
||||
import os
|
||||
import argparse
|
||||
import subprocess
|
||||
import json
|
||||
import threading
|
||||
import time
|
||||
import ftrack_api
|
||||
|
|
@ -168,7 +167,6 @@ class FtrackRunner:
|
|||
if self.bool_timer_event is False:
|
||||
self.start_timer_thread()
|
||||
|
||||
|
||||
def start_timer_thread(self):
|
||||
if self.thread_timer is None:
|
||||
self.thread_timer = FtrackEventsThread(self)
|
||||
|
|
@ -197,7 +195,7 @@ class FtrackRunner:
|
|||
|
||||
def stop_countdown_thread(self):
|
||||
if self.thread_timer_coundown is not None:
|
||||
self.thread_timer_coundown.runs=False
|
||||
self.thread_timer_coundown.runs = False
|
||||
self.thread_timer_coundown.terminate()
|
||||
self.thread_timer_coundown.wait()
|
||||
self.thread_timer_coundown = None
|
||||
|
|
@ -209,7 +207,8 @@ class FtrackRunner:
|
|||
# self.widget_timer.activateWindow()
|
||||
|
||||
def change_count_widget(self, time):
|
||||
self.widget_timer.lbl_rest_time.setText(str(time))
|
||||
str_time = str(time).replace(".0", "")
|
||||
self.widget_timer.lbl_rest_time.setText(str_time)
|
||||
|
||||
def timer_started(self):
|
||||
self.start_countdown_thread()
|
||||
|
|
@ -225,22 +224,32 @@ class FtrackRunner:
|
|||
if self.thread_timer_coundown is not None:
|
||||
self.stop_countdown_thread()
|
||||
|
||||
def timer_restart(self):
|
||||
if self.thread_timer is not None:
|
||||
self.thread_timer.signal_restart_timer.emit()
|
||||
|
||||
self.timer_started()
|
||||
|
||||
def timer_continue(self):
|
||||
if self.thread_timer_coundown is not None:
|
||||
self.thread_timer_coundown.signal_continue_timer.emit()
|
||||
|
||||
|
||||
class FtrackEventsThread(QtCore.QThread):
|
||||
# Senders
|
||||
signal_timer_started = QtCore.Signal()
|
||||
signal_timer_stopped = QtCore.Signal()
|
||||
# Listeners
|
||||
signal_stop_timer = QtCore.Signal()
|
||||
signal_restart_timer = QtCore.Signal()
|
||||
|
||||
def __init__(self, parent):
|
||||
super(FtrackEventsThread, self).__init__()
|
||||
cred = credentials._get_credentials()
|
||||
self.username = cred['username']
|
||||
self.signal_stop_timer.connect(self.ftrack_stop_timer)
|
||||
self.signal_restart_timer.connect(self.ftrack_restart_timer)
|
||||
self.user = None
|
||||
|
||||
def run(self):
|
||||
self.timer_session = ftrack_api.Session(auto_connect_event_hub=True)
|
||||
|
|
@ -248,6 +257,9 @@ class FtrackEventsThread(QtCore.QThread):
|
|||
'topic=ftrack.update and source.user.username={}'.format(self.username),
|
||||
self.event_handler)
|
||||
|
||||
query = 'User where username is "{}"'.format(self.username)
|
||||
self.user = self.timer_session.query(query).one()
|
||||
|
||||
self.timer_session.event_hub.wait()
|
||||
|
||||
def event_handler(self, event):
|
||||
|
|
@ -256,9 +268,10 @@ class FtrackEventsThread(QtCore.QThread):
|
|||
return
|
||||
except:
|
||||
return
|
||||
|
||||
new = event['data']['entities'][0]['changes']['start']['new']
|
||||
old = event['data']['entities'][0]['changes']['start']['old']
|
||||
self.userId = event['source']['user']['id']
|
||||
|
||||
if old is None and new is None:
|
||||
return
|
||||
elif old is None:
|
||||
|
|
@ -268,12 +281,25 @@ class FtrackEventsThread(QtCore.QThread):
|
|||
|
||||
def ftrack_stop_timer(self):
|
||||
try:
|
||||
user = self.timer_session.query('User where id is ' + self.userId).one()
|
||||
user.stop_timer()
|
||||
self.user.stop_timer()
|
||||
self.timer_session.commit()
|
||||
except Exception as e:
|
||||
log.debug("Timer stop had issues: {}".format(e))
|
||||
|
||||
def ftrack_restart_timer(self):
|
||||
try:
|
||||
last_task = None
|
||||
if "FTRACK_LAST_TASK_ID" in os.environ:
|
||||
task_id = os.environ["FTRACK_LAST_TASK_ID"]
|
||||
query = 'Task where id is {}'.format(task_id)
|
||||
last_task = self.timer_session.query(query).one()
|
||||
|
||||
if (last_task is not None) and (self.user is not None):
|
||||
self.user.start_timer(last_task)
|
||||
self.timer_session.commit()
|
||||
except Exception as e:
|
||||
log.debug("Timer stop had issues: {}".format(e))
|
||||
|
||||
|
||||
class CountdownThread(QtCore.QThread):
|
||||
# Senders
|
||||
|
|
@ -287,10 +313,12 @@ class CountdownThread(QtCore.QThread):
|
|||
|
||||
def __init__(self, parent):
|
||||
super(CountdownThread, self).__init__()
|
||||
|
||||
self.runs = True
|
||||
self.over_line = False
|
||||
self.count_length = 60*5 # 5 minutes
|
||||
self.border_line = 31
|
||||
config_data = self.load_timer_values()
|
||||
self.count_length = config_data['full_time']*60
|
||||
self.border_line = config_data['message_time']*60 + 1
|
||||
self.reset_count()
|
||||
self.signal_reset_timer.connect(self.reset_count)
|
||||
self.signal_continue_timer.connect(self.continue_timer)
|
||||
|
|
@ -335,6 +363,38 @@ class CountdownThread(QtCore.QThread):
|
|||
thread_keyboard.terminate()
|
||||
thread_keyboard.wait()
|
||||
|
||||
def load_timer_values(self):
|
||||
templates = os.environ['PYPE_STUDIO_TEMPLATES']
|
||||
path_items = [templates, 'presets', 'ftrack', 'ftrack_config.json']
|
||||
filepath = os.path.sep.join(path_items)
|
||||
data = dict()
|
||||
try:
|
||||
with open(filepath) as data_file:
|
||||
json_dict = json.load(data_file)
|
||||
data = json_dict['timer']
|
||||
except Exception as e:
|
||||
msg = 'Loading "Ftrack Config file" Failed. Please check log for more information. Times are set to default.'
|
||||
self.log.warning("{} - {}".format(msg, str(e)))
|
||||
|
||||
data = self.validate_timer_values(data)
|
||||
|
||||
return data
|
||||
|
||||
def validate_timer_values(self, data):
|
||||
# default values
|
||||
if 'full_time' not in data:
|
||||
data['full_time'] = 15
|
||||
if 'message_time' not in data:
|
||||
data['message_time'] = 0.5
|
||||
|
||||
# minimum values
|
||||
if data['full_time'] < 2:
|
||||
data['full_time'] = 2
|
||||
# message time is earlier that full time
|
||||
if data['message_time'] > data['full_time']:
|
||||
data['message_time'] = data['full_time'] - 0.5
|
||||
return data
|
||||
|
||||
|
||||
class MouseThread(QtCore.QThread):
|
||||
signal_stop = QtCore.Signal()
|
||||
|
|
@ -377,6 +437,7 @@ class KeyboardThread(QtCore.QThread):
|
|||
self.k_listener = keyboard.Listener(on_press=self.on_press)
|
||||
self.k_listener.start()
|
||||
|
||||
|
||||
class StopTimer(QtWidgets.QWidget):
|
||||
|
||||
SIZE_W = 300
|
||||
|
|
@ -419,31 +480,31 @@ class StopTimer(QtWidgets.QWidget):
|
|||
|
||||
msg_info = "You didn't work for a long time."
|
||||
msg_question = "Would you like to stop Ftrack timer?"
|
||||
msg_stopped = "Your Ftrack timer was stopped!"
|
||||
msg_stopped = "Your Ftrack timer was stopped. Do you want to start again?"
|
||||
|
||||
self.lbl_info = QtWidgets.QLabel(msg_info)
|
||||
self.lbl_info.setFont(self.font)
|
||||
self.lbl_info.setTextFormat(QtCore.Qt.RichText)
|
||||
self.lbl_info.setObjectName("lbl_info")
|
||||
self.lbl_info.setWordWrap(True);
|
||||
self.lbl_info.setWordWrap(True)
|
||||
|
||||
self.lbl_question = QtWidgets.QLabel(msg_question)
|
||||
self.lbl_question.setFont(self.font)
|
||||
self.lbl_question.setTextFormat(QtCore.Qt.RichText)
|
||||
self.lbl_question.setObjectName("lbl_question")
|
||||
self.lbl_question.setWordWrap(True);
|
||||
self.lbl_question.setWordWrap(True)
|
||||
|
||||
self.lbl_stopped = QtWidgets.QLabel(msg_stopped)
|
||||
self.lbl_stopped.setFont(self.font)
|
||||
self.lbl_stopped.setTextFormat(QtCore.Qt.RichText)
|
||||
self.lbl_stopped.setObjectName("lbl_stopped")
|
||||
self.lbl_stopped.setWordWrap(True);
|
||||
self.lbl_stopped.setWordWrap(True)
|
||||
|
||||
self.lbl_rest_time = QtWidgets.QLabel("")
|
||||
self.lbl_rest_time.setFont(self.font)
|
||||
self.lbl_rest_time.setTextFormat(QtCore.Qt.RichText)
|
||||
self.lbl_rest_time.setObjectName("lbl_rest_time")
|
||||
self.lbl_rest_time.setWordWrap(True);
|
||||
self.lbl_rest_time.setWordWrap(True)
|
||||
self.lbl_rest_time.setAlignment(QtCore.Qt.AlignCenter)
|
||||
|
||||
self.form.addRow(self.lbl_info)
|
||||
|
|
@ -463,13 +524,18 @@ class StopTimer(QtWidgets.QWidget):
|
|||
self.btn_continue.setToolTip('Timer will continue')
|
||||
self.btn_continue.clicked.connect(self.continue_timer)
|
||||
|
||||
self.btn_ok = QtWidgets.QPushButton("OK")
|
||||
self.btn_ok.setToolTip('Close window')
|
||||
self.btn_ok.clicked.connect(self.close_widget)
|
||||
self.btn_close = QtWidgets.QPushButton("Close")
|
||||
self.btn_close.setToolTip('Close window')
|
||||
self.btn_close.clicked.connect(self.close_widget)
|
||||
|
||||
self.btn_restart = QtWidgets.QPushButton("Start timer")
|
||||
self.btn_restart.setToolTip('Timer will be started again')
|
||||
self.btn_restart.clicked.connect(self.restart_timer)
|
||||
|
||||
self.group_btn.addWidget(self.btn_continue)
|
||||
self.group_btn.addWidget(self.btn_stop)
|
||||
self.group_btn.addWidget(self.btn_ok)
|
||||
self.group_btn.addWidget(self.btn_restart)
|
||||
self.group_btn.addWidget(self.btn_close)
|
||||
|
||||
self.main.addLayout(self.form)
|
||||
self.main.addLayout(self.group_btn)
|
||||
|
|
@ -483,12 +549,17 @@ class StopTimer(QtWidgets.QWidget):
|
|||
|
||||
self.btn_continue.setVisible(self.main_context)
|
||||
self.btn_stop.setVisible(self.main_context)
|
||||
self.btn_ok.setVisible(not self.main_context)
|
||||
self.btn_restart.setVisible(not self.main_context)
|
||||
self.btn_close.setVisible(not self.main_context)
|
||||
|
||||
def stop_timer(self):
|
||||
self.parent.timer_stop()
|
||||
self.close_widget()
|
||||
|
||||
def restart_timer(self):
|
||||
self.parent.timer_restart()
|
||||
self.close_widget()
|
||||
|
||||
def continue_timer(self):
|
||||
self.parent.timer_continue()
|
||||
self.close_widget()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue