Jump to content

Watchlist verbessern mit Greasemonkey.


Recommended Posts

Moin!

Im Chat hatte man mir vorgeschlagen, mein kleines Greasemonkey Script hier vorzustellen.

In meiner Watchlist wollte ich einen Überblick haben, welche Sereien neue Folgen haben. Ausserdem wollte ich mit einem Klick auf die Serie direkt in der passenden Staffel und nicht immer in Staffel 1 landen.

Das war die erste Version meines Scripts.

Dann war mir aufgefallen, dass die Serien in der Watchlist nach "Hinzufügedatum" sortiert sind. Ein Klick auf "Sortieren nach Titel" sortiert allerdings nicht nach Titel, sondern sortiert auch nach Hinzufügedatum.

Das habe ich mit meinem Script auch noch geändert. Jetzt bekommt man also beim ersten Aufruf der Watchlist die bisherige Sortierung. Beim Klick auf einen der Sortierlinks, wird nach Titeln sortiert.

Als letztes habe ich noch eingebaut, dass Serien mit ungesehenen Folgen an den Anfang der Liste gestellt werden. Das geschieht leider unsortiert und ist auch nicht so leicht änderbar. Aber: Ich arbeite dran. Update: Erledigt. Die "ungesehenen" Folgen erscheinen nun in sortierter Reihenfolge am Anfang der Liste.

Hier ist der Sourcecode des Scripts.

// ==UserScript==
// @name     s.to watchlist
// @version  3
// @grant    none
// @include  https://s.to/account/watchlist
// @include  https://s.to/account/watchlist/asc
// @include  https://s.to/account/watchlist/desc
// @require  https://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==

// Userscript für s.to - Watchlist.
// Fügt hinter dem Genre die Staffel und Episodennummer der
// ersten ungesehenen Folge ein.
// Holt Serien mit neuen Folgen nach vorne in der Liste.
// Kann die Liste nach Titel sortieren.

// Sollen ungesehene Serien (unsortiert!) nach vorne geholt werden?
var neu_nach_vorne= true; // false statt true, wenn sie nicht nach vorne sollen

// Sortieren
var direction= 0;
var seriesContainer=$('div.seriesListContainer');
if (document.location.href.match(/\/asc$/) !== null) {
  direction= 1;
}
else if (document.location.href.match(/\/desc/) !== null) {
  direction= -1;
}
if (direction !== 0 ) {
  var c=seriesContainer.children('div');
  c.sort( function(a,b) {
    return direction * serien_cmp(a,b)
  });
  seriesContainer.append(c);
}

// Serienzähler
var s_count= seriesContainer.children('div').length;
// Zunächst alle Serien einsammeln
$('.seriesListContainer a').each(
  function(i, elt) {
    // Die Haupseite jeder Serie laden
    $.ajax({
      url: elt.href,
      // Auf jeder Hauptseite
      success: function(result) {
        // Die Seite parsen (Pseudo-HTML durch umklammerndes root-Element)
        var series_info= $.parseHTML("<root>" + result + "</root>");
        // Alle Staffellinks herausziehen, die nicht als "seen" markiert sind
        // Das schließt auch die erste Staffel mit ein, da sie im Normalfall
        // als "active" markiert ist.
        // Zusätzlich werden alle Links ausgefiltert, deren Bezeichnung nicht ausschließlich
        // aus Ziffern besteht (Siehe Doctor Who "Filme")
        var seasons= $(series_info).find('#stream > ul:first-child a:not(a.seen)').filter(function(i){ return this.textContent.match(/^\d+/)!==null });
        // Alle Episodenlinks der ungesehenen Folgen der aktiven Staffel herausziehen
        var episodes= $(series_info).find('#stream > ul a[data-season-id]:not(a.seen)');
        // Das Genre Element holen
        var genre= $(elt).find('small');
        // Gibt es ungesehene Episoden in der aktuellen Staffel?
        if (episodes.length > 0) {
          // dann den Serienlink auf diese Staffel setzen
          elt.href= seasons[0].href;
          // Und die Informationen über die Episode hinter dem Genre einfügen.
          genre.text(genre.text() + " " + episodes[0].getAttribute("data-season-id") + "-" + episodes[0].innerText);
          // Highlight mit existierender class
          $(elt).addClass('formsection');
          if ( 0 == --s_count && neu_nach_vorne ) to_front(); 
        } else {
          // Gibt es eine ungesehene Staffel?
          if (seasons.length > 1) {
            // Dann den Serienlink auf diese Staffel setzen
            elt.href= seasons[1].href;
            // Die Staffelinformationen laden
            $.ajax({
              url: elt.href,
              // auf der Staffelseite
              success: function(result) {
                // wieder die Seite als Pseudo-HTML parsen
                var series_info= $.parseHTML("<root>" + result + "</root>");
                // Ungesehene Episoden herausziehen
                var episodes= $(series_info).find('#stream > ul a[data-season-id]:not(a.seen)');
                // Wenn es welche gab (das sollte eigentlich immer der Fall sein, wenn wir hier sind)
                if (episodes.length > 0) {
                  // Die Informationen hinter dem Genre einfügen
                  genre.text(genre.text() + " " + episodes[0].getAttribute("data-season-id") + "-" + episodes[0].innerText);
                  // Highlight mit existierender class
                  $(elt).addClass('formsection');
                }
                if ( 0 == --s_count && neu_nach_vorne ) to_front(); 
              }
            });
          } else {
            if ( 0 == --s_count && neu_nach_vorne ) to_front(); 
          }
        }
      }
    });
  }
);

function serien_cmp(a, b) {
  return $(a).find('h3').text().localeCompare($(b).find('h3').text());
}

function to_front() {
  seriesContainer.prepend( seriesContainer.find('a.formsection').parent() );
}

 

Edited by 5keeve
Ungesehene Folgen sortiert
Link to post
Share on other sites
  • 1 year later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Jetzt registrieren

    Kostenlos Mitglied werden! In unserem Forum findest du allgemeine Serien-News, Status-Updates und du kannst fehlende Streams melden.

    Die Accounts unserer Hauptseite S.TO sind hier nicht gültig.

    🎥🥰😉👌🍿🎉

×
×
  • Create New...