1 from plugins
.video
.video
import Video
, VideoDetails
5 import pyxmpp
.jabber
.client
6 from pyxmpp
.all
import *
7 from pyxmpp
.streamtls
import TLSSettings
10 import xml
.etree
.ElementTree
as ElementTree
12 CLASS_NAME
= 'WebVideo'
14 sem
= threading
.Semaphore(1)
18 class WebVideo(Video
):
20 CONTENT_TYPE
= 'x-not-for/tivo'
23 c
= XmppListener(self
)
26 t
= threading
.Thread(target
=c
.loop
)
32 def xmppCdsupdate(self
):
34 for request
in m
.getDownloadRequests():
35 t
= threading
.Thread(target
=self
.processDlRequest
, args
=(request
,))
39 def processDlRequest(self
, data
):
47 path
= '/home/armooo/Videos/web'
49 file_name
= os
.path
.join(path
, '%s-%s' % (data
['bodyOfferId'] ,data
['url'].split('/')[-1]))
51 print 'downloading %s to %s' % (data
['url'], file_name
)
53 outfile
= open(file_name
, 'wb')
55 infile
= urllib2
.urlopen(data
['url'])
56 shutil
.copyfileobj(infile
, outfile
)
58 print 'done downloading %s to %s' % (data
['url'], file_name
)
61 file_info
= VideoDetails()
62 file_info
.update(self
.metadata_full(file_name
, tsn
))
64 data
['url'] = 'http://10.0.1.51:9032' + urllib
.quote('/WebVideo/%s' % os
.path
.split(file_name
)[-1])
65 data
['duration'] = file_info
['duration'] / 1000
66 data
['size'] = file_info
['size']
71 m
.completeDownloadRequest(data
)
76 class XmppListener(Client
):
77 def __init__(self
, web_video
):
79 xmpp_info
= m
.getXMPPLoginInfo()
82 jid
=JID(xmpp_info
['username'] + '/pyTivo'),
83 password
=config
.getTivoPassword(),
84 server
=xmpp_info
['server'],
85 port
=xmpp_info
['port'],
86 tls_settings
=TLSSettings(verify_peer
=False),
87 auth_methods
= ('sasl:plain',),
90 self
.web_video
= web_video
91 self
.presence_list
= xmpp_info
['presence_list']
93 def session_started(self
):
94 self
.stream
.set_message_handler(None, self
.message
)
98 for p
in self
.presence_list
:
100 p
= Presence(to_jid
=JID(p
))
103 def message(self
,stanza
):
104 xmpp_action
= ElementTree
.fromstring(stanza
.get_body())
106 method_name
= 'xmpp_' + xmpp_action
.findtext('action').lower()
107 if not hasattr(self
, method_name
):
110 method
= getattr(self
, method_name
)
114 def xmpp_cdsupdate(self
, xml
):
115 self
.web_video
.xmppCdsupdate()