コード例 #1
0
ファイル: youtube.py プロジェクト: transistorfet/nerve
    def run_update(self):
        medialib = nerve.get_object('/modules/medialib')
        self.list_ids = medialib.get_setting('youtube_playlists')
        if not self.list_ids:
            nerve.log("warning: youtube_playlists not set", logtype='warning')
            return

        nerve.log("Starting youtube medialib update...")
        for list_id in self.list_ids:
            json_playlist = self.fetch_json(list_id)
            if json_playlist is None or 'video' not in json_playlist:
                nerve.log("Unable to fetch youtube playlist " + list_id, logtype='error')
            else:
                playlist = [ ]
                for video in json_playlist['video']:
                    if self.stopflag.is_set():
                        return
                    data = self.hash_video(video)
                    playlist.append({ 'artist' : data['artist'], 'title' : data['title'], 'duration' : data['duration'], 'filename' : data['filename'] })
                pl = nerve.medialib.Playlist(json_playlist['title'])
                pl.set_list(playlist)

        self.db.insert('info', { 'name' : 'youtube_last_updated', 'value' : str(time.time()) }, replace=True)
        #nerve.log("Youtube medialib update complete")
        nerve.query('/devices/notify/send', 'youtube medialib update complete')
コード例 #2
0
ファイル: files.py プロジェクト: transistorfet/nerve
    def run_update(self):
        medialib = nerve.get_object('/modules/medialib')
        self.path = medialib.get_setting('medialib_dirs')
        self.ignore = medialib.get_setting('ignore_dirs')

        if not self.path:
            nerve.log("warning: medialib_dirs not set", logtype='warning')
            return

        nerve.log("Starting medialib update...")
        for libpath in self.path:
            for root, dirs, files in os.walk(libpath):
                if len(tuple(name for name in self.ignore if name in root)) > 0:
                    continue

                if self.stopflag.is_set():
                    return
                nerve.log("Searching " + root)
                for media in files:
                    #if media.endswith('.mp3'):
                    self.update_file(os.path.join(root, media), len(libpath.rstrip('/')) + 2)

        self.check_for_deleted()
        self.db.insert('info', { 'name' : 'last_updated', 'value' : str(time.time()) }, replace=True)
        #nerve.log("Medialib update complete")
        nerve.query('/devices/notify/send', 'medialib update complete')
コード例 #3
0
ファイル: controllers.py プロジェクト: transistorfet/nerve
    def send_code(self, request):
        code = request.arg('code')
        if not code:
            raise nerve.ControllerError("You must provide an IR code")

        #irremote = nerve.get_object('/devices/irremote')
        nerve.query('/devices/rgb/ir', code)
        self.load_json_view({'notice': "Code sent."})
コード例 #4
0
ファイル: controllers.py プロジェクト: transistorfet/nerve
    def get_data(self, request):
        datalog_name = request.args['datalog']
        start_time = request.args['start_time']
        length = request.args['length']
        ref = '/devices/datalogs/%s/get_data' % (datalog_name, )

        data = nerve.query(ref, start_time=start_time, length=length)
        self.load_json_view(data)
コード例 #5
0
ファイル: controllers.py プロジェクト: transistorfet/nerve
    def get_data(self, request):
        datalog_name = request.args['datalog']
        start_time = request.args['start_time']
        length = request.args['length']
        ref = '/devices/datalogs/%s/get_data' % (datalog_name,)

        data = nerve.query(ref, start_time=start_time, length=length)
        self.load_json_view(data)
コード例 #6
0
    def on_message(self, msg):
        if msg.mimetype != 'application/json':
            nerve.log("invalid message type: " + str(msg.mimetype) + " " +
                      str(msg.text))
            return

        nerve.log(msg.mimetype + " " + str(msg.data), logtype='warning')
        if msg.data['type'] == 'query':
            try:
                seq = msg.data['id'] if 'id' in msg.data else 0
                args = msg.data[
                    'args'] if 'args' in msg.data and msg.data['args'] else {}
                result = nerve.query(msg.data['query'], **args)
                self.send_message(
                    nerve.connect.Message('application/json',
                                          data={
                                              'type': 'reply',
                                              'id': seq,
                                              'query': msg.data['query'],
                                              'result': result
                                          }))
            except Exception as e:
                t = traceback.format_exc()
                nerve.log(t, logtype='error')
                self.send_message(
                    nerve.connect.Message('application/json',
                                          data={
                                              'type':
                                              'error',
                                              'id':
                                              seq,
                                              'query':
                                              msg.data['query'],
                                              'stack':
                                              t,
                                              'error':
                                              type(e).__name__ + ": " + str(e)
                                          }))

        elif msg.data['type'] == 'subscribe':

            def _on_event(event):
                nerve.log(event, logtype='warning')
                self.send_message(
                    nerve.connect.Message('application/json',
                                          data={
                                              'type': 'publish',
                                              'event': event
                                          }))

            print(msg, _on_event)
            nerve.events.subscribe(msg.data['topic'],
                                   _on_event,
                                   label=str(id(self)))

        elif msg.data['type'] == 'unsubscribe':
            nerve.events.unsubscribe(msg.data['topic'], label=str(id(self)))
コード例 #7
0
ファイル: controllers.py プロジェクト: transistorfet/nerve
    def get_playlist(self, request):
        playlists = nerve.get_object(self.get_setting('playlists'))
        playlist = request.args['playlist'] if 'playlist' in request.args else 'default'

        data = { }
        data['playlist'] = playlists.get_playlist(playlist)
        try:
            data['current_pos'] = nerve.query('/devices/player/get_position')
        except:
            data['current_pos'] = 0
        self.load_html_view('nerve/medialib/views/playlist-data.blk.pyhtml', data)
コード例 #8
0
ファイル: controllers.py プロジェクト: transistorfet/nerve
    def get_playlist(self, request):
        playlists = nerve.get_object(self.get_setting('playlists'))
        playlist = request.args['playlist'] if 'playlist' in request.args else 'default'

        data = { }
        data['playlist'] = playlists.get(playlist)
        try:
            data['current_pos'] = nerve.query('/devices/player/get_position')
        except:
            data['current_pos'] = 0
        self.load_html_view('nerve/medialib/views/playlist-data.blk.pyhtml', data)
コード例 #9
0
ファイル: devices.py プロジェクト: transistorfet/nerve
    def on_receive(self, line):
        nerve.log("RECV <- " + self.file + ": " + line)
        (ref, _, args) = line.partition(" ")
        if not ref:
            return
        with self.lock:
            for (i, query) in enumerate(self.waiting):
                if query.ref == ref:
                    self.waiting.pop(i)
                    query.result = args
                    query.ready.set()
                    return

        if self.get_setting('publish'):
            nerve.events.publish(topic=self.get_pathname(False) + '/' + ref, type='change', value=args)

        # TODO this isn't really used anymore (actually it is still the main interface to irremote, but should be replace with events when that gets working)
        if not args:
            return
        notify_ref = self.get_setting('query').rstrip('/') + '/' + ref + '/*'
        nerve.query(notify_ref, args)
コード例 #10
0
 def _collect_data(self):
     data = {}
     data['timestamp'] = time.time()
     for datapoint in self.get_setting('datapoints'):
         try:
             data[datapoint['name']] = nerve.query(datapoint['ref'])
         except Exception as exc:
             nerve.log("error collecting ref: " + str(datapoint['ref']) +
                       ": " + repr(exc),
                       logtype='error')
             data[datapoint['name']] = None
     self.db.insert(self.name, data)
コード例 #11
0
    def on_receive(self, line):
        nerve.log("RECV <- " + self.file + ": " + line)
        (ref, _, args) = line.partition(" ")
        if not ref:
            return
        with self.lock:
            for (i, query) in enumerate(self.waiting):
                if query.ref == ref:
                    self.waiting.pop(i)
                    query.result = args
                    query.ready.set()
                    return

        if self.get_setting('publish'):
            nerve.events.publish(topic=self.get_pathname() + '/' + ref,
                                 type='change',
                                 value=args)

        if self.get_setting('query'):
            notify_ref = self.get_setting('query').rstrip(
                '/') + '/' + ref + '/*'
            nerve.query(notify_ref, args)
コード例 #12
0
ファイル: devices.py プロジェクト: transistorfet/nerve
    def on_receive_code(self, code):
        if type(code) == dict:
            code = code['value']

        if code.startswith('x:'):
            nerve.log("received invalid IR code " + code)
            return

        self.add_code_to_history(code)
        (_, remote_name, button_name) = self.get_button_name(code)

        if not self.program_mode:
            try:
                return self.query(code)
            except AttributeError:
                pass

            # TODO isn't this just for legacy support?  We can remove this
            try:
                return nerve.query('/events/ir/irrecv/' + code)
            except AttributeError:
                nerve.log("No action set for IR code " + code)
コード例 #13
0
 def mute(self):
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0x281)
コード例 #14
0
 def voldown(self):
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0xC81)
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0xC81)
コード例 #15
0
 def volup(self):
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0x481)
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0x481)
コード例 #16
0
 def power(self):
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0xA81)
コード例 #17
0
ファイル: init.py プロジェクト: transistorfet/nerve
 def mute(self):
     #self.serial.send("ir S 0xC41")
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0x281)
コード例 #18
0
ファイル: shell.py プロジェクト: transistorfet/nerve
 def cmd_query(self, args):
     ref = args.pop(0)
     if ref.startswith('/') or ref.startswith('http:'):
         self.print(nerve.query(ref, *args))
     else:
         self.print(nerve.query(self.pwd + "/" + ref, *args))
コード例 #19
0
ファイル: init.py プロジェクト: transistorfet/nerve
 def tuner(self):
     #self.serial.send("ir S 0x841")
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0x841)
コード例 #20
0
ファイル: query.py プロジェクト: transistorfet/nerve
 def execute_query(self, querystr, **args):
     if querystr[0] != '/' and '://' not in querystr:
         querystr = self.get_setting('root') + '/' + querystr
     return nerve.query(querystr, **args)
コード例 #21
0
 def forward(self, notification):
     for ref in self.get_setting('forwards'):
         nerve.query(ref, notification)
コード例 #22
0
ファイル: query.py プロジェクト: transistorfet/nerve
 def execute_query(self, querystr, **args):
     if querystr[0] != '/' and not querystr.startswith('http:'):
         querystr = self.get_setting('root') + '/' + querystr
     return nerve.query(querystr, **args)
コード例 #23
0
ファイル: core.py プロジェクト: transistorfet/nerve
 def __call__(self, *args, **kwargs):
     target = self.get_setting('target')
     #return target(*args, **kwargs)
     return nerve.query(target, *args, **kwargs)
コード例 #24
0
ファイル: core.py プロジェクト: transistorfet/nerve
 def __call__(self, *args, **kwargs):
     target = self.get_setting('target')
     #return target(*args, **kwargs)
     return nerve.query(target, *args, **kwargs)
コード例 #25
0
 def __call__(self):
     return nerve.query(self.ref)
コード例 #26
0
ファイル: init.py プロジェクト: transistorfet/nerve
 def voldown(self):
     #self.serial.send("ir S 0xC81")
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0xC81)
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0xC81)
コード例 #27
0
 def tape(self):
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0x4BB610EF)
コード例 #28
0
 def speaker_ab(self):
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0x4B3611EE)
コード例 #29
0
ファイル: shell.py プロジェクト: transistorfet/nerve
 def cmd_query(self, args):
     ref = args.pop(0)
     if ref.startswith('/') or '://' in ref:
         self.print(nerve.query(ref, *args))
     else:
         self.print(nerve.query(self.pwd + "/" + ref, *args))
コード例 #30
0
 def tuner(self):
     nerve.query("/devices/mysensors/11/1/send_msg", 32, 0x4BB6D02F)
コード例 #31
0
 def __init__(self, **config):
     super().__init__(**config)
     self.client = nerve.query('/devices/irc')
コード例 #32
0
ファイル: devices.py プロジェクト: transistorfet/nerve
 def forward(self, notification):
     for ref in self.get_setting('forwards'):
         nerve.query(ref, notification)