userscripts/trakt.pick-show.user.js

70 lines
1.9 KiB
JavaScript
Raw Normal View History

2020-06-05 11:49:56 -05:00
// -*- tab-width: 4; js-indent-level: 4; -*-
// ==UserScript==
// @name Trakt Show Picker
// @namespace danielrayjones
// @version 0.0.3
2020-06-05 11:49:56 -05:00
// @description Pick a show from progress page
// @author Dan Jones
// @match https://trakt.tv/users/*/progress*
// @grant none
// @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js
2020-06-05 11:49:56 -05:00
// ==/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);
2020-06-05 11:59:25 -05:00
let $picked = $shows.eq(picked);
2020-06-05 11:49:56 -05:00
$shows.addClass('sortable-ghost');
2020-06-05 11:59:25 -05:00
$picked.removeClass('sortable-ghost').insertAfter($picked.parent().find('.pagination-top'));
2020-06-05 11:49:56 -05:00
}
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)');
}
})();