Ϫf%dZddlmZddlmZmZddlmZddlm Z ddl m Z ddl m Z mZddlmZmZmZGd d e j&Zeej*Gd d e j,ZGd de j0e j2ZeddZeej8Gdde j:Zy)z2 L{twisted.words} support for Instance Messenger. ) implementer)defererror)log)Failure)pb) basesupport interfaces)AWAYOFFLINEONLINEc4eZdZdZdZdZdZdZdZdZ y) TwistedWordsPersonzHI a facade for a person you can talk to through a twisted.words service.c\tjj|||t|_yN)r AbstractPerson__init__r status)selfname wordsAccounts ?rc|jSr)rrs r getStatuszTwistedWordsPerson.getStatuss {{rc4|r\|jjjj|j||}|j |j d|z|S|jjjjd|j|S)zReturn a deferred...* directMessage)accountclient perspectiver!r addErrbackmetadataFailed callRemotertextmetadatads r sendMessagezTwistedWordsPerson.sendMessage!sx  ##//==diixXA LL,,dTk :H<<&&22==D rctd|d||jjjj |j |S)Nresult:text:)printr"r#r$r!rrresultr)s rr&z!TwistedWordsPerson.metadataFailed,s7 i$/||""..< i$/||""..99 DIIt  rcd|_y)NrBrs rjoiningzTwistedWordsGroup.joiningV  rcd|_yr@rPrs rleavingzTwistedWordsGroup.leavingYrRrcv|jjjjd|jSN leaveGrouprKrs rleavezTwistedWordsGroup.leave\s)||""..99, RRrr) r8r9r:rrFrLr&rQrTrXr<rrr>r>5s&   Srr>ceZdZdZddZdZdZdZdZdZ dd Z d Z d Z d Z dd ZdZdZdZdZdZdZdZy)TwistedWordsClientzIn some cases, this acts as an Account, since it a source of text messages (multiple Words instances may be on a single PB connection) Ncdj|j|||_||_td||||_||_||_y)Nz {} ({}:{})zHELLO I AM A PB SERVICE)format accountNamerr0r4r"_logonDeferred)racct serviceNameperspectiveNamechatuir^s rrzTwistedWordsClient.__init__esP'..       $  'oF  ,rc:|jj||Sr)r4 getPersonrrs rrdzTwistedWordsClient.getPersonqsyy""4..rc:|jj||Sr)r4getGroupres rrgzTwistedWordsClient.getGrouptsyy!!$--rcV|jj|j|Sr)r4getGroupConversationrgres rriz'TwistedWordsClient.getGroupConversationws yy--dmmD.ABBrc<|jjd|y)N addContact)r$r'res rrkzTwistedWordsClient.addContactzs ##L$7rc^td|||j|j|y)Nzreceived group members:)r0risetGroupMembers)rnamesgroups rremote_receiveGroupMembersz-TwistedWordsClient.remote_receiveGroupMembers}s( '6 !!%(88?rcftd|||||j|j|||y)Nzreceived a group message)r0rishowGroupMessage)rsenderromessager*s rremote_receiveGroupMessagez-TwistedWordsClient.remote_receiveGroupMessages0 (&%(K !!%(99&'8Trc^td|||j|j|y)Nz member joined)r0ri memberJoinedrmemberros rremote_memberJoinedz&TwistedWordsClient.remote_memberJoineds' ovu- !!%(55f=rcZtd|j|j|y)Nz member left)r0ri memberLeftrxs rremote_memberLeftz$TwistedWordsClient.remote_memberLefts# m !!%(33F;rcZ|jj||j|yrr4rdr7)rrrs rremote_notifyStatusChangedz-TwistedWordsClient.remote_notifyStatusChangeds! D$'11&9rc|jj|jj||j||yr)r4getConversationrd showMessage)rrrtr*s rremote_receiveDirectMessagez.TwistedWordsClient.remote_receiveDirectMessages5 !!$))"5"5dD"ABNN X rcn|D]0\}}|jj||j|2yrr)rclistrrs rremote_receiveContactListz,TwistedWordsClient.remote_receiveContactLists4! >LD& II  d + 5 5f = >rcvd|vr5|j|j|d|jddyy)NrIrJ)rirLget)rdict_ groupNames rremote_setGroupMetadataz*TwistedWordsClient.remote_setGroupMetadatas< e   % %i 0 9 9g .$ ?  rc|j|j|jjd|j |j |S)N joinGroup)rgrQr$r' addCallback_cbGroupJoinedres rrzTwistedWordsClient.joinGroupsH d##%**;=II     rc|j|j|jjd|j |j |SrV)rgrTr$r'r _cbGroupLeftres rrWzTwistedWordsClient.leaveGroupsH d##%**<>JJ   t  rc|jj|j|}|jdd|jj d|y)Nsysz you joinedgetGroupMembers)r4rirgrrr$r'rr2r groupConvs rrz!TwistedWordsClient._cbGroupJoinedsFII224==3FG ""5,7 ##$5t<: >   = 6 $rrZN) twisted.wordsztwisted.realitycFeZdZdZeZeZ d dZdZ dZ dZ dZ dZ d Zy) PBAccountPBNc tjj|||||||g|_|sdd|fg}|D]+\}} } |jj t || | g-y)z_ @param username: The name of your PB Identity. @type username: string rN)r AbstractAccountrservicesappend pbFrontEnds) rr] autoLoginusernamepasswordhostportr serviceTyper`ras rrzPBAccount.__init__sy ##,, +y(HdD  (/8DEH9A  5Ko MM [);H  rcjsXjsLd_j}|jjfd}|j ||St jd)z @returns: this breaks with L{interfaces.IAccount} @returntype: DeferredList of L{interfaces.IClient}s rOc|D]?\}}|r#j|j|+tj|Ayr)registerAccountClient _cb_logOnrerr)resultssuccessr2rbrs r registerManyz%PBAccount.logOn..registerManys>'.(OGV44V<v. (rzConnection in progress) _isConnecting _isOnline _startLogOnr% _loginFailedrrConnectionError)rrbr+rs`` rlogOnzPBAccount.logOnsh""T^^!"D   (A LL** + ( MM, 'H''(@A Arcyrr<rs rlogOffzPBAccount.logOffs rctddtj|j|j}|j |j |j|f|S)Nz Connecting... end callbackArgs)r0r getObjectAtrr addCallbacks _cbConnected _ebConnected)rrbr+s rrzPBAccount._startLogOnsI o3' NN499dii 0 t(($*;*;6)Trctdtddtj||j|j}|j |j |j|f|S)Nz Connected!zIdentifying...rrr)r0r authIdentityrrr_cbIdentr)rrootrbr+s rrzPBAccount._cbConnectedsR l C( OOD$-- ? t}}d&7&7viPrc|s.td|jttdStdg}|jD]d\}}}t j }|j|||||||}|jd|||j|jft j|S)Nzfalsely identified.zusername or password incorrectz Identified!attach) r0rr ExceptionrrDeferredrr'rr DeferredList) ridentrbdl handlerClasssnamepnamer+handlers rrzPBAccount._cbIdents ' ($$ "BCD  m *.--  &L% A IIaL"4vqAG   XueW = I I!!   !!"%%rctd|S)NzNot connected.)r0)rrs rrzPBAccount._ebConnecteds  rr)r8r9r: gatewayTyper> _groupFactoryr_personFactoryrrrrrrrr<rrrrs<K%M'NPT$B4  &"rr)r;zope.interfacertwisted.internetrrtwisted.pythonrtwisted.python.failurertwisted.spreadrtwisted.words.imr r twisted.words.im.localsr r r rrIGrouprAr> ReferenceableAbstractClientMixinrZrIAccountrrr<rrrs  ')*499;33;B Z  'S 11'S 'STZ$));+J+JZ$z!3tL  Z !U ++U"Ur