''' Onionr - Private P2P Communication This file deals with configuration management. ''' ''' This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ''' import config, logger, onionrplugins as plugins, onionrpluginapi as pluginapi from threading import Thread def get_pluginapi(data): return pluginapi.SharedAPI(data) def __event_caller(event_name, data = {}): ''' DO NOT call this function, this is for threading code only. Instead, call onionrevents.event ''' for plugin in plugins.get_enabled_plugins(): try: call(plugins.get_plugin(plugin), event_name, data, get_pluginapi(data)) except ModuleNotFoundError as e: logger.warn('Disabling nonexistant plugin "%s"...' % plugin, terminal=True) plugins.disable(plugin, stop_event = False) except Exception as e: logger.warn('Event "%s" failed for plugin "%s".' % (event_name, plugin), terminal=True) logger.debug(str(e), terminal=True) def event(event_name, data = {}, threaded = True): ''' Calls an event on all plugins (if defined) ''' if threaded: thread = Thread(target = __event_caller, args = (event_name, data)) thread.start() return thread else: __event_caller(event_name, data) def call(plugin, event_name, data = None, pluginapi = None): ''' Calls an event on a plugin if one is defined ''' if not plugin is None: try: attribute = 'on_' + str(event_name).lower() if pluginapi is None: pluginapi = get_pluginapi(data) if hasattr(plugin, attribute): return getattr(plugin, attribute)(pluginapi, data) return True except Exception as e: #logger.error(str(e), terminal=True) return False else: return True