ó
    ×›‘h@  ã                   ól   • S r SSKJrJrJr   " S S5      r " S S5      r " S S5      r " S	 S
5      rg)z.
Base classes for Instance Messenger clients.
é    )ÚAWAYÚOFFLINEÚONLINEc                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚContactsListé   a4  
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                 ó:   • Xl         0 U l        0 U l        / U l        g)z`
@param chatui: The GUI chat client associated with this contacts list.
@type chatui: L{ChatUI}
N)ÚchatuiÚcontactsÚonlineContactsÚclients)Úselfr
   s     Ú]C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/words/im/basechat.pyÚ__init__ÚContactsList.__init__    s   € ð
 ŒØˆŒØ ˆÔØˆ�ó    c                 óª  • UR                   U R                  ;  a  XR                  UR                   '   UR                   U R                  ;  a@  UR                  [        :X  d  UR                  [
        :X  a  XR                  UR                   '   UR                   U R                  ;   a-  UR                  [        :X  a  U R                  UR                   	 ggg)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   ÚsetContactStatusÚContactsList.setContactStatus*   s—   € ð �;‰;˜dŸm™mÓ+Ø)/�M‰M˜&Ÿ+™+Ñ&Ø�;‰;˜d×1Ñ1Ó1Ø�M‰MœVÓ# v§}¡}¼Ó'<à/5×Ñ §¡Ñ,Ø�;‰;˜$×-Ñ-Ó-°&·-±-Ä7Ó2JØ×#Ñ# F§K¡KÑ0ð 3KÐ-r   c                 óZ   • XR                   ;  a  U R                   R                  U5        gg)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   ÚregisterAccountClientÚ"ContactsList.registerAccountClient:   s%   € ð Ÿ™Ó%Ø�L‰L×Ñ Õ'ð &r   c                 óZ   • XR                   ;   a  U R                   R                  U5        gg)z×
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   ÚunregisterAccountClientÚ$ContactsList.unregisterAccountClientD   s%   € ð —\‘\Ó!Ø�L‰L×Ñ Õ'ð "r   c                 óÔ   • UR                   nX0R                  ;   aM  U R                  U	 X!l         XR                  U'   X0R                  ;   a  U R                  U	 XR                  U'   ggg)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   ÚcontactChangedNickÚContactsList.contactChangedNickP   sf   € ð —+‘+ˆØ—m‘mÓ#Ø—‘˜gÐ&Ø!ŒKØ%+�M‰M˜'Ñ"Ø×-Ñ-Ó-Ø×'Ñ'¨Ð0Ø/5×#Ñ# GÒ,ð .ð	 $r   )r
   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r!   r&   Ú__static_attributes__© r   r   r   r      s    † ñò&ò1ò (ò
(õ6r   r   c                   ó@   • \ rS rSrSrS rS rS rS rSS jr	S	 r
S
rg)ÚConversationéf   a  
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                 ó   • X l         Xl        g)zÚ
@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   ÚConversation.__init__q   s   € ð ŒØ�r   c                 ó   • [        S5      e)z!
Display the ConversationWindow.
ú%Subclasses must implement this method©ÚNotImplementedError©r   s    r   ÚshowÚConversation.show|   ó   € ô "Ð"IÓJÐJr   c                 ó   • [        S5      e)z
Hide the ConversationWindow.
r6   r7   r9   s    r   ÚhideÚConversation.hide‚   r<   r   c                 ó<   • U R                   R                  US5        g)zq
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   ÚsendTextÚConversation.sendTextˆ   s   € ð 	�‰×Ñ  dÕ+r   Nc                 ó   • [        S5      e)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}
r6   r7   )r   rC   Úmetadatas      r   ÚshowMessageÚConversation.showMessage‘   s   € ô "Ð"IÓJÐJr   c                 ó$   • X R                   l        g)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&   ÚConversation.contactChangedNick�   s   € ð #�‰Õr   r3   ©N)r(   r)   r*   r+   r,   r   r:   r>   rD   rH   r&   r-   r.   r   r   r0   r0   f   s(   † ñò	òKòKò,ô
Kõ
#r   r0   c                   óX   • \ rS rSrSrS rS rS rS rSS jr	S	 r
S
 rS rS rS rSrg)ÚGroupConversationéª   am  
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                 ó*   • X l         Xl        / U l        g)zØ
@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   rR   r
   s      r   r   ÚGroupConversation.__init__¸   s   € ð ŒØŒ
Øˆ�r   c                 ó   • [        S5      e)z&
Display the GroupConversationWindow.
r6   r7   r9   s    r   r:   ÚGroupConversation.showÄ   r<   r   c                 ó   • [        S5      e)z#
Hide the GroupConversationWindow.
r6   r7   r9   s    r   r>   ÚGroupConversation.hideÊ   r<   r   c                 ó<   • U R                   R                  US5        g)zO
Send text to the group.

@param text: The text to be sent.
@type text: C{str}
N)rR   ÚsendGroupMessagerB   s     r   rD   ÚGroupConversation.sendTextÐ   s   € ð 	�
‰
×#Ñ# D¨$Õ/r   Nc                 ó   • [        S5      e)a  
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}
r6   r7   )r   ÚsenderrC   rG   s       r   ÚshowGroupMessageÚ"GroupConversation.showGroupMessageÙ   s   € ô "Ð"IÓJÐJr   c                 ó   • Xl         g)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)rS   )r   rS   s     r   ÚsetGroupMembersÚ!GroupConversation.setGroupMembersè   s	   € ð �r   c                 ó   • [        S5      e)zÔ
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}
r6   r7   )r   ÚtopicÚauthors      r   ÚsetTopicÚGroupConversation.setTopicñ   s   € ô "Ð"IÓJÐJr   c                 óZ   • XR                   ;  a  U R                   R                  U5        gg)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)rS   r   ©r   Úmembers     r   ÚmemberJoinedÚGroupConversation.memberJoinedþ   s%   € ð Ÿ™Ó%Ø�L‰L×Ñ Õ'ð &r   c                 ó�   • XR                   ;   a7  U R                   R                  U5        U R                   R                  U5        gg)zÔ
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)rS   r    r   )r   Úoldnickr$   s      r   ÚmemberChangedNickÚ#GroupConversation.memberChangedNick	  s7   € ð —l‘lÓ"Ø�L‰L×Ñ Ô(Ø�L‰L×Ñ Õ(ð #r   c                 óZ   • XR                   ;   a  U R                   R                  U5        gg)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)rS   r    ri   s     r   Ú
memberLeftÚGroupConversation.memberLeft  s%   € ð —\‘\Ó!Ø�L‰L×Ñ Õ'ð "r   rQ   rL   )r(   r)   r*   r+   r,   r   r:   r>   rD   r^   ra   rf   rk   ro   rr   r-   r.   r   r   rN   rN   ª   s=   † ñò
òKòKò0ôKòòKò	(ò)õ	(r   rN   c                   ó^   • \ rS rSrSrS rS rS rS r\	S4S jr
\S4S	 jrS
 rS rS rSrg)ÚChatUIi$  a°  
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   • 0 U l         0 U l        0 U l        0 U l        / U l        [        U 5      U l        g rL   )ÚconversationsÚgroupConversationsÚpersonsÚgroupsÚonlineClientsr   ÚcontactsListr9   s    r   r   ÚChatUI.__init__?  s5   € ØˆÔØ"$ˆÔØˆŒØˆŒØˆÔÜ(¨Ó.ˆÕr   c                 ór   • U R                   R                  U5        U R                  R                  U5        U$ )a*  
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   ÚChatUI.registerAccountClientG  s1   € ð 	×Ñ×!Ñ! &Ô)Ø×Ñ×/Ñ/°Ô7Øˆr   c                 óp   • U R                   R                  U5        U R                  R                  U5        g)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!   ÚChatUI.unregisterAccountClientU  s,   € ð 	×Ñ×!Ñ! &Ô)Ø×Ñ×1Ñ1°&Õ9r   c                 ó   • U R                   $ )z�
Get the contacts list associated with this chat window.

@rtype: L{ContactsList}
@return: The contacts list associated with this chat window.
)r|   r9   s    r   ÚgetContactsListÚChatUI.getContactsList`  s   € ð × Ñ Ð r   Fc                 óÈ   • U R                   R                  U5      nU(       d  U" X5      nX@R                   U'   U(       a  UR                  5         U$ UR                  5         U$ )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.
)rw   Úgetr>   r:   )r   r   ÚClassÚ
stayHiddenÚconvs        r   ÚgetConversationÚChatUI.getConversationi  sX   € ð& ×!Ñ!×%Ñ% fÓ-ˆÞÙ˜Ó&ˆDØ)-×Ñ˜vÑ&ÞØ�I‰IŒKð ˆð �I‰IŒKØˆr   c                 óÈ   • U R                   R                  U5      nU(       d  U" X5      nX@R                   U'   U(       a  UR                  5         U$ UR                  5         U$ )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.
)rx   r†   r>   r:   )r   rR   r‡   rˆ   r‰   s        r   ÚgetGroupConversationÚChatUI.getGroupConversation†  sX   € ð& ×&Ñ&×*Ñ*¨5Ó1ˆÞÙ˜Ó%ˆDØ-1×#Ñ# EÑ*ÞØ�I‰IŒKð ˆð �I‰IŒKØˆr   c                 ó¤   • UR                   nU R                  R                  X45      nU(       d   UR                  U5      nX@R                  X4'   U$ )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}.
)Úaccountry   r†   Ú	getPerson)r   r   r   r�   Úps        r   r‘   ÚChatUI.getPerson£  sI   € ð —.‘.ˆØ�L‰L×Ñ˜d˜_Ó-ˆÞØ×!Ñ! $Ó'ˆAØ*+�L‰L˜˜Ñ'Øˆr   c                 ó¤   • UR                   nU R                  R                  X45      nU(       d   UR                  U5      nX@R                  X4'   U$ )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}.
)r�   rz   r†   ÚgetGroup)r   r   r   r�   Úgs        r   r•   ÚChatUI.getGroup¹  sG   € ð$ —.‘.ˆØ�K‰K�O‰O˜T˜OÓ,ˆÞØ× Ñ  Ó&ˆAØ)*�K‰K˜˜Ñ&Øˆr   c                 ót  • UR                   nX1R                  4U R                  ;   a‘  U R                  R	                  U5      nU(       a  UR                  X5        U R                  R                  X5        U R                  X1R                  4	 X!l         XR                  UR                   UR                  4'   gg)ac  
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   r�   ry   rw   r†   r&   r|   )r   r   r$   rn   r‰   s        r   r&   ÚChatUI.contactChangedNickÒ  s‘   € ð —+‘+ˆØ—^‘^Ð$¨¯©Ó4Ø×%Ñ%×)Ñ)¨&Ó1ˆDÞØ×'Ñ'¨Ô8Ø×Ñ×0Ñ0°ÔAØ—‘˜W§n¡nÐ4Ð5Ø!ŒKØ8>�L‰L˜Ÿ™ f§n¡nÐ4Ò5ð 5r   )r|   rw   rx   rz   r{   ry   N)r(   r)   r*   r+   r,   r   r   r!   rƒ   r0   rŠ   rN   r�   r‘   r•   r&   r-   r.   r   r   ru   ru   $  sC   † ñò4/òò	:ò!ð -9ÀUô ð: 1BÈeô ò:ò,õ2?r   ru   N)	r,   Útwisted.words.im.localsr   r   r   r   r0   rN   ru   r.   r   r   Ú<module>r›      sE   ðñ
÷ :Ñ 9÷W6ñ W6÷tA#ñ A#÷Hw(ñ w(÷tB?ò B?r   