def render_pidf(self): if not self.contact: return has_locations = False status_label = '' if self.contact.presence_state['devices']: has_locations = any(device['location'] for device in list(self.contact.presence_state['devices'].values()) if device['location'] is not None) count = len(self.contact.presence_state['devices']) if count == 1: status_label = NSLocalizedString("One device available", "Label") elif count > 1: status_label = NSLocalizedString("%d devices available" % count, "Label") splitViewFrame = self.splitView.frame() mapViewFrame = self.mapViewSplitView.frame() pidfViewFrame = self.pidfView.frame() if has_locations: if mapViewFrame.size.height == 0: mapViewFrame.size.height = SPLITTER_HEIGHT self.mapViewSplitView.setFrame_(mapViewFrame) pidfViewFrame.size.height -= SPLITTER_HEIGHT self.pidfView.setFrame_(pidfViewFrame) self.mapView.setContact(self.contact) nr_countries = len(self.mapView.selectedCountries) if nr_countries == 1: status_label += NSLocalizedString(" in one country", "Label") elif nr_countries > 1: status_label += NSLocalizedString(" in %d countries" % nr_countries, "Label") else: mapViewFrame.size.height = 0 self.mapViewSplitView.setFrame_(mapViewFrame) pidfViewFrame.size.height = splitViewFrame.size.height self.pidfView.setFrame_(pidfViewFrame) self.statusLabel.setStringValue_(status_label) text = '' for pidf in self.contact.pidfs: text += self.build_pidf_text(pidf) + '\n\n' if self.contact.presence_state['pending_authorizations']: text += "Pending authorizations:\n" pending_authorizations = self.contact.presence_state['pending_authorizations'] for key in list(pending_authorizations.keys()): text += " Subscription to %s from account %s\n" % (sip_prefix_pattern.sub('', key), pending_authorizations[key]) self.presenceText.textStorage().deleteCharactersInRange_(NSMakeRange(0, self.presenceText.textStorage().length())) astring = NSAttributedString.alloc().initWithString_(text) self.presenceText.textStorage().appendAttributedString_(astring) image = presence_status_for_contact(self.contact) if image: icon = NSImage.imageNamed_(image) icon.setScalesWhenResized_(True) icon.setSize_(NSMakeSize(12,12)) self.presence_icon.setImage_(icon)
def render_pidf(self): if not self.contact: return has_locations = False status_label = '' if self.contact.presence_state['devices']: has_locations = any(device['location'] for device in self.contact.presence_state['devices'].values() if device['location'] is not None) count = len(self.contact.presence_state['devices']) if count == 1: status_label = 'One device available' elif count > 1: status_label = '%d devices available' % count splitViewFrame = self.splitView.frame() mapViewFrame = self.mapViewSplitView.frame() pidfViewFrame = self.pidfView.frame() if has_locations: if mapViewFrame.size.height == 0: mapViewFrame.size.height = SPLITTER_HEIGHT self.mapViewSplitView.setFrame_(mapViewFrame) pidfViewFrame.size.height -= SPLITTER_HEIGHT self.pidfView.setFrame_(pidfViewFrame) self.mapView.setContact(self.contact) nr_countries = len(self.mapView.selectedCountries) if nr_countries == 1: status_label += ' in one country' elif nr_countries > 1: status_label += ' in %d countries' % nr_countries else: mapViewFrame.size.height = 0 self.mapViewSplitView.setFrame_(mapViewFrame) pidfViewFrame.size.height = splitViewFrame.size.height self.pidfView.setFrame_(pidfViewFrame) self.statusLabel.setStringValue_(status_label) text = '' for pidf in self.contact.pidfs: text += self.build_pidf_text(pidf) + '\n\n' if self.contact.presence_state['pending_authorizations']: text += "Pending authorizations:\n" pending_authorizations = self.contact.presence_state['pending_authorizations'] for key in pending_authorizations.keys(): text += " Subscription to %s from account %s\n" % (sip_prefix_pattern.sub('', key), pending_authorizations[key]) self.presenceText.textStorage().deleteCharactersInRange_(NSMakeRange(0, self.presenceText.textStorage().length())) astring = NSAttributedString.alloc().initWithString_(text) self.presenceText.textStorage().appendAttributedString_(astring) image = presence_status_for_contact(self.contact) if image: icon = NSImage.imageNamed_(image) icon.setScalesWhenResized_(True) icon.setSize_(NSMakeSize(12,12)) self.presence_icon.setImage_(icon)
def drawPresenceIcon(self): status = 'offline' if type(self.contact) is BlinkMyselfConferenceContact: account = self.contact.account if account.enabled and account.presence.enabled: settings = SIPSimpleSettings() status = settings.presence_state.status.lower() elif type(self.contact) is BlinkConferenceContact: blink_contact = self.contact.presence_contact if type(blink_contact) is not BlinkPresenceContact: return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is BlinkHistoryViewerContact: blink_contact = self.contact.presence_contact if type(blink_contact) is not BlinkPresenceContact: return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is HistoryBlinkContact: blink_contact = self.contact.contact if type(blink_contact) is not BlinkPresenceContact: return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif isinstance(self.contact, BlinkPresenceContact): blink_contact = self.contact if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is BonjourBlinkContact: account = BonjourAccount() if not account.presence.enabled: return blink_contact = self.contact status = presence_status_for_contact(blink_contact) elif type(self.contact) is SystemAddressBookBlinkContact: return elif type(self.contact) is LdapSearchResultContact: return elif type(self.contact) is SearchResultContact: return if not status: return try: icon = presence_status_icons[status] except KeyError: pass has_locations = None if type(self.contact) is BlinkPresenceContact: try: has_locations = any(device['location'] for device in self.contact.presence_state['devices'].values() if device['location'] is not None) except KeyError: pass frame = self.frame frame.origin.y -= 17 if has_locations: left = self.view.frame().size.width - 22 self.drawIcon(self.locationIcon, left, self.frame.origin.y +14, 16, 16) # presence bar frame.size.width = 5 if type(self.contact) in (BlinkConferenceContact, BlinkMyselfConferenceContact): frame.size.height = 14 frame.origin.y += 15 frame.origin.x = self.view.frame().size.width - 6 rect = NSInsetRect(frame, 0, 0) if status == 'available': NSColor.greenColor().set() elif status == 'away': NSColor.yellowColor().set() elif status == 'busy': NSColor.redColor().set() else: NSColor.whiteColor().set() border = NSBezierPath.bezierPathWithRoundedRect_xRadius_yRadius_(rect, 2.0, 2.0) border.setLineWidth_(0.08) border.fill() NSColor.blackColor().set() border.stroke()
def drawPresenceIcon(self): status = 'offline' if type(self.contact) is BlinkMyselfConferenceContact: account = self.contact.account if account.enabled and account.presence.enabled: settings = SIPSimpleSettings() status = settings.presence_state.status.lower() elif type(self.contact) is BlinkConferenceContact: blink_contact = self.contact.presence_contact if not isinstance(blink_contact, BlinkPresenceContact): return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is BlinkHistoryViewerContact: blink_contact = self.contact.presence_contact if not isinstance(blink_contact, BlinkPresenceContact): return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is HistoryBlinkContact: blink_contact = self.contact.contact if not isinstance(blink_contact, BlinkPresenceContact): return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif isinstance(self.contact, BlinkPresenceContact): blink_contact = self.contact if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is BonjourBlinkContact: account = BonjourAccount() if not account.presence.enabled: return blink_contact = self.contact status = presence_status_for_contact(blink_contact) elif type(self.contact) is SystemAddressBookBlinkContact: return elif type(self.contact) is LdapSearchResultContact: return elif type(self.contact) is SearchResultContact: return if not status: return try: icon = presence_status_icons[status] except KeyError: pass has_locations = None if isinstance(self.contact, (BlinkOnlineContact, BlinkPresenceContact)): try: has_locations = any(device['location'] for device in list( self.contact.presence_state['devices'].values()) if device['location'] is not None) except KeyError: pass frame = self.frame frame.origin.y -= 17 #if has_locations: # left = self.view.frame().size.width - 22 # self.drawIcon(self.locationIcon, left, self.frame.origin.y +14, 16, 16) # presence bar frame.size.width = 5 if type(self.contact) in (BlinkConferenceContact, BlinkMyselfConferenceContact): frame.size.height = 14 frame.origin.y += 15 frame.origin.x = self.view.frame().size.width - 6 rect = NSInsetRect(frame, 0, 0) if status == 'available': NSColor.greenColor().set() elif status == 'away': NSColor.yellowColor().set() elif status == 'busy': NSColor.redColor().set() else: NSColor.whiteColor().set() border = NSBezierPath.bezierPathWithRoundedRect_xRadius_yRadius_( rect, 2.0, 2.0) border.setLineWidth_(0.08) border.fill() NSColor.blackColor().set() border.stroke() # sleep icon if isinstance(self.contact, (BlinkOnlineContact, BlinkPresenceContact)): if self.contact.presence_state['time_offset'] is not None: ctime = datetime.datetime.utcnow( ) + self.contact.presence_state['time_offset'] hour = int(ctime.strftime("%H")) if hour > 21 or hour < 7: left = self.view.frame().size.width - 26 self.drawIcon(self.nightIcon, left, self.frame.origin.y + 14, 16, 16)