diff --git a/api.cpp b/api.cpp index 2da2239..506029d 100644 --- a/api.cpp +++ b/api.cpp @@ -75,13 +75,20 @@ class Context { return result; } - bool hasPendingEvent() { + bool consumeEvents() { return gpp_rethrow([=]() { - CameraEventType event_type = GP_EVENT_UNKNOWN; - gpp_unique_ptr event_data(GPP_CALL( - void *, gp_camera_wait_for_event(camera.get(), 0, &event_type, _, - context.get()))); - return event_type != GP_EVENT_TIMEOUT; + bool had_events = false; + for (;;) { + CameraEventType event_type = GP_EVENT_UNKNOWN; + gpp_unique_ptr event_data(GPP_CALL( + void *, gp_camera_wait_for_event(camera.get(), 0, &event_type, _, + context.get()))); + if (event_type == GP_EVENT_TIMEOUT) { + break; + } + had_events = true; + } + return had_events; }); } @@ -312,6 +319,6 @@ EMSCRIPTEN_BINDINGS(gphoto2_js_api) { .function("setConfigValue", &Context::setConfigValue) .function("capturePreviewAsBlob", &Context::capturePreviewAsBlob) .function("captureImageAsFile", &Context::captureImageAsFile) - .function("hasPendingEvent", &Context::hasPendingEvent) + .function("consumeEvents", &Context::consumeEvents) .function("supportedOps", &Context::supportedOps); } diff --git a/libapi.mjs.d.ts b/libapi.mjs.d.ts index d330313..e4cfe33 100644 --- a/libapi.mjs.d.ts +++ b/libapi.mjs.d.ts @@ -30,7 +30,7 @@ declare class Context { ): Promise; capturePreviewAsBlob(): Promise; captureImageAsFile(): Promise; - hasPendingEvent(): Promise; + consumeEvents(): Promise; supportedOps(): SupportedOps; delete(): void; diff --git a/ui/index.js b/ui/index.js index c167c7e..0d50e4b 100644 --- a/ui/index.js +++ b/ui/index.js @@ -73,6 +73,7 @@ class App extends Component { context.configToJS() ); if (!isDebug) { + delete config.children.actions; delete config.children.other; } this.setState({ @@ -83,10 +84,10 @@ class App extends Component { await new Promise(resolve => requestIdleCallback(resolve, { timeout: 500 }) ); - let hasPendingEvent = await this.connection.schedule(context => - context.hasPendingEvent() + let hadEvents = await this.connection.schedule(context => + context.consumeEvents() ); - if (hasPendingEvent) { + if (hadEvents) { break; } }