god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Ich habe mal nachfolgenden Befehl auf die alte rhythmdb.xml unter Win8 ausgeführt (siehe alte Fehlermeldung https://forum.ubuntuusers.de/topic/rhythmbox-stuerzt-ab-nach-update-auf-ubuntu-16/):
D:\Users\Marcus\Programme\xmlstarlet-1.6.1>xml sel -t -m //entry[3275] -c . rhythmdb_alt.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <entry type="song">
<title>Tod und Niedergang</title>
<genre>Metal Core</genre>
<artist>Totenmond</artist>
<album>Fleischwald</album>
<track-number>3</track-number>
<track-total>10</track-total>
<disc-number>1</disc-number>
<disc-total>1</disc-total>
<duration>392</duration>
<file-size>9520104</file-size>
<location>file:///media/DATA_01/Mediadaten/Musik/Audio/Totenmond/Fleischwald/03%20Tod%20und%20Niedergang.mp3</location>
<mountpoint>file:///media/DATA_01</mountpoint>
<mtime>1298755760</mtime>
<first-seen>1284401002</first-seen>
<last-seen>1461245702</last-seen>
<bitrate>192</bitrate>
<date>729390</date>
<media-type>audio/mpeg</media-type>
<composer>Unbekannt</composer>
</entry>
|
Und hier der Eintrag in der neuen rhythmdb.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <entry type="song">
<title>Tod und Niedergang</title>
<genre>Metal Core</genre>
<artist>Totenmond</artist>
<album>Fleischwald</album>
<track-number>3</track-number>
<track-total>10</track-total>
<disc-number>1</disc-number>
<disc-total>1</disc-total>
<duration>392</duration>
<file-size>9520104</file-size>
<location>file:///media/DATA_01/Mediadaten/Musik/Audio/Totenmond/Fleischwald/03%20Tod%20und%20Niedergang.mp3</location>
<mountpoint>file:///media/DATA_01</mountpoint>
<mtime>1298755760</mtime>
<first-seen>1461490742</first-seen>
<last-seen>1471802752</last-seen>
<bitrate>192</bitrate>
<date>729390</date>
<media-type>audio/mpeg</media-type>
<composer>Unbekannt</composer>
</entry>
|
Ich kann keinen bedeutenden Unterschied erkennen. Bezieht sich denn die 3275 auf die Datensatznummer in der rhythmdb.xml oder auf eine Zeile oder ProzessID des Programms Rhythmbox ?
(rhythmbox:3275): Gtk-WARNING **: Duplicate child name in GtkStack: Zur
Wiedergabeliste hinzufügen
(rhythmbox:3275): RhythmDB-CRITICAL **: rhythmdb_entry_get_entry_type:
assertion 'entry != NULL' failed
Speicherzugriffsfehler (Speicherabzug geschrieben)
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
god_of_emptiness schrieb: Ich habe mal nachfolgenden Befehl auf die alte rhythmdb.xml unter Win8 ausgeführt (siehe alte Fehlermeldung https://forum.ubuntuusers.de/topic/rhythmbox-stuerzt-ab-nach-update-auf-ubuntu-16/):
D:\Users\Marcus\Programme\xmlstarlet-1.6.1>xml sel -t -m //entry[3275] -c . rhythmdb_alt.xml
... Ich kann keinen bedeutenden Unterschied erkennen.
Nee, ich auch nicht: track@track:~$ diff rhythmbox_3275.xml rhythmbox_3275n.xml
15,16c15,16
< <first-seen>1284401002</first-seen>
< <last-seen>1461245702</last-seen>
---
> <first-seen>1461490742</first-seen>
> <last-seen>1471802752</last-seen> Stürzte Rhythmbox denn tatsächlich mit der alten Datei ab und mit der neuen nicht ? Bezieht sich denn die 3275 auf die Datensatznummer in der rhythmdb.xml oder auf eine Zeile oder ProzessID des Programms Rhythmbox ?
Das ist eine gute Frage ! - ich habe das auch nur geraten, und erstmal die Version "Datensatz" probiert, weil sie mir logischer erschien. Du kannst ja mal mir sed -n '3275p rhythmdb_alt.xml gucken, ob in dieser Zeile was komisches drin steht. (ich denke aber, nicht) Letztlich kann man das wohl nur klären, wenn man im Quelltext der Rhythmbox recherchiert, wie diese Fehlermeldung denn nun genau entsteht. (nur, die Mühe wollte ich mir ersparen) Deshalb hatte ich vorgeschlagen, einfach etwas gezielt herum zu probieren, ob man die rhythmdb_alt.xml nicht ein bisschen "frisieren" kann, damit er sie wieder nimmt. Der Punkt ist: wie kann man eingrenzen, was ihn abschmieren lässt ? Hatte er die neu erstellte rhythmdb.xml denn gefressen ? - und war die bis auf die falschen counts auch komplett ? LG, track
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Nee, ich auch nicht: track@track:~$ diff rhythmbox_3275.xml rhythmbox_3275n.xml
15,16c15,16
< <first-seen>1284401002</first-seen>
< <last-seen>1461245702</last-seen>
---
> <first-seen>1461490742</first-seen>
> <last-seen>1471802752</last-seen>
Das oben ist zu erwarten, denn Rhythmbox wir beim Erstellen der neuen rhythmdb.xml die Musikdateien neu eingelesen haben, weil die neue rhthmdb.xml ja leer war, das heißt es gibt ein neues <first-seen> Datum. Stürzte Rhythmbox denn tatsächlich mit der alten Datei ab und mit der neuen nicht ?
Ja Du kannst ja mal mir sed -n '3275p rhythmdb_alt.xml gucken, ob in dieser Zeile was komisches drin steht.
| sed -n 3275p rhythmdb_alt.xml
|
| <file-size>5331696</file-size>
|
Scheint i.O. zu sein.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
god_of_emptiness schrieb: Das oben ist zu erwarten, denn Rhythmbox wir beim Erstellen der neuen rhythmdb.xml die Musikdateien neu eingelesen haben, weil die neue rhthmdb.xml ja leer war, das heißt es gibt ein neues <first-seen> Datum.
Das ist sowieso klar. Interessant fand ich, dass es außer dem aber keine Unterschiede weiter gibt ! Stürzte Rhythmbox denn tatsächlich mit der alten Datei ab und mit der neuen nicht ?
Ja
Ok, also könnte man jetzt ja mal Stück für Stück gucken, wie man das Problem eingrenzen kann. | sed -n 3275p rhythmdb_alt.xml
|
| <file-size>5331696</file-size>
|
Scheint i.O. zu sein.
Ja. Also ist die "3275" ganz offensichtlich nicht als Zeilennummer zu verstehen. (Das wollten wir ja wissen) Jetzt könnte man es mal in 2 Richtungen weiter versuchen:
Er stürzt immer noch mit der Fehlermeldung bei "3275" ab, richtig ? Dann mal die Datensätze 3274 und 3276 ansehen, ob die vielleicht komisch sind ? Sonst mal die alte Datei im Datensatz 3275 abschneiden, und den Rest von der neuen Datei anstückeln. Das könnte so gehen: | sed '\|<location>file:///media/DATA_01/Mediadaten/Musik/Audio/Totenmond/Fleischwald/03%20Tod%20und%20Niedergang.mp3</location>| q' rhythmbox_alt.xml > rhythmbox_misch.xml
sed '1,\|<location>file:///media/DATA_01/Mediadaten/Musik/Audio/Totenmond/Fleischwald/03%20Tod%20und%20Niedergang.mp3</location>| d' rhythmbox_neu.xml >> rhythmbox_misch.xml
|
Damit nimmst Du alles bis Datensatz 3275 aus der alten Datei und den Rest aus der neuen Datei. Wenn das keinen Unterschied bringt, mal in dem Sinne weiter probieren: was passiert wenn man es umgekehrt macht: die 1. Hälfte aus der neuen, die 2. Hälfte aus der alten Datei ? Macht es eine Unterschied, wenn man schon vorher schneidet, z.B. bei Datensatz 3274 ?
usw. ... - außer Herumprobieren fällt mir jetzt auch nicht viel ein. Doch, eines: den Quellcode analysieren. Aber das wird eine größere Sache. LG, track
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Es gibt seit kurzem einen neue Rhythmbox Version (3.4) unter:
https://launchpad.net/~fossfreedom/+archive/ubuntu/rhythmbox
Ich werde sie mal die Tage installieren.
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Rhythmbox Version 3.4 stürzt nicht mehr mit meiner alten rhythmdb.xml ab ☺ .
Das Skript läuft und führt die beiden rhythmdb.xml zusammen. Die playcounts werden aber nicht aufsummiert.
@seahawk1986: Kannst du dein Skript nochmal anpassen, so dass die <playcounts> von der alten und neuen rhythmdb.xml addiert werden ?
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
@ track | xmlstarlet sel -t -m //entry[3275] -c . rhythmdb.xml
|
Kannst du mir bitte sagen, wie ich mir die Einträge eines Albums anzeigen lassen kann.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
god_of_emptiness schrieb: @ track Kannst du mir bitte sagen, wie ich mir die Einträge eines Albums anzeigen lassen kann.
Wenn Du mir verrätst, was Du damit meinst ... z.B. woran ich das gesuchte Album erkennen kann ? Ich nehme an, Du willst den betreffenden XML- Block ausgeben, so wie bei dem Beispiel. Dann bräuchte nur der Auswahl-Ausdruck in der eckigen Klammer angepasst werden. Die Frage ist nur, wie. LG, track
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Beispieleinrag:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <entry type="song">
<title>Union City Blue</title>
<genre>New Wave, Punk</genre>
<artist>Blondie</artist>
<album>The Best Of Blondie</album>
<track-number>10</track-number>
<track-total>14</track-total>
<duration>203</duration>
<file-size>8144670</file-size>
<location>file:///media/DATA_01/Mediadaten/Musik/Audio/Blondie%20-%20The%20Best%20Of%20Blondie/10.%20Blondie%20-%20Union%20City%20Blue.mp3</location>
<mountpoint>file:///media/DATA_01</mountpoint>
<mtime>1351846957</mtime>
<first-seen>1356945037</first-seen>
<last-seen>1461245704</last-seen>
<bitrate>320</bitrate>
<date>726468</date>
<media-type>audio/mpeg</media-type>
<comment>www.320k.in</comment>
<album-artist>Blondie</album-artist>
<composer>Debbie Harry/Nigel Harrison</composer>
</entry>
|
Relevant sollte dann
| <album>The Best Of Blondie</album>
|
sein.
Ich habe es u.a mit folgenden versucht, es werdeb aber keine XML-Blöcke gefunden:
| xmlstarlet sel -t -m //entry[album="The Best Of Blondie"] -c . rhythmdb_alt.xml
|
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Ja, da sind ein paar handwerkliche Dinge zu beachten:
Den Inhalt eines Xpath-Knotens kann man nicht direkt abfragen, sondern am einfachsten mit Hilfe der text() - Funktion Auch hier muss man das "Quoting" beachten - und zwar gleich zwei Mal: für die Shell, damit die () nicht von der Shell verbraten werden und für den Xpath: damit der gesamte Text als ein String verstanden wird
Also z.B. so: | xmlstarlet sel -t -m "//entry/album[text()='The Best Of Blondie']" -c .. rhythmdb_alt.xml
|
Hier habe ich den <album> - Knoten ausgesucht und dazu dann den übergeordneten Node (..) ausgeben lassen. LG, track
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Danke, genau so habe ich mir die Ausgabe gedacht. Den Inhalt eines Xpath-Knotens kann man nicht direkt abfragen, [...]
Das soll einer wissen ☹.
Hatte beim querlesen einiger xpath-Anleitungen nichts darüber gelesen (übersehen?). Bye
Marcus
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Ich werde wohl die beiden rhythmdb.xml jetzt manuell zusammenführen.
Dazu möchte ich die neue nach <last-played> sortieren. Ich habe schon folgendes und ähnliches probiert:
| xmlstarlet sel -t -m "//entry/last-played" -s D:T:- "//entry/last-played[text()]" -c .. rhythmdb_alt.xml
|
Leider wird nichts sortiert.
Hat jemand eine Idee ? Bye
Marcus
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
god_of_emptiness schrieb: Ich werde wohl die beiden rhythmdb.xml jetzt manuell zusammenführen. ...
Uh, und das bei 2 Mill. Einträgen ??? Da wäre es ja sogar noch einfacher, wenn Du
die Counts auf der alten XML- Datei mit Hilfe von xmlstarlet sel erntest und in einem assoziativen (Bash-) Array speicherst. So von der Art: count[dateipfad]=Anzahl und dann für jeden dieser Einträge mit Hilfe von xmlstarlet ed diese Zahl zu dem betreffenden Eintrag in der neuen XML-Datei hinzuaddierst. (Beachte: es gibt jede Menge Xpath-Funktionen, damit kannst Du unter xmlstarlet natürlich auch addieren.)
Im Moment fehlt mir allerdings die Zeit, Dir direkt die Lösung zu liefern, da müsstest Du bitte selber 'ran. LG, track
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Uh, und das bei 2 Mill. Einträgen ???
Der Unterschied zwischen den beiden Datenbanken beträgt ca. ein halbes Jahr.
Ich schätze in dem Zeitraum habe ich so 100 - 200 Lieder gespielt, d.h. wenn ich nach denen sortieren könnte, brauche ich nur die dazu addieren.
| xmlstarlet sel -t -m "//entry/last-played" -s D:T:- "//entry/last-played[text()]" -c .. rhythmdb_alt.xml
|
Ist denn an diesem Befehl was augenscheinlich falsch ? LG
Marcus
|
god_of_emptiness
(Themenstarter)
Anmeldungsdatum: 31. Mai 2007
Beiträge: 186
|
Scheint jetzt zu sortieren:
| xmlstarlet sel -t -m '//entry/last-played' -s A:N:- 'number(.)' -c '..' -n rhythmdb_alt-test.xml
|
Bye
Marcus
|