1 from plugins
.video
.video
import Video
, VideoDetails
8 import xml
.etree
.ElementTree
as ElementTree
10 CLASS_NAME
= 'WebVideo'
13 class WebVideo(Video
):
15 CONTENT_TYPE
= 'x-not-for/tivo'
18 self
.sem
= threading
.Semaphore(1)
25 xmpp_info
= m
.getXMPPLoginInfo()
27 jid
=xmpp
.protocol
.JID(xmpp_info
['username'] + '/pyTivo')
29 server
=xmpp_info
['server'],
30 port
=xmpp_info
['port'],
34 cl
.RegisterHandler('message', self
.processMessage
)
35 cl
.auth(user
=jid
.getNode(), password
=config
.getTivoPassword(), resource
='pyTivo')
37 cl
.sendInitPresence(requestRoster
=0)
39 for user_name
in xmpp_info
['presence_list']:
40 jid
=xmpp
.protocol
.JID(user_name
)
44 t
= threading
.Thread(target
=self
.processXMPP
, args
=(cl
,))
48 def processXMPP(self
, client
):
49 while client
.Process():
52 def processMessage(self
, sess
,mess
):
53 xmpp_action
= ElementTree
.fromstring(mess
.getBody())
55 method_name
= 'xmpp_' + xmpp_action
.findtext('action').lower()
56 if not hasattr(self
, method_name
):
59 method
= getattr(self
, method_name
)
63 def xmpp_cdsupdate(self
, xml
=None):
65 for request
in m
.getDownloadRequests():
66 t
= threading
.Thread(target
=self
.processDlRequest
, args
=(request
,))
70 def processDlRequest(self
, data
):
76 for share_name
, settings
in config
.getShares():
77 if settings
['type'] == 'webvideo':
82 path
= settings
['path']
83 file_name
= os
.path
.join(path
, '%s-%s' % (data
['bodyOfferId'] ,data
['url'].split('/')[-1]))
85 print 'downloading %s to %s' % (data
['url'], file_name
)
87 outfile
= open(file_name
, 'wb')
89 infile
= urllib2
.urlopen(data
['url'])
90 shutil
.copyfileobj(infile
, outfile
)
92 print 'done downloading %s to %s' % (data
['url'], file_name
)
95 file_info
= VideoDetails()
96 file_info
.update(self
.metadata_full(file_name
, tsn
))
99 s
= socket
.socket(socket
.AF_INET
, socket
.SOCK_DGRAM
)
100 s
.connect(('tivo.com',123))
101 ip
= s
.getsockname()[0]
102 port
= config
.getPort()
104 data
['url'] = 'http://%s:%s' % (ip
, port
) + urllib
.quote('/%s/%s' % (share_name
, os
.path
.split(file_name
)[-1]))
105 data
['duration'] = file_info
['duration'] / 1000
106 data
['size'] = file_info
['size']
111 m
.completeDownloadRequest(data
)