On Wed, 06 Jun 2012 20:13:49 -0400, Romain Beauxis <[email protected]> wrote:
> 2012/6/6 Romain Beauxis <[email protected]>: >> Hi! >> >> 2012/6/6 <[email protected]>: >>> Unknown to us, for a group of one of our regular 1/2 hour shows, the >>> supplied files already had metadata titles. >>> We run a function to act as fill-in for missing titles for all shows >>> using >>> the filename of the episode. >>> Unfortunately, since the metadata title has been supplied, the function >>> dos not work as expected. >>> >>> I would like to modify this function to always override the title with >>> a >>> filename supplied (whether a title >>> has been provided previously or not). >>> >>> >>> The code in question: >>> >>> >>> >>> # === CIL ORIGINAL === >>> >>> >>> 1 a = playlist.safe(mode="normal", >>> "/usr/local/www/rcr/radio/current/mp3/cil-mp3-top.pls") >>> >>> 2 b = playlist.safe(mode="normal", >>> "/usr/local/www/rcr/radio/current/mp3/today-cil-mp3.pls") >>> >>> 3 c = playlist.safe(mode="normal", >>> "/usr/local/www/rcr/radio/current/mp3/cil-mp3-end.pls") >>> >>> >>> >>> >>> 4 cil = sequence([a,b,c]) >>> >>> >>> >>> 5 # Fill-in Title for ID3 Tag >>> >>> 6 def fill_in(s) >>> >>> # the function f takes a list of pairs m >>> representing the metadata >>> # and it maps an anonymous function on each pair >>> # replacing empty title definitions by >>> title=filename >>> >>> 7 def f(m) >>> >>> 8 print("\n\nFor metadata: #{m}\n\n") >>> 9 list.map(fun (key_value) -> >>> >>> 10 if key_value==("title","") then >>> >>> >>> 11 if m["filename"] == >>> "/usr/local/www/rcr/mp3/announce/TOHS.mp3" then >>> 12 ("title", "Rural Catholic Radio >>> - from the heartland, with >>> love") >>> >>> 13 elsif m["filename"] == >>> "/usr/local/www/rcr/mp3/announce/opener/opener-cil.mp3" then >>> 14 ("title", "Welcome to >>> Christianity in Literature") >>> >>> 15 elsif m["filename"] == >>> "/usr/local/www/rcr/radio/current/mp3/today-cil-mp3.pls" then >>> 16 ("title", "Christianity in >>> Literature - with Joseph Finnell >>> and Richard Hyatt - see www.RuralCatholicRadio.com for details") >>> >>> 17 elsif m["filename"] == >>> "/usr/local/www/rcr/mp3/announce/CLOSER.mp3" then >>> 18 ("title", "Thank you for >>> listening to Christianity in >>> Literature - with Joseph Finnell and Richard Hyatt") >>> >>> 19 elsif m["filename"] == >>> "/usr/local/www/rcr/radio/current/mp3/cil-mp3-end.pls" then >>> 20 ("title", "Christianity in >>> Literature - with Joseph Finnell >>> and Richard Hyatt - see www.RuralCatholicRadio.com for details") >>> >>> 21 else ("title", "Christianity in >>> Literature - with Joseph Finnell >>> and Richard Hyatt - see www.RuralCatholicRadio.com for details") >>> >>> 22 end >>> >>> >>> 23 else key_value end, >>> 24 m) >>> >>> 25 end >>> >>> 26 map_metadata(f,s) >>> >>> 27 end >>> >>> >>> 28 cil = fill_in(cil) >>> >>> >>> >>> ****** >>> >>> >>> I was wondering whether by dropping lines 10, 23-25 (the 'if >>> key_value==("title", "")' it would work. I have no way of testing this >>> locally. >>> Or, even better, it would be great if I could simply use: >>> >>> 'if key_value!=("title", "")' [instead of '==' use '!=' but I'm not >>> sure >>> whether it would work]. >> >> If you want to _always_ override the title metadata regardless of any >> value currently set, then you should get rid of the whole if >> conditional altogether. Instead of: >> >> if (...) then >> (.. code ..) >> end >> >> You should simply have: >> >> (..code..) >> >> And then title metadata will always be overriden. > > Woops, wrong code and now I also see how to do it way simplier :-) > > Here's an example code: > > s = (... source ...) > > def custom_title(m) = > # Compute new title > title = > if m["filename"] === "foo" then > "something" > else > "another thing" > end > > # Return _just_ the value we want to update: > [("title", title)] > end > > s = map_metadata(s,f) > > Indeed, by default, map_metadata only _updates_ metadata. Therefore, > if you only return the title value, only that value will be changed > and the other one will remain the same. > > This achieves the same as your list.fold but in a more simplier way :-) > > Romain Thanks Romain, That will solve my problem! Nice code! -- Using Opera's revolutionary email client: http://www.opera.com/mail/ ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Savonet-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/savonet-users
