mirror of
https://github.com/slgobinath/SafeEyes.git
synced 2024-12-27 00:02:36 +01:00
Add screen time to health stats
This commit is contained in:
parent
40aacdf642
commit
b08fd0e7a8
@ -20,6 +20,7 @@
|
|||||||
Show health statistics on the break screen.
|
Show health statistics on the break screen.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
context = None
|
context = None
|
||||||
@ -27,6 +28,8 @@ no_of_skipped_breaks = 0
|
|||||||
no_of_breaks = 0
|
no_of_breaks = 0
|
||||||
no_of_cycles = -1
|
no_of_cycles = -1
|
||||||
session = None
|
session = None
|
||||||
|
safe_eyes_start_time = datetime.datetime.now()
|
||||||
|
total_idle_time = 0
|
||||||
|
|
||||||
|
|
||||||
def init(ctx, safeeyes_config, plugin_config):
|
def init(ctx, safeeyes_config, plugin_config):
|
||||||
@ -43,7 +46,8 @@ def init(ctx, safeeyes_config, plugin_config):
|
|||||||
if session is None:
|
if session is None:
|
||||||
session = context['session']['plugin'].get('healthstats', None)
|
session = context['session']['plugin'].get('healthstats', None)
|
||||||
if session is None:
|
if session is None:
|
||||||
session = {'no_of_skipped_breaks': 0, 'no_of_breaks': 0, 'no_of_cycles': -1}
|
session = {'no_of_skipped_breaks': 0,
|
||||||
|
'no_of_breaks': 0, 'no_of_cycles': -1}
|
||||||
context['session']['plugin']['healthstats'] = session
|
context['session']['plugin']['healthstats'] = session
|
||||||
no_of_skipped_breaks = session.get('no_of_skipped_breaks', 0)
|
no_of_skipped_breaks = session.get('no_of_skipped_breaks', 0)
|
||||||
no_of_breaks = session.get('no_of_breaks', 0)
|
no_of_breaks = session.get('no_of_breaks', 0)
|
||||||
@ -78,4 +82,22 @@ def get_widget_content(break_obj):
|
|||||||
"""
|
"""
|
||||||
Return the statistics.
|
Return the statistics.
|
||||||
"""
|
"""
|
||||||
return 'BREAKS: {}\tSKIPPED: {}\tCYCLES: {}'.format(no_of_breaks, no_of_skipped_breaks, no_of_cycles)
|
screen_time = round(((datetime.datetime.now() - safe_eyes_start_time).total_seconds() - total_idle_time) / 60)
|
||||||
|
hours, minutes = divmod(screen_time, 60)
|
||||||
|
time_format = '{:02d}:{:02d}'.format(hours, minutes)
|
||||||
|
if hours > 6 or round((no_of_skipped_breaks / no_of_breaks), 1) >= 0.2:
|
||||||
|
# Unhealthy behavior -> Red broken heart
|
||||||
|
heart = '💔️'
|
||||||
|
else:
|
||||||
|
# Healthy behavior -> Green heart
|
||||||
|
heart = '💚'
|
||||||
|
return "{}\tBREAKS: {}\tSKIPPED: {}\tCYCLES: {}\tSCREEN TIME: {}".format(heart, no_of_breaks, no_of_skipped_breaks, no_of_cycles, time_format)
|
||||||
|
|
||||||
|
|
||||||
|
def on_start():
|
||||||
|
"""
|
||||||
|
Add the idle period to the total idle time.
|
||||||
|
"""
|
||||||
|
global total_idle_time
|
||||||
|
# idle_period is provided by Smart Pause plugin
|
||||||
|
total_idle_time += context.get('idle_period', 0)
|
||||||
|
@ -50,7 +50,8 @@ def __system_idle_time():
|
|||||||
Return the idle time if xprintidle is available, otherwise return 0.
|
Return the idle time if xprintidle is available, otherwise return 0.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
return int(subprocess.check_output(['xprintidle']).decode('utf-8')) / 1000 # Convert to seconds
|
# Convert to seconds
|
||||||
|
return int(subprocess.check_output(['xprintidle']).decode('utf-8')) / 1000
|
||||||
except BaseException:
|
except BaseException:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@ -95,7 +96,8 @@ def init(ctx, safeeyes_config, plugin_config):
|
|||||||
idle_time = plugin_config['idle_time']
|
idle_time = plugin_config['idle_time']
|
||||||
interpret_idle_as_break = plugin_config['interpret_idle_as_break']
|
interpret_idle_as_break = plugin_config['interpret_idle_as_break']
|
||||||
postpone_if_active = plugin_config['postpone_if_active']
|
postpone_if_active = plugin_config['postpone_if_active']
|
||||||
break_interval = safeeyes_config.get('short_break_interval') * 60 # Convert to seconds
|
break_interval = safeeyes_config.get(
|
||||||
|
'short_break_interval') * 60 # Convert to seconds
|
||||||
waiting_time = min(2, idle_time) # If idle time is 1 sec, wait only 1 sec
|
waiting_time = min(2, idle_time) # If idle time is 1 sec, wait only 1 sec
|
||||||
|
|
||||||
|
|
||||||
@ -124,6 +126,7 @@ def __start_idle_monitor():
|
|||||||
smart_pause_activated = False
|
smart_pause_activated = False
|
||||||
idle_period = (datetime.datetime.now() - idle_start_time)
|
idle_period = (datetime.datetime.now() - idle_start_time)
|
||||||
idle_seconds = idle_period.total_seconds()
|
idle_seconds = idle_period.total_seconds()
|
||||||
|
context['idle_period'] = idle_seconds
|
||||||
if interpret_idle_as_break and idle_seconds >= next_break_duration:
|
if interpret_idle_as_break and idle_seconds >= next_break_duration:
|
||||||
# User is idle for break duration and wants to consider it as a break
|
# User is idle for break duration and wants to consider it as a break
|
||||||
enable_safe_eyes()
|
enable_safe_eyes()
|
||||||
@ -134,6 +137,8 @@ def __start_idle_monitor():
|
|||||||
else:
|
else:
|
||||||
# User is idle for more than the time between two breaks
|
# User is idle for more than the time between two breaks
|
||||||
enable_safe_eyes()
|
enable_safe_eyes()
|
||||||
|
# Reset the idle_period in case if Smart Pause is disabled by the user
|
||||||
|
context['idle_period'] = 0
|
||||||
|
|
||||||
|
|
||||||
def on_start():
|
def on_start():
|
||||||
|
Loading…
Reference in New Issue
Block a user