Nach Episoden (in Klammern) sortieren
-
Servus,
bei einigen Serien in der ARD Mediathek steht ja die Episodennummer im Titel, z.B. bei Giraffe, Erdmännchen & Co. Leider wird die Serie (bzw andere aus dem Format) nicht immer in der korrekten Reihenfolge ausgestrahlt oder es fehlen Teile.
Hier wäre es hilfreich, wenn man auch nach der im Titel verborgenen Episodennummer (in Klammern) sortieren könnte.
Am einfachsten wäre es wohl, diese beim iterate durch das search result per RFEGEX zu extrahieren und in einer zusätzliche Spalte “Episode” (tooltip=Gefundene mögliche Episodennummer) rechts der Titel-Spalte anzuzeigen
In dem Fall könnte mann dann direkt mit dem eingebauten TableRowSorter arbeiten.Ich habe jetzt nicht auf Github nach der Methode gesucht, also hier ein allgemeiner JAVA Code:
List<String> serien = Arrays.asList( "Die Melone, das unbekannte Wesen (230)", "Raubtierfütterung im Katzendschungel (7)", "Billy bei den Bonobos (115)", "Das Seehundbaby und der Tennisball (159)" ); Pattern pattern = Pattern.compile("\\((\\d+)\\)"); for (String titel : serien) { Matcher matcher = pattern.matcher(titel); if (matcher.find()) { String episodenNummer = matcher.group(1); System.out.println("Gefundene Episodennummer: " + episodenNummer); } else { System.out.println("Keine Episodennummer gefunden in: " + titel); } }
Als Alternative könnte man auch den TableRowSorter für den Titel umschreiben, aber ich denke mal dass würde nur verwirren und man müsste die Funktion dann ja auch aktivierbar/deaktivierbar machen.
Wenn man dann die Episodennummer sowieso schon hat, könnte man beim Download diese auch per Parameter für den Dateinamen verfügbar machen.
Dann könnte man z.b. solche Dateinamen erstellen, wenn dann auch noch die Nummer aus dem Titel automatisch entfernt wird. Hierbei steht%E
dann für die Episodennummer. (nicht getestet ob E schon verwendet wird)%t - E%E - %T.%S
Giraffe, Erdmännchen & Co. - E115 - Billy bei den Bonobos.mp4
-
So etwas vermisse ich auch schon lange. Meiner Meinung nach sollte das einfach sein, wenn man, wenn etwas in Klammern im Titel auftaucht, dies einfach extrahiert und in eine zusätzliche sortierbare Spalte schreibt.
Beispiel:
Thema: Wilsberg
Titel: Blinde Flecken - Der Samstagskrimi (S09/E01)
Zusatzspalte: S09/E01Ein Klick auf die Zusatzspalte sortiert alle Episoden in die richtige Reihenfolge. Dabei ist im Allgemeinen auch egal was genau in den Klammern steht, da die Benennung der Folgen meist innerhalb einer Staffel/Serie konsistent ist.
-
@BugMelder sagte: So etwas vermisse ich auch schon lange.
Nur zur Info für Interessierte: Es gibt wenig elegante Workarounds mit Skripten, wer damit klar kommt.
Es gibt aber auch eine Issue in dieser Richtung in Sache ZDF (die Issue ist war noch offen, aber wenn ich das richtig interpretierte, wurde in dieser Richtung beim ZDF sehr wohl etwas implementiert).@BugMelder sagte: Meiner Meinung nach sollte das einfach sein, wenn man […] in eine zusätzliche sortierbare Spalte schreibt.
Womit die Filmliste noch “schwerer” wird, als sie es jetzt schon ist. Die ganze Filmliste zu sortieren führt jetzt schon manchmal – je nach Konstellation – zu Hängern…
-
In der Zwischenzeit bin ich auch auf die Idee mit dem Skript gekommen. Das erleichtert es die Sendungen in der richtigen Reihenfolge anzusehen. Falls es jemanden interessiert: Es ist ein Powershell-Skript für Windows. Man gibt als Parameter ein Verzeichnis an, in dem die Filme liegen. Entweder werden die Filme nur aufgelistet oder mit Parameter - rename umbenannt. Folgendes Skript einfach in eine Datei “Klammern.ps1” speichern und dann in der Eingabeforderung aufrufen.
# Das Skript verschiebt einen Text in Klammern, der mindestens eine Ziffer enthält, # an den Anfang des Dateinamens hinter das erste Leerzeichen # Aufruf mit: powershell -File Klammern.ps1 -path "Dein Verzeichnis" -rename # -rename ist optional # wird -rename nicht angegeben, wird nur eine Liste der Umbenennungen ausgegeben param ($path, [switch] $rename = $false) Get-ChildItem -Path $path | ForEach-Object { # non greedy matching $x = $_.Name -match '(\([^)]*?\d.*?\))' if ($matches.Count -ge 1) { $klamm = $Matches[1] $x = $_.Name -match '(^.*?\s)' $blank = $Matches[1] $name = $_.Name.Replace($klamm, '') $r = [regex]$blank $name = $r.Replace($name, $blank + $klamm, 1) $name if ($rename) { $pathren = $path + '\' + $_.Name Rename-Item -Path $pathren -NewName $name } } }
-
Ihr vereinfacht das Problem hier doch erheblich.
Es mag sein dass es für ein Thema vermeintlich leicht ist, “einfach” mal die Episode rauszusuchen.Was von allen Schreibern vernachlässigt wird: Die Infos liegen für die verschiednen Themen unterschiedlich vor und das muss alles berücksichtigt werden. So gibt es nach einer kursorischen Suche in der Filmliste folgende Formate:
- (<Nummer>) z.B. Rote Rosen (1099)
- (<Jahr>) z.B. Das ewig Böse (2006)
- (<Datum>) z.B. Sportarena am Sonntag (20.04.2006)
- 100 Jahre Polizei (2) - Nationalsozialismus -> was soll das dann sein?
- (S<Jahr>/E<Nr>) z.B. Sündenbabel Berlin: Utopie und Untergang (S2018/E03)
- (S<Nr>/E<Nr>) z.B. Das erste Mal Strand (S20/E65)
Wie unterscheide ich (Nummer) von (Jahr), ist das eine Episode oder Season? Ist Datum eine Episode oder Season? Was wenn die Klammer nicht am Ende steht sondern wie im Beispiel mittendrin?
Somit kann man allgemein nur (Sx/Ex) auslesen - und der TE ist gekniffen.
Natürlich kann man das ganze dann regelbasiert aufbauen um eine Zuordung für jeden Film zu erzeugen. Jede Regel wird auf jeden Film in der Liste angewendet. Wie @styroll schon treffend angemerkt hat wird MV für die meisten Nutzer dadurch nicht schneller - und ich gehe davon aus dass auch nur ein kleiner Prozentsatz der Nutzer dieses Feature überhaupt benötigt.Wenn jemand eine elegante schnelle Java-Lösung findet bin ich durchaus gewillt dies als optionales Feature zur Verfügung zu stellen.
-
Ja, ich weiß, dass es keine Lösung für alle möglichen Fälle ist, aber mir genügt es bereits, wenn es innerhalb eines Themas für mich funktioniert. Entweder nach einzelnen Folgen zu suchen oder in richtiger Reihenfolge anzuschauen.
Das Skript enthält noch einen Fehler. Ich kann das oben aber nicht mehr korrigieren.
-
@BugMelder Ich bezog mich nicht auf das script, dazu hat styroll schon vorher mal entsprechende Verweise gemacht dass andere User dies schon länger so lösen, sondern auf deinen Post #2 bzw. den TE Post bzgl. programminterner Sortierung. Was ihr mit externen Skripts macht ist MV herzlich egal, wenn ich es intern implementieren soll sollte es schon einen benefit für viele bringen und dann auch möglichst viel abdecken ohne nur Ballast darzustellen.
-
Irgendwie habe ich keine Benachrichtigung bekommen, dass es einen neuen Beitrag hier gibt, also sorry für die späte Antwort.
Woher kenne ich Deinen Namen ? Also ich meine außerhalb von dem Forum hier ?OK back to topic:
Man sucht ja normalerweise direkt eine spezielle Serie oder Film, also z.b. Rote Rosen.
Diese Haben ja die fortlaufende Nummer in Namen.Auch Bei Filmen wie “Da ewig Böse” mit verschiedenen Jahreszahlen, handelt es sich um Integer.
Eine Sortierung kann hier ASC oder DESC erfolgen. Kein INT vorhanden --> INT = 0; (idealerweise in der GUI ausblenden)Bei Serien mit einem Datum drin, wie die Sportarena, kann man nachdem man erkannt hat, dass es sich um ein Datum handelt:
- Entweder über isValidDate
- oder prüfen, ob es 2 Punkte zwischen den Klammern gibt, dann split auf die Punkte, das wieder (umgedreht) zu YYYYMMDD zusammenfügen und man kann auch als INT sortieren.
“100 Jahre Polizei (2) - Nationalsozialismus” --> Hier hat man auch die Zahl in Klammern und kann somit die verschiedenen Teile sortieren. Die 100 vorher wird ignoriert.
Sx/Ex ist tatsächlich etwas komplizierter, so lange die Zahlen bei Staffel und Episode eine feste Länge haben, also ggf. auch führende Nullen, ist es auch kein Problem ASC/DESC zu sortieren. Das Problem fängt an, wenn es S1 bis S10 gibt und die Episoden dann nicht E01 sind, sondern E1, E2 usw.
Was man dann machen könnte:
S1/E1
S1/E10
S12/E2
S12/E13Das ganze in einen “pseudo integer” umwandeln.
- Also einmal ein Split beim “/”
- dann haben wir z.b. als Teile
S12 und E2 (ggf hier noch ein Trim machen falls leerzeichen im Namen waren wie (S01 / E23) - Jetzt ein replace auf das S und das E dann haben wir die “Rohdaten” 12 und 2
- Jetzt kommen wir zum “Pseudo Integer”. Wir haben:
– die 12 für die Staffel, also multiplizieren wir fiktive 1.000 * 12 und haben somit 12.000
– die 2 für die Episode, also addieren wir 2 + 12.000 und haben 12.002
S1/E1 = 1.001 S1/E10 = 1.010 S12/E2 = 12.002 S12/E13 = 12.013
Das Ganze macht natürlich nur bei einer Detailsuche Sinn, nicht wenn man sich das gesamte “Sortiment” ausgeben lässt.
Generieren würde ich das Sort-Schema schon beim Erstellen der Arraylist mit den Objekten. Also dem Objekt eine zusätzliche Eigenschaft hinzufügen setter / getter für int customEpisodeSorting
Aktivieren/Deaktivieren der Sortierung zum Anfang evtl über ein JMenuItem und das dann direkt auf den Stream (vermutlich verwendest du streams) anwenden, also auf das SortBy. So hast Du keine zusätzliche Spalte und nur die ArrayList ist etwas größer geworden.
Ist der Code hier als Eclipse Projekt vorhanden ? Habe nur gesehen, dass es den SourceCode wohl gibt aber noch nicht reingeschaut. Ist auch (für mich) immer wieder schwer sind im Code anderer Programmierer zurechtzufinden. ^^
-
@Mindreader sagte in Nach Episoden (in Klammern) sortieren:
Irgendwie habe ich keine Benachrichtigung bekommen, dass es einen neuen Beitrag hier gibt, also sorry für die späte Antwort.
Woher kenne ich Deinen Namen ? Also ich meine außerhalb von dem Forum hier ?Keine Ahnung, ich treibe mich in wenig bis keinen anderen Foren rum. Davon abgesehen - Du bist der Mindreader
OK back to topic:
[…]Du hast 2 von den von mir auf den ersten Blick 6 use cases angesprochen. Es gibt noch ein paar andere Fälle die das ganze nicht trivialer machen, z.B. zusätzlich (Audiodeskription) etc im Titel.
Ich persönlich glaube nicht dass sich der Aufwand einer Implementierung für alle lohnt, allein die Beschreibung deines Vorgehens beinhaltet doch einige komplexe String- und Regex-Operationen und nur wenige User werden diese Funktionalität überhaupt nutzen. Gerade in Anbetracht das die meisten User keine top-notch Superrechner nutzen sehe ich das ganze als wenig zielführend an - was dich nicht davon abhalten soll es selbst zu versuchen - ggf. kann es ja dann integriert werden. Als ersten Anlaufpunkt hierfür kannst DuGuiFilmeModelHelper.performTableFiltering(...)
modifizieren.Ist der Code hier als Eclipse Projekt vorhanden ? Habe nur gesehen, dass es den SourceCode wohl gibt aber noch nicht reingeschaut. Ist auch (für mich) immer wieder schwer sind im Code anderer Programmierer zurechtzufinden. ^^
Ja, der code ist auf github verfügbar, die Links sind auf der Homepage. Ich verwende kein Eclipse aber da es sich um ein “stinknormales” maven-Projekt handelt sollte Eclipse daraus ein Projekt machen können.