Refactor modules and classes
This commit is contained in:
parent
9bcd0122ef
commit
5c554fffc1
|
@ -101,4 +101,7 @@ ENV/
|
||||||
|
|
||||||
safeeyes/config/locale/*/LC_MESSAGES/safeeyes.po~
|
safeeyes/config/locale/*/LC_MESSAGES/safeeyes.po~
|
||||||
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
.idea
|
|
@ -29,16 +29,16 @@ from threading import Timer
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
import psutil
|
import psutil
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
from safeeyes.model import Config
|
from safeeyes.model import Config
|
||||||
from safeeyes.SafeEyes import SafeEyes
|
from safeeyes.safeeyes import SafeEyes
|
||||||
from safeeyes.SafeEyes import SAFE_EYES_VERSION
|
from safeeyes.safeeyes import SAFE_EYES_VERSION
|
||||||
from safeeyes.rpc import RPCClient
|
from safeeyes.rpc import RPCClient
|
||||||
|
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
|
||||||
gettext.install('safeeyes', Utility.LOCALE_PATH)
|
gettext.install('safeeyes', utility.LOCALE_PATH)
|
||||||
|
|
||||||
|
|
||||||
def __running():
|
def __running():
|
||||||
|
@ -73,26 +73,26 @@ def __evaluate_arguments(args, safe_eyes):
|
||||||
Evaluate the arguments and execute the operations.
|
Evaluate the arguments and execute the operations.
|
||||||
"""
|
"""
|
||||||
if args.about:
|
if args.about:
|
||||||
Utility.execute_main_thread(safe_eyes.show_about)
|
utility.execute_main_thread(safe_eyes.show_about)
|
||||||
elif args.disable:
|
elif args.disable:
|
||||||
Utility.execute_main_thread(safe_eyes.disable_safeeyes)
|
utility.execute_main_thread(safe_eyes.disable_safeeyes)
|
||||||
elif args.enable:
|
elif args.enable:
|
||||||
Utility.execute_main_thread(safe_eyes.enable_safeeyes)
|
utility.execute_main_thread(safe_eyes.enable_safeeyes)
|
||||||
elif args.settings:
|
elif args.settings:
|
||||||
Utility.execute_main_thread(safe_eyes.show_settings)
|
utility.execute_main_thread(safe_eyes.show_settings)
|
||||||
elif args.take_break:
|
elif args.take_break:
|
||||||
Utility.execute_main_thread(safe_eyes.take_break)
|
utility.execute_main_thread(safe_eyes.take_break)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""
|
"""
|
||||||
Start the Safe Eyes.
|
Start the Safe Eyes.
|
||||||
"""
|
"""
|
||||||
system_locale = gettext.translation('safeeyes', localedir=Utility.LOCALE_PATH, languages=[Utility.system_locale(), 'en_US'], fallback=True)
|
system_locale = gettext.translation('safeeyes', localedir=utility.LOCALE_PATH, languages=[utility.system_locale(), 'en_US'], fallback=True)
|
||||||
system_locale.install()
|
system_locale.install()
|
||||||
# locale.bindtextdomain is required for Glade files
|
# locale.bindtextdomain is required for Glade files
|
||||||
# gettext.bindtextdomain(gettext.textdomain(), Utility.LOCALE_PATH)
|
# gettext.bindtextdomain(gettext.textdomain(), Utility.LOCALE_PATH)
|
||||||
locale.bindtextdomain('safeeyes', Utility.LOCALE_PATH)
|
locale.bindtextdomain('safeeyes', utility.LOCALE_PATH)
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(prog='safeeyes', description=_('description'))
|
parser = argparse.ArgumentParser(prog='safeeyes', description=_('description'))
|
||||||
group = parser.add_mutually_exclusive_group()
|
group = parser.add_mutually_exclusive_group()
|
||||||
|
@ -108,7 +108,7 @@ def main():
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Initialize the logging
|
# Initialize the logging
|
||||||
Utility.intialize_logging(args.debug)
|
utility.intialize_logging(args.debug)
|
||||||
config = Config()
|
config = Config()
|
||||||
|
|
||||||
if __running():
|
if __running():
|
||||||
|
@ -143,9 +143,9 @@ def main():
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
elif not args.quit:
|
elif not args.quit:
|
||||||
logging.info("Starting Safe Eyes")
|
logging.info("Starting Safe Eyes")
|
||||||
safeeyes = SafeEyes(system_locale, config)
|
safe_eyes = SafeEyes(system_locale, config)
|
||||||
safeeyes.start()
|
safe_eyes.start()
|
||||||
Timer(1.0, lambda: __evaluate_arguments(args, safeeyes)).start()
|
Timer(1.0, lambda: __evaluate_arguments(args, safe_eyes)).start()
|
||||||
Gtk.main()
|
Gtk.main()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ import logging
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
from safeeyes.model import Break
|
from safeeyes.model import Break
|
||||||
from safeeyes.model import BreakType
|
from safeeyes.model import BreakType
|
||||||
from safeeyes.model import BreakQueue
|
from safeeyes.model import BreakQueue
|
||||||
|
@ -33,7 +33,7 @@ from safeeyes.model import EventHook
|
||||||
from safeeyes.model import State
|
from safeeyes.model import State
|
||||||
|
|
||||||
|
|
||||||
class SafeEyesCore(object):
|
class SafeEyesCore:
|
||||||
"""
|
"""
|
||||||
Core of Safe Eyes runs the scheduler and notifies the breaks.
|
Core of Safe Eyes runs the scheduler and notifies the breaks.
|
||||||
"""
|
"""
|
||||||
|
@ -90,7 +90,7 @@ class SafeEyesCore(object):
|
||||||
logging.info("Start Safe Eyes core")
|
logging.info("Start Safe Eyes core")
|
||||||
self.running = True
|
self.running = True
|
||||||
self.scheduled_next_break_timestamp = int(next_break_time)
|
self.scheduled_next_break_timestamp = int(next_break_time)
|
||||||
Utility.start_thread(self.__scheduler_job)
|
utility.start_thread(self.__scheduler_job)
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""
|
"""
|
||||||
|
@ -135,7 +135,7 @@ class SafeEyesCore(object):
|
||||||
return
|
return
|
||||||
if not self.context['state'] == State.WAITING:
|
if not self.context['state'] == State.WAITING:
|
||||||
return
|
return
|
||||||
Utility.start_thread(self.__take_break)
|
utility.start_thread(self.__take_break)
|
||||||
|
|
||||||
def has_breaks(self):
|
def has_breaks(self):
|
||||||
"""
|
"""
|
||||||
|
@ -163,7 +163,7 @@ class SafeEyesCore(object):
|
||||||
time.sleep(1) # Wait for 1 sec to ensure the sceduler is dead
|
time.sleep(1) # Wait for 1 sec to ensure the sceduler is dead
|
||||||
self.running = True
|
self.running = True
|
||||||
|
|
||||||
Utility.execute_main_thread(self.__fire_start_break)
|
utility.execute_main_thread(self.__fire_start_break)
|
||||||
|
|
||||||
def __scheduler_job(self):
|
def __scheduler_job(self):
|
||||||
"""
|
"""
|
||||||
|
@ -198,7 +198,7 @@ class SafeEyesCore(object):
|
||||||
self.scheduled_next_break_timestamp = -1
|
self.scheduled_next_break_timestamp = -1
|
||||||
|
|
||||||
self.scheduled_next_break_time = current_time + datetime.timedelta(seconds=time_to_wait)
|
self.scheduled_next_break_time = current_time + datetime.timedelta(seconds=time_to_wait)
|
||||||
Utility.execute_main_thread(self.__fire_on_update_next_break, self.scheduled_next_break_time)
|
utility.execute_main_thread(self.__fire_on_update_next_break, self.scheduled_next_break_time)
|
||||||
|
|
||||||
# Wait for the pre break warning period
|
# Wait for the pre break warning period
|
||||||
logging.info("Waiting for %d minutes until next break", (time_to_wait / 60))
|
logging.info("Waiting for %d minutes until next break", (time_to_wait / 60))
|
||||||
|
@ -208,7 +208,7 @@ class SafeEyesCore(object):
|
||||||
|
|
||||||
if not self.running:
|
if not self.running:
|
||||||
return
|
return
|
||||||
Utility.execute_main_thread(self.__fire_pre_break)
|
utility.execute_main_thread(self.__fire_pre_break)
|
||||||
|
|
||||||
def __fire_on_update_next_break(self, next_break_time):
|
def __fire_on_update_next_break(self, next_break_time):
|
||||||
"""
|
"""
|
||||||
|
@ -225,7 +225,7 @@ class SafeEyesCore(object):
|
||||||
# Plugins wanted to ignore this break
|
# Plugins wanted to ignore this break
|
||||||
self.__start_next_break()
|
self.__start_next_break()
|
||||||
return
|
return
|
||||||
Utility.start_thread(self.__wait_until_prepare)
|
utility.start_thread(self.__wait_until_prepare)
|
||||||
|
|
||||||
def __wait_until_prepare(self):
|
def __wait_until_prepare(self):
|
||||||
logging.info("Wait for %d seconds before the break", self.pre_break_warning_time)
|
logging.info("Wait for %d seconds before the break", self.pre_break_warning_time)
|
||||||
|
@ -233,11 +233,11 @@ class SafeEyesCore(object):
|
||||||
self.__wait_for(self.pre_break_warning_time)
|
self.__wait_for(self.pre_break_warning_time)
|
||||||
if not self.running:
|
if not self.running:
|
||||||
return
|
return
|
||||||
Utility.execute_main_thread(self.__fire_start_break)
|
utility.execute_main_thread(self.__fire_start_break)
|
||||||
|
|
||||||
def __postpone_break(self):
|
def __postpone_break(self):
|
||||||
self.__wait_for(self.postpone_duration)
|
self.__wait_for(self.postpone_duration)
|
||||||
Utility.execute_main_thread(self.__fire_start_break)
|
utility.execute_main_thread(self.__fire_start_break)
|
||||||
|
|
||||||
def __fire_start_break(self):
|
def __fire_start_break(self):
|
||||||
# Show the break screen
|
# Show the break screen
|
||||||
|
@ -252,10 +252,10 @@ class SafeEyesCore(object):
|
||||||
self.scheduled_next_break_time = self.scheduled_next_break_time + datetime.timedelta(seconds=self.postpone_duration)
|
self.scheduled_next_break_time = self.scheduled_next_break_time + datetime.timedelta(seconds=self.postpone_duration)
|
||||||
self.__fire_on_update_next_break(self.scheduled_next_break_time)
|
self.__fire_on_update_next_break(self.scheduled_next_break_time)
|
||||||
# Wait in user thread
|
# Wait in user thread
|
||||||
Utility.start_thread(self.__postpone_break)
|
utility.start_thread(self.__postpone_break)
|
||||||
else:
|
else:
|
||||||
self.start_break.fire(self.break_queue.get_break())
|
self.start_break.fire(self.break_queue.get_break())
|
||||||
Utility.start_thread(self.__start_break)
|
utility.start_thread(self.__start_break)
|
||||||
|
|
||||||
def __start_break(self):
|
def __start_break(self):
|
||||||
"""
|
"""
|
||||||
|
@ -271,7 +271,7 @@ class SafeEyesCore(object):
|
||||||
self.on_count_down.fire(countdown, seconds)
|
self.on_count_down.fire(countdown, seconds)
|
||||||
time.sleep(1) # Sleep for 1 second
|
time.sleep(1) # Sleep for 1 second
|
||||||
countdown -= 1
|
countdown -= 1
|
||||||
Utility.execute_main_thread(self.__fire_stop_break)
|
utility.execute_main_thread(self.__fire_stop_break)
|
||||||
|
|
||||||
def __fire_stop_break(self):
|
def __fire_stop_break(self):
|
||||||
# Loop terminated because of timeout (not skipped) -> Close the break alert
|
# Loop terminated because of timeout (not skipped) -> Close the break alert
|
||||||
|
@ -297,4 +297,4 @@ class SafeEyesCore(object):
|
||||||
|
|
||||||
if self.running:
|
if self.running:
|
||||||
# Schedule the break again
|
# Schedule the break again
|
||||||
Utility.start_thread(self.__scheduler_job)
|
utility.start_thread(self.__scheduler_job)
|
|
@ -23,10 +23,10 @@ This module contains the entity classes used by Safe Eyes and its plugins.
|
||||||
from distutils.version import LooseVersion
|
from distutils.version import LooseVersion
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
import logging
|
import logging
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
|
|
||||||
|
|
||||||
class Break(object):
|
class Break:
|
||||||
"""
|
"""
|
||||||
An entity class which represents a break.
|
An entity class which represents a break.
|
||||||
"""
|
"""
|
||||||
|
@ -76,7 +76,7 @@ class BreakType(Enum):
|
||||||
LONG_BREAK = 2
|
LONG_BREAK = 2
|
||||||
|
|
||||||
|
|
||||||
class BreakQueue(object):
|
class BreakQueue:
|
||||||
|
|
||||||
def __init__(self, config, context):
|
def __init__(self, config, context):
|
||||||
self.context = context
|
self.context = context
|
||||||
|
@ -203,7 +203,7 @@ class State(Enum):
|
||||||
QUIT = 5
|
QUIT = 5
|
||||||
|
|
||||||
|
|
||||||
class EventHook(object):
|
class EventHook:
|
||||||
"""
|
"""
|
||||||
Hook to attach and detach listeners to system events.
|
Hook to attach and detach listeners to system events.
|
||||||
"""
|
"""
|
||||||
|
@ -229,21 +229,21 @@ class EventHook(object):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
class Config(object):
|
class Config:
|
||||||
"""
|
"""
|
||||||
The configuration of Safe Eyes.
|
The configuration of Safe Eyes.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, init=True):
|
def __init__(self, init=True):
|
||||||
# Read the config files
|
# Read the config files
|
||||||
self.__user_config = Utility.load_json(Utility.CONFIG_FILE_PATH)
|
self.__user_config = utility.load_json(utility.CONFIG_FILE_PATH)
|
||||||
self.__system_config = Utility.load_json(
|
self.__system_config = utility.load_json(
|
||||||
Utility.SYSTEM_CONFIG_FILE_PATH)
|
utility.SYSTEM_CONFIG_FILE_PATH)
|
||||||
self.__force_upgrade = ['long_breaks', 'short_breaks']
|
self.__force_upgrade = ['long_breaks', 'short_breaks']
|
||||||
|
|
||||||
if init:
|
if init:
|
||||||
if self.__user_config is None:
|
if self.__user_config is None:
|
||||||
Utility.initialize_safeeyes()
|
utility.initialize_safeeyes()
|
||||||
self.__user_config = self.__system_config
|
self.__user_config = self.__system_config
|
||||||
self.save()
|
self.save()
|
||||||
else:
|
else:
|
||||||
|
@ -261,9 +261,9 @@ class Config(object):
|
||||||
self.__user_config, self.__system_config)
|
self.__user_config, self.__system_config)
|
||||||
self.__user_config = self.__system_config
|
self.__user_config = self.__system_config
|
||||||
# Update the style sheet
|
# Update the style sheet
|
||||||
Utility.replace_style_sheet()
|
utility.replace_style_sheet()
|
||||||
|
|
||||||
Utility.merge_plugins(self.__user_config)
|
utility.merge_plugins(self.__user_config)
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def __merge_dictionary(self, old_dict, new_dict):
|
def __merge_dictionary(self, old_dict, new_dict):
|
||||||
|
@ -291,7 +291,7 @@ class Config(object):
|
||||||
"""
|
"""
|
||||||
Save the configuration to file.
|
Save the configuration to file.
|
||||||
"""
|
"""
|
||||||
Utility.write_json(Utility.CONFIG_FILE_PATH, self.__user_config)
|
utility.write_json(utility.CONFIG_FILE_PATH, self.__user_config)
|
||||||
|
|
||||||
def get(self, key, default_value=None):
|
def get(self, key, default_value=None):
|
||||||
"""
|
"""
|
||||||
|
@ -315,7 +315,7 @@ class Config(object):
|
||||||
return self.__user_config != config.__user_config
|
return self.__user_config != config.__user_config
|
||||||
|
|
||||||
|
|
||||||
class TrayAction(object):
|
class TrayAction:
|
||||||
"""
|
"""
|
||||||
Data object wrapping name, icon and action.
|
Data object wrapping name, icon and action.
|
||||||
"""
|
"""
|
||||||
|
@ -331,7 +331,7 @@ class TrayAction(object):
|
||||||
if self.system_icon:
|
if self.system_icon:
|
||||||
return self.__icon
|
return self.__icon
|
||||||
else:
|
else:
|
||||||
image = Utility.load_and_scale_image(self.__icon, 16, 16)
|
image = utility.load_and_scale_image(self.__icon, 16, 16)
|
||||||
image.show()
|
image.show()
|
||||||
return image
|
return image
|
||||||
|
|
||||||
|
@ -345,7 +345,7 @@ class TrayAction(object):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def build(cls, name, icon_path, icon_id, action):
|
def build(cls, name, icon_path, icon_id, action):
|
||||||
image = Utility.load_and_scale_image(icon_path, 12, 12)
|
image = utility.load_and_scale_image(icon_path, 12, 12)
|
||||||
if image is None:
|
if image is None:
|
||||||
return TrayAction(name, icon_id, action, True)
|
return TrayAction(name, icon_id, action, True)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -47,15 +47,15 @@ import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
|
|
||||||
sys.path.append(os.path.abspath(Utility.SYSTEM_PLUGINS_DIR))
|
sys.path.append(os.path.abspath(utility.SYSTEM_PLUGINS_DIR))
|
||||||
sys.path.append(os.path.abspath(Utility.USER_PLUGINS_DIR))
|
sys.path.append(os.path.abspath(utility.USER_PLUGINS_DIR))
|
||||||
|
|
||||||
HORIZONTAL_LINE_LENGTH = 64
|
HORIZONTAL_LINE_LENGTH = 64
|
||||||
|
|
||||||
|
|
||||||
class PluginManager(object):
|
class PluginManager:
|
||||||
"""
|
"""
|
||||||
Imports the Safe Eyes plugins and calls the methods defined in those plugins.
|
Imports the Safe Eyes plugins and calls the methods defined in those plugins.
|
||||||
"""
|
"""
|
||||||
|
@ -246,10 +246,10 @@ class PluginManager(object):
|
||||||
|
|
||||||
# Look for plugin.py
|
# Look for plugin.py
|
||||||
plugin_dir = None
|
plugin_dir = None
|
||||||
if os.path.isfile(os.path.join(Utility.SYSTEM_PLUGINS_DIR, plugin['id'], 'plugin.py')):
|
if os.path.isfile(os.path.join(utility.SYSTEM_PLUGINS_DIR, plugin['id'], 'plugin.py')):
|
||||||
plugin_dir = Utility.SYSTEM_PLUGINS_DIR
|
plugin_dir = utility.SYSTEM_PLUGINS_DIR
|
||||||
elif os.path.isfile(os.path.join(Utility.USER_PLUGINS_DIR, plugin['id'], 'plugin.py')):
|
elif os.path.isfile(os.path.join(utility.USER_PLUGINS_DIR, plugin['id'], 'plugin.py')):
|
||||||
plugin_dir = Utility.USER_PLUGINS_DIR
|
plugin_dir = utility.USER_PLUGINS_DIR
|
||||||
else:
|
else:
|
||||||
logging.error('plugin.py not found for the plugin: %s', plugin['id'])
|
logging.error('plugin.py not found for the plugin: %s', plugin['id'])
|
||||||
return
|
return
|
||||||
|
@ -259,7 +259,7 @@ class PluginManager(object):
|
||||||
if not os.path.isfile(plugin_config_path):
|
if not os.path.isfile(plugin_config_path):
|
||||||
logging.error('config.json not found for the plugin: %s', plugin['id'])
|
logging.error('config.json not found for the plugin: %s', plugin['id'])
|
||||||
return
|
return
|
||||||
plugin_config = Utility.load_json(plugin_config_path)
|
plugin_config = utility.load_json(plugin_config_path)
|
||||||
if plugin_config is None:
|
if plugin_config is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -292,7 +292,7 @@ class PluginManager(object):
|
||||||
else:
|
else:
|
||||||
# This is the first time to load the plugin
|
# This is the first time to load the plugin
|
||||||
# Check for dependencies
|
# Check for dependencies
|
||||||
if Utility.check_plugin_dependencies(plugin['id'], plugin_config, plugin_path):
|
if utility.check_plugin_dependencies(plugin['id'], plugin_config, plugin_path):
|
||||||
return
|
return
|
||||||
|
|
||||||
# Load the plugin module
|
# Load the plugin module
|
|
@ -21,7 +21,7 @@ Audible Alert plugin plays a sound after each breaks to notify the user that the
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
|
|
||||||
context = None
|
context = None
|
||||||
pre_break_alert = False
|
pre_break_alert = False
|
||||||
|
@ -37,10 +37,10 @@ def play_sound(resource_name):
|
||||||
logging.info('Playing audible alert %s', resource_name)
|
logging.info('Playing audible alert %s', resource_name)
|
||||||
try:
|
try:
|
||||||
# Open the sound file
|
# Open the sound file
|
||||||
path = Utility.get_resource_path(resource_name)
|
path = utility.get_resource_path(resource_name)
|
||||||
if path is None:
|
if path is None:
|
||||||
return
|
return
|
||||||
Utility.execute_command('aplay', ['-q', path])
|
utility.execute_command('aplay', ['-q', path])
|
||||||
|
|
||||||
except BaseException:
|
except BaseException:
|
||||||
logging.error('Failed to play audible alert %s', resource_name)
|
logging.error('Failed to play audible alert %s', resource_name)
|
||||||
|
|
|
@ -24,7 +24,7 @@ import gi
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
from safeeyes.model import TrayAction
|
from safeeyes.model import TrayAction
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
@ -54,23 +54,23 @@ def __lock_screen_command():
|
||||||
current_desktop = os.environ.get('XDG_CURRENT_DESKTOP')
|
current_desktop = os.environ.get('XDG_CURRENT_DESKTOP')
|
||||||
if desktop_session is not None:
|
if desktop_session is not None:
|
||||||
desktop_session = desktop_session.lower()
|
desktop_session = desktop_session.lower()
|
||||||
if ('xfce' in desktop_session or desktop_session.startswith('xubuntu') or (current_desktop is not None and 'xfce' in current_desktop)) and Utility.command_exist('xflock4'):
|
if ('xfce' in desktop_session or desktop_session.startswith('xubuntu') or (current_desktop is not None and 'xfce' in current_desktop)) and utility.command_exist('xflock4'):
|
||||||
return ['xflock4']
|
return ['xflock4']
|
||||||
elif desktop_session == 'cinnamon' and Utility.command_exist('cinnamon-screensaver-command'):
|
elif desktop_session == 'cinnamon' and utility.command_exist('cinnamon-screensaver-command'):
|
||||||
return ['cinnamon-screensaver-command', '--lock']
|
return ['cinnamon-screensaver-command', '--lock']
|
||||||
elif (desktop_session == 'pantheon' or desktop_session.startswith('lubuntu')) and Utility.command_exist('light-locker-command'):
|
elif (desktop_session == 'pantheon' or desktop_session.startswith('lubuntu')) and utility.command_exist('light-locker-command'):
|
||||||
return ['light-locker-command', '--lock']
|
return ['light-locker-command', '--lock']
|
||||||
elif desktop_session == 'mate' and Utility.command_exist('mate-screensaver-command'):
|
elif desktop_session == 'mate' and utility.command_exist('mate-screensaver-command'):
|
||||||
return ['mate-screensaver-command', '--lock']
|
return ['mate-screensaver-command', '--lock']
|
||||||
elif desktop_session == 'kde' or 'plasma' in desktop_session or desktop_session.startswith('kubuntu') or os.environ.get('KDE_FULL_SESSION') == 'true':
|
elif desktop_session == 'kde' or 'plasma' in desktop_session or desktop_session.startswith('kubuntu') or os.environ.get('KDE_FULL_SESSION') == 'true':
|
||||||
return ['qdbus', 'org.freedesktop.ScreenSaver', '/ScreenSaver', 'Lock']
|
return ['qdbus', 'org.freedesktop.ScreenSaver', '/ScreenSaver', 'Lock']
|
||||||
elif desktop_session in ['gnome', 'unity', 'budgie-desktop'] or desktop_session.startswith('ubuntu'):
|
elif desktop_session in ['gnome', 'unity', 'budgie-desktop'] or desktop_session.startswith('ubuntu'):
|
||||||
if Utility.command_exist('gnome-screensaver-command'):
|
if utility.command_exist('gnome-screensaver-command'):
|
||||||
return ['gnome-screensaver-command', '--lock']
|
return ['gnome-screensaver-command', '--lock']
|
||||||
# From Gnome 3.8 no gnome-screensaver-command
|
# From Gnome 3.8 no gnome-screensaver-command
|
||||||
return ['dbus-send', '--type=method_call', '--dest=org.gnome.ScreenSaver', '/org/gnome/ScreenSaver', 'org.gnome.ScreenSaver.Lock']
|
return ['dbus-send', '--type=method_call', '--dest=org.gnome.ScreenSaver', '/org/gnome/ScreenSaver', 'org.gnome.ScreenSaver.Lock']
|
||||||
elif os.environ.get('GNOME_DESKTOP_SESSION_ID'):
|
elif os.environ.get('GNOME_DESKTOP_SESSION_ID'):
|
||||||
if 'deprecated' not in os.environ.get('GNOME_DESKTOP_SESSION_ID') and Utility.command_exist('gnome-screensaver-command'):
|
if 'deprecated' not in os.environ.get('GNOME_DESKTOP_SESSION_ID') and utility.command_exist('gnome-screensaver-command'):
|
||||||
# Gnome 2
|
# Gnome 2
|
||||||
return ['gnome-screensaver-command', '--lock']
|
return ['gnome-screensaver-command', '--lock']
|
||||||
return None
|
return None
|
||||||
|
@ -125,7 +125,7 @@ def on_stop_break():
|
||||||
Lock the screen after a long break if the user has not skipped within min_seconds.
|
Lock the screen after a long break if the user has not skipped within min_seconds.
|
||||||
"""
|
"""
|
||||||
if user_locked_screen or (lock_screen and seconds_passed >= min_seconds):
|
if user_locked_screen or (lock_screen and seconds_passed >= min_seconds):
|
||||||
Utility.execute_command(lock_screen_command)
|
utility.execute_command(lock_screen_command)
|
||||||
|
|
||||||
|
|
||||||
def get_tray_action(break_obj):
|
def get_tray_action(break_obj):
|
||||||
|
|
|
@ -16,16 +16,16 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
|
|
||||||
|
|
||||||
def validate(plugin_config):
|
def validate(plugin_config):
|
||||||
command = None
|
command = None
|
||||||
if Utility.DESKTOP_ENVIRONMENT == "gnome" and Utility.IS_WAYLAND:
|
if utility.DESKTOP_ENVIRONMENT == "gnome" and utility.IS_WAYLAND:
|
||||||
command = "dbus-send"
|
command = "dbus-send"
|
||||||
else:
|
else:
|
||||||
command = "xprintidle"
|
command = "xprintidle"
|
||||||
if not Utility.command_exist(command):
|
if not utility.command_exist(command):
|
||||||
return _("Please install the command-line tool '%s'") % command
|
return _("Please install the command-line tool '%s'") % command
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -23,7 +23,7 @@ import threading
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
from safeeyes.model import State
|
from safeeyes.model import State
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -176,7 +176,7 @@ def on_start():
|
||||||
# If SmartPause is already started, do not start it again
|
# If SmartPause is already started, do not start it again
|
||||||
logging.debug('Start Smart Pause plugin')
|
logging.debug('Start Smart Pause plugin')
|
||||||
__set_active(True)
|
__set_active(True)
|
||||||
Utility.start_thread(__start_idle_monitor)
|
utility.start_thread(__start_idle_monitor)
|
||||||
|
|
||||||
|
|
||||||
def on_stop():
|
def on_stop():
|
||||||
|
|
|
@ -23,7 +23,7 @@ gi.require_version('AppIndicator3', '0.1')
|
||||||
from gi.repository import AppIndicator3 as appindicator
|
from gi.repository import AppIndicator3 as appindicator
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import logging
|
import logging
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ tray_icon = None
|
||||||
safeeyes_config = None
|
safeeyes_config = None
|
||||||
|
|
||||||
|
|
||||||
class TrayIcon(object):
|
class TrayIcon:
|
||||||
"""
|
"""
|
||||||
Create and show the tray icon along with the tray menu.
|
Create and show the tray icon along with the tray menu.
|
||||||
"""
|
"""
|
||||||
|
@ -193,7 +193,7 @@ class TrayIcon(object):
|
||||||
self.indicator.set_icon("safeeyes_enabled")
|
self.indicator.set_icon("safeeyes_enabled")
|
||||||
else:
|
else:
|
||||||
if self.wakeup_time:
|
if self.wakeup_time:
|
||||||
self.item_info.set_label(_('Disabled until %s') % Utility.format_time(self.wakeup_time))
|
self.item_info.set_label(_('Disabled until %s') % utility.format_time(self.wakeup_time))
|
||||||
else:
|
else:
|
||||||
self.item_info.set_label(_('Disabled until restart'))
|
self.item_info.set_label(_('Disabled until restart'))
|
||||||
self.indicator.set_label('', '')
|
self.indicator.set_label('', '')
|
||||||
|
@ -263,10 +263,10 @@ class TrayIcon(object):
|
||||||
"""
|
"""
|
||||||
A private method to be called within this class to update the next break information using self.dateTime.
|
A private method to be called within this class to update the next break information using self.dateTime.
|
||||||
"""
|
"""
|
||||||
formatted_time = Utility.format_time(self.date_time)
|
formatted_time = utility.format_time(self.date_time)
|
||||||
message = _('Next break at %s') % (formatted_time)
|
message = _('Next break at %s') % (formatted_time)
|
||||||
# Update the menu item label
|
# Update the menu item label
|
||||||
Utility.execute_main_thread(self.item_info.set_label, message)
|
utility.execute_main_thread(self.item_info.set_label, message)
|
||||||
# Update the tray icon label
|
# Update the tray icon label
|
||||||
if self.plugin_config.get('show_time_in_tray', False):
|
if self.plugin_config.get('show_time_in_tray', False):
|
||||||
self.indicator.set_label(formatted_time, '')
|
self.indicator.set_label(formatted_time, '')
|
||||||
|
@ -311,10 +311,10 @@ class TrayIcon(object):
|
||||||
self.item_info.set_label(info)
|
self.item_info.set_label(info)
|
||||||
else:
|
else:
|
||||||
self.wakeup_time = datetime.datetime.now() + datetime.timedelta(minutes=time_to_wait)
|
self.wakeup_time = datetime.datetime.now() + datetime.timedelta(minutes=time_to_wait)
|
||||||
info = _('Disabled until %s') % Utility.format_time(self.wakeup_time)
|
info = _('Disabled until %s') % utility.format_time(self.wakeup_time)
|
||||||
self.on_disable(info)
|
self.on_disable(info)
|
||||||
self.item_info.set_label(info)
|
self.item_info.set_label(info)
|
||||||
Utility.start_thread(self.__schedule_resume, time_minutes=time_to_wait)
|
utility.start_thread(self.__schedule_resume, time_minutes=time_to_wait)
|
||||||
|
|
||||||
def lock_menu(self):
|
def lock_menu(self):
|
||||||
"""
|
"""
|
||||||
|
@ -368,25 +368,25 @@ class TrayIcon(object):
|
||||||
|
|
||||||
with self.lock:
|
with self.lock:
|
||||||
if not self.active:
|
if not self.active:
|
||||||
Utility.execute_main_thread(self.item_enable.activate)
|
utility.execute_main_thread(self.item_enable.activate)
|
||||||
|
|
||||||
def start_animation(self):
|
def start_animation(self):
|
||||||
if not self.active or not self.animate:
|
if not self.active or not self.animate:
|
||||||
return
|
return
|
||||||
Utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_disabled"))
|
utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_disabled"))
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
Utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_enabled"))
|
utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_enabled"))
|
||||||
if self.animate and self.active:
|
if self.animate and self.active:
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
if self.animate and self.active:
|
if self.animate and self.active:
|
||||||
Utility.start_thread(self.start_animation)
|
utility.start_thread(self.start_animation)
|
||||||
|
|
||||||
def stop_animation(self):
|
def stop_animation(self):
|
||||||
self.animate = False
|
self.animate = False
|
||||||
if self.active:
|
if self.active:
|
||||||
Utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_enabled"))
|
utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_enabled"))
|
||||||
else:
|
else:
|
||||||
Utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_disabled"))
|
utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_disabled"))
|
||||||
|
|
||||||
def init(ctx, safeeyes_cfg, plugin_config):
|
def init(ctx, safeeyes_cfg, plugin_config):
|
||||||
"""
|
"""
|
||||||
|
@ -429,7 +429,7 @@ def __unlock_menu():
|
||||||
"""
|
"""
|
||||||
Unlock the menu
|
Unlock the menu
|
||||||
"""
|
"""
|
||||||
Utility.execute_main_thread(tray_icon.unlock_menu)
|
utility.execute_main_thread(tray_icon.unlock_menu)
|
||||||
|
|
||||||
|
|
||||||
def on_start():
|
def on_start():
|
||||||
|
|
|
@ -26,7 +26,7 @@ from xmlrpc.server import SimpleXMLRPCServer
|
||||||
from xmlrpc.client import ServerProxy
|
from xmlrpc.client import ServerProxy
|
||||||
|
|
||||||
|
|
||||||
class RPCServer(object):
|
class RPCServer:
|
||||||
"""
|
"""
|
||||||
An aynchronous RPC server.
|
An aynchronous RPC server.
|
||||||
"""
|
"""
|
||||||
|
@ -62,7 +62,7 @@ class RPCServer(object):
|
||||||
self.__server.shutdown()
|
self.__server.shutdown()
|
||||||
|
|
||||||
|
|
||||||
class RPCClient(object):
|
class RPCClient:
|
||||||
"""
|
"""
|
||||||
An RPC client to communicate with the RPC server.
|
An RPC client to communicate with the RPC server.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -28,14 +28,14 @@ from threading import Timer
|
||||||
import dbus
|
import dbus
|
||||||
import gi
|
import gi
|
||||||
from dbus.mainloop.glib import DBusGMainLoop
|
from dbus.mainloop.glib import DBusGMainLoop
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
from safeeyes.AboutDialog import AboutDialog
|
from safeeyes.ui.about_dialog import AboutDialog
|
||||||
from safeeyes.BreakScreen import BreakScreen
|
from safeeyes.ui.break_screen import BreakScreen
|
||||||
from safeeyes.model import State
|
from safeeyes.model import State
|
||||||
from safeeyes.rpc import RPCServer
|
from safeeyes.rpc import RPCServer
|
||||||
from safeeyes.PluginManager import PluginManager
|
from safeeyes.plugin_manager import PluginManager
|
||||||
from safeeyes.SafeEyesCore import SafeEyesCore
|
from safeeyes.core import SafeEyesCore
|
||||||
from safeeyes.settings import SettingsDialog
|
from safeeyes.ui.settings_dialog import SettingsDialog
|
||||||
|
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
@ -43,7 +43,7 @@ from gi.repository import Gtk
|
||||||
SAFE_EYES_VERSION = "2.0.9"
|
SAFE_EYES_VERSION = "2.0.9"
|
||||||
|
|
||||||
|
|
||||||
class SafeEyes(object):
|
class SafeEyes:
|
||||||
"""
|
"""
|
||||||
This class represents a runnable Safe Eyes instance.
|
This class represents a runnable Safe Eyes instance.
|
||||||
"""
|
"""
|
||||||
|
@ -61,28 +61,28 @@ class SafeEyes(object):
|
||||||
|
|
||||||
# Initialize the Safe Eyes Context
|
# Initialize the Safe Eyes Context
|
||||||
self.context['version'] = SAFE_EYES_VERSION
|
self.context['version'] = SAFE_EYES_VERSION
|
||||||
self.context['desktop'] = Utility.desktop_environment()
|
self.context['desktop'] = utility.desktop_environment()
|
||||||
self.context['is_wayland'] = Utility.is_wayland()
|
self.context['is_wayland'] = utility.is_wayland()
|
||||||
self.context['locale'] = system_locale
|
self.context['locale'] = system_locale
|
||||||
self.context['api'] = {}
|
self.context['api'] = {}
|
||||||
self.context['api']['show_settings'] = lambda: Utility.execute_main_thread(
|
self.context['api']['show_settings'] = lambda: utility.execute_main_thread(
|
||||||
self.show_settings)
|
self.show_settings)
|
||||||
self.context['api']['show_about'] = lambda: Utility.execute_main_thread(
|
self.context['api']['show_about'] = lambda: utility.execute_main_thread(
|
||||||
self.show_about)
|
self.show_about)
|
||||||
self.context['api']['enable_safeeyes'] = lambda next_break_time=- \
|
self.context['api']['enable_safeeyes'] = lambda next_break_time=- \
|
||||||
1: Utility.execute_main_thread(self.enable_safeeyes, next_break_time)
|
1: utility.execute_main_thread(self.enable_safeeyes, next_break_time)
|
||||||
self.context['api']['disable_safeeyes'] = lambda status: Utility.execute_main_thread(
|
self.context['api']['disable_safeeyes'] = lambda status: utility.execute_main_thread(
|
||||||
self.disable_safeeyes, status)
|
self.disable_safeeyes, status)
|
||||||
self.context['api']['status'] = self.status
|
self.context['api']['status'] = self.status
|
||||||
self.context['api']['quit'] = lambda: Utility.execute_main_thread(
|
self.context['api']['quit'] = lambda: utility.execute_main_thread(
|
||||||
self.quit)
|
self.quit)
|
||||||
if self.config.get('persist_state'):
|
if self.config.get('persist_state'):
|
||||||
self.context['session'] = Utility.open_session()
|
self.context['session'] = utility.open_session()
|
||||||
else:
|
else:
|
||||||
self.context['session'] = {'plugin': {}}
|
self.context['session'] = {'plugin': {}}
|
||||||
|
|
||||||
self.break_screen = BreakScreen(
|
self.break_screen = BreakScreen(
|
||||||
self.context, self.on_skipped, self.on_postponed, Utility.STYLE_SHEET_PATH)
|
self.context, self.on_skipped, self.on_postponed, utility.STYLE_SHEET_PATH)
|
||||||
self.break_screen.initialize(self.config)
|
self.break_screen.initialize(self.config)
|
||||||
self.plugins_manager = PluginManager(self.context, self.config)
|
self.plugins_manager = PluginManager(self.context, self.config)
|
||||||
self.safe_eyes_core = SafeEyesCore(self.context)
|
self.safe_eyes_core = SafeEyesCore(self.context)
|
||||||
|
@ -93,7 +93,7 @@ class SafeEyes(object):
|
||||||
self.safe_eyes_core.on_stop_break += self.stop_break
|
self.safe_eyes_core.on_stop_break += self.stop_break
|
||||||
self.safe_eyes_core.on_update_next_break += self.update_next_break
|
self.safe_eyes_core.on_update_next_break += self.update_next_break
|
||||||
self.safe_eyes_core.initialize(self.config)
|
self.safe_eyes_core.initialize(self.config)
|
||||||
self.context['api']['take_break'] = lambda: Utility.execute_main_thread(
|
self.context['api']['take_break'] = lambda: utility.execute_main_thread(
|
||||||
self.safe_eyes_core.take_break)
|
self.safe_eyes_core.take_break)
|
||||||
self.context['api']['has_breaks'] = self.safe_eyes_core.has_breaks
|
self.context['api']['has_breaks'] = self.safe_eyes_core.has_breaks
|
||||||
self.context['api']['postpone'] = self.safe_eyes_core.postpone
|
self.context['api']['postpone'] = self.safe_eyes_core.postpone
|
||||||
|
@ -282,9 +282,9 @@ class SafeEyes(object):
|
||||||
"""
|
"""
|
||||||
self.plugins_manager.update_next_break(break_obj, break_time)
|
self.plugins_manager.update_next_break(break_obj, break_time)
|
||||||
self._status = _('Next break at %s') % (
|
self._status = _('Next break at %s') % (
|
||||||
Utility.format_time(break_time))
|
utility.format_time(break_time))
|
||||||
if self.config.get('persist_state'):
|
if self.config.get('persist_state'):
|
||||||
Utility.write_json(Utility.SESSION_FILE_PATH,
|
utility.write_json(utility.SESSION_FILE_PATH,
|
||||||
self.context['session'])
|
self.context['session'])
|
||||||
|
|
||||||
def stop_break(self):
|
def stop_break(self):
|
||||||
|
@ -312,10 +312,10 @@ class SafeEyes(object):
|
||||||
Save the session object to the session file.
|
Save the session object to the session file.
|
||||||
"""
|
"""
|
||||||
if self.config.get('persist_state'):
|
if self.config.get('persist_state'):
|
||||||
Utility.write_json(Utility.SESSION_FILE_PATH,
|
utility.write_json(utility.SESSION_FILE_PATH,
|
||||||
self.context['session'])
|
self.context['session'])
|
||||||
else:
|
else:
|
||||||
Utility.delete(Utility.SESSION_FILE_PATH)
|
utility.delete(utility.SESSION_FILE_PATH)
|
||||||
|
|
||||||
def __start_rpc_server(self):
|
def __start_rpc_server(self):
|
||||||
if self.rpc_server is None:
|
if self.rpc_server is None:
|
|
@ -22,19 +22,19 @@ This module creates the AboutDialog which shows the version and license.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
|
|
||||||
ABOUT_DIALOG_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/about_dialog.glade")
|
ABOUT_DIALOG_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/about_dialog.glade")
|
||||||
|
|
||||||
|
|
||||||
class AboutDialog(object):
|
class AboutDialog:
|
||||||
"""
|
"""
|
||||||
AboutDialog reads the about_dialog.glade and build the user interface using that file.
|
AboutDialog reads the about_dialog.glade and build the user interface using that file.
|
||||||
It shows the application name with version, a small description, license and the GitHub url.
|
It shows the application name with version, a small description, license and the GitHub url.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, version):
|
def __init__(self, version):
|
||||||
builder = Utility.create_gtk_builder(ABOUT_DIALOG_GLADE)
|
builder = utility.create_gtk_builder(ABOUT_DIALOG_GLADE)
|
||||||
builder.connect_signals(self)
|
builder.connect_signals(self)
|
||||||
self.window = builder.get_object('window_about')
|
self.window = builder.get_object('window_about')
|
||||||
builder.get_object('lbl_decription').set_label(_('description'))
|
builder.get_object('lbl_decription').set_label(_('description'))
|
|
@ -23,7 +23,7 @@ import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
from Xlib.display import Display
|
from Xlib.display import Display
|
||||||
from Xlib.display import X
|
from Xlib.display import X
|
||||||
|
|
||||||
|
@ -32,10 +32,10 @@ from gi.repository import Gdk
|
||||||
from gi.repository import GLib
|
from gi.repository import GLib
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
|
||||||
BREAK_SCREEN_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/break_screen.glade")
|
BREAK_SCREEN_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/break_screen.glade")
|
||||||
|
|
||||||
|
|
||||||
class BreakScreen(object):
|
class BreakScreen:
|
||||||
"""
|
"""
|
||||||
The fullscreen window which prevents users from using the computer.
|
The fullscreen window which prevents users from using the computer.
|
||||||
This class reads the break_screen.glade and build the user interface.
|
This class reads the break_screen.glade and build the user interface.
|
||||||
|
@ -149,7 +149,7 @@ class BreakScreen(object):
|
||||||
Show an empty break screen on all screens.
|
Show an empty break screen on all screens.
|
||||||
"""
|
"""
|
||||||
# Lock the keyboard
|
# Lock the keyboard
|
||||||
Utility.start_thread(self.__lock_keyboard)
|
utility.start_thread(self.__lock_keyboard)
|
||||||
|
|
||||||
screen = Gtk.Window().get_screen()
|
screen = Gtk.Window().get_screen()
|
||||||
no_of_monitors = screen.get_n_monitors()
|
no_of_monitors = screen.get_n_monitors()
|
|
@ -20,7 +20,7 @@ import math
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
from safeeyes import Utility
|
from safeeyes import utility
|
||||||
from safeeyes.model import Config
|
from safeeyes.model import Config
|
||||||
|
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
|
@ -28,18 +28,18 @@ from gi.repository import Gtk
|
||||||
from gi.repository import GdkPixbuf
|
from gi.repository import GdkPixbuf
|
||||||
|
|
||||||
|
|
||||||
SETTINGS_DIALOG_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/settings_dialog.glade")
|
SETTINGS_DIALOG_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/settings_dialog.glade")
|
||||||
SETTINGS_DIALOG_PLUGIN_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/settings_plugin.glade")
|
SETTINGS_DIALOG_PLUGIN_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/settings_plugin.glade")
|
||||||
SETTINGS_DIALOG_BREAK_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/settings_break.glade")
|
SETTINGS_DIALOG_BREAK_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/settings_break.glade")
|
||||||
SETTINGS_DIALOG_NEW_BREAK_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/new_break.glade")
|
SETTINGS_DIALOG_NEW_BREAK_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/new_break.glade")
|
||||||
SETTINGS_BREAK_ITEM_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/item_break.glade")
|
SETTINGS_BREAK_ITEM_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/item_break.glade")
|
||||||
SETTINGS_PLUGIN_ITEM_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/item_plugin.glade")
|
SETTINGS_PLUGIN_ITEM_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/item_plugin.glade")
|
||||||
SETTINGS_ITEM_INT_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/item_int.glade")
|
SETTINGS_ITEM_INT_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/item_int.glade")
|
||||||
SETTINGS_ITEM_TEXT_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/item_text.glade")
|
SETTINGS_ITEM_TEXT_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/item_text.glade")
|
||||||
SETTINGS_ITEM_BOOL_GLADE = os.path.join(Utility.BIN_DIRECTORY, "glade/item_bool.glade")
|
SETTINGS_ITEM_BOOL_GLADE = os.path.join(utility.BIN_DIRECTORY, "glade/item_bool.glade")
|
||||||
|
|
||||||
|
|
||||||
class SettingsDialog(object):
|
class SettingsDialog:
|
||||||
"""
|
"""
|
||||||
Create and initialize SettingsDialog instance.
|
Create and initialize SettingsDialog instance.
|
||||||
"""
|
"""
|
||||||
|
@ -54,7 +54,7 @@ class SettingsDialog(object):
|
||||||
self.infobar_long_break_shown = False
|
self.infobar_long_break_shown = False
|
||||||
self.warn_bar_rpc_server_shown = False
|
self.warn_bar_rpc_server_shown = False
|
||||||
|
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_DIALOG_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_DIALOG_GLADE)
|
||||||
builder.connect_signals(self)
|
builder.connect_signals(self)
|
||||||
|
|
||||||
self.window = builder.get_object('window_settings')
|
self.window = builder.get_object('window_settings')
|
||||||
|
@ -101,7 +101,7 @@ class SettingsDialog(object):
|
||||||
for long_break in config.get('long_breaks'):
|
for long_break in config.get('long_breaks'):
|
||||||
self.__create_break_item(long_break, False)
|
self.__create_break_item(long_break, False)
|
||||||
|
|
||||||
for plugin_config in Utility.load_plugins_config(config):
|
for plugin_config in utility.load_plugins_config(config):
|
||||||
self.box_plugins.pack_start(self.__create_plugin_item(plugin_config), False, False, 0)
|
self.box_plugins.pack_start(self.__create_plugin_item(plugin_config), False, False, 0)
|
||||||
|
|
||||||
self.spin_short_break_duration.set_value(config.get('short_break_duration'))
|
self.spin_short_break_duration.set_value(config.get('short_break_duration'))
|
||||||
|
@ -124,7 +124,7 @@ class SettingsDialog(object):
|
||||||
parent_box = self.box_long_breaks
|
parent_box = self.box_long_breaks
|
||||||
if is_short:
|
if is_short:
|
||||||
parent_box = self.box_short_breaks
|
parent_box = self.box_short_breaks
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_BREAK_ITEM_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_BREAK_ITEM_GLADE)
|
||||||
box = builder.get_object('box')
|
box = builder.get_object('box')
|
||||||
lbl_name = builder.get_object('lbl_name')
|
lbl_name = builder.get_object('lbl_name')
|
||||||
lbl_name.set_label(_(break_config['name']))
|
lbl_name.set_label(_(break_config['name']))
|
||||||
|
@ -157,7 +157,7 @@ class SettingsDialog(object):
|
||||||
self.popover.hide()
|
self.popover.hide()
|
||||||
def __confirmation_dialog_response(widget, response_id):
|
def __confirmation_dialog_response(widget, response_id):
|
||||||
if response_id == Gtk.ResponseType.OK:
|
if response_id == Gtk.ResponseType.OK:
|
||||||
Utility.reset_config()
|
utility.reset_config()
|
||||||
self.config = Config()
|
self.config = Config()
|
||||||
# Remove breaks from the container
|
# Remove breaks from the container
|
||||||
self.box_short_breaks.foreach(lambda element: self.box_short_breaks.remove(element))
|
self.box_short_breaks.foreach(lambda element: self.box_short_breaks.remove(element))
|
||||||
|
@ -206,7 +206,7 @@ class SettingsDialog(object):
|
||||||
"""
|
"""
|
||||||
Create an entry for plugin to be listed in the plugin tab.
|
Create an entry for plugin to be listed in the plugin tab.
|
||||||
"""
|
"""
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_PLUGIN_ITEM_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_PLUGIN_ITEM_GLADE)
|
||||||
lbl_plugin_name = builder.get_object('lbl_plugin_name')
|
lbl_plugin_name = builder.get_object('lbl_plugin_name')
|
||||||
lbl_plugin_description = builder.get_object('lbl_plugin_description')
|
lbl_plugin_description = builder.get_object('lbl_plugin_description')
|
||||||
switch_enable = builder.get_object('switch_enable')
|
switch_enable = builder.get_object('switch_enable')
|
||||||
|
@ -336,7 +336,7 @@ class SettingsDialog(object):
|
||||||
self.window.destroy()
|
self.window.destroy()
|
||||||
|
|
||||||
|
|
||||||
class PluginSettingsDialog(object):
|
class PluginSettingsDialog:
|
||||||
"""
|
"""
|
||||||
Builds a settings dialog based on the configuration of a plugin.
|
Builds a settings dialog based on the configuration of a plugin.
|
||||||
"""
|
"""
|
||||||
|
@ -345,7 +345,7 @@ class PluginSettingsDialog(object):
|
||||||
self.config = config
|
self.config = config
|
||||||
self.property_controls = []
|
self.property_controls = []
|
||||||
|
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_DIALOG_PLUGIN_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_DIALOG_PLUGIN_GLADE)
|
||||||
builder.connect_signals(self)
|
builder.connect_signals(self)
|
||||||
self.window = builder.get_object('dialog_settings_plugin')
|
self.window = builder.get_object('dialog_settings_plugin')
|
||||||
box_settings = builder.get_object('box_settings')
|
box_settings = builder.get_object('box_settings')
|
||||||
|
@ -362,7 +362,7 @@ class PluginSettingsDialog(object):
|
||||||
"""
|
"""
|
||||||
Load the UI control for int property.
|
Load the UI control for int property.
|
||||||
"""
|
"""
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_ITEM_INT_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_ITEM_INT_GLADE)
|
||||||
builder.get_object('lbl_name').set_label(_(name))
|
builder.get_object('lbl_name').set_label(_(name))
|
||||||
spin_value = builder.get_object('spin_value')
|
spin_value = builder.get_object('spin_value')
|
||||||
spin_value.set_range(min_value, max_value)
|
spin_value.set_range(min_value, max_value)
|
||||||
|
@ -376,7 +376,7 @@ class PluginSettingsDialog(object):
|
||||||
"""
|
"""
|
||||||
Load the UI control for text property.
|
Load the UI control for text property.
|
||||||
"""
|
"""
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_ITEM_TEXT_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_ITEM_TEXT_GLADE)
|
||||||
builder.get_object('lbl_name').set_label(_(name))
|
builder.get_object('lbl_name').set_label(_(name))
|
||||||
txt_value = builder.get_object('txt_value')
|
txt_value = builder.get_object('txt_value')
|
||||||
txt_value.set_text(settings[key])
|
txt_value.set_text(settings[key])
|
||||||
|
@ -389,7 +389,7 @@ class PluginSettingsDialog(object):
|
||||||
"""
|
"""
|
||||||
Load the UI control for boolean property.
|
Load the UI control for boolean property.
|
||||||
"""
|
"""
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_ITEM_BOOL_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_ITEM_BOOL_GLADE)
|
||||||
builder.get_object('lbl_name').set_label(_(name))
|
builder.get_object('lbl_name').set_label(_(name))
|
||||||
switch_value = builder.get_object('switch_value')
|
switch_value = builder.get_object('switch_value')
|
||||||
switch_value.set_active(settings[key])
|
switch_value.set_active(settings[key])
|
||||||
|
@ -413,7 +413,7 @@ class PluginSettingsDialog(object):
|
||||||
self.window.show_all()
|
self.window.show_all()
|
||||||
|
|
||||||
|
|
||||||
class BreakSettingsDialog(object):
|
class BreakSettingsDialog:
|
||||||
"""
|
"""
|
||||||
Builds a settings dialog based on the configuration of a plugin.
|
Builds a settings dialog based on the configuration of a plugin.
|
||||||
"""
|
"""
|
||||||
|
@ -427,7 +427,7 @@ class BreakSettingsDialog(object):
|
||||||
self.on_add = on_add
|
self.on_add = on_add
|
||||||
self.on_remove = on_remove
|
self.on_remove = on_remove
|
||||||
|
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_DIALOG_BREAK_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_DIALOG_BREAK_GLADE)
|
||||||
builder.connect_signals(self)
|
builder.connect_signals(self)
|
||||||
self.window = builder.get_object('dialog_settings_break')
|
self.window = builder.get_object('dialog_settings_break')
|
||||||
self.txt_break = builder.get_object('txt_break')
|
self.txt_break = builder.get_object('txt_break')
|
||||||
|
@ -583,7 +583,7 @@ class BreakSettingsDialog(object):
|
||||||
self.window.show_all()
|
self.window.show_all()
|
||||||
|
|
||||||
|
|
||||||
class NewBreakDialog(object):
|
class NewBreakDialog:
|
||||||
"""
|
"""
|
||||||
Builds a new break dialog.
|
Builds a new break dialog.
|
||||||
"""
|
"""
|
||||||
|
@ -592,7 +592,7 @@ class NewBreakDialog(object):
|
||||||
self.parent_config = parent_config
|
self.parent_config = parent_config
|
||||||
self.on_add = on_add
|
self.on_add = on_add
|
||||||
|
|
||||||
builder = Utility.create_gtk_builder(SETTINGS_DIALOG_NEW_BREAK_GLADE)
|
builder = utility.create_gtk_builder(SETTINGS_DIALOG_NEW_BREAK_GLADE)
|
||||||
builder.connect_signals(self)
|
builder.connect_signals(self)
|
||||||
self.window = builder.get_object('dialog_new_break')
|
self.window = builder.get_object('dialog_new_break')
|
||||||
self.txt_break = builder.get_object('txt_break')
|
self.txt_break = builder.get_object('txt_break')
|
Loading…
Reference in New Issue