o
    l~i"                     @   s   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
 d dlmZ d dlmZmZmZmZmZ d dlmZmZ d d	lmZ ejed
 d ZeddZG dd dejZej ee dS )    )UnionN)apps)adminmessages)gettext_lazy)ngettext_lazy)	ErrorInfoMessageNotificationSendResponseTopicManagementResponse)FirebaseResponseDictfcm_error_list)FCM_DJANGO_SETTINGS
USER_MODEL.
fcm_django	fcmdevicec                   @   s"  e Zd ZdZdZdZdZdZdd Zde	e
ee
 eeeef  f ded	efd
dZd1ddZdd Zede_dd Zede_	d1dedefddZdd Zede_dd Zede_dd  Zed!e_d"d# Zed$e_d%d& Zd'd( Zed)e_d*d+ Zed,e_d-d. Zed/e_d0S )2DeviceAdmin)__str__	device_idnametypeuseractivedate_created)r   r   )	send_messagesend_bulk_messagesubscribe_to_topicbulk_subscribe_to_topicunsubscribe_to_topicbulk_unsubscribe_to_topicsend_topic_messageenabledisable)r   c                 C   s    t tdrdddtj fS dS )NUSERNAME_FIELDr   r   user__)r   r   )hasattrUserr%   )selfrequest r+   W/var/www/newdalilibackend/backend/venv/lib/python3.10/site-packages/fcm_django/admin.pyget_search_fields4   s   
zDeviceAdmin.get_search_fieldsresponsetotal_failureis_topicc                    s   |dkrd S |rt dd|}nt dd|}j|d|i tjd dd	   fd
d}t|tr9|| d S t|trJ|t|jj	|j
 d S t)Nr   zRA device failed to un/subscribe to topic. %(count)d device was marked as inactive.zXSome devices failed to un/subscribe to topic. %(count)d devices were marked as inactive.zBA message failed to send. %(count)d device was marked as inactive.zHSome messages failed to send. %(count)d devices were marked as inactive.countlevelc                 S   s$   t | tr| jS t | tr| jS | S N)
isinstancer   	exceptionr   errors)objr+   r+   r,   _get_to_str_obj\   s
   

z>DeviceAdmin._send_deactivated_message.<locals>._get_to_str_objc                    s&   t tg   fdd| D  d S )Nc                    sD   g | ]\}}t | v rjtd ||d tjdqS )z1%(response)s (Registration ID/Tokens: %(reg_id)s))r.   reg_idr2   )r   message_user_r   WARNING).0xr:   )_DeviceAdmin__error_listr9   r*   r)   r+   r,   
<listcomp>g   s    		zSDeviceAdmin._send_deactivated_message.<locals>._print_responses.<locals>.<listcomp>)r   r   )	_responser9   r*   r)   )r@   r,   _print_responsesc   s   
	
z?DeviceAdmin._send_deactivated_message.<locals>._print_responses)r   r;   r   r=   r5   listr   zipr.   	responsesdeactivated_registration_idsNotImplementedError)r)   r*   r.   r/   r0   messagerD   r+   rC   r,   _send_deactivated_message:   s<   


z%DeviceAdmin._send_deactivated_messageFc                 C   s   d}g }|D ]=}|r%| ttdddd}t|j}| |||d  S | ttdddd}|||jf t|t	krC|d7 }q| |||d d	S )
zm
        Provides error handling for DeviceAdmin send_message and
        send_bulk_message methods.
        r   Test notificationzTest bulk notificationtitlebodynotificationFTest single notification   N)
r   r	   r
   lenrH   rK   appendregistration_idr   r   )r)   r*   querysetbulkr/   single_responsesdevicer.   r+   r+   r,   send_messages   s6   
zDeviceAdmin.send_messagesc                 C      |  || d S r4   r[   r)   r*   rW   r+   r+   r,   r         zDeviceAdmin.send_messagezSend test notificationc                 C      |  ||d d S NTr]   r^   r+   r+   r,   r         zDeviceAdmin.send_bulk_messagezSend test notification in bulkshould_subscriberX   c                    s   d}g }|D ]>}|r!| |d  jj} fdd jjD } n$| |d |t jjdkr7 jjd nd|jf |t j7 }q| |||d dS )z
        Provides error handling for DeviceAdmin bulk_un/subscribe_to_topic and
        un/subscribe_to_topic methods.
        r   
test-topicc                    s   g | ]
}| j |j fqS r+   )registration_ids_sentindex)r>   r?   r.   r+   r,   rA      s    z9DeviceAdmin.handle_topic_subscription.<locals>.<listcomp>SuccessTN)	handle_topic_subscriptionr.   failure_countr7   rU   rT   rV   rH   rK   )r)   r*   rW   rc   rX   r/   rY   rZ   r+   rg   r,   ri      s4   

z%DeviceAdmin.handle_topic_subscriptionc                 C   r`   ra   ri   r^   r+   r+   r,   r      rb   zDeviceAdmin.subscribe_to_topiczSubscribe to test topicc                 C   s   |  ||dd d S ra   rk   r^   r+   r+   r,   r         z#DeviceAdmin.bulk_subscribe_to_topiczSubscribe to test topic in bulkc                 C   r`   )NFrk   r^   r+   r+   r,   r       rb   z DeviceAdmin.unsubscribe_to_topiczUnsubscribe to test topicc                 C   s   |  ||dd d S )NFTrk   r^   r+   r+   r,   r!      rl   z%DeviceAdmin.bulk_unsubscribe_to_topicz!Unsubscribe to test topic in bulkc                 C   s   t ttddddd d S )NrL   rR   rM   rP   rd   )	FCMDevicer"   r	   r
   r^   r+   r+   r,   handle_send_topic_message   s   z%DeviceAdmin.handle_send_topic_messagec                 C   r\   r4   )rn   r^   r+   r+   r,   r"      r_   zDeviceAdmin.send_topic_messagezSend message test topicc                 C      |j dd d S )NTr   updater^   r+   r+   r,   r#      r_   zDeviceAdmin.enablezEnable selected devicesc                 C   ro   )NFrp   rq   r^   r+   r+   r,   r$     r_   zDeviceAdmin.disablezDisable selected devicesN)F) __name__
__module____qualname__list_displaylist_filteractionsraw_id_fieldslist_select_relatedr-   r   r   rE   tupler   strintboolrK   r[   r   r<   short_descriptionr   ri   r   r   r    r!   rn   r"   r#   r$   r+   r+   r+   r,   r      sZ    		

H$


*






r   )!typingr   swapperdjango.appsr   django.contribr   r   django.utils.translationr   r<   r   firebase_admin.messagingr   r	   r
   r   r   fcm_django.modelsr   r   fcm_django.settingsr   SETTINGS	get_modelsplitr(   
load_modelrm   
ModelAdminr   siteregisterr+   r+   r+   r,   <module>   s     q