def _NH_SIPApplicationDidStart(self, notification):
     account_manager = AccountManager()
     self.xcap_manager = XCAPManager(account_manager.default_account)
     notification_center = NotificationCenter()
     notification_center.add_observer(self, sender=self.xcap_manager)
     self.xcap_manager.load(os.path.realpath('xcap-cache'))
     self.xcap_manager.start()
 def _NH_SIPApplicationDidStart(self, notification):
     account_manager = AccountManager()
     self.xcap_manager = XCAPManager(account_manager.default_account)
     notification_center = NotificationCenter()
     notification_center.add_observer(self, sender=self.xcap_manager)
     self.xcap_manager.load(os.path.realpath('xcap-cache'))
     self.xcap_manager.start()
class XCAPApplication(object):
    __metaclass__ = Singleton
    implements(IObserver)

    def __init__(self):
        self.application = SIPApplication()
        self.xcap_manager = None

        self.quit_event = Event()

        notification_center = NotificationCenter()
        notification_center.add_observer(self, sender=self.application)

    def start(self):
        self.application.start(FileBackend(os.path.realpath('test-config')))

    @run_in_green_thread
    def stop(self):
        self.xcap_manager.stop()
        self.application.stop()

    def handle_notification(self, notification):
        handler = getattr(self, '_NH_%s' % notification.name, Null)
        handler(notification)

    @run_in_green_thread
    def _NH_SIPApplicationDidStart(self, notification):
        account_manager = AccountManager()
        self.xcap_manager = XCAPManager(account_manager.default_account)
        notification_center = NotificationCenter()
        notification_center.add_observer(self, sender=self.xcap_manager)
        self.xcap_manager.load(os.path.realpath('xcap-cache'))
        self.xcap_manager.start()

    def _NH_SIPApplicationDidEnd(self, notification):
        self.quit_event.set()

    def _NH_XCAPManagerDidChangeState(self, notification):
        print 'XCAP Manager state %s -> %s' % (notification.data.prev_state, notification.data.state)

    def _NH_XCAPManagerWillStart(self, notification):
        print 'XCAP Manager will start'

    def _NH_XCAPManagerDidStart(self, notification):
        print 'XCAP Manager did start'

    def _NH_XCAPManagerDidDiscoverServerCapabilities(self, notification):
        print '  contact list supported: %s' % notification.data.contactlist_supported
        print '  presence policies supported: %s' % notification.data.presence_policies_supported
        print '  dialoginfo policies supported: %s' % notification.data.dialoginfo_policies_supported
        print '  status icon supported: %s' % notification.data.status_icon_supported
        print '  offline status supported: %s' % notification.data.offline_status_supported

    def _NH_XCAPManagerWillEnd(self, notification):
        print 'XCAP Manager will end'

    def _NH_XCAPManagerDidEnd(self, notification):
        print 'XCAP Manager did end'

    def _NH_XCAPManagerDidReloadData(self, notification):
        print 'XCAP Manager reloaded data:'
        groups = dict.fromkeys(notification.data.groups)
        for group in groups:
            groups[group] = []
        for contact in notification.data.contacts:
            if contact.group is not None:
                groups[contact.group].append(contact)
        print 'Buddies:'
        for group, contacts in groups.iteritems():
            print '  %s:' % group
            for contact in contacts:
                if contact.name:
                    print '    %s <%s>' % (contact.name, contact.uri)
                else:
                    print '    %s' % contact.uri
                print '      subscribe-to-presence    = %s' % contact.subscribe_to_presence
                print '      subscribe-to-dialoginfo  = %s' % contact.subscribe_to_dialoginfo
                print '      presence-policies        = %s' % (', '.join(p.id for p in contact.presence_policies) if contact.presence_policies else None)
                print '      dialoginfo-policies      = %s' % (', '.join(p.id for p in contact.dialoginfo_policies) if contact.dialoginfo_policies else None)
                for attr, value in contact.attributes.iteritems():
                    print '      x: %s = %s' % (attr, value)
            print

        print 'Presence policies:'
        for policy in notification.data.presence_policies:
            print '  %s -> %s' % (policy.id, policy.action)
            if policy.sphere:
                print '    sphere                     = %s' % policy.sphere
            if policy.validity:
                print '    valid between:'
                for from_timestamp, until_timestamp in policy.validity:
                    print '      %s - %s' % (from_timestamp, until_timestamp)
            if policy.multi_identity_conditions:
                print '    multi identity conditions:'
                for multi_condition in policy.multi_identity_conditions:
                    if isinstance(multi_condition, CatchAllCondition) and multi_condition.exceptions:
                        print '      anyone except'
                        for exception in multi_condition.exceptions:
                            if isinstance(exception, DomainException):
                                print '        users from domain %s' % exception.domain
                            elif isinstance(exception, UserException):
                                print '        user %s' % exception.uri
                    elif isinstance(multi_condition, CatchAllCondition):
                        print '      anyone'
                    elif isinstance(multi_condition, DomainCondition) and multi_condition.exceptions:
                        print '      anyone from domain %s except' % multi_condition.domain
                        for exception in multi_condition.exceptions:
                            if isinstance(exception, UserException):
                                print '        user %s' % exception.uri
                    elif isinstance(multi_condition, DomainCondition):
                        print '      anyone from domain %s' % multi_condition.domain
            if policy.provide_devices is All:
                print '    provide-devices            = All'
            elif policy.provide_devices:
                print '    provide-devices:'
                for prv in policy.provide_devices:
                    if isinstance(prv, Class):
                        print '      class                    = %s' % prv
                    elif isinstance(prv, OccurenceID):
                        print '      occurence-id             = %s' % prv
                    elif isinstance(prv, DeviceID):
                        print '      device-id                = %s' % prv
                    else:
                        print '      unknown                  = %s(%r)' % (prv, type(prv).__name__)
            if policy.provide_persons is All:
                print '    provide-persons            = All'
            elif policy.provide_persons:
                print '    provide-persons:'
                for prv in policy.provide_persons:
                    if isinstance(prv, Class):
                        print '      class                    = %s' % prv
                    elif isinstance(prv, OccurenceID):
                        print '      occurence-id             = %s' % prv
                    else:
                        print '      unknown                  = %s(%r)' % (prv, type(prv).__name__)
            if policy.provide_services is All:
                print '    provide-services           = All'
            elif policy.provide_services:
                print '    provide-services:'
                for prv in policy.provide_services:
                    if isinstance(prv, Class):
                        print '      class                    = %s' % prv
                    elif isinstance(prv, OccurenceID):
                        print '      occurence-id             = %s' % prv
                    elif isinstance(prv, ServiceURI):
                        print '      service-uri              = %s' % prv
                    elif isinstance(prv, ServiceURIScheme):
                        print '      service-uri-scheme       = %s' % prv
                    else:
                        print '      unknown                  = %s(%r)' % (prv, type(prv).__name__)
            print '    provide-activities         = %s' % policy.provide_activities
            print '    provide-class              = %s' % policy.provide_class
            print '    provide-device-id          = %s' % policy.provide_device_id
            print '    provide-mood               = %s' % policy.provide_mood
            print '    provide-place-is           = %s' % policy.provide_place_is
            print '    provide-place-type         = %s' % policy.provide_place_type
            print '    provide-privacy            = %s' % policy.provide_privacy
            print '    provide-relationship       = %s' % policy.provide_relationship
            print '    provide-status-icon        = %s' % policy.provide_status_icon
            print '    provide-sphere             = %s' % policy.provide_sphere
            print '    provide-time-offset        = %s' % policy.provide_time_offset
            print '    provide-user-input         = %s' % policy.provide_user_input
            print '    provide-unknown-attributes = %s' % policy.provide_unknown_attributes
            print '    provide-all-attributes     = %s' % policy.provide_all_attributes
            print

        print 'Dialog-info policies:'
        for policy in notification.data.dialoginfo_policies:
            print '  %s -> %s' % (policy.id, policy.action)
            if policy.sphere:
                print '    sphere                     = %s' % policy.sphere
            if policy.validity:
                print '    valid between:'
                for from_timestamp, until_timestamp in policy.validity:
                    print '      %s - %s' % (from_timestamp, until_timestamp)
            print

        print 'RLS services:'
        for service in notification.data.services:
            print '  %s -> %s' % (service.uri, ', '.join(service.packages))
            for entry in service.entries:
                print '    %s' % entry
            print

        print 'Offline status:'
        if notification.data.offline_status:
            print '  Note: %s' % notification.data.offline_status.note
            print '  Activity: %s' % notification.data.offline_status.activity
        else:
            print '  Missing'
class XCAPApplication(object):
    __metaclass__ = Singleton
    implements(IObserver)

    def __init__(self):
        self.application = SIPApplication()
        self.xcap_manager = None

        self.quit_event = Event()

        notification_center = NotificationCenter()
        notification_center.add_observer(self, sender=self.application)

    def start(self):
        self.application.start(FileBackend(os.path.realpath('test-config')))

    @run_in_green_thread
    def stop(self):
        self.xcap_manager.stop()
        self.application.stop()

    def handle_notification(self, notification):
        handler = getattr(self, '_NH_%s' % notification.name, Null)
        handler(notification)

    @run_in_green_thread
    def _NH_SIPApplicationDidStart(self, notification):
        account_manager = AccountManager()
        self.xcap_manager = XCAPManager(account_manager.default_account)
        notification_center = NotificationCenter()
        notification_center.add_observer(self, sender=self.xcap_manager)
        self.xcap_manager.load(os.path.realpath('xcap-cache'))
        self.xcap_manager.start()

    def _NH_SIPApplicationDidEnd(self, notification):
        self.quit_event.set()

    def _NH_XCAPManagerDidChangeState(self, notification):
        print 'XCAP Manager state %s -> %s' % (notification.data.prev_state,
                                               notification.data.state)

    def _NH_XCAPManagerWillStart(self, notification):
        print 'XCAP Manager will start'

    def _NH_XCAPManagerDidStart(self, notification):
        print 'XCAP Manager did start'

    def _NH_XCAPManagerDidDiscoverServerCapabilities(self, notification):
        print '  contact list supported: %s' % notification.data.contactlist_supported
        print '  presence policies supported: %s' % notification.data.presence_policies_supported
        print '  dialoginfo policies supported: %s' % notification.data.dialoginfo_policies_supported
        print '  status icon supported: %s' % notification.data.status_icon_supported
        print '  offline status supported: %s' % notification.data.offline_status_supported

    def _NH_XCAPManagerWillEnd(self, notification):
        print 'XCAP Manager will end'

    def _NH_XCAPManagerDidEnd(self, notification):
        print 'XCAP Manager did end'

    def _NH_XCAPManagerDidReloadData(self, notification):
        print 'XCAP Manager reloaded data:'
        groups = dict.fromkeys(notification.data.groups)
        for group in groups:
            groups[group] = []
        for contact in notification.data.contacts:
            if contact.group is not None:
                groups[contact.group].append(contact)
        print 'Buddies:'
        for group, contacts in groups.iteritems():
            print '  %s:' % group
            for contact in contacts:
                if contact.name:
                    print '    %s <%s>' % (contact.name, contact.uri)
                else:
                    print '    %s' % contact.uri
                print '      subscribe-to-presence    = %s' % contact.subscribe_to_presence
                print '      subscribe-to-dialoginfo  = %s' % contact.subscribe_to_dialoginfo
                print '      presence-policies        = %s' % (
                    ', '.join(p.id for p in contact.presence_policies)
                    if contact.presence_policies else None)
                print '      dialoginfo-policies      = %s' % (
                    ', '.join(p.id for p in contact.dialoginfo_policies)
                    if contact.dialoginfo_policies else None)
                for attr, value in contact.attributes.iteritems():
                    print '      x: %s = %s' % (attr, value)
            print

        print 'Presence policies:'
        for policy in notification.data.presence_policies:
            print '  %s -> %s' % (policy.id, policy.action)
            if policy.sphere:
                print '    sphere                     = %s' % policy.sphere
            if policy.validity:
                print '    valid between:'
                for from_timestamp, until_timestamp in policy.validity:
                    print '      %s - %s' % (from_timestamp, until_timestamp)
            if policy.multi_identity_conditions:
                print '    multi identity conditions:'
                for multi_condition in policy.multi_identity_conditions:
                    if isinstance(
                            multi_condition,
                            CatchAllCondition) and multi_condition.exceptions:
                        print '      anyone except'
                        for exception in multi_condition.exceptions:
                            if isinstance(exception, DomainException):
                                print '        users from domain %s' % exception.domain
                            elif isinstance(exception, UserException):
                                print '        user %s' % exception.uri
                    elif isinstance(multi_condition, CatchAllCondition):
                        print '      anyone'
                    elif isinstance(
                            multi_condition,
                            DomainCondition) and multi_condition.exceptions:
                        print '      anyone from domain %s except' % multi_condition.domain
                        for exception in multi_condition.exceptions:
                            if isinstance(exception, UserException):
                                print '        user %s' % exception.uri
                    elif isinstance(multi_condition, DomainCondition):
                        print '      anyone from domain %s' % multi_condition.domain
            if policy.provide_devices is All:
                print '    provide-devices            = All'
            elif policy.provide_devices:
                print '    provide-devices:'
                for prv in policy.provide_devices:
                    if isinstance(prv, Class):
                        print '      class                    = %s' % prv
                    elif isinstance(prv, OccurenceID):
                        print '      occurence-id             = %s' % prv
                    elif isinstance(prv, DeviceID):
                        print '      device-id                = %s' % prv
                    else:
                        print '      unknown                  = %s(%r)' % (
                            prv, type(prv).__name__)
            if policy.provide_persons is All:
                print '    provide-persons            = All'
            elif policy.provide_persons:
                print '    provide-persons:'
                for prv in policy.provide_persons:
                    if isinstance(prv, Class):
                        print '      class                    = %s' % prv
                    elif isinstance(prv, OccurenceID):
                        print '      occurence-id             = %s' % prv
                    else:
                        print '      unknown                  = %s(%r)' % (
                            prv, type(prv).__name__)
            if policy.provide_services is All:
                print '    provide-services           = All'
            elif policy.provide_services:
                print '    provide-services:'
                for prv in policy.provide_services:
                    if isinstance(prv, Class):
                        print '      class                    = %s' % prv
                    elif isinstance(prv, OccurenceID):
                        print '      occurence-id             = %s' % prv
                    elif isinstance(prv, ServiceURI):
                        print '      service-uri              = %s' % prv
                    elif isinstance(prv, ServiceURIScheme):
                        print '      service-uri-scheme       = %s' % prv
                    else:
                        print '      unknown                  = %s(%r)' % (
                            prv, type(prv).__name__)
            print '    provide-activities         = %s' % policy.provide_activities
            print '    provide-class              = %s' % policy.provide_class
            print '    provide-device-id          = %s' % policy.provide_device_id
            print '    provide-mood               = %s' % policy.provide_mood
            print '    provide-place-is           = %s' % policy.provide_place_is
            print '    provide-place-type         = %s' % policy.provide_place_type
            print '    provide-privacy            = %s' % policy.provide_privacy
            print '    provide-relationship       = %s' % policy.provide_relationship
            print '    provide-status-icon        = %s' % policy.provide_status_icon
            print '    provide-sphere             = %s' % policy.provide_sphere
            print '    provide-time-offset        = %s' % policy.provide_time_offset
            print '    provide-user-input         = %s' % policy.provide_user_input
            print '    provide-unknown-attributes = %s' % policy.provide_unknown_attributes
            print '    provide-all-attributes     = %s' % policy.provide_all_attributes
            print

        print 'Dialog-info policies:'
        for policy in notification.data.dialoginfo_policies:
            print '  %s -> %s' % (policy.id, policy.action)
            if policy.sphere:
                print '    sphere                     = %s' % policy.sphere
            if policy.validity:
                print '    valid between:'
                for from_timestamp, until_timestamp in policy.validity:
                    print '      %s - %s' % (from_timestamp, until_timestamp)
            print

        print 'RLS services:'
        for service in notification.data.services:
            print '  %s -> %s' % (service.uri, ', '.join(service.packages))
            for entry in service.entries:
                print '    %s' % entry
            print

        print 'Offline status:'
        if notification.data.offline_status:
            print '  Note: %s' % notification.data.offline_status.note
            print '  Activity: %s' % notification.data.offline_status.activity
        else:
            print '  Missing'