a
    Ad9                     @   sV   d dl Z 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 G dd dZdS )    N)generation_parameters_copypasteimagessysinfoerrorsui_extra_networksc                   @   s   e Zd Z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d Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"UserMetadataEditorc                 C   sv   || _ || _|| _| j d| jj d| _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d S )N_Z_edit_user_metadata)uitabnamepageid_pageid_partboxedit_name_inputbutton_edit	edit_nameedit_description
edit_noteshtml_filedatahtml_previewhtml_statusbutton_cancelbutton_replace_previewbutton_save)selfr	   r
   r    r   O/var/www/html/stable-diffusion-webui/modules/ui_extra_networks_user_metadata.py__init__   s     zUserMetadataEditor.__init__c                 C   s<   | j j|i }|dd }|s8d|ddi}||d< |S )Nuser_metadatadescription )r   itemsget)r   nameitemr   r   r   r   get_user_metadata#   s    z$UserMetadataEditor.get_user_metadatac                 C   s   d S Nr   r   r   r   r   )create_extra_default_items_in_left_column-   s    z<UserMetadataEditor.create_extra_default_items_in_left_columnc              	   C   s   t   t jdd@ t jdd| _t jddd| _t  | _|   W d    n1 s\0    Y  t jdd	d
 t  | _	W d    n1 s0    Y  W d    n1 s0    Y  d S )N   )scalezextra-network-nameelem_classesDescription   labellines   r   )r*   	min_width)
grRowColumnHTMLr   Textboxr   r   r(   r   r'   r   r   r   create_default_editor_elems0   s    

&z.UserMetadataEditor.create_default_editor_elemsc                 C   sz   t jdd< t d| _t jddd| _t jddd| _W d    n1 sN0    Y  t jdd| _| jjd d	d
 d S )Nzedit-user-metadata-buttonsr+   ZCancelzReplace previewprimary)variantSavezedit-user-metadata-status
closePopup)fn_js)	r4   r5   Buttonr   r   r   r7   r   clickr'   r   r   r   create_default_buttons<   s    .z)UserMetadataEditor.create_default_buttonsc                 C   sh   | j j|i }|dd }|sHtj|d \}}| j |}||d< |r`dt| d}nd}|S )NpreviewfilenamezR
            <div class='card standalone-card-preview'>
                <img src="z2" class="preview">
            </div>
            z0<div class='card standalone-card-preview'></div>)	r   r!   r"   ospathsplitextfind_previewhtmlescape)r   r#   r$   Zpreview_urlrD   r   rC   r   r   r   get_card_htmlG   s    
z UserMetadataEditor.get_card_htmlc                 C   s:   | j  D ]"}t||r
tj||  S q
tj|S r&   )r    allowed_directories_for_previewsr   path_is_parentrE   rF   relpathbasename)r   rF   parent_pathr   r   r   relative_path\   s    z UserMetadataEditor.relative_pathc              
   C   s   | j j|i }z^|d }|dd }t|}d| |fdt|jfd|fdt	j	
|jdfg}|W S  ty } z"t|d|  g W  Y d }~S d }~0 0 d S )	NrD   	shorthashz
Filename: zFile size: zHash: z
Modified: z%Y-%m-%d %H:%Mzreading info for )r   r!   r"   rE   statrQ   r   pretty_bytesst_sizedatetimefromtimestampst_mtimestrftime	Exceptionr   display)r   r#   r$   rD   rR   statsparamser   r   r   get_metadata_tablec   s    
z%UserMetadataEditor.get_metadata_tablec              
   C   s   |  |}z| |}W n: tyR } z"t|d|  g }W Y d }~n
d }~0 0 dddd |D  d }t||dd|| 	||ddfS )	Nzreading metadata info for z<table class="file-metadata">r    c                 s   s,   | ]$\}}|d urd| d| dV  qd S )Nz<tr><th>z	</th><td>z
</td></tr>r   ).0r#   valuer   r   r   	<genexpr>       z@UserMetadataEditor.put_values_into_components.<locals>.<genexpr>z</table>r   notes)
r%   r_   rZ   r   r[   joinrI   rJ   r"   rK   )r   r#   r   r]   r^   tabler   r   r   put_values_into_componentsv   s    
z-UserMetadataEditor.put_values_into_componentsc                 C   sr   | j j|i }|dd }tj|\}}t|d ddd }tj||dd W d    n1 sd0    Y  d S )NrD   z.jsonwutf8)encodingr.   )indent)	r   r!   r"   rE   rF   rG   openjsondump)r   r#   metadatar$   rD   rO   extfiler   r   r   write_user_metadata   s
    z&UserMetadataEditor.write_user_metadatac                 C   s*   |  |}||d< ||d< | || d S )Nr   rd   )r%   rr   )r   r#   descrd   r   r   r   r   save_user_metadata   s    
z%UserMetadataEditor.save_user_metadatac                 C   sP   |j || jg|g djd dt| jj d t| j d | jgg d d S )Nr>   inputsoutputsz<function(name){closePopup(); extraNetworksRefreshSingleCard(,	, name);}r>   r?   rv   rw   )rA   r   thenrm   dumpsr   r#   r
   )r   buttonfunc
componentsr   r   r   setup_save_handler   s
    .z%UserMetadataEditor.setup_save_handlerc                 C   s~   |    tjddd| _|   | jj| j| jg| j	| j
| j| j| jgdjdd g | jgd | | j| j| j
| jg d S )NNotesr.   r/   ru   c                   S   s   t jddS )NT)visible)r4   updater   r   r   r   <lambda>   rc   z2UserMetadataEditor.create_editor.<locals>.<lambda>)r9   r4   TextArear   rB   r   rA   rg   r   r   r   r   r   r{   r   r   r   rt   r'   r   r   r   create_editor   s     z UserMetadataEditor.create_editorc                 C   sx   t jd| jddR}|| _t jdd| j dd| _t jdd| j dd| _|   W d    n1 sj0    Y  d S )	NFzedit-user-metadata)r   elem_idr,   zEdit user metadata card id_name)r   r   zEdit user metadata_button)	r4   Boxr   r   r8   r   r@   r   r   )r   r   r   r   r   	create_ui   s
    zUserMetadataEditor.create_uic           	      C   s   t |dkr| |dfS | jj|i }t|}|dk r>dn|}|t |krZt |d n|}||dkrl|nd }t|}t	|\}}t
|||d  | |dfS )Nr   z2There is no image in gallery to save as a preview.r2   local_previewr    )lenrK   r   r!   r"   intr   image_from_url_textr   read_info_from_imagesave_image_with_geninfo)	r   indexgalleryr#   r$   img_infoimagegeninfor!   r   r   r   save_preview   s    
zUserMetadataEditor.save_previewc                 C   s`   | j j| jd| j|| jg| j| jgdjd dt| j	j
 d t| j d | jgg d d S )Nz:function(x, y, z){return [selected_gallery_index(), y, z]}rz   z.function(name){extraNetworksRefreshSingleCard(rx   ry   )r   rA   r   r   r   r   r{   rm   r|   r   r#   r
   )r   r   r   r   r   setup_ui   s    
$zUserMetadataEditor.setup_uiN)__name__
__module____qualname__r   r%   r(   r9   rB   rK   rQ   r_   rg   rr   rt   r   r   r   r   r   r   r   r   r   r      s    
	r   )rV   rI   rm   os.pathrE   gradior4   modulesr   r   r   r   r   r   r   r   r   r   <module>   s   