codevise/pageflow

View on GitHub
entry_types/paged/packages/pageflow-paged-react/src/media/actions.js

Summary

Maintainability
B
4 hrs
Test Coverage
import {update as updateSetting} from 'settings/actions';

export const TOGGLE_PLAYING = 'MEDIA_TOGGLE_PLAYING';
export const PLAY = 'MEDIA_PLAY';
export const PLAY_AND_FADE_IN = 'MEDIA_PLAY_AND_FADE_IN';
export const PAUSE = 'MEDIA_PAUSE';
export const FADE_OUT_AND_PAUSE = 'MEDIA_FADE_OUT_AND_PAUSE';

export const CHANGE_VOLUME_FACTOR = 'CHANGE_VOLUME_FACTOR';

export const PLAY_FAILED = 'MEDIA_PLAY_FAILED';
export const PLAYING_MUTED = 'MEDIA_PLAYING_MUTED';

export const SCRUB_TO = 'MEDIA_SCRUB_TO';
export const SEEK_TO = 'MEDIA_SEEK_TO';

export const PREBUFFER = 'MEDIA_PREBUFFER';
export const PREBUFFERED = 'MEDIA_PREBUFFERED';
export const ABORT_PREBUFFERING = 'MEDIA_ABORT_PREBUFFERING';

export const BUFFER_UNDERRUN = 'MEDIA_BUFFER_UNDERRUN';
export const BUFFER_UNDERRUN_CONTINUE = 'MEDIA_BUFFER_UNDERRUN_CONTINUE';

export const META_DATA_LOADED = 'MEDIA_META_DATA_LOADED';
export const PROGRESS = 'MEDIA_PROGRESS';
export const PLAYING = 'MEDIA_PLAYING';
export const PAUSED = 'MEDIA_PAUSED';
export const TIME_UPDATE = 'MEDIA_TIME_UPDATE';
export const ENDED = 'MEDIA_ENDED';

export const SEEKING = 'MEDIA_SEEKING';
export const SEEKED = 'MEDIA_SEEKED';
export const WAITING = 'MEDIA_WAITING';

export const HAS_NOT_BEEN_PLAYING_FOR_A_MOMENT = 'MEDIA_HAS_NOT_BEEN_PLAYING_FOR_A_MOMENT';

export const USER_INTERACTION = 'MEDIA_USER_INTERACTION';
export const USER_IDLE = 'MEDIA_USER_IDLE';

export const CONTROLS_ENTERED = 'MEDIA_CONTROLS_ENTERED';
export const CONTROLS_LEFT = 'MEDIA_CONTROLS_LEFT';
export const FOCUS_ENTERED_CONTROLS = 'MEDIA_FOCUS_ENTERED_CONTROLS';
export const FOCUS_LEFT_CONTROLS = 'MEDIA_FOCUS_LEFT_CONTROLS';

export const CONTROLS_HIDDEN = 'MEDIA_CONTROLS_HIDDEN';

export const SHOW_INFO_BOX_DURING_PLAYBACK = 'SHOW_INFO_BOX_DURING_PLAYBACK';
export const HIDE_INFO_BOX_DURING_PLAYBACK = 'HIDE_INFO_BOX_DURING_PLAYBACK';
export const TOGGLE_INFO_BOX_DURING_PLAYBACK = 'TOGGLE_INFO_BOX_DURING_PLAYBACK';

export const SAVE_MEDIA_ELEMENT_ID = 'MEDIA_SAVE_MEDIA_ELEMENT_ID';
export const DISCARD_MEDIA_ELEMENT_ID = 'MEDIA_DISCARD_MEDIA_ELEMENT_ID';

export function actionCreators({scope = 'default'} = {}) {
  return {
    togglePlaying() {
      return pageAction(TOGGLE_PLAYING);
    },

    play() {
      return pageAction(PLAY);
    },

    playAndFadeIn({fadeDuration}) {
      return pageAction(PLAY_AND_FADE_IN, {
        fadeDuration
      });
    },

    pause() {
      return pageAction(PAUSE);
    },

    fadeOutAndPause({fadeDuration}) {
      return pageAction(FADE_OUT_AND_PAUSE, {
        fadeDuration
      });
    },


    changeVolumeFactor(volumeFactor, {fadeDuration}) {
      return pageAction(CHANGE_VOLUME_FACTOR, {
        volumeFactor,
        fadeDuration
      });
    },


    playFailed() {
      return pageAction(PLAY_FAILED);
    },

    playingMuted() {
      return pageAction(PLAYING_MUTED);
    },


    scrubTo(time) {
      return pageAction(SCRUB_TO, {
        time
      });
    },

    seekTo(time) {
      return pageAction(SEEK_TO, {
        time
      });
    },


    prebuffer() {
      return pageAction(PREBUFFER);
    },

    prebuffered() {
      return pageAction(PREBUFFERED);
    },

    abortPrebuffering() {
      return pageAction(ABORT_PREBUFFERING);
    },


    bufferUnderrun() {
      return pageAction(BUFFER_UNDERRUN);
    },

    bufferUnderrunContinue() {
      return pageAction(BUFFER_UNDERRUN_CONTINUE);
    },


    playing() {
      return pageAction(PLAYING);
    },

    paused() {
      return pageAction(PAUSED);
    },

    timeUpdate({currentTime, duration}) {
      return pageAction(TIME_UPDATE, {
        currentTime,
        duration
      });
    },

    metaDataLoaded({currentTime, duration}) {
      return pageAction(META_DATA_LOADED, {
        currentTime,
        duration
      });
    },

    progress({bufferedEnd}) {
      return pageAction(PROGRESS, {
        bufferedEnd
      });
    },

    ended() {
      return pageAction(ENDED);
    },


    seeking() {
      return pageAction(SEEKING);
    },

    seeked() {
      return pageAction(SEEKED);
    },

    waiting() {
      return pageAction(WAITING);
    },


    hasNotBeenPlayingForAMoment(value) {
      return pageAction(HAS_NOT_BEEN_PLAYING_FOR_A_MOMENT);
    },


    userInteraction() {
      return pageAction(USER_INTERACTION);
    },

    userIdle() {
      return pageAction(USER_IDLE);
    },

    controlsEntered() {
      return pageAction(CONTROLS_ENTERED);
    },

    controlsLeft() {
      return pageAction(CONTROLS_LEFT);
    },

    focusEnteredControls() {
      return pageAction(FOCUS_ENTERED_CONTROLS);
    },

    focusLeftControls() {
      return pageAction(FOCUS_LEFT_CONTROLS);
    },

    controlsHidden() {
      return pageAction(CONTROLS_HIDDEN);
    },

    showInfoBoxDuringPlayback() {
      return pageAction(SHOW_INFO_BOX_DURING_PLAYBACK);
    },

    hideInfoBoxDuringPlayback() {
      return pageAction(HIDE_INFO_BOX_DURING_PLAYBACK);
    },

    toggleInfoBoxDuringPlayback() {
      return pageAction(TOGGLE_INFO_BOX_DURING_PLAYBACK);
    },

    saveMediaElementId(id) {
      return pageAction(SAVE_MEDIA_ELEMENT_ID, {id});
    },

    discardMediaElementId() {
      return pageAction(DISCARD_MEDIA_ELEMENT_ID);
    }
  };

  function pageAction(type, payload = {}) {
    return {
      type,
      meta: {
        collectionName: 'pages',
        mediaScope: scope
      },
      payload
    };
  }
}

export function updateTextTrackSettings(textTrack) {
  return updateSetting({
    property: 'textTrack',
    value: textTrack ? {
      srclang: textTrack.srclang,
      kind: textTrack.kind
    } : {}
  });
}

export function updateVideoQualitySetting(value) {
  return updateSetting({
    property: 'videoQuality',
    value
  });
}