U
    .c+#                     @   s   d dl Z d dlZd dlZ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
 d dlT ejej Zd	ddZG dd dejjZdS )
    N)	send_file)*   c                 C   s   d dd t| D S )N c                 s   s   | ]}t tV  qd S N)secretschoicealphabet).0_ r   &/opt/crm/modules/rdisk/models/index.py	<genexpr>   s     zgen_token.<locals>.<genexpr>)joinrange)lengthr   r   r   	gen_token   s    r   c                   @   s   e Zd ZdZedd Zedd Zedd Zdd	 Zd
d Z	dd Z
edd Zdd Zdd Zedd Zdd ZedddZedddZeddd Zeed!d"d#Zd$S )%CmfRFileTc                 C   s,   | j r
d S | jjr| jsd S tjd | j S Nz
rdisk/fileis_dirid
is_definedrequesthost_urlselfr   r   r   _download_url   s
    zCmfRFile._download_urlc                 C   s,   | j r
d S | jjr| jsd S tjd | j S r   r   r   r   r   r   _upload_url!   s
    zCmfRFile._upload_urlc                 C   s   | j S r   r   r   r   r   r   _code)   s    zCmfRFile._codec                 C   s   d S r   r   r   r   r   r   gen_id-   s    zCmfRFile.gen_idc                 C   s   d S r   r   r   r   r   r   gen_code0   s    zCmfRFile.gen_codec                 C   s   | j j| jj| d S r   )dpdata_driverwriter   value)r   datar   r   r   r%   3   s    zCmfRFile.writec                 C   s(   | j jj||| d}| j|dddgdS )N)modelr   namecode)fields)r#   r$   create_rfile_from_templateget)clsdirnamefilenamer   r   r   r   r,   6   s    z#CmfRFile.create_rfile_from_templatec                 O   sj  t jd}|rd}nt j d}|dkr|ddddd	}d
}| D ],\}}	| jjdd |	krD||} qqDtdnj|dkrd}|rd}nT|dkrd}nF|dkrd}n8|dkrd}n*|dkrd}n|dkrd}nt	d| t
jjj}
td|
 }|jddd d }| D ]b}| s,q| }t|}|d }|t k r`|  q|d }| j|kr|}qd }|r| }t|}tj|d! tj d"d#gd$}t|d }|t kr|j}n|  |sTtd%}d&}d'|
 d(| d(| }t j d)tt d* | jjd+}|| }|j!jdd, |"t#| || | | j }|S )-Nz	127.0.0.1z127.0.0.1:8081/webdav/z/webdav/Zmsoffice)xlsZxltxlmZxlsmxlsxZxltmZxltxods)	ZppsZpptZpptmZpptxZpotmZpotxZppsmZppsxZodp)	docdotZdocmdocxZdotmZdotxZodthtmlZrtf)ZvsdZvsdmZvsdxZvstmZvstxZodg)excelZ
powerpointwordZvisiozms-{}:ofe|u|https://.uF   Не могу открыть файл в пакете Microsoft OfficeZlibreofficez
webdavs://z	webdav://Zkeynotez
keynote://Z	office365zoffice365://Z
googledocszgoogledocs://Z	activecrmzactivecrm://folderzdav://u)   Неизвестный редактор: z/opt/rdisk/sessions/T)exist_okparentsexpr0   jwtRS256HS256)key
algorithmsr   W   Zs_r   access_token   )rA   r@   r0   )r>   )$r   host
startswithitemsr   r&   splitformat
ValueError	Exceptiongcurrent_personloginpathlibPathmkdiriterdiris_file	read_textujsonloadstimeunlinkr-   jwtlibdecodeAPPrsa_public_key
export_keyintr)   r   cookiesparent
write_textdumps)r   editorargskwargsZis_localhostZ
webdav_urlZms_office_type_to_ext_mapprotocolkvrR   Z	login_dirZ
found_pathpZp_textZp_datar@   r0   Zsession_nameZjson_strjsonZ
jwt_headertokensecreturlr   r   r   gen_url_for_webdav;   s    







zCmfRFile.gen_url_for_webdavc              
   K   sN   z| j j| | W n. tk
rB } ztt| W 5 d }~X Y nX | |S r   )r#   r$   renameFileExistsError	cmf_alertstrr-   )r   	target_idri   er   r   r   rs      s
    zCmfRFile.renamec                 C   s:   t jjdd}|s6t jd}t jd|dd}|  |S )Nz/Trashr   /ZTrashT)r)   rd   r   )modelsr   r-   save)r.   trashrootr   r   r   ensure_trash   s    zCmfRFile.ensure_trashc                 K   s8   |   }|j d| jj dtj d}| | d S )Nry   r   z%Y-%m-%d-%H%M%S)r~   r   r)   r&   datetimenowrs   )r   _kwargsr|   new_idr   r   r   move_to_trash   s    "zCmfRFile.move_to_trash)returnc              
   C   s   |  ddddg g }tjjj }|| jj}|	 j
D ]J}tjj|jd}||j| j d|j t|j|j ||jd q<d| j t| j| jj d	| jjd}|r|d
 d d |d< || |S )ua   
        Возвращает список версий файла со ссылками
        st_ctimest_sizedownload_urlabspath)rR   z	?version=)versionrq   r   create_dateauthorr      Nr<   r   )load_fieldsrz   r   r#   r$   get_rd	get_rfiler   r&   file_versionsversions	CmfPersonsgetr   appendr   r   rv   pathdate	isoformatr   r   r   )r   r   rdiskrfilever
cmf_authorZcurrent_verr   r   r   get_versions   s0    


zCmfRFile.get_versions)r   c                O   sL   t jjj }|| jj}| }|j	D ]}|j
|kr*||  qHq*d S r   )rz   r   r#   r$   r   r   r   r&   r   r   r   remove)r   r   rh   ri   r   r   Zversion_managerr   r   r   r   remove_version   s    


zCmfRFile.remove_version)os_typec                 C   sZ   |dkr4d| j  d| | d}| j  d|dS d| | }| j  d|dS d	S )
u   
        Возвращаем файл ссылку для локального открытия
        os_type: str - linux, windows
        linuxzl
                [Desktop Entry]
                Version=1.0
                Type=Link
                Name=zR
                Comment=
                Icon=user-bookmarks
                URL=z
            z.desktop)	file_namecontentz[InternetShortcut]
URL=z.urlN)r)   get_local_url)r   r   r   r   r   r   get_url_file   s    	zCmfRFile.get_url_file)r   r   c                 C   sj   d}|dkr|t jjj7 }n>|dkr4|t jjj7 }n&|dkrL|t jjj7 }ntd| || jj7 }|S )Nzfile://windowsr   macosu.   Тип ОС не поддерживается )rP   global_settingsZrdisk_windowsr&   Zrdisk_linuxZrdisk_macosrO   r   )r   r   resr   r   r   r      s    zCmfRFile.get_local_urlN)__name__
__module____qualname__no_cachepropertyr   r   r    r!   r"   r%   classmethodr,   rr   rs   r~   r   listr   rb   r   rv   r   r   r   r   r   r   r      s*   



u
	r   )r   )r   rS   r   stringtempfiler[   rA   r]   rY   flaskr   cmf.includeascii_lettersdigitsr	   r   cmfrz   	BaseModelr   r   r   r   r   <module>   s   
