Godzil/Crunchy

View on GitHub
src/vlos.ts

Summary

Maintainability
A
2 hrs
Test Coverage
'use strict';

export default {getMedia};

function getMedia(vlosScript: string, seasonTitle: string, seasonNumber: string): IEpisodePage
{
  let vlosMedia: IVlosScript;

  function f(script: string) {
    /* We need to scope things */

    /* This is what will give us the medias */
    function VilosPlayer() {
      this.load = function(a: string, b: any, c: any)
      {
        vlosMedia = this.config.media;
        vlosMedia.series = this.config.analytics.media_reporting_parent;
      };
      this.config = {};
      this.config.player = {};
      this.config.player.pause_screen = {};
      this.config.language = '';
    }

    /* Let's stub what the script need */
    const window = {
      WM: {
        UserConsent: {
          getUserConsentAdvertisingState(): string { return ''; }
        }
      }
    };
    const document = {
      getElementsByClassName(a: any): any { return {length: 0}; },
    };
    const localStorage = {
      getItem(a: any): any { return null; },
    };
    const $ = {
      cookie(a: any) { /* nothing */ },
    };

    /*
      Evil ugly things. Need to run the script from a somewhat untrusted source.
      Need to find a better way of doing.
     */
    // tslint:disable-next-line:no-eval
    eval(script);

  }
  f(vlosScript);

  if (vlosMedia === undefined)
  {
    console.error('Error fetching vlos data - aborting - Please report the error if happen again.');
    process.exit(-1);
  }

  return {
    episode: vlosMedia.metadata.episode_number,
    id: vlosMedia.metadata.id,
    series: vlosMedia.series.title,
    season: seasonTitle,
    title: vlosMedia.metadata.title,
    swf: '',
    volume: seasonNumber,
    filename: '',
    media: vlosMedia,
  };
}