a
    K56a7T                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ ddlmZmZmZ d dlmZ zd dlZd dlZW n ey   edY n0 ej ZeZdd	 Zd
d ZG dd deZdd ZG dd dejZG dd de Z!G dd de!Z"G dd de!Z#G dd de!Z$G dd de$Z%dd Z&dd Z'e'Z(e'Z)e'Z*d?d!d"Z+d@d$d%Z,dAd'd(Z-dBd)d*Z.dCd+d,Z/dDd/d0Z0dEd1d2Z1dFd3d4Z2dGd6d7Z3dHd8d9Z4g d:Z5d;d< Z6d=d> Z7dS )I    N)UINotImportable	NoPackageNoBugsNoReportQuertBTSError)launch_browser   )ewritespawn_editorsystem)VERSIONz?Please install the python3-urwid package to use this interface.c                  C   s$   t j } | t | jdd | S )Ng?)Zmax_wait)urwidZraw_displayZScreenZregister_palettepaletteZset_input_timeouts)ui r   7/usr/lib/python3/dist-packages/reportbug/ui/urwid_ui.pyinitialize_urwid_ui6   s    

r   c                   C   s   d S Nr   r   r   r   r   nullfunc?   s    r   c                   @   s   e Zd ZdS )
buttonpushN)__name__
__module____qualname__r   r   r   r   r   D   s   r   c                 C   s   t | jd S r   r   exitcode)buttonr   r   r   button_pressH   s    r   c                   @   s   e Zd Zdd ZdS )SelectableTextc                 C   s   dS )NFr   )selfZchr   r   r   
valid_charM   s    zSelectableText.valid_charN)r   r   r   r   r   r   r   r   r   L   s   r   c                   @   sJ   e Zd ZdddZdddZd	d
 Zdd Zdd Zdd ZdddZ	dS )dialogN c           	      C   s\  || _ d| _|sX|rBt|d}|d t|g | _ }d| _ntt d | _ }|s`d}|shd}tj|dd| _	|rt
t|t g| j	_| j	}t|d	d
}t|dd}t|d}|rt|}td|f|_t|ddtttdddfg}tj|ttddd}t|d|}t|d|}t|d}|| _d S )NF)	edit_textr   TtoprelativeP   footer)
focus_part)z
fixed left   )zfixed rightr)   )z	fixed topr   )zfixed bottomr   bodytitlefixedr   )border shadow)r'   centerZmiddler-   )r*   
scrollmoder   Zset_edit_posr   ListBoxFillerDividerFrameframePileTextheaderZPaddingAttrWrapColumnsview)	r   messager*   widthheightr+   long_messageboxwr   r   r   __init__R   s>    



*zdialog.__init__r   Fc           	      C   s   g }|D ]T\}}|dkr0t |}t |d}n"t || j}||_t |dd}|| q|rt |}||pvd t 	t |d| _
t | j
tt|d| j_n@t |ddd	d
| _
| j
|pd t jt  | j
gd	d| j_d S )N---scrolllabel
selectablefocusr   
         r   r0   )Z
focus_item)r   r8   r:   ZButtonr   r   appendr2   	set_focusr5   buttonsZ
BoxAdapterminlenr6   r'   ZGridFlowr7   r4   )	r   rM   defaultverticallnamer   brA   r   r   r   add_buttons~   s&    

zdialog.add_buttonsc                 C   s   t |jd S r   r   )r   r   r   r   r   r      s    zdialog.button_pressc           
   
   C   s   | j  }z| jj|dd}| j || d }|s>| j  }q.|D ]d}tj|rv|\}}}}| jj	|||||dd |dkr| j  }| j
||}|rB| || qBqW n4 ty }	 z| |	jd W  Y d }	~	S d }	~	0 0 d S )NTrG   zwindow resizer   )r   get_cols_rowsr<   renderdraw_screenZ	get_inputr   utilZis_mouse_eventZmouse_eventkeypressunhandled_keyr   on_exitargs)
r   sizecanvaskeyskZeventr   colrower   r   r   run   s*    

z
dialog.runc                 C   s   |S r   r   r   r   r   r   r   r]      s    zdialog.on_exitc                 C   s   |dv r2| j j}|dkr&| j d n| j d |dv r~| jr\| j d | j|| n"|dv rr| j d n| j d |dkr| j d | j|| d S )N)Ztabz	shift tabr'   r*   )uppage upZdownz	page down)rh   ri   Zenter)r6   r(   rL   r1   r*   r[   r<   )r   r_   rb   rG   r   r   r   r\      s    zdialog.unhandled_keyc                 C   s"   |r|| _ nt | _ | j | jS r   )r   r   run_wrapperrf   )r   r   r   r   r   main   s    zdialog.main)NNNr!   r!   )r   F)N)
r   r   r   rC   rU   r   rf   r]   r\   rk   r   r   r   r   r    Q   s     
,
r    c                   @   s   e Zd ZdddZdS )
displayboxNc                 C   sT   |r|| _ nt | _ | j  }| jj|dd}| j   | j || | j   d S )NTrV   )r   r   rW   r<   rX   startrY   stop)r   r   r_   r`   r   r   r   show   s    

zdisplaybox.show)N)r   r   r   ro   r   r   r   r   rl      s   rl   c                   @   s   e Zd ZdddZdd ZdS )		textentryNFr!   c                 C   sv   t j||d| _t | jg}t |dd}|sRt dd|ft  g}t |}t	| ||||| | j
d d S )N)r"   	multilinerF   	focustextr,   r   r*   )r   Editeditr2   r:   r7   r4   r3   r    rC   r6   rL   )r   textr>   r?   rq   r+   r"   r*   r   r   r   rC      s    
ztextentry.__init__c                 C   s   || j  fS r   )rt   Zget_edit_textrg   r   r   r   r]      s    ztextentry.on_exit)NNFr!   r!   r   r   r   rC   r]   r   r   r   r   rp      s     
rp   c                   @   s   e Zd Zd	ddZdd ZdS )

listdialogFNr!   rI   c                 C   s   g }g | _ |D ]L\}	}
| j |	 |
rBtd||	ft|
gd}	t|	dd}	||	 qt|}t|d}tj| |||||d | j	
d d S )Nr,   r)   rF   rG   )r?   r>   r*   r+   r*   )itemsrK   r   r;   r8   r:   r2   r    rC   r6   rL   )r   ru   widgetsZhas_defaultr>   r?   r+   buttonwidthrR   rB   ZlabelZlbr   r   r   rC      s$    
zlistdialog.__init__c                 C   sB   |r|dfS | j D ]&}t|dr| r|| f  S q|dfS )z#Print the tag of the item selected.N	get_state)rx   hasattrr{   	get_label)r   r   ir   r   r   r]     s    
zlistdialog.on_exit)FNNr!   rI   rv   r   r   r   r   rw      s     
rw   c                   @   s   e Zd Zdd ZdS )checklistdialogc                 C   s:   |r|g fS g }| j D ]}| r||  q||fS )z{
        Mimic dialog(1)'s --checklist exit.
        Put each checked item in double quotes with a trailing space.
        )rx   r{   rK   r}   )r   r   rR   r~   r   r   r   r]     s    
zchecklistdialog.on_exitN)r   r   r   r]   r   r   r   r   r     s   r   c                 O   s   |r| t | } d|v r"|d }nd}d|v r8|d }nd }td| }dd |D }d| } td| |pptd}|| d S )	Nr+   r!   r   z

+c                 S   s   g | ]}t d d| qS \s+r.   resubstrip.0xr   r   r   
<listcomp>0      z#display_message.<locals>.<listcomp>

r@   r+   )tupler   splitjoinr   rl   r   ro   r=   r^   kwargsr+   r   ZchunksrA   r   r   r   display_message   s    

r   c                 O   s   |r| t | } d|v r"|d }nd}d|v r8|d }nd }td| }dd |D }d| } td| |pptd}|d	g || d S )
Nr+   r!   r   z
+c                 S   s   g | ]}t d d| qS r   r   r   r   r   r   r   G  r   z long_message.<locals>.<listcomp>r   r   ZOKr   )	r   r   r   r   r   r    r   rU   rk   r   r   r   r   r@   7  s    

r@   Fc                 C   s   t t j}| j|ddjdd}td|d|p0td}	|s>i }g }
d }t|D ]2\}}| rj|}|	 }|

||||f qN|	j|
|dd |	|}|S )Nreplace)errorsr!   r$   )r@   r?   r+   T)rQ   )localenl_langinfoCODESETencodedecoder    r   	enumerateisupperlowerrK   getrU   rk   )msgokhelpZallow_numbersnowrapr   r+   ZlocZsafe_msgrA   rM   rP   r~   optionresultr   r   r   select_optionsT  s"    
r   Tc                 C   s6   t d| td}|jddgdt| d ||}|S )Nr!   r   )ZYesT)ZNoFr   rP   )r    r   rU   intrk   )r   ZyeshelpZnohelprP   r   r   rA   r   r   r   r   yes_noj  s    
r   r!   c           
      C   sF   |rdt |f }nt }t| ||d}|dg ||\}}	|	pD|S )N%s: %s)r+   r"   r   )r   rp   rU   rk   )
promptoptionsr+   empty_okforce_promptrP   r   rA   coderu   r   r   r   
get_stringq  s    r   c           	      C   sJ   |rdt |f }nt }t| dd}|dg ||\}}|d}|S )Nr   T)rq   r   
)r   rp   rU   rk   r   )	r   r   r+   r   r   rA   r   ru   rR   r   r   r   get_multiline~  s    
r   c                 C   s
   t  | S r   )getpass)r   r   r   r   get_password  s    r   OkCancelc              	      s  |s
g }nt |} sd |r,dt|f }nt}t|tr| }|rg }|D ]$}||v rN|||| f ||= qNt | }|  |D ]}|| q|}nt | }|  g }|D ]4\}}|r||t	dd|f q|||f q|}|rz fdd|D }t
| |d|d}|rD||d	f|d
f|dfg n||d	f|d
fg ||
\}}|d	k rvd S |S dd }g }g }|D ]l\}}|dkrt|}t|d}d}n.tj||||| kd}||_t|dd}|||f qt| |d|dd}|r2||d	f|d
f|dfg n||d	f|d
fg d	} r~t|D ]"\}}|d	  krZ|} q~qZ||
\}}|d	k r|S |S )Nr!   r   r   r.   c                    s*   g | ]"\}}t j|| kd |p"dfqS )stater!   )r   ZCheckBox)r   r   descr   r   r   r     s   zmenu.<locals>.<listcomp>r$   )r?   r+   r   c                 S   s   | S r   r   )r   r   r   r   r   label_button  s    zmenu.<locals>.label_buttonrD   rE   r   rF   rG   rI   )r?   r+   rz   )listr   
isinstancedictcopyrK   rx   sortr   r   r   rU   rk   r   r8   r:   ZRadioButtonr   rw   r   )parr   r   rP   r+   Zany_okorderextrasmultipler   r   oklabelcancellabel	quitlabelZolistkeyr   Zoptsr   ry   rA   r   Zchosenr   ZrlistrT   rG   r~   Zoptr   r   r   menu  s    






r   c                 C   s   t | |||dS )N)r+   r   rP   )r   )r   r+   r   rP   r   r   r   get_filename  s    r   c              
   C   s   t | |||||dddS )NTF)r+   r   r   r   r   )r   )r   r   r   r+   r   r   r   r   r   select_multiple  s    r   noc
                 C   s   ddl m}
 |}|st }|
j| }td| |d ||d |
j| |||||d}|shtd| ||d d S tdd	d
dd}d}|\}}|d }t|||j	||d}d }|r|dkrqn|dkrdS |dkr|S t
|
|| | q|d S )Nr   debbugsz4Retrieving report #%d from %s bug tracking system...rS   )r+   r   )mirrors
http_proxyarchivedzBug report #%d not found.r   zMore details (launch browser)zSubmit more informationQuit)odmqZOdmq)r+   r   r   r   r   r   r   )	reportbugr   r   SYSTEMSr   
get_reportr@   r   r   subjectr   Zget_report_url)Znumberr   r   r   timeoutscreen	queryonlyr+   r   mbox_reader_cmdr   r   sysinfoinfor   ZvalidZbuginfoZbodiesr*   rr   r   r   show_report  s<    
r   c           $         s  ddl m} |j| }|d}|s6td|d  d S |}|sDt }t| tr|| }|	r^|d7 }td|j| d |||d n,td	|j| d d
	dd | D ||d d }z$|j
| ||||
|||	d\}}}W nL ty } z2|t d|d t|f }t|W Y d }~n
d }~0 0 z||sJ|t |d u rBtntnP|dkr`d|f }n
d|f }g }|D ]z\}}t|}|d|f i  |D ]*}d}|jdkrd}|j|  |j< qtt|j fddt |dD  qr|d d }|r
d} d }!nd} d}!ttd|d|||d| |!d	}"d }|"dk rt|"dkrNd }n |"dkr^tn||"|d }qn"t|"|||||d }#|#r|#}qqW n. ty   |t td!|d" tY n0 |rt||j j!st|S )#Nr   r   Zbtsrootz8%s bug tracking system has no web URL; bypassing query.
rS   z	 (source)z1Querying %s bug tracking system for reports on %s)r   r+   z.Querying %s bug tracking system for reports %sr.   c                 S   s   g | ]}t |qS r   strr   r   r   r   r   B  r   z$handle_bts_query.<locals>.<listcomp>)r   versionr   r   sourcez+Unable to connect to %s BTS (error: "%s"); r   z%d bug reports foundz%d bug report foundrD   r!   donez  [RESOLVED]c                    s   g | ]}t | | fqS r   r   )r   rb   Zbuglist_tmpr   r   r   g  r   )reverseZExitzNew bugr   zPSelect a bug to read (and possibly report more information) or report a new bug:zRead bug)r   r+   rP   r   r   r   r   r   )r   z No record of this package found.)r+   )"r   r   r   r   r	   r   r   r   r   r   Zget_reports	Exceptionrj   r   reprr   r   r   rO   rK   pendingr   Zbug_numr   mapsortedr   r   r   r   r   r@   Z	debianbtsZ	Bugreport)$packageZbtsr   r   r   r   r   r+   r   r   r   ZmboxZbuglistr   Zlatest_firstr   r   rootr   Zpkgnamer   countZsectitleZ	hierarchyre   errmsgtZbugsZbcountZbugr   pr   r   r   resr   r   r   handle_bts_query&  s    








*





r   ))r*   black
light grayZstandout)r-   r   	dark blue)r/   whiter   )rF   r   	dark cyan)rG   r   r   Zbold)rr   r   r   )r+   zdark redr   )rE   r   r   c                   C   s   dS )NTr   r   r   r   r   
initialize  s    r   c                   C   s
   t j S r   )sysstdinisattyr   r   r   r   	can_input  s    r   )NFFNN)TFN)NNFFr!   N)NNFN)N)NNFNNFFNr   r   N)NFr!   )NNN)NFr!   r   N)Nr!   FNr!   r   FNFNNF)8r   r   r   r   Zreportbug.exceptionsr   r   r   r   r   Zreportbug.urlutilsr   Ztext_uir	   r
   r   r   r   Zurwid.raw_displayr   ImportErrorr   r   ZISATTYZlog_messager   r   r   r   r   rs   r   objectr    rl   rp   rw   r   r   r@   Zfinal_messageZdisplay_reportZdisplay_failurer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   st   
	   

  
  

   
c

  
(    
q