Hashwert im Dateinamen von Downloads, Debugging in VS Code
-
/** * Returns a hash code for this string. The hash code for a * {@code String} object is computed as * <blockquote><pre> * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] * </pre></blockquote> * using {@code int} arithmetic, where {@code s[i]} is the * <i>i</i>th character of the string, {@code n} is the length of * the string, and {@code ^} indicates exponentiation. * (The hash value of the empty string is zero.) * * @return a hash code value for this object. */ public int hashCode() { // The hash or hashIsZero fields are subject to a benign data race, // making it crucial to ensure that any observable result of the // calculation in this method stays correct under any possible read of // these fields. Necessary restrictions to allow this to be correct // without explicit memory fences or similar concurrency primitives is // that we can ever only write to one of these two fields for a given // String instance, and that the computation is idempotent and derived // from immutable state int h = hash; if (h == 0 && !hashIsZero) { h = isLatin1() ? StringLatin1.hashCode(value) : StringUTF16.hashCode(value); if (h == 0) { hashIsZero = true; } else { hash = h; } } return h; }
Aber Vorsicht, die String.hashCode() Methode verhält sich unterschiedlich bzgl. ASCII vs. UFT-16 strings.
BeiLatin1Strings
wird am Ende diese Funktion aufgerufen:private static int unsignedHashCode(int result, byte[] a, int fromIndex, int length) { int end = fromIndex + length; for (int i = fromIndex; i < end; i++) { result = 31 * result + Byte.toUnsignedInt(a[i]); } return result; }
result
wird hier mit 0 initialisiert.Ich würde dir empfehlen IntelliJ Community Edition herunterzuladen. Damit kannst du MV als maven Projekt öffnen. Das Debuggen mit IntelliJ ist bedeutend besser und man kann sehr einfach über context menu oder Tastatur den function calls folgen.
-
Ich habe meine Reimplementation von hashCode() in Python mit der oben als Beispiel benutzten URL “https://nrodlzdf-a.akamaihd.net/none/zdf/25/02/250225_rosendahl_charles_hde/1/250225_rosendahl_charles_hde_3360k_p36v17.mp4” getestet. Wie die Bibliotheksfunktion in Java liefert sie den Wert -1776013421. Die Python-Version scheint also korrekt zu sein.
Das Problem steckt an einer anderen Stelle: Die im Suchergebnis angegebene URL unterscheidet sich von der URL, die in der Infodatei genannt wird. Und deren Hashwert wird beim Download benutzt. Beispiel: Die KiKa-Sendung “Ein warmes Plätzchen” aus der Serie “Shaun das Schaf” wird als “Shaun das Schaf-Ein warmes Plätzchen-1126590016.mp4” heruntergeladen. Laut Infodatei ist die URL der Sendung “https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/230/2307570/2307570_56461426.mp4”. Der Hashwert dieser URL ist tatsächlich 1126590016. Aber laut Suchergebnis hat die Sendung die URL “https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/230/2307570/2307570_56461430.mp4”. Die letzten beiden Ziffern vor dem Punkt der URLs unterscheiden sich, und somit auch ihr Hashwert. Wie kommt das denn?
-
@maf sagte: Die letzten beiden Ziffern vor dem Punkt der URLs unterscheiden sich, und somit auch ihr Hashwert. Wie kommt das denn?
- “26”: URL, welche in der Filmliste steht (allgemein: URL der Version in mittlerer Auflösung, was du vermutlich mit “Suchergebnis” gemeint hast)
- “30”: URL der höchsten Auflösung (allgemein: URL der Version für die vom Benutzer beim Download selektiertem Auflösung, die dann auch im Info-File erscheint)
-
solltest auch bedenken (z.B. aktueller Tatort, die sammle ich): gleiche Filme werden oft bei unterschiedlichen Sendern / mit unterschiedlichen Titeln («Charlie» – Der neue Fall aus München oder Charlie) und auch unterschiedlichen URLs angeboten. Der Vergleich über die URL wird den Film nicht wiedererkennen.
Ich vergleiche über den Titel mit einem “großzügigen” Vergleich
-
@Georg-J sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:
Erster Record der Filmliste: “Url_Klein” steht 4 Felder hinter “Url”, “Url_HD” steht 6 Felder hinter “Url”. Diese Inhalte verändern den Wert von “Url”.
Die unterschiedlichen URLs habe ich noch nicht gefunden. Im Ergebnis der Suche (= Filmliste?) gibt es bei mir folgende Spalter: Nr, Sender, Thema, Titel, (3 x Buttons), Datum, Zeit, Dauer, Größe, HQ, UT, Geo und URL. Diese Daten erhalten ich auch mit Ctrl-A Ctrl-C. Kann ich die Spalten vielleicht konfigurieren?
-
@maf sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:
@Georg-J sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:
Erster Record der Filmliste: “Url_Klein” steht 4 Felder hinter “Url”, “Url_HD” steht 6 Felder hinter “Url”. Diese Inhalte verändern den Wert von “Url”.
Die unterschiedlichen URLs habe ich noch nicht gefunden. Im Ergebnis der Suche (= Filmliste?) gibt es bei mir folgende Spalter: Nr, Sender, Thema, Titel, (3 x Buttons), Datum, Zeit, Dauer, Größe, HQ, UT, Geo und URL. Diese Daten erhalten ich auch mit Ctrl-A Ctrl-C. Kann ich die Spalten vielleicht konfigurieren?
Georg spricht von der eigentlichen Filmliste, du von der Liste die du unter dem Tab Filme im Client zu sehen bekommst. Zwei verschiedene Dinge.
-
@vitusson sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:
Georg spricht von der eigentlichen Filmliste, du von der Liste die du unter dem Tab Filme im Client zu sehen bekommst. Zwei verschiedene Dinge.
Ist diese “eigentliche Filmliste” die Datei filme.json im Ordner “.mediathek3”? Dann kann ich also in der Filmliste nach dem Eintrag mit der URL suchen, die ich im Suchergebnis finde, und dann sechs Felder weiter die URL für die HD-Version finden?
Mein Test: Die URL der Sendung “Shaun auf der Flucht” in der Liste der Suchergebnisse ist “https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/222/2227824/2227824_56161383.mp4”. Diese USR finde ich auch in filme.json. Vier Felder weiter steht “82|1.mp4” (was ist das?) und sechs Felder weiter steht “https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/222/2227824/2227824_56161379.mp4”. Der Hash-Wert dieser URL ist 740055391. Und der Download der Sendung hat tatsächlich den Dateinamen “Shaun das Schaf-Shaun auf der Flucht-0740055391.mp4”. Bingo!
-
[ "Sender", "Thema", "Titel", "Datum", "Zeit", "Dauer", "Größe [MB]", "Beschreibung", "Url", "Website", "Untertitel", "UrlRTMP", "Url_Klein", "UrlRTMP_Klein", "Url_HD", "UrlRTMP_HD", "DatumL", "Url_History", "Geo", "neu" ] [ "", "", "Shaun auf der Flucht", "15.03.2025", "18:05:00", "00:07:03", "111", "Als Shaun er in der Küche des Farmers Chaos anrichtet und überall Torte verteilt, können ihm die Schafe nicht mehr helfen. Der Farmer ist stinksauer.", "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/222/2227824/2227824_56161383.mp4", "https://www.kika.de/shaun-das-schaf/videos/shaun-auf-der-flucht-102", "", "", "82|1.mp4", "", "81|79.mp4", "", "1742058300", "", "DE", "true" ],
-
Danke euch allen, jetzt klappt es.
Da ich die Suche nun in der Filmliste selbst durchführe, benötige ich das GUI eigentlich nur, falls eine neue Sendung heruntergeladen werden muss. Deshalb, für die reine Suche: Ist es möglich, MediathekView so aufzurufen, dass die Filmliste aktualisiert aber das GUI nicht geöffnet wird. Und für den Fall eines Downloads: Ist es möglich, MediathekView zu starten ohne die Filmliste zu aktualisieren?
-
@maf sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:
: Ist es möglich, MediathekView so aufzurufen, dass die Filmliste aktualisiert aber das GUI nicht geöffnet wird.
Ja, mit dem Parameter -dq oder --download-quit aufrufen
-
@vitusson sagte: Ja, mit dem Parameter -dq oder --download-quit aufrufen
Das könnte man ja selbst mal testen, bevor man eine Aussage dazu macht (wie nennst du das schon wieder: “Glauben vs. Wissen”?)
@maf: Du kannst mit der besagten Funktion, welche du mit einem Startskript aufrufst, anstehende Downloads z.B. aus Abos runterladen, wonach sich das Programm automatisch beendet (das geht allerdings nicht, ohne dass dabei “das GUI geöffnet” wird).
@maf sagte: Und für den Fall eines Downloads: Ist es möglich, MediathekView zu starten ohne die Filmliste zu aktualisieren?
Ja, ich empfehle dir mal die Programmeinstellungen durchzugehen. Die Art des Ladens der Filmliste kann dort ein- bzw. auf manuell umgestellt werden. Mal abgesehen davon, aktualisiert sich die Filmliste v.a. automatisch, wenn sie älter als 3 h ist und MV neu gestartet wird.
-