[CUI] Archivarisches Taggen

Begonnen von TomPro, 30. März 2016, 13:49:55

Vorheriges Thema - Nächstes Thema

TomPro

Wasn dat?
Beatles, The statt The Beatles oder Gabriel, Peter statt Peter Gabrial

Angeregt durch eine Anfrage bezüglich dem einem archivarisch getaggtem Artist bei der Suche nach Lyrics:

http://foobar-users.de/index.php?topic=4662.msg23942#msg23942

hatte ich folgenede Antwort gegeben:

$trim($right(%artist%,$sub($len(%artist%),$strstr(%artist%,', ')))$ifequal($strstr(%artist%,', '),0,,' '$left(%artist%,$sub($strstr(%artist%,', '),1))))

mit dem Problem das jetzt Peter, Paul & Mary oder Emerson, Lake & Palmer nicht mehr richtig funktionieren. auch macht diese simple Antwort bei Multifield Tagging nicht mehr wirklich Sinn.

Um nun aber bei der "Columns UI" in der "Playlist View" beiden Problemen Herr zu werden habe ich mich nochmal bemüht auch hier eine funktionieren Lösung zu erbasteln. Mit einem zweigeteilten Trick ist mir das ganze dann auch gelungen und davon sollt Ihr dann natürlich auch profitieren.

Trick 1:
Beim Reiter "Globals" in den Preverences (Columns UI/Playlist View) kann man "Globale-Variablen" anlegen.
Dies habe ich dann auch gemacht, und zwar eine Variable für die paar Ausnamen von der Ausname, welche ich in meinem Archiv habe. Diese muss dann nur noch gepflegt werden, wenn weitere Ausnamen von der Ausname dazukommen.

//Swaping
$set_global(SwapThis,'Turner, Ike & Tina  Ashton, Gardner & Dyke  Mamas & The Papas, The  Kissoon, Mac & Katie')


Warum eine Ausname von der Ausname?
Weile eine Aufzählung, welche die Ausname darstellt, einfach im Programm dadurch abzufangen ist, das man Aufzählungen prinzipiell mit dem & Zeichen + davor/dahinter <Space> Taggt und dieses Zeichen dann Abfragt. Dort wo jetzt noch eine Ausname von der Ausname gemacht werden muss, z.B. Turner, Ike & Tina, weil das & zum Namen gehört, kommt dann obrige Globale-Variable ins Spiel.

Trick 2:
Ein etwas aufwendiges Script um auch Multivalues wie z.B. Collins, Phil; Baily, Phillip abfangen zu können. Aufwendiger deshalb, weil es in der Title Format Syntax keine Schleifen gibt.

Die grösste Anzahl an Mulivalue Einträge hatte ich bei einem Benefitzkonzert:
Queen; Bono; Anastacia; Stewart, David A; Bonsu, Andrews
Fünf eigens aufgeführte Künstler

Also muss ich den abgefragten %artist% Tag in so viele Variablen aufteilen wie Künster vorhanden sind, und dann jede Variable darauf abklopfen ob sie archivarisch getaggt ist UND od sie der letzte Eintrag ist um entscheiden zu können ob ein Komma oder ein & sie vom Vorhergehenden trennt, damit aus dem Tag:
Queen; Bono; Anastacia; Stewart, David A; Bonsu, Andrews
die Anzeige:
Queen, Bono, Anastacia, David A Stewart & Andrews Bonsu
wird.


So genug auf die Folter gespannt, hier kommt also der Code für die Anzeige in der Artist Spalte:

//Get data
$puts(Splitter,' || ')
$if(%artist%,
$puts(M0,$meta_sep(artist,$get(Splitter)))
,$if(%performer%,
$puts(PRE,'Performed by ')
$puts(M0,$meta_sep(performer,$get(Splitter)))
,$if(%album artist%,
$puts(M0,$meta_sep(album artist,$get(Splitter)))
,$puts(M0,$get(C_TD)'## No Artist ##')))
)

//Check count of data
$puts(Count,0)
//-- Data 1
$puts(Split,$strstr($get(M0),$get(Splitter)))
$ifequal($get(Split),0,
$puts(Count,1)
$puts(M1,$get(M0))
$puts(M0,)
,//Split Data
$puts(M1,$trim($left($get(M0),$get(Split))))
$puts(M0,$replace($get(M0),$get(M1)$get(Splitter),))
)

//-- Data 2
$ifequal($get(Count),0,
$puts(Split,$strstr($get(M0),$get(Splitter)))
$ifequal($get(Split),0,
$puts(Count,2)
$puts(M2,$get(M0))
$puts(M0,)
,//Split Data
$puts(M2,$trim($left($get(M0),$get(Split))))
$puts(M0,$replace($get(M0),$get(M2)$get(Splitter),))
),)

//-- Data 3
$ifequal($get(Count),0,
$puts(Split,$strstr($get(M0),$get(Splitter)))
$ifequal($get(Split),0,
$puts(Count,3)
$puts(M3,$get(M0))
$puts(M0,)
,//Split Data
$puts(M3,$trim($left($get(M0),$get(Split))))
$puts(M0,$replace($get(M0),$get(M3)$get(Splitter),))
),)

//-- Data 4
$ifequal($get(Count),0,
$puts(Split,$strstr($get(M0),$get(Splitter)))
$ifequal($get(Split),0,
$puts(Count,4)
$puts(M4,$get(M0))
$puts(M0,)
,//Split Data
$puts(M4,$trim($left($get(M0),$get(Split))))
$puts(M0,$replace($get(M0),$get(M4)$get(Splitter),))
),)

//-- Data 5
$ifequal($get(Count),0,
$puts(Split,$strstr($get(M0),$get(Splitter)))
$ifequal($get(Split),0,
$puts(Count,5)
$puts(M5,$get(M0))
$puts(M0,)
,//Split Data
$puts(M5,$trim($left($get(M0),$get(Split))))
$puts(M0,$replace($get(M0),$get(M5)$get(Splitter),))
),)

//-- Data 6
$ifequal($get(Count),0,
$puts(Split,$strstr($get(M0),$get(Splitter)))
$ifequal($get(Split),0,
$puts(Count,6)
$puts(M6,$get(M0))
$puts(M0,)
,//Split Data
$puts(M6,$trim($left($get(M0),$get(Split))))
$puts(M0,$replace($get(M0),$get(M6)$get(Splitter),))
),)


//Preparing data
//-- Data 1
$ifgreater($get(Count),0,
$puts(M0,$get(M1))

//Check swapping
$puts(NoSwap,$strstr($get(M0),' & '))
$puts(Swap,$ifgreater($get(NoSwap),0,$strstr($get_global(SwapThis),$get(M0)),1))
$puts(Swap,$ifgreater($get(Swap),0,$strstr($get(M0),', '),0))

$ifequal($get(Swap),0,
//No swapping
$puts(M1,$get(M0))
,//Swapping
$puts(SwapR,$sub($len($get(M0)),$get(Swap)))
$puts(SwapL,$sub($get(Swap),1))
$puts(M1,$trim($right($get(M0),$get(SwapR)))' '$trim($left($get(M0),$get(SwapL))))
),)

//-- Data 2
$ifgreater($get(Count),1,
$puts(M0,$get(M2))
$puts(Jointer,$ifequal($get(Count),2,' & ',', '))

//Check swapping
$puts(NoSwap,$strstr($get(M0),' & '))
$puts(Swap,$ifgreater($get(NoSwap),0,$strstr($get_global(SwapThis),$get(M0)),1))
$puts(Swap,$ifgreater($get(Swap),0,$strstr($get(M0),', '),0))

$ifequal($get(Swap),0,
//No swapping
$puts(M2,$get(Jointer)$get(M0))
,//Swapping
$puts(SwapR,$sub($len($get(M0)),$get(Swap)))
$puts(SwapL,$sub($get(Swap),1))
$puts(M2,$get(Jointer)$trim($right($get(M0),$get(SwapR)))' '$trim($left($get(M0),$get(SwapL))))
),)

//-- Data 3
$ifgreater($get(Count),2,
$puts(M0,$get(M3))
$puts(Jointer,$ifequal($get(Count),3,' & ',', '))

//Check swapping
$puts(NoSwap,$strstr($get(M0),' & '))
$puts(Swap,$ifgreater($get(NoSwap),0,$strstr($get_global(SwapThis),$get(M0)),1))
$puts(Swap,$ifgreater($get(Swap),0,$strstr($get(M0),', '),0))

$ifequal($get(Swap),0,
//No swapping
$puts(M3,$get(Jointer)$get(M0))
,//Swapping
$puts(SwapR,$sub($len($get(M0)),$get(Swap)))
$puts(SwapL,$sub($get(Swap),1))
$puts(M3,$get(Jointer)$trim($right($get(M0),$get(SwapR)))' '$trim($left($get(M0),$get(SwapL))))
),)

//-- Data 4
$ifgreater($get(Count),3,
$puts(M0,$get(M4))
$puts(Jointer,$ifequal($get(Count),4,' & ',', '))

//Check swapping
$puts(NoSwap,$strstr($get(M0),' & '))
$puts(Swap,$ifgreater($get(NoSwap),0,$strstr($get_global(SwapThis),$get(M0)),1))
$puts(Swap,$ifgreater($get(Swap),0,$strstr($get(M0),', '),0))

$ifequal($get(Swap),0,
//No swapping
$puts(M4,$get(Jointer)$get(M0))
,//Swapping
$puts(SwapR,$sub($len($get(M0)),$get(Swap)))
$puts(SwapL,$sub($get(Swap),1))
$puts(M4,$get(Jointer)$trim($right($get(M0),$get(SwapR)))' '$trim($left($get(M0),$get(SwapL))))
),)

//-- Data 5
$ifgreater($get(Count),4,
$puts(M0,$get(M5))
$puts(Jointer,$ifequal($get(Count),5,' & ',', '))

//Check swapping
$puts(NoSwap,$strstr($get(M0),' & '))
$puts(Swap,$ifgreater($get(NoSwap),0,$strstr($get_global(SwapThis),$get(M0)),1))
$puts(Swap,$ifgreater($get(Swap),0,$strstr($get(M0),', '),0))

$ifequal($get(Swap),0,
//No swapping
$puts(M5,$get(Jointer)$get(M0))
,//Swapping
$puts(SwapR,$sub($len($get(M0)),$get(Swap)))
$puts(SwapL,$sub($get(Swap),1))
$puts(M5,$get(Jointer)$trim($right($get(M0),$get(SwapR)))' '$trim($left($get(M0),$get(SwapL))))
),)

//-- Data 6
$ifgreater($get(Count),5,
$puts(M0,$get(M6))
$puts(Jointer,$ifequal($get(Count),6,' & ',', '))

//Check swapping
$puts(NoSwap,$strstr($get(M0),' & '))
$puts(Swap,$ifgreater($get(NoSwap),0,$strstr($get_global(SwapThis),$get(M0)),1))
$puts(Swap,$ifgreater($get(Swap),0,$strstr($get(M0),', '),0))

$ifequal($get(Swap),0,
//No swapping
$puts(M6,$get(Jointer)$get(M0))
,//Swapping
$puts(SwapR,$sub($len($get(M0)),$get(Swap)))
$puts(SwapL,$sub($get(Swap),1))
$puts(M6,$get(Jointer)$trim($right($get(M0),$get(SwapR)))' '$trim($left($get(M0),$get(SwapL))))
),)


//Printing
$get(PRE)
$get(M1)$get(M2)$get(M3)$get(M4)$get(M5)$get(M6)
[' feat. '%featuring%]


Für das featuring hätte ich jetzt auch den gleichen Aufwand tätigen können, aber ich habe nur 3 Tracks in meinem Archiv wo mehr als einer gefeatured wird.


Übrigens habe ich Versucht den Code so zu schreiben das ich einfach Blockweise durch Copy & Past ohne Klammerfehler einen weiteren Multivalue Eintrag generieren kann.

Auf das die Anregung Blüten treibt, viel Spass damit

TomPro