U
    	vh5                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dl	T d dl
Z
d dlZd dlmZ d dlZG dd dejjZdS )    N)Path)*)datetimec                   @   sZ   e Zd ZdZejjdd Zdd Zdd Z	dd	 Z
dddZdd Zdd Zdd ZdS )ConverterView/c              
   C   sj   t jddd z|  }t jddd |W S  tk
rd } zt jd| dd |W 5 d }~X Y nX d S )Nu3   Начало обработки POST-запросаINFOlevelu9   Завершена обработка POST-запросаu0   Ошибка обработки запроса: ERROR)gdebug_process_post	Exception)selfresulte r   "./modules/converter/views/index.pypost   s    zConverterView.postc              
   C   s   t jddd td}| spztjddd W n> tjk
rn   | sjd| }t j|d	d t|Y nX ztjd
ddddgddd W n> tjk
r } zt jd|j	 d	d |W 5 d }~X Y nX td| d}t
d| t jddd |S )Nu>   Начало копирования профиля LibreOfficeDEBUGr   z'/root/.config/libreoffice/4/user/configlibreoffice   timeoutu-   Не найден профиль libreoffice r
   rsyncz-az--deletez'/opt/eva-converter/libreoffice_scripts/z'/root/.config/libreoffice/4/user/basic/<   T)r   checkuF   Ошибка синхронизации скриптов LibreOffice: r   z/.lo_profilez/root/.config/libreoffice/4/u/   Профиль LibreOffice скопирован)r   r   r   exists
subprocessrunTimeoutExpiredr   CalledProcessErrorstderrshutilcopytree)r   tmp_dirZprofile_patherrr   lo_profile_dirr   r   r   _copy_lo_profile    s2    

 
zConverterView._copy_lo_profilec           	   
   C   s  t jd| d| dd | |}dddd| d	d
|t|d|g
}zBtj||dddd}|jdkrt jd|j dd tdW nv tj	k
r } zt jd|j dd |W 5 d }~X Y n: t
k
r } zt jd| dd |W 5 d }~X Y nX t jd| dd d S )Nu>   Запуск конвертации LibreOffice: формат=u   , файл=r   r   r   
--headless--norestore-env:UserInstallation=file://-env:SingleAppInstance=falsez--convert-toz--outdirT)r   r   Zcapture_outputtextr   u<   LibreOffice завершился с ошибкой. stderr: r
   u3   LibreOffice завершился с ошибкой.u'   Ошибка вызова libreoffice: uI   Непредвиденная ошибка при конвертации: u@   Завершена конвертация LibreOffice: файл=)r   r   r(   strr   r   
returncoder"   ZSubprocessErrorr!   r   )	r   	file_path	to_format
output_dirr   r'   cmdr   r   r   r   r   _convert_with_libreofficeA   s2    

z'ConverterView._convert_with_libreofficec           	      C   sr  t jd| dd | |}zTtjdddddd	| d
t|d| dg	ddd}|j|d}|dkrptdW nT tjk
r } z4t	
t	|jtj t	
t	|jtj |W 5 d }~X Y nX t|d }z*tjdddt|dg|dddd W n@ tjk
r> } zt jd|j dd |W 5 d }~X Y nX | r\t jddd |S t jddd d S d S )NuZ   Начало конвертации многостраничной таблицы в PDF: r   r   z/usr/bin/libreofficer)   z--nologoz--nofirststartwizardr*   r+   r,   z&macro:///Standard.Module1.ExportToPdf()T)Zstart_new_sessionZ	close_fdsr   r   u;   Ошибка запуска libreoffice с макросомzfullview.tar tarz-cfzfullview_page*.*r   )cwdr   r   shellu,   Ошибка создания архива: r
   u^   Завершена конвертация многостраничной таблицы в PDFu   Архив не найден)r   r   r(   r   Popenr.   waitr   r    oskillpggetpgidpidsignalSIGTERMSIGKILLr   r   joinr!   r"   r   )	r   r0   r2   r   r'   procretr   archive_pathr   r   r   _convert_multiple_sheets_to_pdff   sP    


    

z-ConverterView._convert_multiple_sheets_to_pdf    c              	   C   s^   t jd| dd t|d"}||}|s0q<|| q W 5 Q R X t jd| dd d S )Nu.   Начало сохранения файла: r   r   wbu*   Файл успешно сохранён: )r   r   openreadwrite)r   Zsource_fileZtarget_pathZ
chunk_sizefchunkr   r   r   _save_file_in_chunks   s    
z"ConverterView._save_file_in_chunksc                 C   s   ddddg}||kS )Nzapplication/vnd.ms-excelzAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetz.application/vnd.oasis.opendocument.spreadsheetztext/csvr   )r   mimetypeZspreadsheet_mimetypesr   r   r   _is_spreadsheet   s    zConverterView._is_spreadsheetc                    s@   t jd  dd  fdd}td||}t jddd |S )Nu?   Встраивание изображений из папки: r   r   c              
      s   |  d}t | }| rxt|dJ}| }t|d}t	|d pRd}d| d| dW  5 Q R  S Q R X |  dS )	N   rbutf-8r   z	image/pngz
src="data:z;base64,")
groupr   r   rJ   rK   base64Z	b64encodedecode	mimetypesZ
guess_type)matchZimg_srcZimg_pathZimg_fileZimg_dataZ
img_base64Z	mime_typehtml_dirr   r   replace_image_tag   s    
$z6ConverterView._embed_images.<locals>.replace_image_tagzsrc=["\'](.*?)["\']u@   Завершено встраивание изображений)r   r   resub)r   html_contentr\   r]   r   r   r[   r   _embed_images   s
    zConverterView._embed_imagesc                 C   s  t jddd tjdd}tjd j}|dkrF|dksB| |rFd	nd
}t	 R}t
jd|d d d. t jd| dd t|dtjd   }| tjd | |dkr| |||}|rtj|W  5 Q R  W  5 Q R  S |dkrb|dkrbttjd }t|d }t|d}	|	|j W 5 Q R X tj|W  5 Q R  W  5 Q R  S |dkr| |r~d}
n|dkrd}
nd}
n|}
| ||
|| t|d|dd   }| r*|dkr*t|ddd}	|	 }W 5 Q R X | ||}t|ddd}	|	| W 5 Q R X | rlt jd| d d tj|W  5 Q R  W  5 Q R  S t jd!| d"d W 5 Q R  W 5 Q R  d S W 5 Q R X W 5 Q R X d S )#Nu   Старт _process_post()r   r   formatZpdffileZhtmlzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentiX  i,  zlibreoffice-convert-document      r   u8   Создана временная директория: ZpreviewsuffixZ
pdf_sheetszresult.htmlzw+z html:HTML (StarCalc):EmbedImagesz'application/vnd.oasis.opendocument.textz"html:XHTML Writer File:EmbedImageszpreview.:r   rrT   )encodingwu,   Отправка файла клиенту: r   u1   Файл результата не найден: r
   )r   r   ZrequestvaluesgetfilesrP   rQ   tempfileZTemporaryDirectoryZcmfutilZCmfLockr   rO   rG   flaskZhelpersZ	send_filemammothZconvert_to_htmlrJ   rL   valuer4   splitr   rK   ra   )r   ZrformatZfile_mimetyper   r%   r0   rF   r   Zres_pathrM   r1   r`   Zembedded_htmlr   r   r   r      sX    &$$


$zConverterView._process_postN)rH   )__name__
__module____qualname__Z__url__cmfviewsactionr   r(   r4   rG   rO   rQ   ra   r   r   r   r   r   r      s   
!%0

r   )r   r<   r@   rn   pathlibr   rY   rW   r^   Zcmf.includerp   r#   r   Zflask.helpersro   rv   rw   ZBaseViewr   r   r   r   r   <module>   s   