* Triggers viewer view. Keeps track of busy viewers and skips * view accordingly. * @protected * @param {Viewer} viewer
(viewer)
| 554 | * @param {Viewer} viewer |
| 555 | */ |
| 556 | async _triggerViewerView (viewer) { |
| 557 | // Check if viewer is busy |
| 558 | if (this._getBrickState(viewer, 'busy')) { |
| 559 | return this |
| 560 | } |
| 561 | |
| 562 | // Mark viewer as busy |
| 563 | this._setBrickState(viewer, 'busy', true) |
| 564 | |
| 565 | // Collect view data |
| 566 | const bucket = this.getBucketIndexForBrick(viewer) |
| 567 | const content = this.getContent(bucket, false) |
| 568 | const settingsVersion = this._getBrickState(viewer, 'settingsVersion') |
| 569 | |
| 570 | // Trigger viewer view and await completion |
| 571 | let error |
| 572 | try { |
| 573 | await viewer.view(content) |
| 574 | } catch (e) { |
| 575 | error = e |
| 576 | } |
| 577 | |
| 578 | // Stop here if viewer is no longer part of the pipe |
| 579 | if (!this.containsBrick(viewer)) { |
| 580 | return |
| 581 | } |
| 582 | |
| 583 | // Mark viewer as no longer busy |
| 584 | this._setBrickState(viewer, 'busy', false) |
| 585 | |
| 586 | // Collect post view data, buckets may have changed in the meantime |
| 587 | const postSettingsVersion = this._getBrickState(viewer, 'settingsVersion') |
| 588 | const postBucket = this.getBucketIndexForBrick(viewer) |
| 589 | |
| 590 | // Check if the bucket or the viewer settings have changed in the meantime |
| 591 | if (!this.getContent(postBucket, false).isEqualTo(content) || |
| 592 | settingsVersion !== postSettingsVersion) { |
| 593 | // Repeat view |
| 594 | this._triggerViewerView(viewer) |
| 595 | } |
| 596 | |
| 597 | // Trigger brick finish event |
| 598 | this.brickDidFinish(viewer, error) |
| 599 | |
| 600 | // Throw unexpected errors |
| 601 | if (error && !(error instanceof InvalidInputError)) { |
| 602 | throw error |
| 603 | } |
| 604 | } |
| 605 | |
| 606 | /** |
| 607 | * Triggers encoder translation and handles their results. Keeps track of busy |
no test coverage detected