From 3d9a36abfbd7e221ebee48c04738d2ed6ab86670 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 5 Jun 2020 11:49:56 -0500 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20trakt=20show=20picker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 trakt.pick-show.js diff --git a/trakt.pick-show.js b/trakt.pick-show.js new file mode 100644 index 0000000..ac127dc --- /dev/null +++ b/trakt.pick-show.js @@ -0,0 +1,68 @@ +// -*- tab-width: 4; js-indent-level: 4; -*- +// ==UserScript== +// @name Trakt Show Picker +// @namespace danielrayjones +// @version 0.0.1 +// @description Pick a show from progress page +// @author Dan Jones +// @match https://trakt.tv/users/*/progress* +// @grant none +// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// ==/UserScript== + +/* global $, compressedCache, localStorage */ + +(function() { + 'use strict'; + + $(window).konami({ + code: [80, 73, 67, 75], + eventName: 'konami.pick' + }); + + $(window).on('konami.pick', pickShow); + + let watched_shows; + + function pickShow() { + + if ('compressedCache' in window) { + watched_shows = compressedCache.get('watched_shows'); + } else { + watched_shows = JSON.parse(localStorage.watched_shows); + } + + let $shows = $('div[data-type="show"]'); + $shows.removeClass('sortable-ghost'); + $shows = filterShows($shows); + + let picked = Math.floor(Math.random() * $shows.length); + + $shows.addClass('sortable-ghost'); + $shows.eq(picked).removeClass('sortable-ghost'); + + } + + function filterShows($shows) { + + // Milliseconds in two days + let twoDays = 2 * 24 * 60 * 60 * 1000; + let twoDaysAgo = (new Date()) - twoDays; + + $shows.each(function (i, show) { + + let showId = Number.parseInt(show.dataset.showId); + let showInfo = watched_shows[showId]; + if (!showInfo) return; + + let lastWatch = showInfo.ts*1000; + // Skip ones we've watched in the last two days + if (lastWatch > twoDaysAgo) { + show.classList.add('sortable-ghost'); + } + }); + + return $shows.filter(':not(.sortable-ghost)'); + } + +})();