
    gq                         d dl Z d dlZd dlmZ d dlmZ d dlmZ dZdZi addZ	ddZ
dd	Zdd
Z	 	 ddZddZddZddZd ZddZd Zd Zd Zy)    N)database)helpers)loggerz$3b4b666a-d557-4b92-acdf-e2c8c4b95357zonesignal-disabledc                    | t         v rD|rBt        t         |    t        j                        rt         |    j	                          dt         | <   y | t         v rB|r@t        t         |    t        j                        rt         |    j	                          t         | = y | t         vra|r^d}t        j                  |t
        | dg      t         | <   t         |    j                          t        j                  j                  |        y y y )NTi,  args)
TEMP_DEVICE_TOKENS
isinstance	threadingTimercancelset_temp_device_tokenstartr   _BLACKLIST_WORDSadd)tokenremover   successinvalidate_times        "/opt/Tautulli/plexpy/mobile_app.pyr   r       s     ""w(/Au%,,.$(5!	$	$(/Au%,,.u%	(	(S $-OOOEZbgiman$o5!5!'')##E*	 .1	(    c                 ,    t         j                  |       S N)r	   get)r   s    r   get_temp_device_tokenr   4   s    !!%((r   c                 (   dx}x}}g }| s|rVd}| r|dz  }|j                  |        |rd}|j                  |       |dj                  ||fD cg c]  }|s|	 c}      z  }t        j                         }|j	                  d|z  |      }|S c c}w )N zWHERE zdevice_id = ?zdevice_token = ?z AND zSELECT * FROM mobile_devices %sr   )appendjoinr   MonitorDatabaseselect)		device_iddevice_tokenwherewhere_idwhere_tokenr   wdbresults	            r   get_mobile_devicesr*   8   s    %''E'H{DL'HKK	",KKK%8[*AGQQqGHH		!	!	#BYY85@tYLFM Hs   B
B
c                      | sy t        |       S )Nr#   )r*   r,   s    r   get_mobile_device_by_tokenr-   L   s    <88r   c                    t        j                         }d| i}|||||d}	|r||	d<   	 |j                  d||	      }
t                |
dk(  rt        j                  d|z         nt        j                  d	|z         t        |
       t        j                  t        | |g      j                          y# t        $ r"}t        j                  d|z         Y d }~y d }~ww xY w)Nr"   )device_namer#   platformversiononesignal_idfriendly_namemobile_devices
table_namekey_dict
value_dictzKTautulli MobileApp :: Failed to register mobile device in the database: %s.insertzDTautulli MobileApp :: Registered mobile device '%s' in the database.zGTautulli MobileApp :: Re-registered mobile device '%s' in the database.r,   )targetr   T)r   r    upsertblacklist_logger	Exceptionr   warninfoset_last_seenr   Threadset_officialr   )r"   r/   r#   r0   r1   r3   r2   r(   keysvaluesr)   es               r   add_mobile_devicerF   S   s    		!	!	#B#D(*" *	,F "/&6RXY
 Z]hhi]`kkl|,L	</HIOOQ  adeefs   B5 5	C >CC c                     t        |       j                         rt        |       } nt        j                  d| z         y t        j                         }|j                  d| g      }|d   t        k(  rd|d<   |S )Nz[Tautulli MobileApp :: Unable to retrieve mobile device config: invalid mobile_device_id %s.z)SELECT * FROM mobile_devices WHERE id = ?r   r2   r   )	strisdigitintr   errorr   r    select_single_ONESIGNAL_DISABLED)mobile_device_idr(   r)   s      r   get_mobile_device_configrO   r   s    
$$&/0r  vF  F  	G		!	!	#BI$4#5  7F n!44!#~Mr   c                    t        |       j                         rt        |       } nt        j                  d| z         yd| i}d|j                  dd      i}t        j                         }	 |j                  d||       t        j                  d| z         t                y	# t        $ r"}t        j                  d
|z         Y d }~yd }~ww xY w)NzYTautulli MobileApp :: Unable to set exisiting mobile device: invalid mobile_device_id %s.Fidr3   r   r4   r5   zGTautulli MobileApp :: Updated mobile device agent: mobile_device_id %s.Tz9Tautulli MobileApp :: Unable to update mobile device: %s.)rH   rI   rJ   r   rK   r   r   r    r;   r?   r<   r=   r>   )rN   kwargsrC   rD   r(   rE   s         r   set_mobile_device_configrS      s    
$$&/0p  tD  D  	E"#Dvzz/2>?F		!	!	#B
		-	P]`ppq ORSSTs   ,6B# #	C,C		Cc                     t        j                         }| r-t        j                  d| z         |j	                  d| g      }y|r-t        j                  d|z         |j	                  d|g      }yy)NzETautulli MobileApp :: Deleting mobile_device_id %s from the database.z'DELETE FROM mobile_devices WHERE id = ?r   Tz>Tautulli MobileApp :: Deleting device_id %s from the database.z.DELETE FROM mobile_devices WHERE device_id = ?F)r   r    r   debugaction)rN   r"   r(   r)   s       r   delete_mobile_devicerW      ss    		!	!	#B\_oopDL\K]^	UXaabKS\R]^r   c                     t        j                         }t        |      }|dkD  rdnd }	 |j                  d||| g      }y # t        $ r"}t        j                  d|z         Y d }~y d }~ww xY w)N)r2   r   androidz\UPDATE mobile_devices SET official = ?, platform = coalesce(platform, ?) WHERE device_id = ?r   zATautulli MobileApp :: Failed to set official flag for device: %s.)r   r    validate_onesignal_idrV   r=   r   r>   )r"   r2   r(   officialr0   r)   rE   s          r   rB   rB      sy    		!	!	#B$,?H$qLydH 1 "*8Y ?  A  WZ[[\s   A 	A-A((A-c                     t        j                         }t        j                         }	 |j	                  d|| g      }y # t
        $ r"}t        j                  d|z         Y d }~y d }~ww xY w)Nz>UPDATE mobile_devices SET last_seen = ? WHERE device_token = ?r   zBTautulli MobileApp :: Failed to set last_seen time for device: %s.)r   r    r   	timestamprV   r=   r   r>   )r#   r(   	last_seenr)   rE   s        r   r@   r@      sg    		!	!	#B!!#I[!*L 9  ; X[\\]s   A   	A+	A&&A+c                 P   | y| t         k(  ryddi}t        j                  d       	 t        j                  dt
         d|  d|	      }|j                  }t        j                  d
|       t        |dk(        S # t        $ r"}t        j                  d|z         Y d }~yd }~ww xY w)Nr      zContent-Typezapplication/jsonz-Tautulli MobileApp :: Validating OneSignal IDzhttps://api.onesignal.com/apps/z/subscriptions/z/user/identity)headerszETautulli MobileApp :: OneSignal ID validation returned status code %s   z:Tautulli MobileApp :: Failed to validate OneSignal ID: %s.)
rM   r   r?   requestsr   _ONESIGNAL_APP_IDstatus_coderJ   r=   r>   )r2   ra   rrf   rE   s        r   rZ   rZ      s    	,	,12G
KK?@LL:;L:M_]i\jjxy  DK  Lmm[]hi;#%&& PSTTUs   AA: :	B%B  B%c                  F    t               D ]  } t        | d   | d           y )Nr"   r2   )r*   rB   )devices    r   revalidate_onesignal_idsrj      s*    $& BVK(&*@ABr   c                  P    t               } | D ]  }t        j                  |        y r   )r*   r   blacklist_config)devicesds     r   r<   r<      s'     "G #"#r   )NFFFr   )NN)NNNNNNN)rd   r   plexpyr   r   r   re   rM   r	   r   r   r*   r-   rF   rO   rS   rW   rB   r@   rZ   rj   r<    r   r   <module>rq      sv   $      ; *  +()(9 FJTX>"*	&B
#r   