示例#1
0
    def __init__(self, upnp_service, name, implementation, instance,
                 send_events, data_type, allowed_values):
        log.Loggable.__init__(self)
        self.service = upnp_service

        self.name = name
        self.implementation = implementation
        self.instance = instance
        self.send_events = utils.means_true(send_events)
        self.never_evented = False
        self.data_type = data_type
        self.allowed_values = allowed_values
        if self.allowed_values == None:
            self.allowed_values = []
        self.has_vendor_values = False
        self.allowed_value_range = None
        self.dependant_variable = None

        self.default_value = ''
        self.old_value = ''
        self.value = ''
        self.last_time_touched = None

        self._callbacks = []
        if isinstance(self.service, service.ServiceServer):
            self.moderated = self.service.is_variable_moderated(name)
            self.updated = False
示例#2
0
    def __init__(self, upnp_service, name, implementation, instance, send_events,
                 data_type, allowed_values):
        self.service = upnp_service

        self.name = name
        self.implementation = implementation
        self.instance = instance
        self.send_events = utils.means_true(send_events)
        self.never_evented = False
        self.data_type = data_type
        self.allowed_values = allowed_values
        if self.allowed_values == None:
            self.allowed_values = []
        self.has_vendor_values = False
        self.allowed_value_range = None
        self.dependant_variable = None

        self.default_value = ''
        self.old_value = ''
        self.value = ''
        self.last_time_touched = None

        self._callbacks = []
        if isinstance( self.service, service.ServiceServer):
            self.moderated = self.service.is_variable_moderated(name)
            self.updated = False
示例#3
0
 def mute(self, w):
     service = self.device.get_service_by_type('RenderingControl')
     action = service.get_action('SetMute')
     mute_variable = service.get_state_variable('Mute')
     if means_true(mute_variable.value) == False:
         new_mute = '1'
     else:
         new_mute = '0'
     d = action.call(InstanceID=0, Channel='Master', DesiredMute=new_mute)
     d.addCallback(self.handle_result)
     d.addErrback(self.handle_error)
     return d
示例#4
0
 def populate(result, entries):
     self.info("result %r" % result)
     self.info("entries %r" % entries)
     status_bar.pop(context_id)
     status_bar.push(context_id, "%s - ok" % time.strftime("%H:%M:%S"))
     for argument, value in result.items():
         type, method = entries[argument]
         if type == "boolean":
             value = means_true(value)
         if type == "text":
             method.get_buffer().set_text(value)
             continue
         method(value)
示例#5
0
 def populate(result, entries):
     self.info("result %r" % result)
     self.info("entries %r" % entries)
     status_bar.pop(context_id)
     status_bar.push(context_id, "%s - ok" % time.strftime("%H:%M:%S"))
     for argument, value in result.items():
         type, method = entries[argument]
         if type == 'boolean':
             value = means_true(value)
         if type == 'text':
             method.get_buffer().set_text(value)
             continue
         method(value)
示例#6
0
    def start(self,name):
        self.canvas.set_title(name)

        try:
            self.content = self.config['content']
        except:
            self.content = []
        if not isinstance( self.content, list):
            self.content = [self.content]

        tmp_l = []
        for path in self.content:
            if path.startswith('http://'):
                tmp_l.append(path)
            else:
                tmp_l.append(os.path.abspath(path))
        self.content = tmp_l

        self.items = []
        self.playlist = []
        self.warning("checking for items...")
        for path in self.content:
            if path.startswith('http://'):
                self.items.append(path)
            else:
                self.walk(path)
        self.warning("done")

        self.renderer.av_transport_server.get_variable('AVTransportURI').subscribe(self.state_variable_change)
        self.renderer.av_transport_server.get_variable('NextAVTransportURI').subscribe(self.state_variable_change)
        #self.renderer.av_transport_server.get_variable('TransportState').subscribe(self.state_variable_change)
        #self.renderer.av_transport_server.get_variable('AVTransportURI').subscribe(self.state_variable_change)
        #self.renderer.av_transport_server.get_variable('LastChange').subscribe(self.state_variable_change)
        try:
            if means_true(self.config['autostart']):
                d = defer.maybeDeferred(self.get_next_item)
                d.addCallback(lambda result: self.set_renderer_uri(self.renderer,result[0],result[1]))
                d.addErrback(self.got_error)

                def get_next():
                    d = defer.maybeDeferred(self.get_next_item)
                    d.addCallback(lambda result: self.set_renderer_next_uri(self.renderer,result[0],result[1]))
                    d.addErrback(self.got_error)

                d.addCallback(lambda result: get_next())
                d.addErrback(self.got_error)

        except KeyError:
            pass
        except:
            traceback.print_exc()
示例#7
0
 def mute(self,w):
     service = self.device.get_service_by_type('RenderingControl')
     action = service.get_action('SetMute')
     mute_variable = service.get_state_variable('Mute')
     if means_true(mute_variable.value) == False:
         new_mute = '1'
     else:
         new_mute = '0'
     d = action.call(InstanceID=0,
                     Channel='Master',
                     DesiredMute=new_mute)
     d.addCallback(self.handle_result)
     d.addErrback(self.handle_error)
     return d
示例#8
0
文件: variable.py 项目: riedel/Cohen3
    def __init__(
        self,
        upnp_service,
        name,
        implementation,
        instance,
        send_events,
        data_type,
        allowed_values,
    ):
        log.LogAble.__init__(self)
        EventDispatcher.__init__(self)

        self.service = upnp_service

        self.dispatch_events = [
            f'state_variable_{name}_changed',
            'state_variable_changed',
        ]
        self.dispatch_targets = [self]
        if isinstance(self.service, EventDispatcher):
            self.dispatch_targets.append(self.service)
        for target in self.dispatch_targets:
            for evt in self.dispatch_events:
                if evt not in target.event_dispatcher_event_callbacks:
                    target.register_event(evt)

        self.name = name
        self.implementation = implementation
        self.instance = instance
        self.send_events = utils.means_true(send_events)
        self.never_evented = False
        self.data_type = data_type
        self.allowed_values = allowed_values
        if self.allowed_values is None:
            self.allowed_values = []
        self.has_vendor_values = False
        self.allowed_value_range = None
        self.dependant_variable = None

        self.default_value = ''
        self.old_value = ''
        self.value = ''
        self.last_time_touched = None

        self._callbacks = []
        if isinstance(self.service, service.ServiceServer):
            self.moderated = self.service.is_variable_moderated(name)
            self.updated = False
示例#9
0
    def get_next_item(self):
        try:
            uri = self.playlist.pop()
        except IndexError:
            self.playlist = self.items[:]
            if means_true(self.config['shuffle']):
                random.shuffle(self.playlist)
            uri = self.playlist.pop()

        try:
            uri = "file://" + uri.path
            return uri,''
        except:
            if uri.startswith('http://'):
                pass
            raise
    def state_variable_change(self,variable):
        print "%s %r" % (variable.name, variable.value)
        if variable.name == 'CurrentTrackMetaData':
            if variable.value != None and len(variable.value)>0:
                try:
                    from coherence.upnp.core import DIDLLite
                    elt = DIDLLite.DIDLElement.fromString(variable.value)
                    for item in elt.getItems():
                        print "now playing: %r - %r (%s/%r)" % (item.artist, item.title, item.id, item.upnp_class)
                        self.title_text.set_markup("<b>%s</b>" % item.title)
                        if item.album != None:
                            self.album_text.set_markup(item.album)
                        else:
                            self.album_text.set_markup('')
                        if item.artist != None:
                            self.artist_text.set_markup("<i>%s</i>" % item.artist)
                        else:
                            self.artist_text.set_markup("")
                        if item.albumArtURI != None:
                            def got_icon(icon):
                                icon = icon[0]
                                icon_loader = gtk.gdk.PixbufLoader()
                                icon_loader.write(icon)
                                icon_loader.close()
                                icon = icon_loader.get_pixbuf()
                                icon = icon.scale_simple(128,128,gtk.gdk.INTERP_BILINEAR)
                                self.album_art_image.set_from_pixbuf(icon)

                            d = getPage(item.albumArtURI)
                            d.addCallback(got_icon)
                        else:
                            self.album_art_image.set_from_pixbuf(self.blank_icon)


                except SyntaxError:
                    #print "seems we haven't got an XML string"
                    return
            else:
                self.title_text.set_markup('')
                self.album_text.set_markup('')
                self.artist_text.set_markup('')
                self.album_art_image.set_from_pixbuf(self.blank_icon)

        elif variable.name == 'TransportState':
            print variable.name, 'changed from', variable.old_value, 'to', variable.value
            if variable.value == 'PLAYING':
                self.start_button.set_image(self.pause_button_image)
                try:
                    self.position_loop.start(1.0, now=True)
                except:
                    pass
            elif variable.value != 'TRANSITIONING':
                self.start_button.set_image(self.start_button_image)
                try:
                    self.position_loop.stop()
                except:
                    pass
            if variable.value == 'STOPPED':
                self.get_position()


            context_id = self.status_bar.get_context_id("Statusbar")
            self.status_bar.pop(context_id)
            self.status_bar.push(context_id,"%s" % variable.value)

        elif variable.name == 'CurrentTransportActions':
            try:
                actions = map(lambda x: x.upper(),variable.value.split(','))
                if 'SEEK' in actions:
                    self.position_scale.set_sensitive(True)
                    self.seek_forward_button.set_sensitive(True)
                    self.seek_backward_button.set_sensitive(True)
                else:
                    self.position_scale.set_sensitive(False)
                    self.seek_forward_button.set_sensitive(False)
                    self.seek_backward_button.set_sensitive(False)
                self.start_button.set_sensitive('PLAY' in actions)
                self.stop_button.set_sensitive('STOP' in actions)
                self.prev_button.set_sensitive('PREVIOUS' in actions)
                self.next_button.set_sensitive('NEXT' in actions)
            except:
                #very unlikely to happen
                import traceback
                print traceback.format_exc()

        elif variable.name == 'AVTransportURI':
            print variable.name, 'changed from', variable.old_value, 'to', variable.value
            if variable.value != '':
                pass
                #self.seek_backward_button.set_sensitive(True)
                #self.stop_button.set_sensitive(True)
                #self.start_button.set_sensitive(True)
                #self.seek_forward_button.set_sensitive(True)
            else:
                #self.seek_backward_button.set_sensitive(False)
                #self.stop_button.set_sensitive(False)
                #self.start_button.set_sensitive(False)
                #self.seek_forward_button.set_sensitive(False)
                self.album_art_image.set_from_pixbuf(self.blank_icon)
                self.title_text.set_markup('')
                self.album_text.set_markup('')
                self.artist_text.set_markup('')

        elif variable.name == 'Volume':
            try:
                volume = int(variable.value)
                print "volume value", volume
                if int(self.volume_scale.get_value()) != volume:
                    self.volume_scale.set_value(volume)
                service = self.device.get_service_by_type('RenderingControl')
                mute_variable = service.get_state_variable('Mute')
                if means_true(mute_variable.value) == True:
                    self.volume_image.set_from_pixbuf(self.volume_muted_icon)
                elif volume < 34:
                    self.volume_image.set_from_pixbuf(self.volume_low_icon)
                elif volume < 67:
                    self.volume_image.set_from_pixbuf(self.volume_medium_icon)
                else:
                    self.volume_image.set_from_pixbuf(self.volume_high_icon)

            except:
                import traceback
                print traceback.format_exc()
                pass

        elif variable.name == 'Mute':
            service = self.device.get_service_by_type('RenderingControl')
            volume_variable = service.get_state_variable('Volume')
            volume = volume_variable.value
            if means_true(variable.value) == True:
                self.volume_image.set_from_pixbuf(self.volume_muted_icon)
            elif volume < 34:
                self.volume_image.set_from_pixbuf(self.volume_low_icon)
            elif volume < 67:
                self.volume_image.set_from_pixbuf(self.volume_medium_icon)
            else:
                self.volume_image.set_from_pixbuf(self.volume_high_icon)
示例#11
0
    def state_variable_change(self,variable):
        if variable.name == 'CurrentTrackMetaData':
            if variable.value != None and len(variable.value)>0:
                try:
                    elt = DIDLLite.DIDLElement.fromString(variable.value)
                except SyntaxError:
                    print "seems we haven't got an XML string", repr(variable.value)
                else:
                    for item in elt.getItems():
                        self.title_text.set_markup("<b>%s</b>" % item.title)
                        if item.album != None:
                            self.album_text.set_markup(item.album)
                        else:
                            self.album_text.set_markup('')
                        if item.artist != None:
                            self.artist_text.set_markup("<i>%s</i>" % item.artist)
                        else:
                            self.artist_text.set_markup("")

                        def got_icon(icon):
                            icon = icon[0]
                            icon_loader = GdkPixbuf.PixbufLoader()
                            icon_loader.write(icon)
                            icon_loader.close()
                            icon = icon_loader.get_pixbuf()
                            icon = icon.scale_simple(300, 300, GdkPixbuf.InterpType.BILINEAR)
                            self.album_art_image.set_from_pixbuf(icon)

                        if item.upnp_class.startswith('object.item.audioItem') and item.albumArtURI != None:
                            d = getPage(item.albumArtURI)
                            d.addCallback(got_icon)
                        elif item.upnp_class.startswith('object.item.imageItem'):
                            res = item.res.get_matching('http-get:*:image/:*')
                            if len(res) > 0:
                                res = res[0]
                                d = getPage(res.data)
                                d.addCallback(got_icon)
                            else:
                                self.album_art_image.set_from_pixbuf(self.blank_icon)
                        else:
                            self.album_art_image.set_from_pixbuf(self.blank_icon)
            else:
                self.title_text.set_markup('')
                self.album_text.set_markup('')
                self.artist_text.set_markup('')
                self.album_art_image.set_from_pixbuf(self.blank_icon)

        elif variable.name == 'TransportState':
            if variable.value == 'PLAYING':
                service = self.device.get_service_by_type('AVTransport')
                if 'Pause' in service.get_actions():
                    self.start_button.set_image(self.pause_button_image)
                try:
                    self.position_loop.start(1.0, now=True)
                except:
                    pass
            elif variable.value != 'TRANSITIONING':
                self.start_button.set_image(self.start_button_image)
                try:
                    self.position_loop.stop()
                except:
                    pass
            if variable.value == 'STOPPED':
                self.get_position()


            context_id = self.status_bar.get_context_id("Statusbar")
            self.status_bar.pop(context_id)
            self.status_bar.push(context_id,"%s" % variable.value)

        elif variable.name == 'CurrentTransportActions':
            try:
                actions = map(lambda x: x.upper(),variable.value.split(','))
                if 'SEEK' in actions:
                    self.position_scale.set_sensitive(True)
                    self.seek_forward_button.set_sensitive(True)
                    self.seek_backward_button.set_sensitive(True)
                else:
                    self.position_scale.set_sensitive(False)
                    self.seek_forward_button.set_sensitive(False)
                    self.seek_backward_button.set_sensitive(False)
                self.start_button.set_sensitive('PLAY' in actions)
                self.stop_button.set_sensitive('STOP' in actions)
                self.prev_button.set_sensitive('PREVIOUS' in actions)
                self.next_button.set_sensitive('NEXT' in actions)
            except:
                #very unlikely to happen
                import traceback
                print traceback.format_exc()

        elif variable.name == 'AVTransportURI':
            if variable.value != '':
                pass
                #self.seek_backward_button.set_sensitive(True)
                #self.stop_button.set_sensitive(True)
                #self.start_button.set_sensitive(True)
                #self.seek_forward_button.set_sensitive(True)
            else:
                #self.seek_backward_button.set_sensitive(False)
                #self.stop_button.set_sensitive(False)
                #self.start_button.set_sensitive(False)
                #self.seek_forward_button.set_sensitive(False)
                self.album_art_image.set_from_pixbuf(self.blank_icon)
                self.title_text.set_markup('')
                self.album_text.set_markup('')
                self.artist_text.set_markup('')

        elif variable.name == 'Volume':
            try:
                volume = int(variable.value)
                if int(self.volume_scale.get_value()) != volume:
                    self.volume_scale.set_value(volume)
                service = self.device.get_service_by_type('RenderingControl')
                mute_variable = service.get_state_variable('Mute')
                if means_true(mute_variable.value) == True:
                    self.volume_image.set_from_pixbuf(self.volume_muted_icon)
                elif volume < 34:
                    self.volume_image.set_from_pixbuf(self.volume_low_icon)
                elif volume < 67:
                    self.volume_image.set_from_pixbuf(self.volume_medium_icon)
                else:
                    self.volume_image.set_from_pixbuf(self.volume_high_icon)

            except:
                import traceback
                print traceback.format_exc()

        elif variable.name == 'Mute':
            service = self.device.get_service_by_type('RenderingControl')
            volume_variable = service.get_state_variable('Volume')
            volume = volume_variable.value
            if means_true(variable.value) == True:
                self.volume_image.set_from_pixbuf(self.volume_muted_icon)
            elif volume < 34:
                self.volume_image.set_from_pixbuf(self.volume_low_icon)
            elif volume < 67:
                self.volume_image.set_from_pixbuf(self.volume_medium_icon)
            else:
                self.volume_image.set_from_pixbuf(self.volume_high_icon)
示例#12
0
 def set_never_evented(self, value):
     self.never_evented = utils.means_true(value)
示例#13
0
    def __init__(self,config):
        self.config = config
        fullscreen = False
        try:
            if means_true(self.config['fullscreen']):
                fullscreen = True
        except:
            pass
        grafics = self.config.get('grafics')
        if grafics == 'pyglet':
            from cadre.scribbling.pyglet_backend import Canvas
        else:
            from cadre.scribbling.clutter_backend import Canvas
        self.canvas = Canvas(fullscreen)

        try:
            overlays = self.config['overlay']
            if not isinstance(overlays,list):
                overlays = [overlays]
        except:
            overlays = []

        map(self.canvas.add_overlay,overlays)

        coherence_config = {}
        #coherence_config['version'] = '1'
        coherence_config['logmode'] = 'warning'
        #coherence_config['controlpoint'] = 'yes'

        louie.connect(self.media_server_found, 'Coherence.UPnP.ControlPoint.MediaServer.detected', louie.Any)
        louie.connect(self.media_server_removed, 'Coherence.UPnP.ControlPoint.MediaServer.removed', louie.Any)
        self.coherence = Coherence(coherence_config)


        name = self.config.get('name','Cadre - Coherence Picture-Frame')
        kwargs = {'version':1,
                'no_thread_needed':True,
                'name':name}

        kwargs['transition'] = 'NONE'
        try:
            if self.config['transition'].upper() in self.get_available_transitions():
                kwargs['transition'] = self.config['transition'].upper()
                self.set_transition(self.config['transition'].upper())
        except:
            pass

        try:
            kwargs['display_time'] = int(self.config['display_time'])
        except:
            pass

        self.canvas.set_title(name)

        kwargs['controller'] = self
        uuid = self.config.get('uuid')
        if uuid:
            kwargs['uuid'] = uuid
        print kwargs
        self.renderer = MediaRenderer(self.coherence,CadreRenderer,**kwargs)

        if 'uuid' not in self.config:
            self.config['uuid'] = str(self.renderer.uuid)[5:]
            try:
                self.config.save()
            except AttributeError:
                pass
        reactor.callLater(0.5,self.start,name)
示例#14
0
    def state_variable_change(self, variable):
        print "%s %r" % (variable.name, variable.value)
        if variable.name == 'CurrentTrackMetaData':
            if variable.value != None and len(variable.value) > 0:
                try:
                    from coherence.upnp.core import DIDLLite
                    elt = DIDLLite.DIDLElement.fromString(variable.value)
                    for item in elt.getItems():
                        print "now playing:", repr(item.artist),
                        print "-", repr(item.title),
                        print "(%s/%r)" % (item.id, item.upnp_class)
                        self.title_text.set_markup("<b>%s</b>" % item.title)
                        if item.album != None:
                            self.album_text.set_markup(item.album)
                        else:
                            self.album_text.set_markup('')
                        if item.artist != None:
                            self.artist_text.set_markup("<i>%s</i>" %
                                                        item.artist)
                        else:
                            self.artist_text.set_markup("")

                        def got_icon(icon):
                            icon = icon[0]
                            icon_loader = gtk.gdk.PixbufLoader()
                            icon_loader.write(icon)
                            icon_loader.close()
                            icon = icon_loader.get_pixbuf()
                            icon = icon.scale_simple(128, 128,
                                                     gtk.gdk.INTERP_BILINEAR)
                            self.album_art_image.set_from_pixbuf(icon)

                        if item.upnp_class.startswith(
                                'object.item.audioItem'
                        ) and item.albumArtURI != None:
                            d = getPage(item.albumArtURI)
                            d.addCallback(got_icon)
                        elif item.upnp_class.startswith(
                                'object.item.imageItem'):
                            res = item.res.get_matching('http-get:*:image/:*')
                            if len(res) > 0:
                                res = res[0]
                                d = getPage(res.data)
                                d.addCallback(got_icon)
                            else:
                                self.album_art_image.set_from_pixbuf(
                                    self.blank_icon)
                        else:
                            self.album_art_image.set_from_pixbuf(
                                self.blank_icon)

                except SyntaxError:
                    #print "seems we haven't got an XML string"
                    return
            else:
                self.title_text.set_markup('')
                self.album_text.set_markup('')
                self.artist_text.set_markup('')
                self.album_art_image.set_from_pixbuf(self.blank_icon)

        elif variable.name == 'TransportState':
            print variable.name, 'changed from', variable.old_value,
            print 'to', variable.value
            if variable.value == 'PLAYING':
                service = self.device.get_service_by_type('AVTransport')
                if 'Pause' in service.get_actions():
                    self.start_button.set_image(self.pause_button_image)
                try:
                    self.position_loop.start(1.0, now=True)
                except:
                    pass
            elif variable.value != 'TRANSITIONING':
                self.start_button.set_image(self.start_button_image)
                try:
                    self.position_loop.stop()
                except:
                    pass
            if variable.value == 'STOPPED':
                self.get_position()

            context_id = self.status_bar.get_context_id("Statusbar")
            self.status_bar.pop(context_id)
            self.status_bar.push(context_id, "%s" % variable.value)

        elif variable.name == 'CurrentTransportActions':
            try:
                actions = map(lambda x: x.upper(), variable.value.split(','))
                if 'SEEK' in actions:
                    self.position_scale.set_sensitive(True)
                    self.seek_forward_button.set_sensitive(True)
                    self.seek_backward_button.set_sensitive(True)
                else:
                    self.position_scale.set_sensitive(False)
                    self.seek_forward_button.set_sensitive(False)
                    self.seek_backward_button.set_sensitive(False)
                self.start_button.set_sensitive('PLAY' in actions)
                self.stop_button.set_sensitive('STOP' in actions)
                self.prev_button.set_sensitive('PREVIOUS' in actions)
                self.next_button.set_sensitive('NEXT' in actions)
            except:
                #very unlikely to happen
                import traceback
                print traceback.format_exc()

        elif variable.name == 'AVTransportURI':
            print variable.name, 'changed from', variable.old_value,
            print 'to', variable.value
            if variable.value != '':
                pass
                #self.seek_backward_button.set_sensitive(True)
                #self.stop_button.set_sensitive(True)
                #self.start_button.set_sensitive(True)
                #self.seek_forward_button.set_sensitive(True)
            else:
                #self.seek_backward_button.set_sensitive(False)
                #self.stop_button.set_sensitive(False)
                #self.start_button.set_sensitive(False)
                #self.seek_forward_button.set_sensitive(False)
                self.album_art_image.set_from_pixbuf(self.blank_icon)
                self.title_text.set_markup('')
                self.album_text.set_markup('')
                self.artist_text.set_markup('')

        elif variable.name == 'Volume':
            try:
                volume = int(variable.value)
                print "volume value", volume
                if int(self.volume_scale.get_value()) != volume:
                    self.volume_scale.set_value(volume)
                service = self.device.get_service_by_type('RenderingControl')
                mute_variable = service.get_state_variable('Mute')
                if means_true(mute_variable.value) == True:
                    self.volume_image.set_from_pixbuf(self.volume_muted_icon)
                elif volume < 34:
                    self.volume_image.set_from_pixbuf(self.volume_low_icon)
                elif volume < 67:
                    self.volume_image.set_from_pixbuf(self.volume_medium_icon)
                else:
                    self.volume_image.set_from_pixbuf(self.volume_high_icon)

            except:
                import traceback
                print traceback.format_exc()
                pass

        elif variable.name == 'Mute':
            service = self.device.get_service_by_type('RenderingControl')
            volume_variable = service.get_state_variable('Volume')
            volume = volume_variable.value
            if means_true(variable.value) == True:
                self.volume_image.set_from_pixbuf(self.volume_muted_icon)
            elif volume < 34:
                self.volume_image.set_from_pixbuf(self.volume_low_icon)
            elif volume < 67:
                self.volume_image.set_from_pixbuf(self.volume_medium_icon)
            else:
                self.volume_image.set_from_pixbuf(self.volume_high_icon)
示例#15
0
    def __init__(self, server, **kwargs):
        BackendStore.__init__(self, server, **kwargs)
        self.next_id = 1000
        self.name = kwargs.get('name', 'my media')
        self.content = kwargs.get('content', None)
        if self.content is not None:
            if isinstance(self.content, str):
                self.content = [self.content]
            cl = []
            for a in self.content:
                cl += a.split(',')
            self.content = cl
        else:
            self.content = xdg_content()
            self.content = [x[0] for x in self.content]
        if self.content is None:
            self.content = 'tests/content'
        if not isinstance(self.content, list):
            self.content = [self.content]
        self.content = set([os.path.abspath(x) for x in self.content])
        ignore_patterns = kwargs.get('ignore_patterns', [])
        self.store = {}

        self.inotify = None

        if kwargs.get('enable_inotify', 'yes') == 'yes':
            if INotify:
                try:
                    self.inotify = INotify()
                    self.inotify.startReading()
                except Exception as msg:
                    self.error(f'inotify disabled: {msg}')
                    self.inotify = None
            else:
                self.info(f'{no_inotify_reason}')
        else:
            self.info('FSStore content auto-update disabled upon user request')

        if kwargs.get('enable_destroy', 'no') == 'yes':
            self.upnp_DestroyObject = self.hidden_upnp_DestroyObject

        self.import_folder = kwargs.get('import_folder', None)
        if self.import_folder is not None:
            self.import_folder = os.path.abspath(self.import_folder)
            if not os.path.isdir(self.import_folder):
                self.import_folder = None

        self.ignore_file_pattern = re.compile(r'|'.join([r'^\..*'] +
                                                        list(ignore_patterns)))
        parent = None
        self.update_id = 0
        if (len(self.content) > 1
                or utils.means_true(kwargs.get('create_root', False))
                or self.import_folder is not None):
            UPnPClass = classChooser('root')
            id = str(self.getnextID())
            try:
                parent = self.store[id] = FSItem(
                    id,
                    parent,
                    'media',
                    'root',
                    self.urlbase,
                    UPnPClass,
                    update=True,
                    store=self,
                )
            except Exception as e:
                self.error(
                    f'Error on setting self.store[id], Error on FSItem: {e}')
                exit(1)

        if self.import_folder is not None:
            id = str(self.getnextID())
            self.store[id] = FSItem(
                id,
                parent,
                self.import_folder,
                'directory',
                self.urlbase,
                UPnPClass,
                update=True,
                store=self,
            )
            self.import_folder_id = id
        for bytesPath in self.content:
            if isinstance(bytesPath, (list, tuple)):
                path = str(bytesPath[0])
            else:
                path = str(bytesPath)
            if self.ignore_file_pattern.match(path):
                continue
            try:
                self.walk(path, parent, self.ignore_file_pattern)
            except Exception as msg:
                self.warning(f'on walk of {path!r}: {msg!r}')
                import traceback

                self.debug(traceback.format_exc())

        self.wmc_mapping.update({'14': '0', '15': '0', '16': '0', '17': '0'})

        self.init_completed = True
示例#16
0
 def set_never_evented(self, value):
     self.never_evented = utils.means_true(value)
示例#17
0
    def __init__(self, server, **kwargs):
        BackendStore.__init__(self, server, **kwargs)
        self.next_id = 1000
        self.name = kwargs.get('name', 'my media')
        self.content = kwargs.get('content', None)
        if self.content != None:
            if isinstance(self.content, str):
                self.content = [self.content]
            l = []
            for a in self.content:
                l += a.split(',')
            self.content = l
        else:
            self.content = xdg_content()
            self.content = [x[0] for x in self.content]
        if self.content == None:
            self.content = 'tests/content'
        if not isinstance(self.content, list):
            self.content = [self.content]
        self.content = Set([os.path.abspath(x) for x in self.content])
        ignore_patterns = kwargs.get('ignore_patterns', [])
        self.store = {}

        self.inotify = None

        if kwargs.get('enable_inotify', 'yes') == 'yes':
            if INotify:
                try:
                    self.inotify = INotify()
                except Exception as msg:
                    self.info("%s", msg)
            else:
                self.info("%s", no_inotify_reason)
        else:
            self.info("FSStore content auto-update disabled upon user request")

        if kwargs.get('enable_destroy', 'no') == 'yes':
            self.upnp_DestroyObject = self.hidden_upnp_DestroyObject

        self.import_folder = kwargs.get('import_folder', None)
        if self.import_folder != None:
            self.import_folder = os.path.abspath(self.import_folder)
            if not os.path.isdir(self.import_folder):
                self.import_folder = None

        self.ignore_file_pattern = re.compile('|'.join(['^\..*'] +
                                                       list(ignore_patterns)))
        parent = None
        self.update_id = 0
        if (len(self.content) > 1
                or utils.means_true(kwargs.get('create_root', False))
                or self.import_folder != None):
            UPnPClass = classChooser('root')
            id = str(self.getnextID())
            parent = self.store[id] = FSItem(id,
                                             parent,
                                             'media',
                                             'root',
                                             self.urlbase,
                                             UPnPClass,
                                             update=True,
                                             store=self)

        if self.import_folder != None:
            id = str(self.getnextID())
            self.store[id] = FSItem(id,
                                    parent,
                                    self.import_folder,
                                    'directory',
                                    self.urlbase,
                                    UPnPClass,
                                    update=True,
                                    store=self)
            self.import_folder_id = id

        for path in self.content:
            if isinstance(path, (list, tuple)):
                path = path[0]
            if self.ignore_file_pattern.match(path):
                continue
            try:
                path = path.encode('utf-8')  # patch for #267
                self.walk(path, parent, self.ignore_file_pattern)
            except Exception as msg:
                self.warning('on walk of %r: %r', path, msg)
                import traceback
                self.debug(traceback.format_exc())

        self.wmc_mapping.update({'14': '0', '15': '0', '16': '0', '17': '0'})

        louie.send('Coherence.UPnP.Backend.init_completed', None, backend=self)