
    Ef                     H   d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZ d dlmZ d dlT d dlmZ  G d	 d
e          Z G d de          Zej                                        Ze                     ed                     e                     ed                     dS )    )DictN)	Namespace)AsyncClientNamespaceClientNamespace)before_requestcmf_context)commit_all_ds)*)CmfMainNamespacec                       e Zd ZdZd Zd ZdS )CmfWhatsappNamespaceu<   
    Отправляем события на messenger
    c                     t           j                            |d                   }|r|                                 dS dS )u   
        Отправляем запрос на подключение к web.whatsapp.com через whatsapp.active360.ru
        :param data:
        :param args:
        :param kwargs:
        :return:
        idr   N)modelsCmfWhatsappgetconnectselfdataargskwargssessions        ./modules/crm/views/whatsapp.pyon_whatsapp_connectz(CmfWhatsappNamespace.on_whatsapp_connect   sI     $((DJ(77 	OO	 	    c                     t           j                            |d                   }|r|                                 d S d S )Nr   r   )r   r   r   check_statusr   s        r   on_whatsapp_statusz'CmfWhatsappNamespace.on_whatsapp_status   sI    $((DJ(77 	#  """""	# 	#r   N)__name__
__module____qualname____doc__r   r     r   r   r   r      s<         
 
 
# # # # #r   r   c                        e Zd ZdZed             Z fdZd ZdefdZ	d Z
dedd	fd
Zd Zd Zd Zd Zd Zd Zd Z xZS )CmfWhatsappClientNamespaceu   
    Для получения и обработки событий с whatsapp.active360.ru отправленных через прокси
    c                     t           j        S )N)APPlogger)r   s    r   r*   z!CmfWhatsappClientNamespace.logger(   s
    zr   c                    t          d          5  t                              d|            	  t          t          |           j        |g|R  }|cd d d            S # t          $ rS}t          |           t          	                                }|
                    |           Y d }~d d d            dS d }~ww xY w# 1 swxY w Y   d S )NFinit_views_and_dszEvent from messenger error)r   gdebugsuperr'   trigger_event	Exceptionr	   logging	getLogger	exception)r   eventr   reser*   	__class__s         r   r2   z(CmfWhatsappClientNamespace.trigger_event,   sF   5111 		 		GG3E33444Ke6==KEYTXYYY			 		 		 		 		 		 		 		
    a    **,,  ###www		 		 		 		 		 		 		 		
		 		 		 		 		 		 		 		 		 		s4   C "A  
B=*=B8'C 8B==C  CCc                 D    t          dt          j         d|            dS )u[   
        Читаем событие message
        :param data:
        :return:
        u   Событие с z: N)printconfigWHATSAPP_MESSENGER_URLr   r   s     r   
on_messagez%CmfWhatsappClientNamespace.on_message8   s,     	J6#@JJDJJKKKKKr   r   c                 &    t          ||           dS )u   
        Метод отправки событий на фронтэнд
        :param event: имя события
        :param data: данные в dict
        :return:
        N)cmf_emit_event)r   r7   r   s      r   send_to_frontz(CmfWhatsappClientNamespace.send_to_front@   s     	ud#####r   c                 2    |                      d|           dS )u   
        При получении qr кода, перенаправляем его во фронт
        :param data:
        :param args:
        :param kwargs:
        :return:
        zwhatsapp-generated_qr_codeNrC   r   r   r   r   s       r   on_generated_qr_codez/CmfWhatsappClientNamespace.on_generated_qr_codeI   s!     	7>>>>>r   returnNc                 2    |                      d|           dS )u   
        При получении ошибки сканирования QRcode без бета режима, перенаправляем на фронт
        :param data: данные ответа из whatsapp
        zerr-scanned-without-multideviceNrE   r?   s     r   on_scanned_without_multidevicez9CmfWhatsappClientNamespace.on_scanned_without_multideviceS   s!    
 	<dCCCCCr   c                 2    |                      d|           d S )Nwhatsapp_qrcode_timeoutrE   r?   s     r   on_whatsapp_qrcode_timeoutz5CmfWhatsappClientNamespace.on_whatsapp_qrcode_timeoutZ   s    4d;;;;;r   c                     t           j                            |d                   }|r@d|_        |                                 |                     d|j        j         |           d S d S )Ncrm_message_idr   r.   zsend_message_error-)r   CmfChannelMessager   message_statussaverC   parentr   r   r   channel_msgs      r   on_whatsapp_send_message_errorz9CmfWhatsappClientNamespace.on_whatsapp_send_message_error]   s{    .22d;K6L2MM 	T)0K&L[5G5JLLdSSSSS	T 	Tr   c                     t           j                            |d                   }|rM|d         |_        d|_        |                                 |                     d|j        j         |           d S d S )NrO   r   
message_idsentzsend_message_success-)	r   rP   r   rX   rQ   rR   rC   rS   r   rT   s      r    on_whatsapp_send_message_successz;CmfWhatsappClientNamespace.on_whatsapp_send_message_successd   s    .22d;K6L2MM 	V%),%7K")/K&N{7I7LNNPTUUUUU		V 	Vr   c                 2    |                      d|           dS )u   
        Успешно подключились к web.whatsapp.com
        :param data:
        :param args:
        :param kwargs:
        :return:
        zwhatsapp-connectedNrE   rF   s       r   on_whatsapp_connectedz0CmfWhatsappClientNamespace.on_whatsapp_connectedl   s!     	/66666r   c                    |d         D ]}t           j                            |d                             d          d         dg          }|r;|j        s4|d         p|d         }|r"||_        |j        r|                                 d S )	NcontactsJid@r   
user_local)fieldsNotifyName)r   	CmfPersonget_by_phonesplitra   name
is_changedrR   )r   r   contactpersonnew_names        r   on_whatsapp_contactsz/CmfWhatsappClientNamespace.on_whatsapp_contactsv   s    J' 	& 	&G%2275>3G3G3L3LQ3OYeXf2ggF &f/ &"8,? &"*FK( &	& 	&r   c                 2    |                      d|           dS )u   
        Отключились от web.whatsapp.com
        :param data:
        :param args:
        :param kwargs:
        :return:
        zwhatsapp-disconnectedNrE   rF   s       r   on_whatsapp_disconnectedz3CmfWhatsappClientNamespace.on_whatsapp_disconnected   s!     	2D99999r   c                     d }| j                             d           t          j        ||           | j                             d           dS )u   
        Получаем сообщение из ватсапп
        :param data:
        :param args:
        :param kwargs:
        :return:
        c                     t          d          5  t          j                            dd| d         gdg          }|                    |            d d d            d S # 1 swxY w Y   d S )NFr,   r   z==crm_idload_from_date)filterrb   )r   r   r   r   receive_message)r   channels     r   runnerzGCmfWhatsappClientNamespace.on_whatsapp_message_received.<locals>.runner   s    u555 . . ,00tT(^8T^n]o0pp''---. . . . . . . . . . . . . . . . . .s   AAA#&A#z"on_whatsapp_message_received startz on_whatsapp_message_received endN)r*   infogeventspawn)r   r   r   r   rw   s        r   on_whatsapp_message_receivedz7CmfWhatsappClientNamespace.on_whatsapp_message_received   sY    	. 	. 	. 	=>>>VT""";<<<<<r   )r!   r"   r#   r$   propertyr*   r2   r@   dictrC   rG   r   rJ   rM   rV   rZ   r\   rm   ro   r{   __classcell__)r:   s   @r   r'   r'   #   s0           X
 
 
 
 
L L L$ $ $ $ $? ? ?D4 DD D D D D< < <T T TV V V7 7 7	& 	& 	&: : := = = = = = =r   r'   z	/whatsapp/)typingr   gevent.lockry   flask_socketior   socketior   r   cmf.appr   r   cmf.data_providers.baser	   cmf.include)cmf.modules.socketio.views.main_namespacer   r   r'   lockRLock_MESSAGE_LOCKwhatsapp_sioregister_namespaceon_namespacer%   r   r   <module>r      sN             $ $ $ $ $ $ : : : : : : : : / / / / / / / / 1 1 1 1 1 1     F F F F F F# # # # #+ # # #,y= y= y= y= y= y= y= y=x !!##    : :; G G H H H   **3// 0 0 0 0 0r   