Beispiel #1
0
    def __init__(self):
        super(PollingThread, self).__init__()

        self.expires = 0
        self.last_refresh = time.time()
        self.player = MyPlayer()
        self.shared_data = SharedData()
Beispiel #2
0
    def accelerator_activated(self, group, obj, keyval, mod):
        if obj == self.window:
            controller = SharedData().get_active_controller(self.window)

            if controller:
                return controller.accelerator_activate(keyval, mod)
        else:
            return False
Beispiel #3
0
 def play_serieepisode():
     episode = TV.get_serie_episode()
     if episode is not None:
         shared_data = SharedData()
         shared_data.set('playing', {
             'what': 'episode_nba_tv',
         })
         common.play(episode)
Beispiel #4
0
        def accelerator_activated(self, group, obj, keyval, mod):
                if obj == self.window:
                        controller = SharedData().get_active_controller(self.window)

                        if controller:
                                return controller.accelerator_activate(keyval, mod)
                else:
                        return False
Beispiel #5
0
 def play_live():
     live = TV.get_live()
     if live is not None:
         shared_data = SharedData()
         shared_data.set('playing', {
             'what': 'nba_tv_live',
         })
         common.play(live)
Beispiel #6
0
    def update_parsed_ok(self, data):
        self.last_parsed = data
        self.last_error = None

        if len(data) > 0:
            SharedData().panel.model.update(data[0])
        else:
            SharedData().panel.model.update(None)

        SharedData().panel.treeview.expand_all()
    def playLive():
        video_url = LiveTV.getLiveUrl()
        if video_url:
            shared_data = SharedData()
            shared_data.set("playing", {
                "what": "nba_tv_live",
            })

            item = xbmcgui.ListItem(path=video_url)
            xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, item)
    def playLive():
        video_url = LiveTV.getLiveUrl()
        if video_url:
            shared_data = SharedData()
            shared_data.set("playing", {
                "what": "nba_tv_live",
            })

            item = xbmcgui.ListItem(path=video_url)
            xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, item)
Beispiel #9
0
    def play_live():
        video_url = TV.get_live_url()
        if video_url is not None:
            shared_data = SharedData()
            shared_data.set('playing', {
                'what': 'nba_tv_live',
            })

            item = common.getPlayableItem(video_url)
            if item is not None:
                xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]),
                                          succeeded=True,
                                          listitem=item)
Beispiel #10
0
 def play_episode():
     start_timestamp = vars.params.get('start_timestamp')
     duration = vars.params.get('duration')
     episode = TV.get_episode(start_timestamp, duration)
     if episode is not None:
         shared_data = SharedData()
         shared_data.set('playing', {
             'what': 'nba_tv_episode',
             'data': {
                 'start_timestamp': start_timestamp,
                 'duration': duration,
             },
         })
         common.play(episode)
Beispiel #11
0
    def do_deactivate(self):
        if self.timeout_update_id != 0:
            GObject.source_remove(self.timeout_update_id)
            self.timeout_update_id = 0

            del self.update_placeholders[:]
            del self.jump_placeholders[:]

        # Always release the reference to the global snippets
        Library().unref(None)
        self.active_placeholder = None

        self.disconnect_signals(self.view)
        self.disconnect_signals(self.view.get_buffer())

        # Remove all active snippets
        for snippet in list(self.active_snippets):
            self.deactivate_snippet(snippet, True)

        completion = self.view.get_completion()

        if completion:
            completion.remove_provider(self.provider)
            completion.remove_provider(self.defaults_provider)

        if self.language_id != 0:
            Library().unref(self.language_id)

        SharedData().unregister_controller(self.view, self)
Beispiel #12
0
    def update_parsed_error(self, data):
        self.last_parsed = []
        self.last_error = data

        message = data.message
        lstart = data.line_start
        lend = data.line_end
        cstart = data.column_start
        cend = data.column_end

        doc = self.view.get_buffer()
        piter = doc.get_iter_at_line(max(0, lstart - 1))

        if piter:
            pend = piter.copy()

            piter.forward_chars(max(cstart - 1, 0))

            if lend > lstart:
                pend.forward_lines(lend - lstart)

            pend.forward_chars(max(cend, 0))

            doc.apply_tag(self.error_tag, piter, pend)

        SharedData().panel.model.update(None)
        def on_message_parse_and_activate(self, bus, message, userdata):
                view = message.props.view

                if not view:
                        view = self.window.get_active_view()

                controller = SharedData().get_controller(view)

                if not controller:
                        return

                # TODO: fix me as soon as the property fix lands in pygobject
                #iter = message.props.iter
                
                #if not iter:
                iter = view.get_buffer().get_iter_at_mark(view.get_buffer().get_insert())
                controller.parse_and_run_snippet(message.snippet, iter)
Beispiel #14
0
        def on_message_parse_and_activate(self, bus, message, userdata):
                view = message.props.view

                if not view:
                        view = self.window.get_active_view()

                controller = SharedData().get_controller(view)

                if not controller:
                        return

                iter = message.props.iter
                
                if not iter:
                        iter = view.get_buffer().get_iter_at_mark(view.get_buffer().get_insert())

                controller.parse_and_run_snippet(message.props.snippet, iter)
Beispiel #15
0
    def on_message_parse_and_activate(self, bus, message, userdata):
        view = message.props.view

        if not view:
            view = self.window.get_active_view()

        controller = SharedData().get_controller(view)

        if not controller:
            return

        iter = message.props.iter

        if not iter:
            iter = view.get_buffer().get_iter_at_mark(
                view.get_buffer().get_insert())

        controller.parse_and_run_snippet(message.props.snippet, iter)
Beispiel #16
0
    def do_activate(self):
        self.panel = Panel()
        self.panel.show()

        side = self.window.get_side_panel()

        side.add_item_with_stock_icon(self.panel, "cdncontext", "CDN Context",
                                      Gtk.STOCK_INDEX)

        SharedData().panel = self.panel
Beispiel #17
0
    def play_episode():
        start_timestamp = vars.params.get('start_timestamp')
        duration = vars.params.get('duration')
        video_url = TV.get_episode_url(start_timestamp, duration)
        if video_url is not None:
            shared_data = SharedData()
            shared_data.set(
                'playing', {
                    'what': 'nba_tv_episode',
                    'data': {
                        'start_timestamp': start_timestamp,
                        'duration': duration,
                    },
                })

            item = common.getPlayableItem(video_url)
            if item is not None:
                xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]),
                                          succeeded=True,
                                          listitem=item)
Beispiel #18
0
def main():
    utils.log("starting service...")

    #Reset currently playing video
    shared_data = SharedData()
    shared_data.set("playing", {})

    polling_thread = PollingThread()
    polling_thread.start()

    if xbmc.__version__ >= '2.19.0':
        monitor = xbmc.Monitor()
        while not monitor.abortRequested():
            if monitor.waitForAbort(100):
                break
    else:
        while not xbmc.abortRequested:
            xbmc.sleep(100)

    utils.log("stopping service..")

    polling_thread.stop()
Beispiel #19
0
    def do_deactivate(self):
        if self.accel_group:
            self.window.remove_accel_group(self.accel_group)

        self.accel_group = None

        self.remove_menu()
        self.unregister_messages()

        library = Library()
        library.remove_accelerator_callback(self.accelerator_activated)

        self.disconnect_signals(self.window)

        SharedData().unregister_window(self)
Beispiel #20
0
    def do_activate(self):
        self.insert_menu()
        self.register_messages()

        library = Library()
        library.add_accelerator_callback(self.accelerator_activated)

        self.accel_group = Library().get_accel_group(None)

        if self.accel_group:
            self.window.add_accel_group(self.accel_group)

        self.connect_signal(self.window, 'active-tab-changed',
                            self.on_active_tab_changed)

        self.do_update_state()

        SharedData().register_window(self)
Beispiel #21
0
    def run_parser_at_cursor(self):
        if self.parser != None:
            self.parser.cancel()
            self.parser = None

        buf = self.view.get_buffer()

        self.parser = parser.Parser(buf, self.on_parser_finished)

        if SharedData().panel.get_mapped():
            ins = buf.get_iter_at_mark(buf.get_insert())
            l = ins.get_line() + 1
            c = ins.get_line_offset() + 1
        else:
            l = -1
            c = -1

        self.parser.run(l, c)
Beispiel #22
0
    def update_language(self):
        lang = self.view.get_buffer().get_language()

        if lang == None and self.language_id == None:
            return
        elif lang and lang.get_id() == self.language_id:
            return

        langid = self.language_id

        if lang:
            self.language_id = lang.get_id()
        else:
            self.language_id = None

        if langid != 0:
            Library().unref(langid)

        Library().ref(self.language_id)
        self.provider.language_id = self.language_id

        SharedData().update_state(self.view.get_toplevel())
Beispiel #23
0
    def do_activate(self):
        # Always have a reference to the global snippets
        Library().ref(None)

        buf = self.view.get_buffer()

        self.connect_signal(self.view, 'key-press-event',
                            self.on_view_key_press)
        self.connect_signal(buf, 'notify::language', self.on_notify_language)
        self.connect_signal(self.view, 'drag-data-received',
                            self.on_drag_data_received)

        self.connect_signal_after(self.view, 'draw', self.on_draw)

        self.update_language()

        completion = self.view.get_completion()

        completion.add_provider(self.provider)
        completion.add_provider(self.defaults_provider)

        self.connect_signal(completion, 'hide', self.on_completion_hide)

        SharedData().register_controller(self.view, self)
    def onPlayBackStopped(self):
        utils.log("Playback STOPPED...")

        shared_data = SharedData()
        shared_data.set("playing", {})
Beispiel #25
0
 def on_active_tab_changed(self, window, tab):
     self.update_language(SharedData().get_controller(tab.get_view()))
Beispiel #26
0
class PollingThread(BaseThread):

    def __init__(self):
        super(PollingThread, self).__init__()

        self.expires = 0
        self.last_refresh = time.time()
        self.player = MyPlayer()
        self.shared_data = SharedData()

    def refreshLiveUrl(self):
        if self.shared_data.get('playing.what') == 'nba_tv_live':
            video_url = TV.get_live_url(force_login=True)
        elif self.shared_data.get('playing.what') == 'nba_tv_episode':
            start_timestamp = self.shared_data.get('playing.data.start_timestamp')
            duration = self.shared_data.get('playing.data.duration')
            video_url = TV.get_episode_url(start_timestamp, duration, force_login=True)

        if video_url:
            self.readExpiresFromUrl(video_url)
            utils.log("Updating live url from service, new url (%s) and expire (%d)" 
                % (video_url, self.expires))

            self.player.play(video_url)

    def readExpiresFromUrl(self, url):
        url_parts = urlparse(url)

        #Parse query string to dictionary
        query_params = parse_qs(url_parts.query)

        #Get the hdnea param, where the "expires" param is
        hdnea_params = query_params.get("hdnea")[0]
        hdnea_params = hdnea_params.replace('~', '&')
        hdnea_params = urllib.unquote(hdnea_params)

        self.expires = parse_qs(hdnea_params).get("expires", 0)[0]
        self.expires = int(self.expires)

    def run(self):
        while True:
            try:
                current_playing_url = self.player.getPlayingFile()
                self.readExpiresFromUrl(current_playing_url)
                utils.log("Playing url: %s - playing cache: %s" % 
                    (current_playing_url, self.shared_data.get("playing")), xbmc.LOGDEBUG)
            except:
                pass

            if self.shared_data.get("playing.what"):
                #Wait second iteration before checking the expiration
                if self.shared_data.get("playing.second_iteration") != "1":
                    xbmc.sleep(2000);
                    self.shared_data.set("playing.second_iteration", "1")
                    continue;

                timestamp = time.time()

                #Avoid refreshing too fast, let at least one minute pass from the last refresh
                expire_timestamp = max(self.expires, self.last_refresh + 60)

                utils.log("%d seconds to url refresh" % (expire_timestamp - timestamp))
                if timestamp > expire_timestamp:
                    self.refreshLiveUrl()
                    self.last_refresh = timestamp

            xbmc.sleep(1000)

            if not self.should_keep_running():
                utils.log("Interrupting service loop")
                break 
Beispiel #27
0
 def create_configure_dialog(self):
     SharedData().show_manager(self.window, self.plugin_info.get_data_dir())
Beispiel #28
0
    def do_update_state(self):
        controller = SharedData().get_active_controller(self.window)

        self.update_language(controller)
Beispiel #29
0
    def onPlayBackEnded(self):
        utils.log("Playback ENDED...")

        shared_data = SharedData()
        shared_data.set("playing", {})
Beispiel #30
0
    def onPlayBackStopped(self):
        utils.log("Playback STOPPED...")

        shared_data = SharedData()
        shared_data.set("playing", {})
    def onPlayBackEnded(self):
        utils.log("Playback ENDED...")

        shared_data = SharedData()
        shared_data.set("playing", {})