feat: Add external stamp generator support for Android

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 <noreply@anthropic.com>
This commit is contained in:
torlando-tech 2025-12-16 16:47:46 -05:00
commit 6646ca5234

View file

@ -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)