# Best programmatic way to play and delete shows



## jimrush (Jul 27, 2009)

I'm in the process of writing some Windows desktop software to drive the Tivo and I wanted to check that there isn't an easier way to do what I'm attempting.

First, I'm doing this because my wife is blind. I've had a DTV series 2 and she couldn't use it when I wasn't at home, and when I was, I had to change the show for her ever 20 minutes. I just got the HD series 3 (switch to local cable provider for it) and have been reading all I can on the available interfaces.

From my exploration, the best approach seems to be:
1. Get schedule listing via HTTP/XML interface. I've already done most of this work.
2. Display it/get user input (standard windows .Net schtuff)
3. Use the remote control, telnet interface to drive Tivo to through the now playing menu to select a movie to play or delete.

#3 is the tricky one as there isn't any direct feedback. From some quick testing, there are some patterns to get you to a known state (e.g. Live TV). Once you are in the Now playing menu, you can press Up a significant number of times to insure top. Repeat within each folder. The show/folder item is predictable if you don't change your sort options.

Is there any better way to accomplish what I'm trying to do ? It seems that the Tivo developers are opening some functionality, but keeping a cap on key features. 

If any Tivo programmers are reading and need to keep a lock on their features (not sure why when you allow the remote control interface to be used), might I suggest the Apple approach. Allow the computer (or Tivo) to provide audio files (ie computer generated TTS) for all menu items, including dynamic entries like shows. My wife is able to use the latest generation of iPods for this reason.

thx,
Jim


----------



## davidblackledge (Sep 9, 2008)

First of all, nice to see a practical application of some of this stuff, and your wife is lucky to have a programmer for a husband ;]

The remote control stuff has been discussed on here some and found to be largely problematic for exactly the reasons you're citing.

A few possibly helpful tips:
To get to the top of now playing in a less annoying way:
Channel-up; advance; advance
channel up ensure's you're not already at the bottom of the list, advance takes you to the bottom, and when you're at the bottom, another advance takes you to the top.

"Known state" has some outlier cases to watch out for...e.g. maybe the TiVo just got new messages downloaded, so your first action presents the "new messages!" screen. I don't have a solution for you, but it's stuff to think about.

A safer route might be to start with the same concept as my "NowPlaying" app (mine is java, sorry - can download from a recent post here) and create your own Now Playing HME interface (it's also based on the XML data) so you can provide your own audio feedback through the TiVo itself as an HME application. - this doesn't solve deleting, and it uses video streaming to watch the video instead of the standard TiVo viewing interface, but it provides you with a whole lot more control over the system for the sake of making it blindness-friendly. All she'd have to do is memorize Tivo:4 down:select:<wait a few seconds>:<n>down:select (and you'd have to make sure <n> stayed consistent) then she'd be in your own audible interface.
You could even provide a pseudo-delete that prints out a list at the end of the day for you to go back and delete for her ;]

I'm pretty sure the .Net HME SDK author added Video Streaming capabilities, so that part would be ready for you already.


----------



## jimrush (Jul 27, 2009)

Thank you for the reply.

To do this via the HME feature set, wouldn't I need to download the Tivo videos and then stream them back to the Tivo ? Via my local cable provider (Cox-Phoenix) I'm finding 90% of the shows, 98% of the shows my wife would want to watch, marked as copy protected. Which pretty much makes TivoToGo a worthless feature. Had that not been an issue, I like the approach. I looked at the SDK and it mentions a URI for resource streams, but couldn't find much commentary on whether I could aim it back at the Tivo and it would know that it was a local request and not block on copy protected videos.

When I originally read the new feature set for the unit, I had hoped to just download the shows to her laptop and she could play them there as she does her audio books and podcasts. In the past, I've done something similar with MythTv and stripped the video stream to optimize disk space. 

I'll have to look at the new messages issue. I hadn't noticed that. I thought I was just seeing the mail icon on the messages line on the main menu without it changing my flow. But, I've only had a limited amount of time with this HD unit, so I'm sure I haven't seen all of its behaviors. 

Thanks for the tip on menu movement. Much better than my approach.

As for the Java versus .Net, not a problem. I work in both. I just find .Net an easier framework for providing UIs and accessibility tends to come for free.


----------



## davidblackledge (Sep 9, 2008)

jimrush said:


> Thank you for the reply.
> 
> To do this via the HME feature set, wouldn't I need to download the Tivo videos and then stream them back to the Tivo ?


Not actually download them, you just get the URL that the HMO interface provides and pass it back to the TiVo...it would then do the work of providing the stream from that URL, and requesting that stream given the URL.


jimrush said:


> Via my local cable provider (Cox-Phoenix) I'm finding 90% of the shows, 98% of the shows my wife would want to watch, marked as copy protected. Which pretty much makes TivoToGo a worthless feature. Had that not been an issue, I like the approach.


Ouch. You're right, major problem. I don't get that with Comcast. But that's probably only because I'm using analog cable ;]


jimrush said:


> I looked at the SDK and it mentions a URI for resource streams, but couldn't find much commentary on whether I could aim it back at the Tivo and it would know that it was a local request and not block on copy protected videos.


Good point...I haven't tried modifying the URLs...I do know from experience that simply providing the hostname "local" will correctly do a loopback on the TiVo (e.g. for images), so it might be possible to take a TiVo-provided URL, replace the hostname with "local", and pass it back to the tivo and it would do the right thing. If I get a chance (not likely any time soon) I'll try that. However, that doesn't mean we have an answer...if it's copy-protected, I don't think HMO gives us a URL whose hostname we could replace (perhaps it does, but unlikely)... hopefully one of us can also investigate whether things URLs are patterned well enough to be able to generate the right URL for one of those (using "local"). 


jimrush said:


> As for the Java versus .Net, not a problem. I work in both. I just find .Net an easier framework for providing UIs and accessibility tends to come for free.


Ambidextrous, eh? ;] Good deal on the accessibility. I haven't posted my Java source for the NowPlaying app anywhere mostly because I'm lazy... also I'm "in the middle of" adding ZeroConf to it so it can see any TiVos on the network. (I don't get very much time to work on this stuff, unfortunately, so it goes very slowly) But if it's helpful to you for me to pack it up and stick it somewhere quick and dirty I can do that.


----------



## jimrush (Jul 27, 2009)

> Ambidextrous, eh? ;] Good deal on the accessibility. I haven't posted my Java source for the NowPlaying app anywhere mostly because I'm lazy...


Yeah, I work in a few. Grew up with various assembly languages, then C flavors. Stopped most of my C/C++ professional work while working with OS/2 around the turn of the century  These days I professionally (I'm a manager, but working manager, so don't let me kid you, if I touch code it's architecture or maintenance work) do mostly back end type Java work, though my projects have had .Net thick clients and silverlight front ends. I've probably worked with half a dozen others and specialty things along the way. My current favorite is the .Net CLR, but I don't get to do much more than toy with it. Microsoft leap frogged Java on some really nice language features.

As for the status of this project, it is moving along nicely considering the time I've put into it. I can pull down the now playing schedule into a nice list box and then play the selected file. I've discovered that you can't just blast the remote controller port. There are some items that require some pauses. I'll probably have to tune that a bit over time. I'll probably introduce it to my wife today or over the next week so we can find where the real bugs are located.

Her next feature request is to list off what is currently playing on all channels so she doesn't have to hunt around - she currently has two stations memorized off the new provider  I haven't seen a way to get this off the Tivo. I could always scrape the cable provider's site, but it's probably just better to reactivate the mythtv database and the account for downloading program scheduling. I can just query off of that database (did that for myself because finding shows via DTV and Tivo used to be rather poor).

If anybody wants the code, I'm happy to share. A lot is hard coded and next to no error handling. Mostly just stuff slopped together while I watch TV or do other things. My personal eMail is JamesRush at Earthlink net. The code probably isn't suitable for anybody not able to open the project and change the configuration (I need to make it smarter and/or automatic, but making it locally usable comes first).

Thanks for the feedback and help.


----------

