Skip to content

Instantly share code, notes, and snippets.

@cuylerstuwe
Last active July 21, 2019 19:05
Show Gist options
  • Save cuylerstuwe/cf117bf020092a203c78f53bbf09ca1c to your computer and use it in GitHub Desktop.
Save cuylerstuwe/cf117bf020092a203c78f53bbf09ca1c to your computer and use it in GitHub Desktop.

Revisions

  1. cuylerstuwe revised this gist Jul 21, 2019. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions syntax-fm-mark-finished-shows.user.js
    Original file line number Diff line number Diff line change
    @@ -1,8 +1,8 @@
    // ==UserScript==
    // @name Syntax.FM - Mark Finished Shows
    // @namespace salembeats
    // @version 1.3
    // @description UPDATE: Fix include path.
    // @version 1.4
    // @description UPDATE: Fix for episode URL formatting (episodes under 100 have leading zeroes in the URL).
    // @author Cuyler Stuwe (salembeats)
    // @include https://syntax.fm/*
    // ==/UserScript==
    @@ -18,7 +18,8 @@ async function main() {
    const audioPlayerTitleEl = audioPlayerEl.querySelector(".player__title");

    const scrapeCurrentEpisodeNumber = () => audioPlayerTitleEl.innerText.match(/(?=\d+:)\d+/)[0];
    const showLinkElForEpisode = episodeNumber => document.querySelector(`[href^="/show/${episodeNumber}/"]`);
    const formatNumberToEpisodeUrlFormat = number => (+number).toLocaleString("en-US", {minimumIntegerDigits: 3});
    const showLinkElForEpisode = episodeNumber => document.querySelector(`[href^="/show/${formatNumberToEpisodeUrlFormat(episodeNumber)}/"]`);
    const markShowAsFinished = episodeNumber => { showLinkElForEpisode(episodeNumber).style = FINISHED_SHOW_STYLE; };

    const storeShowAsFinished = episodeNumber => { localStorage[episodeNumber] = true; };
  2. cuylerstuwe revised this gist Jul 21, 2019. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions syntax-fm-mark-finished-shows.user.js
    Original file line number Diff line number Diff line change
    @@ -1,10 +1,10 @@
    // ==UserScript==
    // @name Syntax.FM - Mark Finished Shows
    // @namespace salembeats
    // @version 1.2
    // @description UPDATE: Method name change.
    // @version 1.3
    // @description UPDATE: Fix include path.
    // @author Cuyler Stuwe (salembeats)
    // @include https://syntax.fm/show/*
    // @include https://syntax.fm/*
    // ==/UserScript==

    const FINISHED_SHOW_STYLE = `
  3. cuylerstuwe revised this gist Jul 21, 2019. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions syntax-fm-mark-finished-shows.user.js
    Original file line number Diff line number Diff line change
    @@ -1,8 +1,8 @@
    // ==UserScript==
    // @name Syntax.FM - Mark Finished Shows
    // @namespace salembeats
    // @version 1.1
    // @description UPDATE: Use localStorage rather than GM_*Value so that context-menu userscripts can interact with values.
    // @version 1.2
    // @description UPDATE: Method name change.
    // @author Cuyler Stuwe (salembeats)
    // @include https://syntax.fm/show/*
    // ==/UserScript==
    @@ -29,12 +29,12 @@ async function main() {
    markShowAsFinished(endedEpisodeNumber);
    });

    const markAllStoredFinishedShows = () => {
    const markAllStoredFinishedShowsAsSuch = () => {
    const allSavedKeys = Object.keys(localStorage);
    allSavedKeys.forEach(savedKey => Number.isInteger(+savedKey) && localStorage[savedKey] ? markShowAsFinished(savedKey) : (0));
    };

    markAllStoredFinishedShows();
    markAllStoredFinishedShowsAsSuch();

    }

  4. cuylerstuwe revised this gist Jul 21, 2019. 1 changed file with 5 additions and 8 deletions.
    13 changes: 5 additions & 8 deletions syntax-fm-mark-finished-shows.user.js
    Original file line number Diff line number Diff line change
    @@ -1,13 +1,10 @@
    // ==UserScript==
    // @name Syntax.FM - Mark Finished Shows
    // @namespace salembeats
    // @version 1.0
    // @description .
    // @version 1.1
    // @description UPDATE: Use localStorage rather than GM_*Value so that context-menu userscripts can interact with values.
    // @author Cuyler Stuwe (salembeats)
    // @include https://syntax.fm/show/*
    // @grant GM_setValue
    // @grant GM_getValue
    // @grant GM_listValues
    // ==/UserScript==

    const FINISHED_SHOW_STYLE = `
    @@ -24,7 +21,7 @@ async function main() {
    const showLinkElForEpisode = episodeNumber => document.querySelector(`[href^="/show/${episodeNumber}/"]`);
    const markShowAsFinished = episodeNumber => { showLinkElForEpisode(episodeNumber).style = FINISHED_SHOW_STYLE; };

    const storeShowAsFinished = episodeNumber => { GM_setValue(episodeNumber, true); };
    const storeShowAsFinished = episodeNumber => { localStorage[episodeNumber] = true; };

    audioEl.addEventListener("ended", e => {
    const endedEpisodeNumber = scrapeCurrentEpisodeNumber();
    @@ -33,8 +30,8 @@ async function main() {
    });

    const markAllStoredFinishedShows = () => {
    const allSavedKeys = GM_listValues();
    allSavedKeys.forEach(savedKey => GM_getValue(savedKey) ? markShowAsFinished(savedKey) : (0));
    const allSavedKeys = Object.keys(localStorage);
    allSavedKeys.forEach(savedKey => Number.isInteger(+savedKey) && localStorage[savedKey] ? markShowAsFinished(savedKey) : (0));
    };

    markAllStoredFinishedShows();
  5. cuylerstuwe created this gist Jul 21, 2019.
    44 changes: 44 additions & 0 deletions syntax-fm-mark-finished-shows.user.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    // ==UserScript==
    // @name Syntax.FM - Mark Finished Shows
    // @namespace salembeats
    // @version 1.0
    // @description .
    // @author Cuyler Stuwe (salembeats)
    // @include https://syntax.fm/show/*
    // @grant GM_setValue
    // @grant GM_getValue
    // @grant GM_listValues
    // ==/UserScript==

    const FINISHED_SHOW_STYLE = `
    opacity: 0.2;
    `;

    async function main() {

    const audioEl = document.querySelector("audio");
    const audioPlayerEl = audioEl.parentElement;
    const audioPlayerTitleEl = audioPlayerEl.querySelector(".player__title");

    const scrapeCurrentEpisodeNumber = () => audioPlayerTitleEl.innerText.match(/(?=\d+:)\d+/)[0];
    const showLinkElForEpisode = episodeNumber => document.querySelector(`[href^="/show/${episodeNumber}/"]`);
    const markShowAsFinished = episodeNumber => { showLinkElForEpisode(episodeNumber).style = FINISHED_SHOW_STYLE; };

    const storeShowAsFinished = episodeNumber => { GM_setValue(episodeNumber, true); };

    audioEl.addEventListener("ended", e => {
    const endedEpisodeNumber = scrapeCurrentEpisodeNumber();
    storeShowAsFinished(endedEpisodeNumber);
    markShowAsFinished(endedEpisodeNumber);
    });

    const markAllStoredFinishedShows = () => {
    const allSavedKeys = GM_listValues();
    allSavedKeys.forEach(savedKey => GM_getValue(savedKey) ? markShowAsFinished(savedKey) : (0));
    };

    markAllStoredFinishedShows();

    }

    main();