§
    Étºf@  ã                   ó†   — 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dS )z.
Base classes for Instance Messenger clients.
é    )ÚAWAYÚOFFLINEÚONLINEc                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú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 | _        dS )zx
        @param chatui: The GUI chat client associated with this contacts list.
        @type chatui: L{ChatUI}
        N)ÚchatuiÚcontactsÚonlineContactsÚclients)Úselfr	   s     úX/var/www/surfInsights/venv3-11/lib/python3.11/site-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         = dS dS dS )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Ð+Ð+Ø)/ˆDŒM˜&œ+Ñ&ØŒ;˜dÔ1Ð1Ð1ØŒM�VÒ#Ð# v¤}½Ò'<Ð'<à/5ˆDÔ ¤Ñ,ØŒ;˜$Ô-Ð-Ð-°&´-Å7Ò2JÐ2JØÔ# F¤KÐ0Ð0Ð0ð .Ð-Ð2JÐ2Jr   c                 óP   — || j         vr| j                              |¦  «         dS dS )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:   s5   € ð ˜œÐ%Ð%ØŒL×Ò Ñ'Ô'Ð'Ð'Ð'ð &Ð%r   c                 óP   — || j         v r| j                              |¦  «         dS dS )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   s5   € ð �T”\Ð!Ð!ØŒL×Ò Ñ'Ô'Ð'Ð'Ð'ð "Ð!r   c                 ó–   — |j         }|| j        v r6| j        |= ||_         || j        |<   || j        v r| j        |= || j        |<   dS dS dS )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   sq   € ð ”+ˆØ�d”mÐ#Ð#Ø”˜gÐ&Ø!ˆFŒKØ%+ˆDŒM˜'Ñ"Ø˜$Ô-Ð-Ð-ØÔ'¨Ð0Ø/5�Ô# GÑ,Ð,Ð,ð $Ð#ð .Ð-r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r!   © r   r   r   r      si   € € € € € ðð ð&ð ð ð1ð 1ð 1ð (ð (ð (ð
(ð 
(ð 
(ð6ð 6ð 6ð 6ð 6r   r   c                   ó8   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd	d„Zd„ Z	dS )
Ú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                 ó"   — || _         || _        dS )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ÔJÐJr   c                 ó    — t          d¦  «        ‚)z.
        Hide the ConversationWindow.
        r+   r,   r.   s    r   ÚhidezConversation.hide‚   r0   r   c                 ó<   — | j                              |d¦  «         dS )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ÔJÐJr   c                 ó   — || j         _        dS )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ðKð Kð Kð,ð ,ð ,ð
Kð 
Kð 
Kð 
Kð
#ð 
#ð 
#ð 
#ð 
#r   r(   c                   óP   — 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dS )Ú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                 ó0   — || _         || _        g | _        dS )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                              |d¦  «         dS )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ÔJÐJr   c                 ó   — || _         dS )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ÔJÐJr   c                 óP   — || j         vr| j                              |¦  «         dS dS )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þ   s5   € ð ˜œÐ%Ð%ØŒL×Ò Ñ'Ô'Ð'Ð'Ð'ð &Ð%r   c                 ó„   — || j         v r6| j                              |¦  «         | j                              |¦  «         dS dS )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	  sK   € ð �d”lÐ"Ð"ØŒL×Ò Ñ(Ô(Ð(ØŒL×Ò Ñ(Ô(Ð(Ð(Ð(ð #Ð"r   c                 óP   — || j         v r| j                              |¦  «         dS dS )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  s5   € ð �T”\Ð!Ð!ØŒ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ð KðKð Kð Kð0ð 0ð 0ðKð Kð Kð Kðð ð ðKð Kð Kð	(ð 	(ð 	(ð)ð )ð )ð	(ð 	(ð 	(ð 	(ð 	(r   r>   c                   óT   — 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dS )Ú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                 ót   — i | _         i | _        i | _        i | _        g | _        t          | ¦  «        | _        d S r<   )ÚconversationsÚgroupConversationsÚpersonsÚgroupsÚonlineClientsr   ÚcontactsListr.   s    r   r   zChatUI.__init__?  s>   € ØˆÔØ"$ˆÔØˆŒØˆŒØˆÔÝ(¨Ñ.Ô.ˆÔÐÐr   c                 ón   — | 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  s7   € ð 	Ô×!Ò! &Ñ)Ô)Ð)ØÔ×/Ò/°Ñ7Ô7Ð7Øˆr   c                 ón   — | j                              |¦  «         | j                             |¦  «         dS )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  s8   € ð 	Ô×!Ò! &Ñ)Ô)Ð)ØÔ×1Ò1°&Ñ9Ô9Ð9Ð9Ð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                              |¦  «        }|s ||| ¦  «        }|| j         |<   |r|                     ¦   «          n|                     ¦   «          |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  si   € ð& Ô!×%Ò% fÑ-Ô-ˆØð 	.Ø�5˜ Ñ&Ô&ˆDØ)-ˆDÔ˜vÑ&Øð 	Ø�IŠI‰KŒKˆKˆKà�IŠI‰KŒKˆKØˆr   c                 óÀ   — | j                              |¦  «        }|s ||| ¦  «        }|| j         |<   |r|                     ¦   «          n|                     ¦   «          |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†  si   € ð& Ô&×*Ò*¨5Ñ1Ô1ˆØð 	2Ø�5˜ Ñ%Ô%ˆDØ-1ˆDÔ# EÑ*Øð 	Ø�IŠI‰KŒKˆKˆKà�IŠI‰KŒKˆKØˆr   c                 ó’   — |j         }| j                             ||f¦  «        }|s!|                     |¦  «        }|| 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£  sT   € ð ”.ˆØŒL×Ò˜d G˜_Ñ-Ô-ˆØð 	,Ø×!Ò! $Ñ'Ô'ˆAØ*+ˆDŒL˜˜w˜Ñ'Øˆr   c                 ó’   — |j         }| j                             ||f¦  «        }|s!|                     |¦  «        }|| 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¹  sR   € ð$ ”.ˆØŒK�OŠO˜T 7˜OÑ,Ô,ˆØð 	+Ø× Ò  Ñ&Ô&ˆAØ)*ˆDŒK˜˜g˜Ñ&Øˆr   c                 ó*  — |j         }||j        f| j        v r{| j                             |¦  «        }|r|                     ||¦  «         | j                             ||¦  «         | j        ||j        f= ||_         || j        |j         |j        f<   dS dS )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Ð4ØÔ%×)Ò)¨&Ñ1Ô1ˆDØð 9Ø×'Ò'¨°Ñ8Ô8Ð8ØÔ×0Ò0°¸ÑAÔAÐAØ”˜W f¤nÐ4Ð5Ø!ˆFŒKØ8>ˆDŒL˜œ f¤nÐ4Ñ5Ð5Ð5ð 5Ð4r   N)r"   r#   r$   r%   r   r   r   rd   r(   rj   r>   rl   ro   rr   r!   r&   r   r   rY   rY   $  s¾   € € € € € ðð ð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      sþ   ðð
ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ðW6ð W6ð W6ð W6ð W6ñ W6ô W6ð W6ðtA#ð A#ð A#ð A#ð A#ñ A#ô A#ð A#ðHw(ð w(ð w(ð w(ð w(ñ w(ô w(ð w(ðtB?ð B?ð B?ð B?ð B?ñ B?ô B?ð B?ð B?ð B?r   