70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
import json
|
|
import logging
|
|
|
|
from lxml import etree
|
|
|
|
from xmodule.x_module import XModule
|
|
from xmodule.raw_module import RawDescriptor
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class VideoModule(XModule):
|
|
video_time = 0
|
|
icon_class = 'video'
|
|
|
|
def __init__(self, system, location, definition, instance_state=None, shared_state=None, **kwargs):
|
|
XModule.__init__(self, system, location, definition, instance_state, shared_state, **kwargs)
|
|
xmltree = etree.fromstring(self.definition['data'])
|
|
self.youtube = xmltree.get('youtube')
|
|
self.name = xmltree.get('name')
|
|
self.position = 0
|
|
|
|
if instance_state is not None:
|
|
state = json.loads(instance_state)
|
|
if 'position' in state:
|
|
self.position = int(float(state['position']))
|
|
|
|
def handle_ajax(self, dispatch, get):
|
|
'''
|
|
Handle ajax calls to this video.
|
|
TODO (vshnayder): This is not being called right now, so the position
|
|
is not being saved.
|
|
'''
|
|
log.debug(u"GET {0}".format(get))
|
|
log.debug(u"DISPATCH {0}".format(dispatch))
|
|
if dispatch == 'goto_position':
|
|
self.position = int(float(get['position']))
|
|
log.info(u"NEW POSITION {0}".format(self.position))
|
|
return json.dumps({'success':True})
|
|
raise Http404()
|
|
|
|
def get_progress(self):
|
|
''' TODO (vshnayder): Get and save duration of youtube video, then return
|
|
fraction watched.
|
|
(Be careful to notice when video link changes and update)
|
|
|
|
For now, we have no way of knowing if the video has even been watched, so
|
|
just return None.
|
|
'''
|
|
return None
|
|
|
|
def get_instance_state(self):
|
|
log.debug(u"STATE POSITION {0}".format(self.position))
|
|
return json.dumps({'position': self.position})
|
|
|
|
def video_list(self):
|
|
return self.youtube
|
|
|
|
def get_html(self):
|
|
return self.system.render_template('video.html', {
|
|
'streams': self.video_list(),
|
|
'id': self.location.html_id(),
|
|
'position': self.position,
|
|
'name': self.name,
|
|
})
|
|
|
|
|
|
class VideoDescriptor(RawDescriptor):
|
|
module_class = VideoModule
|