Exemple #1
0
 def _NH_SIPAccountGotSelfPresenceState(self, notification):
     pidf_doc = notification.data.pidf
     services = [service for service in pidf_doc.services if service.status.extended is not None]
     if not services:
         return
     blink_settings = BlinkSettings()
     services.sort(key=lambda obj: obj.timestamp.value if obj.timestamp else epoch, reverse=True)
     service = services[0]
     if service.id in ('SID-%s' % uuid.UUID(SIPSimpleSettings().instance_id), 'SID-%s' % hashlib.md5(notification.sender.id).hexdigest()):
         # Our current state is the winning one
         return
     status = str(service.status.extended).title()
     note = None if not service.notes else str(list(service.notes)[0])
     if status == 'Offline':
         status = 'Invisible'
         note = None
     new_state = PresenceState(status, note)
     blink_settings.presence.current_state = new_state
     if new_state.note:
         try:
             next(state for state in blink_settings.presence.state_history if state == new_state)
         except StopIteration:
             blink_settings.presence.state_history = [new_state] + blink_settings.presence.state_history
         else:
             blink_settings.presence.state_history = [new_state] + [state for state in blink_settings.presence.state_history if state != new_state]
     blink_settings.save()
Exemple #2
0
 def _NH_SIPAccountGotSelfPresenceState(self, notification):
     pidf_doc = notification.data.pidf
     services = [service for service in pidf_doc.services if service.status.extended is not None]
     if not services:
         return
     blink_settings = BlinkSettings()
     services.sort(key=lambda obj: obj.timestamp.value if obj.timestamp else epoch, reverse=True)
     service = services[0]
     if service.id in ('SID-%s' % uuid.UUID(SIPSimpleSettings().instance_id), 'SID-%s' % hashlib.md5(notification.sender.id).hexdigest()):
         # Our current state is the winning one
         return
     status = unicode(service.status.extended).title()
     note = None if not service.notes else unicode(list(service.notes)[0])
     if status == 'Offline':
         status = 'Invisible'
         note = None
     new_state = PresenceState(status, note)
     blink_settings.presence.current_state = new_state
     if new_state.note:
         try:
             next(state for state in blink_settings.presence.state_history if state==new_state)
         except StopIteration:
             blink_settings.presence.state_history = [new_state] + blink_settings.presence.state_history
         else:
             blink_settings.presence.state_history = [new_state] + [state for state in blink_settings.presence.state_history if state!=new_state]
     blink_settings.save()
Exemple #3
0
 def _SH_AccountStateChanged(self):
     self.activity_note.setText(self.account_state.note)
     if self.account_state.state is AccountState.Invisible:
         self.activity_note.inactiveText = u'(invisible)'
         self.activity_note.setEnabled(False)
     else:
         if not self.activity_note.isEnabled():
             self.activity_note.inactiveText = u'Add an activity note here'
             self.activity_note.setEnabled(True)
     if not self.account_state.state.internal:
         self.saved_account_state = None
     blink_settings = BlinkSettings()
     blink_settings.presence.current_state = PresenceState(self.account_state.state, self.account_state.note)
     blink_settings.presence.state_history = [PresenceState(state, note) for state, note in self.account_state.history]
     blink_settings.save()
Exemple #4
0
 def _SH_AccountStateChanged(self):
     self.activity_note.setText(self.account_state.note)
     if self.account_state.state is AccountState.Invisible:
         self.activity_note.inactiveText = '(invisible)'
         self.activity_note.setEnabled(False)
     else:
         if not self.activity_note.isEnabled():
             self.activity_note.inactiveText = 'Add an activity note here'
             self.activity_note.setEnabled(True)
     if not self.account_state.state.internal:
         self.saved_account_state = None
     blink_settings = BlinkSettings()
     blink_settings.presence.current_state = PresenceState(self.account_state.state, self.account_state.note)
     blink_settings.presence.state_history = [PresenceState(state, note) for state, note in self.account_state.history]
     blink_settings.save()
Exemple #5
0
 def _SH_AccountStateClicked(self, checked):
     filename = QFileDialog.getOpenFileName(self, u'Select Icon', self.last_icon_directory, u"Images (*.png *.tiff *.jpg *.xmp *.svg)")
     if filename:
         self.last_icon_directory = os.path.dirname(filename)
         filename = filename if os.path.realpath(filename) != os.path.realpath(self.default_icon_path) else None
         blink_settings = BlinkSettings()
         icon_manager = IconManager()
         if filename is not None:
             icon = icon_manager.store_file('avatar', filename)
             if icon is not None:
                 blink_settings.presence.icon = IconDescriptor(FileURL(icon.filename), hashlib.sha1(icon.content).hexdigest())
             else:
                 icon_manager.remove('avatar')
                 blink_settings.presence.icon = None
         else:
             icon_manager.remove('avatar')
             blink_settings.presence.icon = None
         blink_settings.save()
Exemple #6
0
 def _SH_AccountStateClicked(self, checked):
     filename = QFileDialog.getOpenFileName(self, 'Select Icon', self.last_icon_directory, "Images (*.png *.tiff *.jpg *.xmp *.svg)")[0]
     if filename:
         self.last_icon_directory = os.path.dirname(filename)
         filename = filename if os.path.realpath(filename) != os.path.realpath(self.default_icon_path) else None
         blink_settings = BlinkSettings()
         icon_manager = IconManager()
         if filename is not None:
             icon = icon_manager.store_file('avatar', filename)
             if icon is not None:
                 blink_settings.presence.icon = IconDescriptor(FileURL(icon.filename), hashlib.sha1(icon.content).hexdigest())
             else:
                 icon_manager.remove('avatar')
                 blink_settings.presence.icon = None
         else:
             icon_manager.remove('avatar')
             blink_settings.presence.icon = None
         blink_settings.save()
Exemple #7
0
    def _NH_XCAPManagerDidReloadData(self, notification):
        account = notification.sender.account
        blink_settings = BlinkSettings()
        icon_manager = IconManager()

        offline_status = notification.data.offline_status
        status_icon = notification.data.status_icon

        try:
            offline_note = next(note for service in offline_status.pidf.services for note in service.notes)
        except (AttributeError, StopIteration):
            offline_note = None

        blink_settings.presence.offline_note = offline_note
        blink_settings.save()

        if status_icon:
            icon_hash = hashlib.sha1(status_icon.data).hexdigest()
            icon_desc = IconDescriptor(status_icon.url, icon_hash)
            if not blink_settings.presence.icon or blink_settings.presence.icon.etag != icon_hash:
                icon = icon_manager.store_data('avatar', status_icon.data)
                blink_settings.presence.icon = IconDescriptor(FileURL(icon.filename), icon_hash) if icon is not None else None
                blink_settings.save()
        else:
            icon_desc = None
            icon_manager.remove('avatar')
            blink_settings.presence.icon = None
            blink_settings.save()

        account.xcap.icon = icon_desc
        account.save()
Exemple #8
0
    def _NH_XCAPManagerDidReloadData(self, notification):
        account = notification.sender.account
        blink_settings = BlinkSettings()
        icon_manager = IconManager()

        offline_status = notification.data.offline_status
        status_icon = notification.data.status_icon

        try:
            offline_note = next(note
                                for service in offline_status.pidf.services
                                for note in service.notes)
        except (AttributeError, StopIteration):
            offline_note = None

        blink_settings.presence.offline_note = offline_note
        blink_settings.save()

        try:
            offline_icon = next(service.icon
                                for service in offline_status.pidf.services)
        except (AttributeError, StopIteration):
            offline_icon_hash = None
        else:
            offline_icon_hash = str(offline_icon).partition(
                '#blink-icon')[2] or None

        if status_icon:
            icon_hash = hashlib.sha1(status_icon.data).hexdigest()
            icon_desc = IconDescriptor(status_icon.url, icon_hash)
            if not blink_settings.presence.icon or blink_settings.presence.icon.etag != icon_hash:
                icon = icon_manager.store_data('avatar', status_icon.data)
                blink_settings.presence.icon = IconDescriptor(
                    FileURL(icon.filename),
                    icon_hash) if icon is not None else None
                blink_settings.save()
            elif account.xcap.icon != icon_desc and icon_hash != offline_icon_hash:
                self._should_set_offline_status.add(account.id)
        else:
            if blink_settings.presence.icon is None is not account.xcap.icon:
                self._should_set_offline_status.add(account.id)
            elif blink_settings.presence.icon is account.xcap.icon is offline_status is None and account.xcap_manager.pidf_manipulation.supported:
                state = BlinkPresenceState(account).offline_state
                account.xcap_manager.set_offline_status(
                    OfflineStatus(state) if state is not None else None)
            icon_desc = None
            icon_manager.remove('avatar')
            blink_settings.presence.icon = None
            blink_settings.save()

        account.xcap.icon = icon_desc
        account.save()
Exemple #9
0
    def _NH_XCAPManagerDidReloadData(self, notification):
        account = notification.sender.account
        blink_settings = BlinkSettings()
        icon_manager = IconManager()

        offline_status = notification.data.offline_status
        status_icon = notification.data.status_icon

        try:
            offline_note = next(note for service in offline_status.pidf.services for note in service.notes)
        except (AttributeError, StopIteration):
            offline_note = None

        blink_settings.presence.offline_note = offline_note
        blink_settings.save()

        try:
            offline_icon = next(service.icon for service in offline_status.pidf.services)
        except (AttributeError, StopIteration):
            offline_icon_hash = None
        else:
            offline_icon_hash = str(offline_icon).partition('#blink-icon')[2] or None

        if status_icon:
            icon_hash = hashlib.sha1(status_icon.data).hexdigest()
            icon_desc = IconDescriptor(status_icon.url, icon_hash)
            if not blink_settings.presence.icon or blink_settings.presence.icon.etag != icon_hash:
                icon = icon_manager.store_data('avatar', status_icon.data)
                blink_settings.presence.icon = IconDescriptor(FileURL(icon.filename), icon_hash) if icon is not None else None
                blink_settings.save()
            elif account.xcap.icon != icon_desc and icon_hash != offline_icon_hash:
                self._should_set_offline_status.add(account.id)
        else:
            if blink_settings.presence.icon is None is not account.xcap.icon:
                self._should_set_offline_status.add(account.id)
            elif blink_settings.presence.icon is account.xcap.icon is offline_status is None and account.xcap_manager.pidf_manipulation.supported:
                state = BlinkPresenceState(account).offline_state
                account.xcap_manager.set_offline_status(OfflineStatus(state) if state is not None else None)
            icon_desc = None
            icon_manager.remove('avatar')
            blink_settings.presence.icon = None
            blink_settings.save()

        account.xcap.icon = icon_desc
        account.save()