
    Ii~X                     n    S r SSKJr  SSKJr  SSKJrJrJr  SSK	J
r
  \(       a  SSKJr   " S	 S
5      rg)z7Transcriber management menus for the PlayPalace server.    )TYPE_CHECKING   )NetworkUser)MenuItemEscapeBehavior
TrustLevel   )Localization)Databasec                   F   \ rS rSr% SrS\S'   \\\4   \S'   SSS\S	\S
\\\4   4S jr	S\
S
S4S jrS\
S\S
S4S jrS\
S\S
S4S jrS\
S\S	\S
S4S jrS\
S\S\S
S4S jrS\
S\S	\S
S4S jr  S&S\
S\S\\   S-  S\S-  S
S4
S jjrS\
S\S	\S
S4S jrS\
S
S4S jrS\
S\S	\S
S4S jrS\
S
S4S jrS\
S\S	\S
S4S jrS\
S\S
S4S jrS\
S\S	\S
S4S jrS\
S\S\S
S4S jrS\
S\S	\S
S4S  jrS\
S\S
S4S! jrS\
S\S	\S
S4S" jr S'S\
S\S#\S
S4S$ jjrS%r g)(TranscriberRoleMixin   zProvide transcriber assignment and management menus.

Expected attributes:
    _db: Database instance.
    _user_states: dict[str, dict] of user menu states.
    _show_documents_menu(user): Method to show the documents menu.
r   _db_user_statesuserr   selection_idstatereturnc                     U R                   XU44U R                  XU44U R                  XU44U R                  XU44U R                  XU44U R
                  XU44U R                  XU44U R                  XU44S.$ )z8Return menu dispatch entries for transcriber management.)transcribers_for_language_menutranscriber_remove_confirmadd_transcriber_users_menutranscribers_by_user_menu add_transcriber_user_picker_menutranscriber_user_languages_menutranscriber_remove_lang_confirmtranscriber_remove_all_confirm)+_handle_transcribers_for_language_selection"_handle_transcriber_remove_confirm'_handle_add_transcriber_users_selection&_handle_transcribers_by_user_selection-_handle_add_transcriber_user_picker_selection,_handle_transcriber_user_languages_selection'_handle_transcriber_remove_lang_confirm&_handle_transcriber_remove_all_confirm)selfr   r   r   s       Ec:\Users\dbart\PlayPalace11\server\core\documents\transcriber_role.py_get_transcriber_menu_handlers3TranscriberRoleMixin._get_transcriber_menu_handlers   s     @@U+/
 77U++
 <<U++
 ;;U+*
 BBU+1
 AAU+0
 <<U+0
 ;;U+/;!
 !	
    Nc           	      H  ^  SSK Jn  T R                  R                  5       nUR                  R
                  [        R                  R
                  :  n0 nUR                  5        H#  nU H  nUR                  US5      S-   XW'   M     M%     0 nSn	U(       aD  [        R                  " 5        H*  n
UR                  U
S5      nSU SUS:X  a  SOS S	3nXU
'   M,     O[        R                  " 5        V
s/ s H  n
UR                  U
S5      S:  d  M  U
PM     n	n
U	(       d#  UR                  S
5        T R                  U5        gU	 H  n
XZ   nSU SUS:X  a  SOS S	3nXU
'   M     U" USU	UT R                  U 4S jS9(       a  SS0T R                  UR                   '   ggs  sn
f )z<Show the language list with transcriber counts per language.r   show_language_menu   N( r   users)transcribers-no-transcribersFc                 &   > TR                  U 5      $ N)_show_documents_menu)ur&   s    r'   <lambda>ETranscriberRoleMixin._show_transcribers_by_language.<locals>.<lambda>k   s    d77:r*   )highlight_active_locale
lang_codesstatus_labels	on_selecton_backmenulanguage_menu)server.core.ui.common_flowsr-   r   get_all_transcriberstrust_levelvaluer   ADMINvaluesgetr
   get_available_locale_codesspeak_lr6   #_on_transcribers_by_language_selectr   username)r&   r   r-   all_transcribersis_adminlang_countslangslangr<   r;   codecountlabels   `            r'   _show_transcribers_by_language3TranscriberRoleMixin._show_transcribers_by_languageB   s   B8888:##))Z-=-=-C-CC&(%,,.E$/OOD!$<q$@!  / 
$??A#a0E7!eqjFg#FaH&+d# B )CCEED??4+a/ E  
 ;<))$/"#)E7!eqjFg#FaH&+d# #
 $)!'>>:
 17/HDdmm,
s   2FF	lang_codec                 .   #    U R                  X5        g7f)z;Handle language selection in transcribers-by-language view.N)_show_transcribers_for_language)r&   r   rV   s      r'   rJ   8TranscriberRoleMixin._on_transcribers_by_language_selecto   s     ,,T=s   c                    U R                   R                  U5      nUR                  R                  [        R
                  R                  :  nU(       d*  U(       d#  UR                  S5        U R                  U5        g/ nU H  nUR                  [        USU 3S95        M!     U(       a8  UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      SS95        UR                  SUS	[        R                  S
9  SUS.U R                   UR"                  '   g)z1Show list of transcribers assigned to a language.ztranscribers-no-usersNuser_textidztranscribers-add-users	add_usersbackr   Tmultiletterescape_behavior)r?   rV   )r   get_transcribers_for_languagerC   rD   r   rE   rI   rT   appendr   r
   rG   locale	show_menur   SELECT_LASTr   rK   )r&   r   rV   	usernamesrM   itemsrK   s          r'   rX   4TranscriberRoleMixin._show_transcribers_for_languages   s   HH::9E	##))Z-=-=-C-CCLL01//5!HLLxeH:4FGH "LL%))$++7OP" 	X<#3#3DKK#HVTU,*66	 	 	
 5",
$--(r*   c                 t  #    UR                  SS5      nUS:X  a  U R                  U5        gUS:X  a  U R                  X5        gUR                  S5      (       a\  USS nUR                  R
                  [        R                  R
                  :  a  U R                  XU5        gU R                  X5        gg7f)z7Handle selection in the transcribers-for-language menu.rV    r`   r_   r[      N)
rG   rT   _show_add_transcriber_users
startswithrC   rD   r   rE    _show_transcriber_remove_confirmrX   )r&   r   r   r   rV   target_usernames         r'   r   @TranscriberRoleMixin._handle_transcribers_for_language_selection   s      IIk2.	6!//5[(,,T=$$W--*12.O%%)9)9)?)??55dYW44TE .s   B6B8rr   c                     SSK Jn  [        R                  " UR                  SU 35      n[        R                  " UR                  SUUS9nU" USU5        SUUS.U R
                  UR                  '   g)	z<Ask admin to confirm removing a transcriber from a language.r   show_yes_no_menu	language-ztranscribers-remove-confirmr   languager   r?   rr   rV   NrA   rv   r
   rG   rf   r   rK   r&   r   rr   rV   rv   	lang_namequestions          r'   rq   5TranscriberRoleMixin._show_transcriber_remove_confirm   ss     	A $$T[[Ii[2IJ	##KK) 	
 	;XF0.",
$--(r*   c                 "  #    UR                  SS5      nUR                  SS5      nUS:X  aP  U R                  R                  XT5        [        R                   " UR                  SU 35      nUR                  SUUS9  U R                  X5        g7f)	z(Handle transcriber removal confirmation.rV   rm   rr   yesrw   transcribers-removedrx   N)rG   r   remove_transcriber_assignmentr
   rf   rI   rX   )r&   r   r   r   rV   rr   r}   s          r'   r   7TranscriberRoleMixin._handle_transcriber_remove_confirm   s      IIk2.	))$5r:5 HH22?N$((	)6MNILL&$"  
 	,,T=   BBenabled_usersfocus_usernamec                 B   [        U R                  R                  U5      5      nU R                  R                  5       U R                  R	                  5       -   nUc
  [        5       n[
        R                  " UR                  S5      n[
        R                  " UR                  S5      n/ n	Sn
[        US S9 H  nX+R                  ;  a  M  UR                  U;   a  M&  UR                  U;   a  UOUnU	R                  [        UR                   SU 3SUR                   3S	95        UR                  U:X  d  M  [        U	5      n
M     U	(       d#  UR                  S
5        U R                  X5        gU	R                  [        [
        R                  " UR                  S5      SS	95        U	R                  [        [
        R                  " UR                  S5      SS	95        UR!                  SU	S["        R$                  U
S9  SUUS.U R&                  UR                  '   g)zShow toggle list of eligible users to add as transcribers for a language.

Only shows users who are fluent in the language but not already assigned.
Nz	option-onz
option-offr.   c                 6    U R                   R                  5       $ r5   rK   lowerrs    r'   r8   BTranscriberRoleMixin._show_add_transcriber_users.<locals>.<lambda>       1A1A1Cr*   keyr0   toggle_r\   ztranscribers-no-eligible-usersdonecancelr   T)rb   rc   position)r?   rV   r   )setr   rd   get_non_admin_usersget_admin_usersr
   rG   rf   sortedfluent_languagesrK   re   r   lenrI   rX   rg   r   rh   r   )r&   r   rV   r   r   existing	all_userson_label	off_labelrj   focus_positionr7   statuss                r'   ro   0TranscriberRoleMixin._show_add_transcriber_users   s    txx==iHIHH002TXX5M5M5OO	 EM##DKK= $$T[[,?		'CDA 2 22zzX%!"}!<X)FLLJJ<q1 - zz^+!$U E LL9:00AX<#3#3DKK#HVTUX<#3#3DKK#JxXY(*66# 	 	
 1"*,
$--(r*   c                   #    UR                  SS5      nUR                  S[        5       5      nUS:X  a  U(       as  [        R                   " UR                  SU 35      nU H  nU R                  R                  Xt5        M      SR                  [        U5      5      nUR                  SUUS9  U R                  X5        gUS	:X  a  U R                  X5        gUR                  S
5      (       ab  USS n	X;   a#  UR                  U	5        UR                  S5        O"UR                  U	5        UR                  S5        U R                  UUUU	S9  gg7f)z3Handle selection in the add-transcriber-users menu.rV   rm   r   r   rw   , ztranscribers-users-added)r1   ry   r   r      Nzcheckbox_list_off.wavzcheckbox_list_on.wav)r   )rG   r   r
   rf   r   add_transcriber_assignmentjoinr   rI   rX   rp   discard
play_soundaddro   )
r&   r   r   r   rV   r   r}   rK   	users_strrr   s
             r'   r    <TranscriberRoleMixin._handle_add_transcriber_users_selection   s=     IIk2.	"'))OSU"C6!(,,T[[Ii[:QR	 -HHH77L !. IIf]&;<	.#&  
 00AX%00A$$Y//*12.O/%%o6 78!!/2 67,,.	 -  0s   EEc                 6   U R                   R                  5       nUR                  R                  [        R
                  R                  :  nU(       d*  U(       d#  UR                  S5        U R                  U5        g/ n[        UR                  5       [        R                  S9 H?  n[        X%   5      nU SU SUS:X  a  SOS S	3nUR                  [        US
U 3S95        MA     U(       a8  UR                  [        [        R                   " UR"                  S5      SS95        UR                  [        [        R                   " UR"                  S5      SS95        UR%                  SUS[&        R(                  S9  SS0U R*                  UR,                  '   g)z4Show list of transcriber users with language counts.r3   Nr   z (r0   r.   ry   	languagesr2   r[   r\   ztranscribers-add-useradd_userr`   r   Tra   r?   )r   rB   rC   rD   r   rE   rI   r6   r   keysstrr   r   re   r   r
   rG   rf   rg   r   rh   r   rK   )r&   r   rL   rM   rj   rK   rR   rS   s           r'   _show_transcribers_by_user/TranscriberRoleMixin._show_transcribers_by_user!  s_   8888:##))Z-=-=-C-CCLL78%%d+/446CIIFH(23Ej5'!:*UUVWELLu5
1CDE G
 LL%))$++7NO! 	X<#3#3DKK#HVTU'*66	 	 	
 -34O+P$--(r*   c                    #    US:X  a  U R                  U5        gUS:X  a  U R                  U5        gUR                  S5      (       a  USS nU R                  X5        gg7f)z.Handle selection in transcribers-by-user menu.r`   r   r[   rn   N)r6   !_show_add_transcriber_user_pickerrp    _show_transcriber_user_languagesr&   r   r   r   rr   s        r'   r!   ;TranscriberRoleMixin._handle_transcribers_by_user_selectionA  sc      6!%%d+Z'2248$$W--*12.O11$H .s   AA!c                    U R                   R                  5       n[        UR                  5       5      nU R                   R	                  5       U R                   R                  5       -   n/ n[        US S9 HX  nUR                  U;   a  M  UR                  (       d  M(  UR                  [        UR                  SUR                   3S95        MZ     U(       d#  UR                  S5        U R                  U5        gUR                  [        [        R                  " UR                  S5      SS95        UR!                  SUS	["        R$                  S
9  SS0U R&                  UR                  '   g)zCShow list of users who are not yet transcribers to pick one to add.c                 6    U R                   R                  5       $ r5   r   r   s    r'   r8   HTranscriberRoleMixin._show_add_transcriber_user_picker.<locals>.<lambda>S  r   r*   r   pick_r\   ztranscribers-no-users-to-addNr`   r   Tra   r?   )r   rB   r   r   r   r   r   rK   r   re   r   rI   r   r
   rG   rf   rg   r   rh   r   )r&   r   rL   existing_usernamesr   rj   r7   s          r'   r   6TranscriberRoleMixin._show_add_transcriber_user_pickerM  s,   8888: !1!6!6!89HH002TXX5M5M5OO		'CDAzz//%%LLqzzajj\6JKL E LL78++D1X<#3#3DKK#HVTU.*66	 	 	
 6,
$--(r*   c                    #    US:X  a  U R                  U5        gUR                  S5      (       a  USS nU R                  UUSS9  gg7f)z4Handle selection in the add-transcriber user picker.r`   r   rn   NT)from_user_list)r   rp   _show_add_transcriber_languagesr   s        r'   r"   BTranscriberRoleMixin._handle_add_transcriber_user_picker_selectionh  s[      6!++D1$$W--*12.O00# 1  .s   AA	c                 j   U R                   R                  U5      nUR                  R                  [        R
                  R                  :  nU(       d*  U(       d#  UR                  S5        U R                  U5        g/ nU HC  n[        R                  " UR                  SU 35      nUR                  [        USU 3S95        ME     U(       ap  UR                  [        [        R                  " UR                  S5      SS95        UR                  [        [        R                  " UR                  S5      S	S95        UR                  [        [        R                  " UR                  S
5      S
S95        UR                  SUS[        R                  S9  SUS.U R                   UR"                  '   g)z2Show languages assigned to a specific transcriber.ztranscribers-no-languagesNrw   lang_r\   ztranscribers-add-languagesadd_languagesztranscribers-remove-transcriberremove_transcriberr`   r   Tra   r?   rr   )r   get_transcriber_languagesrC   rD   r   rE   rI   r   r
   rG   rf   re   r   rg   r   rh   r   rK   )r&   r   rr   r;   rM   rj   rQ   names           r'   r   5TranscriberRoleMixin._show_transcriber_user_languagesv  sf   XX77H
##))Z-=-=-C-CC(LL45++D1D##DKK9TF1CDDLLt%v?@  LL%))$++7ST& LL%))$++7XY+ 	X<#3#3DKK#HVTU-*66	 	 	
 6.,
$--(r*   c                   #    UR                  SS5      nUS:X  a  U R                  U5        gUS:X  a  U R                  X5        gUS:X  a  U R                  X5        gUR	                  S5      (       a\  USS nUR
                  R                  [        R                  R                  :  a  U R                  XU5        gU R                  X5        gg7f)	z2Handle selection in a transcriber's language list.rr   rm   r`   r   r   r   rn   N)rG   r   r   $_show_transcriber_remove_all_confirmrp   rC   rD   r   rE   %_show_transcriber_remove_lang_confirmr   )r&   r   r   r   rr   rV   s         r'   r#   ATranscriberRoleMixin._handle_transcriber_user_languages_selection  s       ))$5r:6!++D1_,00G1155dL$$W--$QR(I%%)9)9)?)??::4R[\55dL .s   CCc                     SSK Jn  [        R                  " UR                  SU 35      n[        R                  " UR                  SUUS9nU" USU5        SUUS.U R
                  UR                  '   g)	z<Ask admin to confirm removing a language from a transcriber.r   ru   rw   z transcribers-remove-lang-confirmrx   r   rz   Nr{   r|   s          r'   r   :TranscriberRoleMixin._show_transcriber_remove_lang_confirm  ss     	A $$T[[Ii[2IJ	##KK. 	
 	@(K5.",
$--(r*   c                 "  #    UR                  SS5      nUR                  SS5      nUS:X  aP  U R                  R                  XE5        [        R                   " UR                  SU 35      nUR                  SUUS9  U R                  X5        g7f)	z%Handle language removal confirmation.rr   rm   rV   r   rw   r   rx   N)rG   r   r   r
   rf   rI   r   )r&   r   r   r   rr   rV   r}   s          r'   r$   <TranscriberRoleMixin._handle_transcriber_remove_lang_confirm  s       ))$5r:IIk2.	5 HH22?N$((	)6MNILL&$"  
 	--dDr   c                     SSK Jn  [        R                  " UR                  SUS9nU" USU5        SUS.U R
                  UR                  '   g)zFAsk admin to confirm removing all transcriber assignments from a user.r   ru   ztranscribers-remove-all-confirmr   r   r   Nr{   )r&   r   rr   rv   r~   s        r'   r   9TranscriberRoleMixin._show_transcriber_remove_all_confirm  sM    @##KK- 

 	?J4.,
$--(r*   c                    #    UR                  SS5      nUS:X  aO  U R                  R                  U5      nU H  nU R                  R                  XF5        M      UR	                  SUS9  U R                  U5        g7f)z.Handle removal of all transcriber assignments.rr   rm   r   ztranscribers-removed-allr   N)rG   r   r   r   rI   r   )r&   r   r   r   rr   r;   rV   s          r'   r%   ;TranscriberRoleMixin._handle_transcriber_remove_all_confirm  so       ))$5r:5 ;;OLJ'	66R (LL3/LJ''-s   A:A<r   c           
      (  ^ ^^ SSK Jn  T R                  R                  T5      n[	        T R                  R                  T5      5      nU Vs/ s H  owU;  d  M
  UPM     nnU(       d=  UR                  S5        T(       a  T R                  U5        gT R                  UT5        gS[        S[        [           SS4UU U4S jjn	S[        SS4UU U4S	 jjn
U" US
SU[	        5       U	U
S9(       a  STTS.T R                  UR                  '   ggs  snf )zFShow language menu filtered to the user's unassigned fluent languages.r   r,   z"transcribers-no-eligible-languagesNr7   selectedr   c                 |  > U(       a  U H  nTR                   R                  TU5        M!     U Vs/ s H'  n[        R                  " U R                  SU 35      PM)     nnSR                  [        U5      5      nU R                  STUS9  T(       a  TR                  U 5        g TR                  U T5        g s  snf )Nrw   r   ztranscribers-languages-added)r   r   )
r   r   r
   rG   rf   r   r   rI   r   r   )	r7   r   rV   rQ   
lang_names	langs_strr   r&   rr   s	         r'   on_doneETranscriberRoleMixin._show_add_transcriber_languages.<locals>.on_done  s    !)IHH77S "*YabYaQUl..qxx9TF9KLYa
b IIfZ&89			2('  
 //255aI cs   .B9c                 \   > T(       a  TR                  U 5        g TR                  U T5        g r5   )r   r   )r7   r   r&   rr   s    r'   	on_cancelGTranscriberRoleMixin._show_add_transcriber_languages.<locals>.on_cancel  s$    //255aIr*   FT)r:   multi_selectr;   r   r   r   r@   )r?   rr   r   )rA   r-   r   get_user_fluent_languagesr   r   rI   r   r   r   r   r   rK   )r&   r   rr   r   r-   fluentassignedrQ   	availabler   r   s   ` ``       r'   r   4TranscriberRoleMixin._show_add_transcriber_languages  s    	C33ODtxx99/JK&,EfdH0DTf	ELL=>//5  55dOL	J{ 	Jc#h 	J4 	J 	J 	J 	J 	J 	J $) U
 (#2"00Ddmm,
A Fs   	DD )NN)F)!__name__
__module____qualname____firstlineno____doc____annotations__dictr   tupler(   r   rT   rJ   rX   r   rq   r   r   ro   r    r   r!   r   r"   r   r#   r   r$   r   r%   boolr   __static_attributes__r   r*   r'   r   r      s    
OsDy/!%
!%
14%
=A%
	c5j	%
R+I; +I4 +IZ>k >VY >^b >
K 
C 
TX 
@FF/2F;?F	F 

25
BE
	
(>>/2>;?>	>( *.%)3
3
 3
 3x$	3

 d
3
 
3
j!!/2!;?!	!JQ{ Qt Q@
I
I/2
I;?
I	
I
k 
d 
6/2;?	%
[ %
SV %
[_ %
NMM/2M;?M	M$

25
BE
	
(EE/2E;?E	E 
 
WZ 
_c 

.
./2
.;?
.	
.   %	88 8 	8
 
8 8r*   r   N)r   typingr   users.network_userr   
users.baser   r   r   messages.localizationr
   persistence.databaser   r   r   r*   r'   <module>r      s)    =   , = = 10Y Yr*   