UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

72 lines (60 loc) 2.04 kB
import { ISeekController, ISeekControllerDelegate, SeekIncrementalBaseStrategy, } from "./ISeekController"; import { SEEK_TYPE } from "../const"; import { log_debug, log_error, log_verbose } from "./TVSeekController"; import { interval, Subscription } from "rxjs"; import { tap } from "rxjs/operators"; interface LongPressConfig { TIMER_INTERVAL_MS: number; } export class LongPressSeekController implements ISeekController { private subscription: Subscription | null = null; readonly title = "LongPressSeek"; constructor( private seekControllerDelegate: ISeekControllerDelegate, private seekIncrementalStrategy: SeekIncrementalBaseStrategy, private config: LongPressConfig ) {} onStartSeek(seekType: SEEK_TYPE) { this.cleanUpSubscription(); log_debug(`${this.title}: start long press seek type: ${seekType}.`); this.seekControllerDelegate.handlePlayerPause(); this.subscription = interval(this.config.TIMER_INTERVAL_MS) .pipe( tap(() => { this.seekControllerDelegate.handleDelayedSeek( this.seekIncrementalStrategy.getSkipTime() ); log_debug( `${ this.title }: handle delayed seek type: ${seekType} - multiplier: ${this.seekIncrementalStrategy.getSkipMultiplier()}, currentSkipAmount: ${this.seekIncrementalStrategy.getSkipTime()}.` ); this.seekIncrementalStrategy.increment(); }) ) .subscribe({ complete: () => log_verbose(`${this.title}: Long press subscription complete`), error: (err) => log_error(`${this.title}: Long press subscription error`, err), }); } onSeekEnd() { this.cleanUpSubscription(); this.seekControllerDelegate.handleSeekComplete(); } reset() { this.seekIncrementalStrategy.reset(); this.cleanUpSubscription(); } private cleanUpSubscription() { if (this.subscription) { this.subscription.unsubscribe(); this.subscription = null; } } }