~ubuntu-branches/ubuntu/precise/papyon/precise

« back to all changes in this revision

Viewing changes to papyon/msnp/notification.py

  • Committer: Ken VanDine
  • Date: 2010-09-14 20:39:57 UTC
  • mfrom: (1.1.10 upstream)
  • Revision ID: ken.vandine@canonical.com-20100914203957-1hriss4zo8rr11hr
Tags: 0.5.1-0ubuntu1
releasing version 0.5.1-0ubuntu1

Show diffs side-by-side

added added

removed removed

Lines of Context:
209
209
        self._send_command('UUX', payload=ep)
210
210
        self._send_command('UUX', payload=pep)
211
211
 
 
212
    @throttled(2, LastElementQueue())
 
213
    def set_privacy(self, privacy=profile.Privacy.BLOCK):
 
214
        self._send_command("BLP", (privacy,))
 
215
 
212
216
    def signoff(self):
213
217
        """Logout from the server"""
214
218
        self._send_command('OUT')
452
456
        idx, network_id, account = self.__parse_network_and_account(command)
453
457
        contacts = self.__search_account(account, network_id)
454
458
        for contact in contacts:
 
459
            contact._remove_flag(profile.ContactFlag.EXTENDED_PRESENCE_KNOWN)
455
460
            contact._server_property_changed("presence",
456
461
                    profile.Presence.OFFLINE)
457
462
 
465
470
 
466
471
        msn_object = None
467
472
        icon_url = None
 
473
 
468
474
        if len(command.arguments) > idx:
469
475
            if command.arguments[idx] not in ('0', '1'):
470
476
                msn_object = papyon.p2p.MSNObject.parse(self._client,
471
477
                               urllib.unquote(command.arguments[idx]))
 
478
 
472
479
        idx += 1
473
480
        if len(command.arguments) > idx:
474
481
            icon_url = command.arguments[idx]
480
487
                contact._server_property_changed("presence", presence)
481
488
                contact._server_property_changed("client-capabilities", capabilities)
482
489
            contact._server_property_changed("display-name", display_name)
483
 
            contact._server_property_changed("msn-object", msn_object)
 
490
            # only change MSNObject if the extended presence is known (MSNP18)
 
491
            if self._protocol_version < 18 or \
 
492
               contact.has_flag(profile.ContactFlag.EXTENDED_PRESENCE_KNOWN):
 
493
                contact._server_property_changed("msn_object", msn_object)
484
494
            if icon_url is not None:
485
495
                contact._server_attribute_changed('icon_url', icon_url)
486
496
 
499
509
    def _handle_UBN(self, command): # contact infos
500
510
        if not command.payload:
501
511
            return
502
 
        print command.payload
503
512
        idx, account, guid = self.__parse_account_and_guid(command)
504
513
        contact = self.__search_account(account)[0]
505
514
        type = int(command.arguments[1])
518
527
            logger.error("Invalid XML data in received UBX command")
519
528
            return
520
529
 
 
530
        utl = self.__find_node(tree, "./UserTileLocation", "")
521
531
        cm_parts = self.__find_node(tree, "./CurrentMedia", "").split('\\0')
522
532
        pm = self.__find_node(tree, "./PSM", "")
 
533
        rmu = self.__find_node(tree, "./RMU", "")
523
534
        ss = self.__find_node(tree, "./SignatureSound", None)
524
535
        mg = self.__find_node(tree, "./MachineGuid", "{}").lower()[1:-1]
525
536
 
526
 
        if len(cm_parts) < 3:
 
537
        msn_object = None
 
538
        if utl != "":
 
539
            msn_object = papyon.p2p.MSNObject.parse(self._client, utl)
 
540
 
 
541
        if len(cm_parts) < 3 or cm_parts[2] == '0':
527
542
            cm = None
528
543
        elif cm_parts[1] == 'Music' and cm_parts[2] == '1':
529
 
            cm = (cm_parts[4].encode("utf-8"), cm_parts[5].encode("utf-8"))
530
 
        elif cm_parts[2] == '0':
531
 
            cm = None
 
544
            cm = (cm_parts[4], cm_parts[5])
532
545
 
533
546
        eps = tree.findall("./EndpointData")
534
547
        end_points = {}
548
561
 
549
562
        contacts = self.__search_account(account, network_id)
550
563
        for contact in contacts:
 
564
            contact._add_flag(profile.ContactFlag.EXTENDED_PRESENCE_KNOWN)
 
565
            contact._server_property_changed("msn-object", msn_object)
551
566
            contact._server_property_changed("current-media", cm)
552
567
            contact._server_property_changed("personal-message", pm)
553
568
            contact._server_property_changed("signature-sound", ss)
584
599
                    profile[name] = value.strip()
585
600
            self._client.profile._server_property_changed("profile", profile)
586
601
 
587
 
            self._send_command("BLP",
588
 
                    (self._client.profile.privacy,))
 
602
            self.set_privacy(self._client.profile.privacy)
589
603
            self._state = ProtocolState.SYNCHRONIZING
590
604
            self._client.address_book.sync()
591
605
        elif content_type[0] in \