Ë
    oj@  ã                   ól   — d Z ddlmZmZmZ  G d„ d«      Z G d„ d«      Z G d„ d«      Z G d	„ d
«      Zy)z.
Base classes for Instance Messenger clients.
é    )ÚAWAYÚOFFLINEÚONLINEc                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚContactsListah  
    A GUI object that displays a contacts list.

    @ivar chatui: The GUI chat client associated with this contacts list.
    @type chatui: L{ChatUI}

    @ivar contacts: The contacts.
    @type contacts: C{dict} mapping C{str} to a L{IPerson<interfaces.IPerson>}
        provider

    @ivar onlineContacts: The contacts who are currently online (have a status
        that is not C{OFFLINE}).
    @type onlineContacts: C{dict} mapping C{str} to a
        L{IPerson<interfaces.IPerson>} provider

    @ivar clients: The signed-on clients.
    @type clients: C{list} of L{IClient<interfaces.IClient>} providers
    c                 ó<   — || _         i | _        i | _        g | _        y)zx
        @param chatui: The GUI chat client associated with this contacts list.
        @type chatui: L{ChatUI}
        N)ÚchatuiÚcontactsÚonlineContactsÚclients)Úselfr	   s     ú;/usr/lib/python3/dist-packages/twisted/words/im/basechat.pyÚ__init__zContactsList.__init__    s!   € ð
 ˆŒØˆŒØ ˆÔØˆ�ó    c                 óœ  — |j                   | j                  vr|| j                  |j                   <   |j                   | j                  vr?|j                  t        k(  s|j                  t
        k(  r|| j                  |j                   <   |j                   | j                  v r,|j                  t        k(  r| j                  |j                   = yyy)zÀ
        Inform the user that a person's status has changed.

        @param person: The person whose status has changed.
        @type person: L{IPerson<interfaces.IPerson>} provider
        N)Únamer
   r   Ústatusr   r   r   )r   Úpersons     r   ÚsetContactStatuszContactsList.setContactStatus*   s›   € ð �;‰;˜dŸm™mÑ+Ø)/ˆD�M‰M˜&Ÿ+™+Ñ&Ø�;‰;˜d×1Ñ1Ñ1Ø�M‰MœVÒ# v§}¡}¼Ò'<à/5ˆD×Ñ §¡Ñ,Ø�;‰;˜$×-Ñ-Ñ-°&·-±-Ä7Ò2JØ×#Ñ# F§K¡KÑ0ð 3KÐ-r   c                 óX   — || j                   vr| j                   j                  |«       yy)zÝ
        Notify the user that an account client has been signed on to.

        @param client: The client being added to your list of account clients.
        @type client: L{IClient<interfaces.IClient>} provider
        N)r   Úappend©r   Úclients     r   ÚregisterAccountClientz"ContactsList.registerAccountClient:   s'   € ð ˜Ÿ™Ñ%Ø�L‰L×Ñ Õ'ð &r   c                 óX   — || j                   v r| j                   j                  |«       yy)a  
        Notify the user that an account client has been signed off or
        disconnected from.

        @param client: The client being removed from the list of account
            clients.
        @type client: L{IClient<interfaces.IClient>} provider
        N)r   Úremover   s     r   ÚunregisterAccountClientz$ContactsList.unregisterAccountClientD   s'   € ð �T—\‘\Ñ!Ø�L‰L×Ñ Õ'ð "r   c                 óÖ   — |j                   }|| j                  v rO| j                  |= ||_         || j                  |<   || j                  v r| j                  |= || j                  |<   yyy)a^  
        Update your contact information to reflect a change to a contact's
        nickname.

        @param person: The person in your contacts list whose nickname is
            changing.
        @type person: L{IPerson<interfaces.IPerson>} provider

        @param newnick: The new nickname for this person.
        @type newnick: C{str}
        N)r   r
   r   )r   r   ÚnewnickÚoldnames       r   ÚcontactChangedNickzContactsList.contactChangedNickP   sp   € ð —+‘+ˆØ�d—m‘mÑ#Ø—‘˜gÐ&Ø!ˆFŒKØ%+ˆD�M‰M˜'Ñ"Ø˜$×-Ñ-Ñ-Ø×'Ñ'¨Ð0Ø/5�×#Ñ# GÒ,ð .ð	 $r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r!   © r   r   r   r      s    „ ñò&ò1ò (ò
(ó6r   r   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd	d„Zd„ Z	y)
ÚConversationa(  
    A GUI window of a conversation with a specific person.

    @ivar person: The person who you're having this conversation with.
    @type person: L{IPerson<interfaces.IPerson>} provider

    @ivar chatui: The GUI chat client associated with this conversation.
    @type chatui: L{ChatUI}
    c                 ó    — || _         || _        y)a  
        @param person: The person who you're having this conversation with.
        @type person: L{IPerson<interfaces.IPerson>} provider

        @param chatui: The GUI chat client associated with this conversation.
        @type chatui: L{ChatUI}
        N)r	   r   )r   r   r	   s      r   r   zConversation.__init__q   s   € ð ˆŒØˆ�r   c                 ó   — t        d«      ‚)z1
        Display the ConversationWindow.
        ú%Subclasses must implement this method©ÚNotImplementedError©r   s    r   ÚshowzConversation.show|   ó   € ô "Ð"IÓJÐJr   c                 ó   — t        d«      ‚)z.
        Hide the ConversationWindow.
        r+   r,   r.   s    r   ÚhidezConversation.hide‚   r0   r   c                 ó<   — | j                   j                  |d«       y)z‘
        Send text to the person with whom the user is conversing.

        @param text: The text to be sent.
        @type text: C{str}
        N)r   ÚsendMessage©r   Útexts     r   ÚsendTextzConversation.sendTextˆ   s   € ð 	�‰×Ñ  dÕ+r   Nc                 ó   — t        d«      ‚)zþ
        Display a message sent from the person with whom the user is conversing.

        @param text: The sent message.
        @type text: C{str}

        @param metadata: Metadata associated with this message.
        @type metadata: C{dict}
        r+   r,   )r   r6   Úmetadatas      r   ÚshowMessagezConversation.showMessage‘   s   € ô "Ð"IÓJÐJr   c                 ó&   — || j                   _        y)zÿ
        Change a person's name.

        @param person: The person whose nickname is changing.
        @type person: L{IPerson<interfaces.IPerson>} provider

        @param newnick: The new nickname for this person.
        @type newnick: C{str}
        N)r   r   )r   r   r   s      r   r!   zConversation.contactChangedNick�   s   € ð #ˆ�‰Õr   ©N)
r"   r#   r$   r%   r   r/   r2   r7   r:   r!   r&   r   r   r(   r(   f   s(   „ ñò	òKòKò,ó
Kó
#r   r(   c                   óN   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zy)ÚGroupConversationa�  
    A GUI window of a conversation with a group of people.

    @ivar chatui: The GUI chat client associated with this conversation.
    @type chatui: L{ChatUI}

    @ivar group: The group of people that are having this conversation.
    @type group: L{IGroup<interfaces.IGroup>} provider

    @ivar members: The names of the people in this conversation.
    @type members: C{list} of C{str}
    c                 ó.   — || _         || _        g | _        y)a   
        @param chatui: The GUI chat client associated with this conversation.
        @type chatui: L{ChatUI}

        @param group: The group of people that are having this conversation.
        @type group: L{IGroup<interfaces.IGroup>} provider
        N)r	   ÚgroupÚmembers)r   r@   r	   s      r   r   zGroupConversation.__init__¸   s   € ð ˆŒØˆŒ
Øˆ�r   c                 ó   — t        d«      ‚)z6
        Display the GroupConversationWindow.
        r+   r,   r.   s    r   r/   zGroupConversation.showÄ   r0   r   c                 ó   — t        d«      ‚)z3
        Hide the GroupConversationWindow.
        r+   r,   r.   s    r   r2   zGroupConversation.hideÊ   r0   r   c                 ó<   — | j                   j                  |d«       y)zo
        Send text to the group.

        @param text: The text to be sent.
        @type text: C{str}
        N)r@   ÚsendGroupMessager5   s     r   r7   zGroupConversation.sendTextÐ   s   € ð 	�
‰
×#Ñ# D¨$Õ/r   Nc                 ó   — t        d«      ‚)aR  
        Display to the user a message sent to this group from the given sender.

        @param sender: The person sending the message.
        @type sender: C{str}

        @param text: The sent message.
        @type text: C{str}

        @param metadata: Metadata associated with this message.
        @type metadata: C{dict}
        r+   r,   )r   Úsenderr6   r9   s       r   ÚshowGroupMessagez"GroupConversation.showGroupMessageÙ   s   € ô "Ð"IÓJÐJr   c                 ó   — || _         y)z­
        Set the list of members in the group.

        @param members: The names of the people that will be in this group.
        @type members: C{list} of C{str}
        N)rA   )r   rA   s     r   ÚsetGroupMembersz!GroupConversation.setGroupMembersè   s   € ð ˆ�r   c                 ó   — t        d«      ‚)a  
        Change the topic for the group conversation window and display this
        change to the user.

        @param topic: This group's topic.
        @type topic: C{str}

        @param author: The person changing the topic.
        @type author: C{str}
        r+   r,   )r   ÚtopicÚauthors      r   ÚsetTopiczGroupConversation.setTopicñ   s   € ô "Ð"IÓJÐJr   c                 óX   — || j                   vr| j                   j                  |«       yy)zÞ
        Add the given member to the list of members in the group conversation
        and displays this to the user.

        @param member: The person joining the group conversation.
        @type member: C{str}
        N)rA   r   ©r   Úmembers     r   ÚmemberJoinedzGroupConversation.memberJoinedþ   s'   € ð ˜Ÿ™Ñ%Ø�L‰L×Ñ Õ'ð &r   c                 óŽ   — || j                   v r7| j                   j                  |«       | j                   j                  |«       yy)a  
        Change the nickname for a member of the group conversation and displays
        this change to the user.

        @param oldnick: The old nickname.
        @type oldnick: C{str}

        @param newnick: The new nickname.
        @type newnick: C{str}
        N)rA   r   r   )r   Úoldnickr   s      r   ÚmemberChangedNickz#GroupConversation.memberChangedNick	  s9   € ð �d—l‘lÑ"Ø�L‰L×Ñ Ô(Ø�L‰L×Ñ Õ(ð #r   c                 óX   — || j                   v r| j                   j                  |«       yy)zé
        Delete the given member from the list of members in the group
        conversation and displays the change to the user.

        @param member: The person leaving the group conversation.
        @type member: C{str}
        N)rA   r   rP   s     r   Ú
memberLeftzGroupConversation.memberLeft  s'   € ð �T—\‘\Ñ!Ø�L‰L×Ñ Õ'ð "r   r<   )r"   r#   r$   r%   r   r/   r2   r7   rH   rJ   rN   rR   rU   rW   r&   r   r   r>   r>   ª   s=   „ ñò
òKòKò0óKòòKò	(ò)ó	(r   r>   c                   óR   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zedfd„Z	e
dfd„Zd	„ Zd
„ Zd„ Zy)ÚChatUIaø  
    A GUI chat client.

    @type conversations: C{dict} of L{Conversation}
    @ivar conversations: A cache of all the direct windows.

    @type groupConversations: C{dict} of L{GroupConversation}
    @ivar groupConversations: A cache of all the group windows.

    @type persons: C{dict} with keys that are a C{tuple} of (C{str},
       L{IAccount<interfaces.IAccount>} provider) and values that are
       L{IPerson<interfaces.IPerson>} provider
    @ivar persons: A cache of all the users associated with this client.

    @type groups: C{dict} with keys that are a C{tuple} of (C{str},
        L{IAccount<interfaces.IAccount>} provider) and values that are
        L{IGroup<interfaces.IGroup>} provider
    @ivar groups: A cache of all the groups associated with this client.

    @type onlineClients: C{list} of L{IClient<interfaces.IClient>} providers
    @ivar onlineClients: A list of message sources currently online.

    @type contactsList: L{ContactsList}
    @ivar contactsList: A contacts list.
    c                 ój   — i | _         i | _        i | _        i | _        g | _        t        | «      | _        y r<   )ÚconversationsÚgroupConversationsÚpersonsÚgroupsÚonlineClientsr   ÚcontactsListr.   s    r   r   zChatUI.__init__?  s5   € ØˆÔØ"$ˆÔØˆŒØˆŒØˆÔÜ(¨Ó.ˆÕr   c                 ór   — | j                   j                  |«       | j                  j                  |«       |S )aZ  
        Notify the user that an account has been signed on to.

        @type client: L{IClient<interfaces.IClient>} provider
        @param client: The client account for the person who has just signed on.

        @rtype: L{IClient<interfaces.IClient>} provider
        @return: The client, so that it may be used in a callback chain.
        )r_   r   r`   r   r   s     r   r   zChatUI.registerAccountClientG  s1   € ð 	×Ñ×!Ñ! &Ô)Ø×Ñ×/Ñ/°Ô7Øˆr   c                 óp   — | j                   j                  |«       | j                  j                  |«       y)zó
        Notify the user that an account has been signed off or disconnected.

        @type client: L{IClient<interfaces.IClient>} provider
        @param client: The client account for the person who has just signed
            off.
        N)r_   r   r`   r   r   s     r   r   zChatUI.unregisterAccountClientU  s,   € ð 	×Ñ×!Ñ! &Ô)Ø×Ñ×1Ñ1°&Õ9r   c                 ó   — | j                   S )z¯
        Get the contacts list associated with this chat window.

        @rtype: L{ContactsList}
        @return: The contacts list associated with this chat window.
        )r`   r.   s    r   ÚgetContactsListzChatUI.getContactsList`  s   € ð × Ñ Ð r   Fc                 ó¸   — | j                   j                  |«      }|s ||| «      }|| j                   |<   |r|j                  «        |S |j                  «        |S )a  
        For the given person object, return the conversation window or create
        and return a new conversation window if one does not exist.

        @type person: L{IPerson<interfaces.IPerson>} provider
        @param person: The person whose conversation window we want to get.

        @type Class: L{IConversation<interfaces.IConversation>} implementor
        @param Class: The kind of conversation window we want. If the conversation
            window for this person didn't already exist, create one of this type.

        @type stayHidden: C{bool}
        @param stayHidden: Whether or not the conversation window should stay
            hidden.

        @rtype: L{IConversation<interfaces.IConversation>} provider
        @return: The conversation window.
        )r[   Úgetr2   r/   )r   r   ÚClassÚ
stayHiddenÚconvs        r   ÚgetConversationzChatUI.getConversationi  s\   € ð& ×!Ñ!×%Ñ% fÓ-ˆÙÙ˜ Ó&ˆDØ)-ˆD×Ñ˜vÑ&ÙØ�I‰IŒKð ˆð �I‰IŒKØˆr   c                 ó¸   — | j                   j                  |«      }|s ||| «      }|| j                   |<   |r|j                  «        |S |j                  «        |S )a   
        For the given group object, return the group conversation window or
        create and return a new group conversation window if it doesn't exist.

        @type group: L{IGroup<interfaces.IGroup>} provider
        @param group: The group whose conversation window we want to get.

        @type Class: L{IConversation<interfaces.IConversation>} implementor
        @param Class: The kind of conversation window we want. If the conversation
            window for this person didn't already exist, create one of this type.

        @type stayHidden: C{bool}
        @param stayHidden: Whether or not the conversation window should stay
            hidden.

        @rtype: L{IGroupConversation<interfaces.IGroupConversation>} provider
        @return: The group conversation window.
        )r\   rf   r2   r/   )r   r@   rg   rh   ri   s        r   ÚgetGroupConversationzChatUI.getGroupConversation†  s\   € ð& ×&Ñ&×*Ñ*¨5Ó1ˆÙÙ˜ Ó%ˆDØ-1ˆD×#Ñ# EÑ*ÙØ�I‰IŒKð ˆð �I‰IŒKØˆr   c                 ó    — |j                   }| j                  j                  ||f«      }|s"|j                  |«      }|| j                  ||f<   |S )a  
        For the given name and account client, return an instance of a
        L{IGroup<interfaces.IPerson>} provider or create and return a new
        instance of a L{IGroup<interfaces.IPerson>} provider.

        @type name: C{str}
        @param name: The name of the person of interest.

        @type client: L{IClient<interfaces.IClient>} provider
        @param client: The client account of interest.

        @rtype: L{IPerson<interfaces.IPerson>} provider
        @return: The person with that C{name}.
        )Úaccountr]   rf   Ú	getPerson)r   r   r   rn   Úps        r   ro   zChatUI.getPerson£  sO   € ð —.‘.ˆØ�L‰L×Ñ˜d G˜_Ó-ˆÙØ×!Ñ! $Ó'ˆAØ*+ˆD�L‰L˜˜w˜Ñ'Øˆr   c                 ó    — |j                   }| j                  j                  ||f«      }|s"|j                  |«      }|| j                  ||f<   |S )a  
        For the given name and account client, return an instance of a
        L{IGroup<interfaces.IGroup>} provider or create and return a new instance
        of a L{IGroup<interfaces.IGroup>} provider.

        @type name: C{str}
        @param name: The name of the group of interest.

        @type client: L{IClient<interfaces.IClient>} provider
        @param client: The client account of interest.

        @rtype: L{IGroup<interfaces.IGroup>} provider
        @return: The group with that C{name}.
        )rn   r^   rf   ÚgetGroup)r   r   r   rn   Úgs        r   rr   zChatUI.getGroup¹  sM   € ð$ —.‘.ˆØ�K‰K�O‰O˜T 7˜OÓ,ˆÙØ× Ñ  Ó&ˆAØ)*ˆD�K‰K˜˜g˜Ñ&Øˆr   c                 ór  — |j                   }||j                  f| j                  v r‘| j                  j	                  |«      }|r|j                  ||«       | j                  j                  ||«       | j                  ||j                  f= ||_         || j                  |j                   |j                  f<   yy)a£  
        For the given C{person}, change the C{person}'s C{name} to C{newnick}
        and tell the contact list and any conversation windows with that
        C{person} to change as well.

        @type person: L{IPerson<interfaces.IPerson>} provider
        @param person: The person whose nickname will get changed.

        @type newnick: C{str}
        @param newnick: The new C{name} C{person} will take.
        N)r   rn   r]   r[   rf   r!   r`   )r   r   r   rT   ri   s        r   r!   zChatUI.contactChangedNickÒ  s�   € ð —+‘+ˆØ�V—^‘^Ð$¨¯©Ñ4Ø×%Ñ%×)Ñ)¨&Ó1ˆDÙØ×'Ñ'¨°Ô8Ø×Ñ×0Ñ0°¸ÔAØ—‘˜W f§n¡nÐ4Ð5Ø!ˆFŒKØ8>ˆD�L‰L˜Ÿ™ f§n¡nÐ4Ò5ð 5r   N)r"   r#   r$   r%   r   r   r   rd   r(   rj   r>   rl   ro   rr   r!   r&   r   r   rY   rY   $  sC   „ ñò4/òò	:ò!ð -9ÀUó ð: 1BÈeó ò:ò,ó2?r   rY   N)	r%   Útwisted.words.im.localsr   r   r   r   r(   r>   rY   r&   r   r   ú<module>rv      sE   ðñ
÷ :Ñ 9÷W6ñ W6÷tA#ñ A#÷Hw(ñ w(÷tB?ò B?r   