diff --git a/.idea/misc.xml b/.idea/misc.xml index 85f79a21..6178365c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/pwnagotchi/plugins/__init__.py b/pwnagotchi/plugins/__init__.py index 72d78290..f43a4140 100644 --- a/pwnagotchi/plugins/__init__.py +++ b/pwnagotchi/plugins/__init__.py @@ -1,15 +1,17 @@ import os import glob -import _thread import threading import importlib, importlib.util import logging +from concurrent.futures import ThreadPoolExecutor default_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "default") loaded = {} database = {} locks = {} +THREAD_POOL_SIZE = 10 +executor = ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE) class Plugin: @classmethod @@ -28,7 +30,6 @@ class Plugin: if cb is not None and callable(cb): locks["%s::%s" % (plugin_name, attr_name)] = threading.Lock() - def toggle_plugin(name, enable=True): """ Load or unload a plugin @@ -42,7 +43,7 @@ def toggle_plugin(name, enable=True): global loaded, database if pwnagotchi.config: - if name not in pwnagotchi.config['main']['plugins']: + if not name in pwnagotchi.config['main']['plugins']: pwnagotchi.config['main']['plugins'][name] = dict() pwnagotchi.config['main']['plugins'][name]['enabled'] = enable save_config(pwnagotchi.config, '/etc/pwnagotchi/config.toml') @@ -67,12 +68,10 @@ def toggle_plugin(name, enable=True): return False - def on(event_name, *args, **kwargs): for plugin_name in loaded.keys(): one(plugin_name, event_name, *args, **kwargs) - def locked_cb(lock_name, cb, *args, **kwargs): global locks @@ -82,7 +81,6 @@ def locked_cb(lock_name, cb, *args, **kwargs): with locks[lock_name]: cb(*args, *kwargs) - def one(plugin_name, event_name, *args, **kwargs): global loaded @@ -94,13 +92,11 @@ def one(plugin_name, event_name, *args, **kwargs): try: lock_name = "%s::%s" % (plugin_name, cb_name) locked_cb_args = (lock_name, callback, *args, *kwargs) - _thread.start_new_thread(locked_cb, locked_cb_args) + executor.submit(locked_cb, *locked_cb_args) except Exception as e: logging.error("error while running %s.%s : %s" % (plugin_name, cb_name, e)) logging.error(e, exc_info=True) - - def load_from_file(filename): logging.debug("loading %s" % filename) plugin_name = os.path.basename(filename.replace(".py", "")) @@ -109,7 +105,6 @@ def load_from_file(filename): spec.loader.exec_module(instance) return plugin_name, instance - def load_from_path(path, enabled=()): global loaded, database logging.debug("loading plugins from %s - enabled: %s" % (path, enabled)) @@ -125,7 +120,6 @@ def load_from_path(path, enabled=()): return loaded - def load(config): enabled = [name for name, options in config['main']['plugins'].items() if 'enabled' in options and options['enabled']] @@ -143,4 +137,4 @@ def load(config): plugin.options = config['main']['plugins'][name] on('loaded') - on('config_changed', config) \ No newline at end of file + on('config_changed', config) diff --git a/pwnagotchi/plugins/default/auto-update.py b/pwnagotchi/plugins/default/auto-update.py index 408ac62d..84dde6f3 100644 --- a/pwnagotchi/plugins/default/auto-update.py +++ b/pwnagotchi/plugins/default/auto-update.py @@ -38,8 +38,7 @@ def check(version, repo, native=True): # check if this release is compatible with arm6 for asset in latest['assets']: download_url = asset['browser_download_url'] - if download_url.endswith('.zip') and ( - info['arch'] in download_url or (is_arm and 'armhf' in download_url)): + if download_url.endswith('.zip') and (info['arch'] in download_url or (is_arm and 'armhf' in download_url)): info['url'] = download_url break