Amazon Prime Video Expiry Viewer

Makes it obvious which and when videos are going to expire.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Amazon Prime Video Expiry Viewer
// @namespace    https://github.com/Kadauchi
// @version      1.0.4
// @description  Makes it obvious which and when videos are going to expire.
// @author       Kadauchi
// @icon         http://i.imgur.com/oGRQwPN.png
// @include      https://www.amazon.com/gp/video*
// @include      https://www.amazon.com/Prime-Video/*
// ==/UserScript==

const checked = {}

function checkShelf () {
  for (const el of document.getElementsByClassName('dv-shelf-item')) checkIfLeaving(el);
  for (const el of document.getElementsByClassName('dv-packshot')) checkIfLeaving(el);
  for (const el of document.getElementsByClassName('UaW15H')) checkIfLeaving(el);
  for (const el of document.getElementsByClassName('UI789i')) checkIfLeaving(el);
}

async function checkIfLeaving (item) {
  const asin = item.querySelector('[data-asin]').dataset.asin;
  const leaving = await fetchHover(asin);

if (leaving.isLeaving) {
    const date = document.createElement('div');
    date.textContent = 'Leaving ' + leaving.isLeaving;
    date.style = 'text-align: center; color: black;';
    date.style.backgroundColor = 'yellow';
    item.appendChild(date);
  }

  if (leaving.isImdb) {
    const date = document.createElement('div');
    date.textContent = 'Available on your IMDb TV channel';
    date.style = 'text-align: center; color: black;';
    date.style.backgroundColor = 'gold';
    item.appendChild(date);
  }
}

function fetchHover (asin) {
  return new Promise(async (resolve) => {
    if (asin && !checked[asin]) {
      const response = await window.fetch(`https://www.amazon.com/gp/video/hover/${asin}?format=json`);
      const text = await response.text();
      // console.log(text);
      const imdb = text.match(/ncluded with your IMDb TV channel/);
      const leaving = text.match(/Leaving Prime on ([\w\s,]+)/);
      const isImdb = !!imdb;
      const isLeaving = leaving ? leaving[1] : false;
      checked[asin] = { isImdb, isLeaving };
      resolve(checked[asin]);
    } else if (checked[asin]) {
      resolve(checked[asin]);
    }
  })
}

checkShelf();