
    g'                     z    d dl Z d dlZd dlmZ d dlmZ d Zd Zd Zd Zd Zd	 Z	dd
Z
d Zd Zd ZddZddZy)    N)common)usersc                      ddddd} t        t        j                  j                  t              rt        j                  j                  S | S )z7
    Returns the session info for the user session
    Nadmin)user_iduser
user_groupexp)
isinstancecherrypyrequestlogindict_sessions    /opt/Tautulli/plexpy/session.pyget_session_infor      sF      %H
 (""(($/%%%O    c                  >    t               } | d   dk(  r
| d   r| d   S dS )?
    Returns the user_id for the current logged in session
    r	   guestr   N)r   r   s    r   get_session_userr   '   s0      !H'5@XfEU8F_[__r   c                  P    t               } | d   dk(  r| d   rt        | d         S dS )r   r	   r   r   N)r   strr   s    r   get_session_user_idr   .   s6      !H'/'='HXV_M`3x	"#jfjjr   c                      t               } | d   dk(  r2| d   r-t        j                         j                  | d         }|d   }|S t        j
                  j                  }|S )zK
    Returns the user's server_token for the current logged in session
    r	   r   r   server_token)r   r   Users
get_tokensplexpyCONFIG	PMS_TOKEN)r   session_user_tokens
user_tokens      r   get_session_user_tokenr%   6   se      !H(Xi-@#kkm66x	7JK(8
  ]],,
r   c                      t        j                         j                  t                     } t	        d | d   D              S )zI
    Returns a tuple of section_id for the current logged in session
    r   c              3   2   K   | ]  }t        |        y wN)r   ).0ss     r   	<genexpr>z/get_session_shared_libraries.<locals>.<genexpr>J   s     BAQBs   shared_libraries)r   r   get_detailsr   tuple)user_detailss    r   get_session_shared_librariesr1   E   s8     ;;=,,5H5J,KLB.@!ABBBr   c                  ^    t        j                         j                  t                     } | S )
    Returns a dict of library filters for the current logged in session

        {'content_rating': ('PG', 'R')
         'labels': ('label1', label2')},

    r'   )r   r   get_filtersr   )filterss    r   get_session_library_filtersr6   L   s&     kkm''0C0E'FGNr   c                    |dk(  r| j                  dd      } n}|dk(  s
|dk(  s|dk(  r| j                  dd      } n[|dk(  s
|d	k(  s|d
k(  r| j                  dd      } n9|dk(  s|dk(  s
|dk(  s|dk(  r| j                  dd      } n| j                  dd      } | j                  dd      }| j                  dd      }|t        d |D              fS )r3   moviefilter_movies showseasonepisode	filter_tvartistalbumtrackfilter_musicphotophoto_albumpictureclipfilter_photos
filter_allcontent_ratinglabelsc              3   <   K   | ]  }|j                           y wr)   lowerr*   fs     r   r,   z3get_session_library_filters_type.<locals>.<genexpr>m   s      ;q ;   )getr/   )r5   
media_typerI   rJ   s       r    get_session_library_filters_typerS   W   s     W++or2	v	x!7:;R++k2.	x	:#8J'<Q++nb1	w	*"=yAX\fjp\p++or2++lB/[[!126N[[2&F5 ;F ;;;;r   c                 :    t               }|rt        |       |k7  ryy)z[
    Returns True or False if the user_id is allowed for the current logged in session
    FT)r   r   )r   session_user_ids     r   allow_session_userrV   o   s      *+O3w<?:r   c                 8    t               }|rt        |       |vryy)z^
    Returns True or False if the section_id is allowed for the current logged in session
    FT)r1   r   )
section_idsession_library_idss     r   allow_session_libraryrZ   x   s"     78s:6IIr   c                 f    t               }t               }|r| D ]  }d|v s|d   |k7  s||d<    | S )zY
    Reverts the friendly name back to the username of the current logged in session
    friendly_name)r   r   )list_of_dictssession_userrU   ds       r   friendly_name_to_usernamer`      sL     $%L)+O 	2A!#/(:l(J%1/"	2 r   c           	         t               }|s| S t               }t               }t        |       } |dk(  r1|r/| D cg c]#  }t	        |j                  dd            |k(  s"|% c}S |dk(  r|r g }| D ]  }t	        |j                  dd            |vr!|j                  d      rt        ||d         \  }}|j                  dd      }	t        d |j                  dd	      D              }
d
}|s|sd}nb|s(|r&t        |
      j                  t        |            r;d}n8|r	|s|	|v r0d}n-|r+|r)|	|v s#t        |
      j                  t        |            rd}s|j                  |        |S | S c c}w )zf
    Filters a list of dictionary items to only return the info for the current logged in session
    r    rX   rR   rR   rI   c              3   <   K   | ]  }|j                           y wr)   rL   rN   s     r   r,   z&filter_session_info.<locals>.<genexpr>   s      Hq HrP   rJ   r:   FT)r   r1   r6   r`   r   rQ   rS   r/   setintersectionappend)r]   
filter_keyrU   rY   session_library_filtersr_   new_list_of_dictsf_content_ratingf_labelsd_content_ratingd_labelskeeps               r   filter_session_inforp      s    *+O689;-m<MY?(XaCi0C,D,WXX	|	#(; 	,A155b)*2EEuu\"-MNeYZ[gYh.j* ( $%55)92#>   HAEE(B4G HH'D)h8}11#h-@#%h'+;;#%('+;;s8}?Y?YZ]^fZg?h#!((+3	,6 ! E Ys   #E/E/c                    t               }|s| S t               }t               }t               }dddddt        j
                  ddddd
}i dg dt        j                  ddd	dd
g dddddddg dddg dddt        j                  dddddddg i dg dddddddddddg d dd!dd"t        j                  d#dd$dd%dd&dd'g d(dd)dddt        j                  dg ddd*}t        |       } | D ]  }|rVt        |j                  d+            |k(  s9|j                  d,      |k(  s%|j                         D ]  \  }	}
|	|v s||	   ||	<    |s_t        |j                  d&d            |vr&|j                         D ]  \  }	}
|	|v s||	   ||	<    |j                  d-      }|st        ||d-   .      \  }}|j                  d	d      }t        d/ |j                  dd0      D              }|s|s|s'|r%t        |      j                  t        |            r9,|r|s||v r/6|r+|r)||v s#t        |      j                  t        |            rc|j                         D ]  \  }	}
|	|v s||	   ||	<     | S )1zn
    Masks user info in a list of dictionary items to only display info for the current logged in session
    rb   z	Plex UserzN/APlayer)
r   r   usernameemailr\   
user_thumb
ip_addressip_address_public
machine_idplayeractorsart	bif_thumbrI   	directorsedition_titlefile
full_titlez
Plex Mediagenresgrandparent_guidgrandparent_guidsgrandparent_rating_keygrandparent_thumbgrandparent_titlegrandparent_yearguidguidsrJ   library_namemedia_index0original_titleoriginally_available_atparent_guidparent_guidsparent_media_indexparent_rating_keyparent_thumbparent_titleparent_year
rating_keyrX   r-   
sort_titlestudio)summarytaglinethumbtitlewritersyearlast_playedr   r   rR   rc   c              3   <   K   | ]  }|j                           y wr)   rL   rN   s     r   r,   z$mask_session_info.<locals>.<genexpr>  s     D1QWWYDrP   r:   )r   r   r1   r6   r   DEFAULT_USER_THUMBDEFAULT_ARTDEFAULT_POSTER_THUMBr`   r   rQ   itemsrS   r/   re   rf   )r]   mask_metadatarU   r^   rY   ri   keys_to_maskmetadata_to_maskr_   kvrR   rk   rl   rm   rn   s                   r   mask_session_infor      s    *+O#%L689; $//"L+"+v!!+ 	R+ 	"	+
 	R+ 	+ 	+ 	l+ 	"+ 	B+ 	R+ 	!"+ 	V88+ 	\+ 	B+  	!+" 	#+$ 	"%+& 	'+( 	s)+* 	,++, 	"2-+. 	r/+0 	1+2 	c3+4 	R5+6 	337+8 	9+: 	r;+< 	b=+> 	b?+@ 	BA+B 	lC+D 	"E+F ,,#U+Z .m<M "6Ci(8$9_$LPQPUPUV\P]amPm$**, 216,q/1Q42 quu\"%&.AA(..0 616"21"51Q46UU<(
)IJaQRS_Q`*b&h  !uu%5r:Dh0CDDH#H%(x=--c(m<!(#'77!h#'773x=;U;UVYZbVc;d(..0 616"21"51Q46C"6H r   r)   )T)r   r    r   r   r   r   r   r%   r1   r6   rS   rV   rZ   r`   rp   r   r:   r   r   <module>r      sT   $    `kC	<01fmr   