Ϫf @ldZddlmZmZmZGddZGddZGddZGd d Zy ) z. Base classes for Instance Messenger clients. )AWAYOFFLINEONLINEc.eZdZdZdZdZdZdZdZy) 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} 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} provider @ivar clients: The signed-on clients. @type clients: C{list} of L{IClient} providers c<||_i|_i|_g|_y)zx @param chatui: The GUI chat client associated with this contacts list. @type chatui: L{ChatUI} N)chatuicontactsonlineContactsclients)selfr s ;/usr/lib/python3/dist-packages/twisted/words/im/basechat.py__init__zContactsList.__init__ s!     c|j|jvr||j|j<|j|jvr?|jtk(s|jt k(r||j|j<|j|jvr,|jt k(r|j|j=yyy)z Inform the user that a person's status has changed. @param person: The person whose status has changed. @type person: L{IPerson} provider N)namer r statusrrr)r persons rsetContactStatuszContactsList.setContactStatus*s ;;dmm +)/DMM&++ & ;;d11 1 MMV #v}}'} provider N)r appendr clients rregisterAccountClientz"ContactsList.registerAccountClient:s'  % LL   ' &rcX||jvr|jj|yy)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} provider N)r removers runregisterAccountClientz$ContactsList.unregisterAccountClientDs' T\\ ! LL   ' "rc|j}||jvrO|j|=||_||j|<||jvr|j|=||j|<yyy)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} provider @param newnick: The new nickname for this person. @type newnick: C{str} N)rr r )r rnewnickoldnames rcontactChangedNickzContactsList.contactChangedNickPsp++ dmm # g&!FK%+DMM' "$---''0/5##G,. $rN) __name__ __module__ __qualname____doc__rrrrr!rrrr s &1 ( (6rrc6eZdZdZdZdZdZdZd dZdZ 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} 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} provider @param chatui: The GUI chat client associated with this conversation. @type chatui: L{ChatUI} N)r r)r rr s rrzConversation.__init__qs  rctd)z1 Display the ConversationWindow. %Subclasses must implement this methodNotImplementedErrorr s rshowzConversation.show|""IJJrctd)z. Hide the ConversationWindow. r+r,r.s rhidezConversation.hider0rc<|jj|dy)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 sendMessager texts rsendTextzConversation.sendTexts d+rNctd)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 r6metadatas r showMessagezConversation.showMessages""IJJrc&||j_y)z Change a person's name. @param person: The person whose nickname is changing. @type person: L{IPerson} provider @param newnick: The new nickname for this person. @type newnick: C{str} N)rr)r rrs rr!zConversation.contactChangedNicks# rN) r"r#r$r%rr/r2r7r:r!r&rrr(r(fs( K K , K #rr(cNeZdZdZdZdZdZdZd dZdZ 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} 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} provider N)r groupmembers)r r@r s rrzGroupConversation.__init__s   rctd)z6 Display the GroupConversationWindow. r+r,r.s rr/zGroupConversation.showr0rctd)z3 Hide the GroupConversationWindow. r+r,r.s rr2zGroupConversation.hider0rc<|jj|dy)zo Send text to the group. @param text: The text to be sent. @type text: C{str} N)r@sendGroupMessager5s rr7zGroupConversation.sendTexts ##D$/rNctd)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 senderr6r9s rshowGroupMessagez"GroupConversation.showGroupMessages""IJJrc||_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 rAs rsetGroupMembersz!GroupConversation.setGroupMemberss  rctd)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 topicauthors rsetTopiczGroupConversation.setTopics""IJJrcX||jvr|jj|yy)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)rArr members r memberJoinedzGroupConversation.memberJoineds'  % LL   ' &rc||jvr7|jj||jj|yy)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)rArr)r oldnickrs rmemberChangedNickz#GroupConversation.memberChangedNick s9 dll " LL   ( LL   ( #rcX||jvr|jj|yy)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)rArrPs r memberLeftzGroupConversation.memberLefts' T\\ ! LL   ' "rr<)r"r#r$r%rr/r2r7rHrJrNrRrUrWr&rrr>r>s=  K K 0 K K ( ) (rr>cReZdZdZdZdZdZdZedfdZ e dfdZ d Z d Z d Zy ) 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} provider) and values that are L{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} provider) and values that are L{IGroup} provider @ivar groups: A cache of all the groups associated with this client. @type onlineClients: C{list} of L{IClient} providers @ivar onlineClients: A list of message sources currently online. @type contactsList: L{ContactsList} @ivar contactsList: A contacts list. cji|_i|_i|_i|_g|_t ||_yr<) conversationsgroupConversationspersonsgroups onlineClientsr contactsListr.s rrzChatUI.__init__?s5"$  (.rcr|jj||jj||S)aZ Notify the user that an account has been signed on to. @type client: L{IClient} provider @param client: The client account for the person who has just signed on. @rtype: L{IClient} provider @return: The client, so that it may be used in a callback chain. )r_rr`rrs rrzChatUI.registerAccountClientGs1 !!&) //7 rcp|jj||jj|y)z Notify the user that an account has been signed off or disconnected. @type client: L{IClient} provider @param client: The client account for the person who has just signed off. N)r_rr`rrs rrzChatUI.unregisterAccountClientUs, !!&) 11&9rc|jS)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 rgetContactsListzChatUI.getContactsList`s   rFc|jj|}|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} provider @param person: The person whose conversation window we want to get. @type Class: L{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} provider @return: The conversation window. )r[getr2r/)r rClass stayHiddenconvs rgetConversationzChatUI.getConversationis\&!!%%f-&D)-D  v &  IIK  IIK rc|jj|}|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} provider @param group: The group whose conversation window we want to get. @type Class: L{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} provider @return: The group conversation window. )r\rfr2r/)r r@rgrhris rgetGroupConversationzChatUI.getGroupConversations\&&&**51%D-1D # #E *  IIK  IIK rc|j}|jj||f}|s"|j|}||j||f<|S)a  For the given name and account client, return an instance of a L{IGroup} provider or create and return a new instance of a L{IGroup} provider. @type name: C{str} @param name: The name of the person of interest. @type client: L{IClient} provider @param client: The client account of interest. @rtype: L{IPerson} provider @return: The person with that C{name}. )accountr]rf getPerson)r rrrnps rrozChatUI.getPersonsO.. LL  dG_ -!!$'A*+DLLw 'rc|j}|jj||f}|s"|j|}||j||f<|S)a For the given name and account client, return an instance of a L{IGroup} provider or create and return a new instance of a L{IGroup} provider. @type name: C{str} @param name: The name of the group of interest. @type client: L{IClient} provider @param client: The client account of interest. @rtype: L{IGroup} provider @return: The group with that C{name}. )rnr^rfgetGroup)r rrrngs rrrzChatUI.getGroupsM$.. KKOOT7O ,  &A)*DKKg &rcr|j}||jf|jvr|jj |}|r|j |||j j |||j||jf=||_||j|j|jf<yy)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} 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)rrnr]r[rfr!r`)r rrrTris rr!zChatUI.contactChangedNicks++ V^^ $ 4%%))&1D''8    0 0 A Wfnn45!FK8>DLLfnn4 5 5rN)r"r#r$r%rrrrdr(rjr>rlrorrr!r&rrrYrY$sC4/  :!-9U:1Be:,2?rrYN) r%twisted.words.im.localsrrrrr(r>rYr&rrrvsE :9W6W6tA#A#Hw(w(tB?B?r