Amazon Prime Video Expiry Viewer

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

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==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();