Publish the Media Explorer import into REAPER's Media Explorer action section as well as Main — custom_action + hookcommand2, second forever-stable id, one handler.

This commit is contained in:
2026-08-01 19:43:27 -04:00
parent 8bf6841f7b
commit 72b870459c
6 changed files with 118 additions and 15 deletions
+15 -2
View File
@@ -29,12 +29,25 @@ namespace reasampler {
class ReaSamplerSession;
// `session` is shared with the capture / bank / Design-View families; the single
// hookcommand in main.cpp routes fired ids here via ingestHandleCommand.
// FOREVER-STABLE command-id suffixes — NEVER change after ship; user keybindings key off
// the composed ids. Two, because the Media-Explorer import publishes into two action
// sections and a custom_action idStr must be unique across all of them. Exposed here so
// the id-composition contract is assertable without linking this REAPER-facing TU.
inline constexpr const char* kIngestImportMediaExplorerId = "INGEST_IMPORT_MEDIA_EXPLORER";
inline constexpr const char* kIngestImportMediaExplorerMxId = "INGEST_IMPORT_MEDIA_EXPLORER_MX";
// `session` is shared with the capture / bank / Design-View families; main.cpp's two
// dispatch hooks route fired ids back through the two handlers below. Both registration
// mechanisms are specified in root CLAUDE.md §"REAPER extension contract".
void ingestRegisterActions(reaper_plugin_info_t* rec, ReaSamplerSession* session);
// Main-section dispatch ("hookcommand").
bool ingestHandleCommand(int command);
// Non-main-section dispatch ("hookcommand2"). Claims only ids this family published
// outside the Main section, so the two hooks never both claim one command.
bool ingestHandleSectionCommand(int command);
void ingestUnregisterActions(reaper_plugin_info_t* rec);
// "The active sampler instance should now play (bankId, sampleId)." Called by EVERY