I see what you did there

Today’s project was this little python script. This runs on a Mac, but goes out and grabs the sqlite database from a system that’s running Boxee, finds anything that’s been watched in Boxee in the last two days, then talks to iTunes and marks things watched there as well. This is so if we watch something on Boxee, the blue “unplayed” dot will also go away on the AppleTV in the other room.

Next project, I suppose, is doing the same thing in reverse: letting Boxee know when we’ve watched something on the AppleTV. That’s only possible with the old AppleTV right now, the new one doesn’t even sync the watched flag with iTunes any more. I hope they will add that in an update, but the rental model is their main push right now, not helping me out with my crazy setup.

This requires appscript and tvnamer for Python. tvnamer is a great Python module that is able to parse filenames and turn them into structured TV episode data. It’s often used in conjunction with tvdb_api to get descriptions, banners, etc. in media center applications based on nothing but filenames. I have another project that does just that, but today’s script only needs tvnamer.

This is the first time I’ve used the applescript binding for python, I was happy to see how easy it was. Applescript itself is an awful language, hurray for not actually having to write any! It’s also the first time I’ve used sqlite in a program, though I’ve messed with other programs’ databases by hand before.

› Continue reading

Tags: , , , , , , , ,

Saturday, October 9th, 2010 Uncategorized No Comments

iTunes Expressions

iTunes smart playlists are actually fairly complex boolean expressions (since iTunes 9, previous versions were not as robust). This page describing iTunes library management contains more text than the entire Lua 3.0 manual! (I’m cheating here, Lua is on v5.1, and the manual is more than twice as large these days, but the point still stands). Via dropdowns and text boxes you’re practically writing SQL WHERE clauses when creating a smart playlist.

Yet for all that complexity, there is STILL no way built into iTunes to make a Smart Playlist that can precisely select between High-def and standard-def TV Shows and movies.

My compromise is making a playlist that selects shows between 20 and 31 minutes that are greater than 500MB, and shows 39 minutes or longer that are greater than 900MB. Those numbers aren’t very precisely chosen, but they seemed to work properly for all but one episode in my library, there was one hour long episode that says it’s “HD” but is only 600MB, I ignored that one, but it illustrates why this is such a bad solution. There are standard def shows that are nearly 600MB in my library too.

The compromise some people come to is manually adding an HD Tag to the composer, description, comments, or some other field, but the whole point here is that I’m trying to avoid manually doing anything to differentiate them. I could just as easily add all the HD videos to a dumb playlist, and then select on that playlist in a smart playlist.

I’ve had this frustration for at least a year, since we first got an Apple TV. When, when, when will Apple fix it? Or if they have, then when, when, when someone on the internet figure out how to do it?

Since the thing I wanted this playlist for is already an Applescript that’s iterating TV Shows from a playlist, I suppose the “solution” in this case is to make the Applescript able to differentiate. The filename actually has an “(HD)” in it for HD episodes, and Applescript does have access to filenames, but iTunes proper can’t select on filename contents.

On the other hand, the horror of having to actually write more than a few lines of Applescript caused me to write just enough to be able to call out to a python script instead. So there’s a whole ‘nother rant about crappy Apple “programming languages” right there. I do realize that Python can use Applescript interfaces directly, but then it’s harder to just Download a script that almost does what I want and fix the parts that don’t.

Tags: , , , , ,

Sunday, May 16th, 2010 Uncategorized No Comments