o b @@sTdZddlmZmZmZGdddZGdddZGdddZGd d d Zd S) z. Base classes for Instance Messenger clients. )AWAYOFFLINEONLINEc@s8eZdZdZddZddZddZdd Zd d Zd 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} 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 cCs||_i|_i|_g|_dS)zx @param chatui: The GUI chat client associated with this contacts list. @type chatui: L{ChatUI} N)chatuicontactsonlineContactsclients)selfrr ;/usr/lib/python3/dist-packages/twisted/words/im/basechat.py__init__ s zContactsList.__init__cCsp|j|jvr ||j|j<|j|jvr"|jtks|jtkr"||j|j<|j|jvr4|jtkr6|j|j=dSdSdS)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)namerrstatusrrr)r personr r r setContactStatus*s    zContactsList.setContactStatuscC||jvr |j|dSdS)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} provider N)r appendr clientr r r registerAccountClient:s z"ContactsList.registerAccountClientcC||jvr |j|dSdS)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 removerr r r unregisterAccountClientDs z$ContactsList.unregisterAccountClientcCsP|j}||jvr$|j|=||_||j|<||jvr&|j|=||j|<dSdSdS)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)rrr)r rnewnickoldnamer r r contactChangedNickPs   zContactsList.contactChangedNickN) __name__ __module__ __qualname____doc__r rrrrr r r r r s  rc@sBeZdZdZddZddZddZdd Zdd d Zd dZ 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} provider @ivar chatui: The GUI chat client associated with this conversation. @type chatui: L{ChatUI} cCs||_||_dS)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)rr)r rrr r r r qs zConversation.__init__cCtd)z1 Display the ConversationWindow. %Subclasses must implement this methodNotImplementedErrorr r r r show|zConversation.showcCr")z. Hide the ConversationWindow. r#r$r&r r r hider(zConversation.hidecC|j|ddS)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 textr r r sendTextzConversation.sendTextNcCr")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 r-metadatar r r showMessages zConversation.showMessagecCs ||j_dS)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 rrr r r rs zConversation.contactChangedNickN) rrrr r r'r)r.r1rr r r r r!fs   r!c@sbeZdZdZddZddZddZdd Zdd d Zd dZ ddZ ddZ ddZ ddZ 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} provider @ivar members: The names of the people in this conversation. @type members: C{list} of C{str} cCs||_||_g|_dS)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)rgroupmembers)r r4rr r r r s zGroupConversation.__init__cCr")z6 Display the GroupConversationWindow. r#r$r&r r r r'r(zGroupConversation.showcCr")z3 Hide the GroupConversationWindow. r#r$r&r r r r)r(zGroupConversation.hidecCr*)zo Send text to the group. @param text: The text to be sent. @type text: C{str} N)r4sendGroupMessager,r r r r.r/zGroupConversation.sendTextNcCr")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 senderr-r0r r r showGroupMessages z"GroupConversation.showGroupMessagecCs ||_dS)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)r5)r r5r r r setGroupMemberss z!GroupConversation.setGroupMemberscCr")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 topicauthorr r r setTopics zGroupConversation.setTopiccCr)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)r5rr memberr r r memberJoined zGroupConversation.memberJoinedcCs*||jvr|j||j|dSdS)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)r5rr)r oldnickrr r r memberChangedNick s z#GroupConversation.memberChangedNickcCr)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)r5rr=r r r memberLeftr@zGroupConversation.memberLeftr2)rrrr r r'r)r.r8r9r<r?rBrCr r r r r3s      r3c@sdeZdZdZddZddZddZdd Zed fd d Z e d fd dZ ddZ ddZ ddZdS)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. cCs,i|_i|_i|_i|_g|_t||_dSr2) conversationsgroupConversationspersonsgroups onlineClientsr contactsListr&r r r r ?s zChatUI.__init__cCs|j||j||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. )rIrrJrrr r r rGs zChatUI.registerAccountClientcCs|j||j|dS)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)rIrrJrrr r r rUs zChatUI.unregisterAccountClientcCs|jS)z Get the contacts list associated with this chat window. @rtype: L{ContactsList} @return: The contacts list associated with this chat window. )rJr&r r r getContactsList`szChatUI.getContactsListFcC@|j|}|s|||}||j|<|r||S||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. )rEgetr)r')r rClass stayHiddenconvr r r getConversationi   zChatUI.getConversationcCrL)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. )rFrMr)r')r r4rNrOrPr r r getGroupConversationrRzChatUI.getGroupConversationcC6|j}|j||f}|s||}||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}. )accountrGrM getPerson)r rrrUpr r r rVs  zChatUI.getPersoncCrT)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}. )rUrHrMgetGroup)r rrrUgr r r rXs  zChatUI.getGroupcCsn|j}||jf|jvr5|j|}|r||||j|||j||jf=||_||j|j|jf<dSdS)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)rrUrGrErMrrJ)r rrrArPr r r rs   zChatUI.contactChangedNickN)rrrr r rrrKr!rQr3rSrVrXrr r r r rD$s   rDN) r twisted.words.im.localsrrrrr!r3rDr r r r s ZDz