From 6646ca5234c1ba1bc24285d1225f04dbd5a21347 Mon Sep 17 00:00:00 2001 From: torlando-tech Date: Tue, 16 Dec 2025 16:47:46 -0500 Subject: [PATCH] feat: Add external stamp generator support for Android MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add set_external_generator() function to LXStamper.py that allows platforms like Android to provide a native stamp generator callback. This bypasses Python multiprocessing which fails on Android due to lack of sem_open support and aggressive process killing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- LXMF/LXStamper.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/LXMF/LXStamper.py b/LXMF/LXStamper.py index 39b541b..be34638 100644 --- a/LXMF/LXStamper.py +++ b/LXMF/LXStamper.py @@ -15,6 +15,14 @@ PN_VALIDATION_POOL_MIN_SIZE = 256 active_jobs = {} +external_generator = None + +def set_external_generator(generator): + global external_generator + external_generator = generator + if generator is not None: + RNS.log("External stamp generator registered", RNS.LOG_DEBUG) + if RNS.vendor.platformutils.is_linux(): multiprocessing.set_start_method("fork") def stamp_workblock(material, expand_rounds=WORKBLOCK_EXPAND_ROUNDS): @@ -98,7 +106,10 @@ def generate_stamp(message_id, stamp_cost, expand_rounds=WORKBLOCK_EXPAND_ROUNDS rounds = 0 value = 0 - if RNS.vendor.platformutils.is_windows() or RNS.vendor.platformutils.is_darwin(): stamp, rounds = job_simple(stamp_cost, workblock, message_id) + if external_generator is not None: + RNS.log("Using external stamp generator", RNS.LOG_DEBUG) + stamp, rounds = external_generator(workblock, stamp_cost) + elif RNS.vendor.platformutils.is_windows() or RNS.vendor.platformutils.is_darwin(): stamp, rounds = job_simple(stamp_cost, workblock, message_id) elif RNS.vendor.platformutils.is_android(): stamp, rounds = job_android(stamp_cost, workblock, message_id) else: stamp, rounds = job_linux(stamp_cost, workblock, message_id)