Add option to disable RPC server

This commit is contained in:
Gobinath 2019-11-24 20:39:28 -05:00
parent ebd92a3a43
commit 020dea888c
7 changed files with 188 additions and 6 deletions

View File

@ -99,13 +99,14 @@ class SafeEyes(object):
self.context['api']['postpone'] = self.safe_eyes_core.postpone
self.plugins_manager.init(self.context, self.config)
atexit.register(self.persist_session)
self.rpc_server = RPCServer(self.config.get('rpc_port'), self.context)
self.rpc_server.start()
def start(self):
"""
Start Safe Eyes
"""
if self.config.get('use_rpc_server', True):
self.__start_rpc_server()
if self.safe_eyes_core.has_breaks():
self.active = True
self.context['state'] = State.START
@ -141,7 +142,7 @@ class SafeEyes(object):
self.plugins_manager.stop()
self.safe_eyes_core.stop()
self.plugins_manager.exit()
self.rpc_server.stop()
self.__stop_rpc_server()
self.persist_session()
Gtk.main_quit()
# Exit all threads
@ -212,6 +213,13 @@ class SafeEyes(object):
logging.info("Initialize SafeEyesCore with modified settings")
if self.rpc_server is None and config.get('use_rpc_server'):
# RPC server wasn't running but now enabled
self.__start_rpc_server()
elif self.rpc_server is not None and not config.get('use_rpc_server'):
# RPC server was running but now disabled
self.__stop_rpc_server()
# Restart the core and intialize the components
self.config = config
self.safe_eyes_core.initialize(config)
@ -308,3 +316,13 @@ class SafeEyes(object):
self.context['session'])
else:
Utility.delete(Utility.SESSION_FILE_PATH)
def __start_rpc_server(self):
if self.rpc_server is None:
self.rpc_server = RPCServer(self.config.get('rpc_port'), self.context)
self.rpc_server.start()
def __stop_rpc_server(self):
if self.rpc_server is not None:
self.rpc_server.stop()
self.rpc_server = None

View File

@ -113,6 +113,11 @@ def main():
if __running():
logging.info("Safe Eyes is already running")
if not config.get("use_rpc_server", True):
# RPC sever is disabled
print(_('Safe Eyes is running with RPC Server disabled. Enable the RPC server to use command-line arguments.'))
sys.exit(0)
return
rpc_client = RPCClient(config.get('rpc_port'))
if args.about:
rpc_client.show_about()

View File

@ -73,6 +73,10 @@ msgstr ""
msgid "Safe Eyes is not running"
msgstr ""
# RPC not enabled message
msgid "Safe Eyes is running with RPC Server disabled. Enable the RPC server to use command-line arguments."
msgstr ""
# About dialog
msgid "Close"
msgstr ""
@ -126,6 +130,14 @@ msgstr ""
msgid "Persist the internal state"
msgstr ""
# Settings dialog
msgid "Use RPC server to receive runtime commands"
msgstr ""
# Settings dialog
msgid "Without the RPC server, command-line commands may not work"
msgstr ""
# Settings dialog
msgid "Long break interval must be a multiple of short break interval"
msgstr ""

View File

@ -1,6 +1,6 @@
{
"meta": {
"config_version": "6.0.1"
"config_version": "6.0.2"
},
"allow_postpone": false,
"short_break_interval": 15,
@ -10,6 +10,7 @@
"short_break_duration": 15,
"persist_state": false,
"postpone_duration": 5,
"use_rpc_server": true,
"rpc_port": 7200,
"shortcut_disable_time": 2,
"shortcut_skip": 9,

View File

@ -95,6 +95,11 @@
border-radius: 5px;
}
.warn_bar_rpc_server {
opacity: 0.9;
border-radius: 5px;
}
.toolbar {
background: black;
opacity: 0.9;

View File

@ -98,19 +98,19 @@
</object>
<object class="GtkApplicationWindow" id="window_settings">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Safe Eyes</property>
<property name="window_position">center</property>
<property name="default_width">450</property>
<property name="default_height">600</property>
<property name="icon_name">safeeyes</property>
<property name="title" translatable="yes">Safe Eyes</property>
<property name="gravity">center</property>
<signal name="delete-event" handler="on_window_delete" swapped="no"/>
<child type="titlebar">
<object class="GtkHeaderBar" id="header_bar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">91</property>
<property name="title" translatable="yes">Safe Eyes</property>
<property name="spacing">91</property>
<property name="show_close_button">True</property>
<property name="decoration_layout">menu:close</property>
<child>
@ -782,6 +782,120 @@
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkInfoBar" id="warn_bar_rpc_server">
<property name="app_paintable">True</property>
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="message_type">warning</property>
<property name="show_close_button">True</property>
<signal name="close" handler="on_warn_bar_rpc_server_close" swapped="no"/>
<signal name="response" handler="on_warn_bar_rpc_server_close" swapped="no"/>
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">start</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child internal-child="content_area">
<object class="GtkBox">
<property name="can_focus">False</property>
<property name="spacing">16</property>
<child>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-dialog-warning</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Without the RPC server, command-line commands may not work</property>
<property name="xalign">0</property>
<style>
<class name="warn_bar_rpc_server"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<style>
<class name="warn_bar_rpc_server"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box15">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="lbl_toggle_rpc_server">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Use RPC server to receive runtime commands</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="switch_rpc_server">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
</object>
</child>
</object>

View File

@ -52,6 +52,7 @@ class SettingsDialog(object):
self.last_short_break_interval = config.get('short_break_interval')
self.initializing = True
self.infobar_long_break_shown = False
self.warn_bar_rpc_server_shown = False
builder = Utility.create_gtk_builder(SETTINGS_DIALOG_GLADE)
builder.connect_signals(self)
@ -72,8 +73,11 @@ class SettingsDialog(object):
self.switch_strict_break = builder.get_object('switch_strict_break')
self.switch_postpone = builder.get_object('switch_postpone')
self.switch_persist = builder.get_object('switch_persist')
self.switch_rpc_server = builder.get_object('switch_rpc_server')
self.info_bar_long_break = builder.get_object("info_bar_long_break")
self.warn_bar_rpc_server = builder.get_object("warn_bar_rpc_server")
self.info_bar_long_break.hide()
self.warn_bar_rpc_server.hide()
# Set the current values of input fields
self.__initialize(config)
@ -81,8 +85,12 @@ class SettingsDialog(object):
# Update relative states
# GtkSwitch state-set signal is available only from 3.14
if Gtk.get_minor_version() >= 14:
# Add event listener to postpone switch
self.switch_postpone.connect('state-set', self.on_switch_postpone_activate)
self.on_switch_postpone_activate(self.switch_postpone, self.switch_postpone.get_active())
# Add event listener to RPC server switch
self.switch_rpc_server.connect('state-set', self.on_switch_rpc_server_activate)
self.on_switch_rpc_server_activate(self.switch_rpc_server, self.switch_rpc_server.get_active())
self.initializing = False
def __initialize(self, config):
@ -106,6 +114,7 @@ class SettingsDialog(object):
self.switch_strict_break.set_active(config.get('strict_break'))
self.switch_postpone.set_active(config.get('allow_postpone'))
self.switch_persist.set_active(config.get('persist_state'))
self.switch_rpc_server.set_active(config.get('use_rpc_server'))
self.infobar_long_break_shown = False
def __create_break_item(self, break_config, is_short):
@ -280,6 +289,23 @@ class SettingsDialog(object):
"""
self.info_bar_long_break.hide()
def on_switch_rpc_server_activate(self, switch, enabled):
"""
Event handler to the state change of the rpc server switch.
Show or hide the self.warn_bar_rpc_server based on the state of the rpc server.
"""
if not self.initializing and not enabled and not self.warn_bar_rpc_server_shown:
self.warn_bar_rpc_server_shown = True
self.warn_bar_rpc_server.show()
if enabled:
self.warn_bar_rpc_server.hide()
def on_warn_bar_rpc_server_close(self, warnbar, *user_data):
"""
Event handler for warning bar close action.
"""
self.warn_bar_rpc_server.hide()
def add_break(self, button):
"""
Event handler for add break button.
@ -301,6 +327,7 @@ class SettingsDialog(object):
self.config.set('strict_break', self.switch_strict_break.get_active())
self.config.set('allow_postpone', self.switch_postpone.get_active())
self.config.set('persist_state', self.switch_persist.get_active())
self.config.set('use_rpc_server', self.switch_rpc_server.get_active())
for plugin in self.config.get('plugins'):
if plugin['id'] in self.plugin_switches:
plugin['enabled'] = self.plugin_switches[plugin['id']].get_active()