o
    Gh                     @   s"  d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZ dd	lmZmZ ed
eZededd Z edede!fddZ"ededd Z#ejddgdedd Z$ejddgdedd Z%dS )z
gallery.py

Purpose:
  Gallery pages and image deletion API. Uses the images_service to enumerate and
  group images by time.

Routes:
  - GET /galerija
  - GET /galerija/<int:camera_id>
  - GET /slika?rel=...
  - POST /api/image/delete
    N)	Blueprintrender_templaterequestredirecturl_forjsonifysessionabort   )login_required)get_db)STATIC_PATHUSER_PHOTOS_REAL)parse_ts_from_any	format_dtnormalize_to_static_user_photosbuild_media_urlresolve_media_tokenbuild_share_url)collect_user_imagesgroup_images_by_timegalleryz	/galerijac                  C   sZ   t td t t} t| }g }|D ]}dd |d D }||d |d qtd|dS )	Nuser_idc                 S   8   g | ]}t |d  |d  |d rt|d nddqS relts urlr   r   r   r   .0it r$   $/var/www/html/app_modules/gallery.py
<listcomp>#      8 zgallery_all.<locals>.<listcomp>itemstitler)   r(   zgallery_all.html)sections)r   r   r   r   r   appendr   )imagesgroupedr+   secr(   r$   r$   r%   gallery_all   s   r0   z/galerija/<int:camera_id>	camera_idc                 C   s&  t | }t }|dtd | f }|std |d }g }tjt	d}t
|D ]A\}}}	|	D ]9}
|
 ds<q2t|
\}}||krktj||
}tj|t	dd}|p_tj|}|t|||d	 q2q+t|}g }|D ]}d
d |d D }||d |d qutd| ||dS )Nz?SELECT camera_name FROM cameras WHERE user_id=? AND camera_id=?r     camera_namezUser-photos)z.jpgz.jpegz.pngz.gifz.webp\/r   c                 S   r   r   r    r!   r$   r$   r%   r&   A   r'   z"camera_gallery.<locals>.<listcomp>r(   r)   r*   zcamera_gallery.html)r1   r3   r+   )strr   executer   fetchoner	   ospathjoinr   walklowerendswithr   relpathreplacegetmtimer,   r   r   r   )r1   
cam_id_strdbrowr3   r-   rootdirpath_filesnamer   camabs_pathr   r.   r+   r/   r(   r$   r$   r%   camera_gallery(   s4   	rL   z/slikac                  C   s   t jjdtdd} | sttdS t| pt| }t|\}}|s%t	d t
 }|dtd |f }|s:t	d tdt||rEt|ndd	g|d
S )Nr   r   )typedefaultzgallery.gallery_allr2   5SELECT 1 FROM cameras WHERE user_id=? AND camera_id=?r   zimage_detail.htmlImage)	image_url	timestamptagsr   )r   argsgetr6   r   r   r   r   r   r	   r   r7   r   r8   r   r   r   )rel_or_tokenr   r   rJ   rC   ownerr$   r$   r%   image_detailF   s   $rX   z/api/image/deletePOST)methodsc                     s  t jddpi } t| ddstddddfS t\}}|s,tdd	ddfS t }|d
td |f	 }|sFtddddfS t
jt}drTtnt
jt}t
j|}||sntddddfS t
j|rt
j|}t
|t
jstddddfS zt
| W n# ty   tddddf Y S  ty   tddddf Y S w zB|dtd |f	 }	|	r|	d rdd |	d dD }
t
j  fdd|
D }|dd|td |f |  W n tjy   Y nw tddiS )NTsilentr   r   FNedostaje slika.successmessage  Neispravno ime datoteke.rO   r   Nedozvoljeno.  zUser-photos/zPutanja nije dozvoljena.z)Server nema dozvolu za brisanje datoteke.zNe mogu obrisati datoteku.i  z>SELECT file_paths FROM cameras WHERE user_id=? AND camera_id=?
file_pathsc                 S   s   g | ]
}|  r|  qS r$   )stripr"   pr$   r$   r%   r&   ~   s    z$api_delete_image.<locals>.<listcomp>,c                    s,   g | ]}t j| krt|kr|qS r$   )r9   r:   basenamer   rg   	name_onlyr   r$   r%   r&      s   , z?UPDATE cameras SET file_paths=? WHERE user_id=? AND camera_id=?r_   )r   get_jsonr   rU   r   r   r   r7   r   r8   r9   r:   r;   r   
startswithr   realpathexistsdirnameaccessW_OKremovePermissionErrorOSErrorsplitrj   commitsqlite3Error)datarG   rJ   rC   rW   rK   real_staticreal_abs
parent_dirrD   fpskeptr$   rk   r%   api_delete_imageY   sP   
r   z/share_linkc                  C   s  t jddpi } tt| dpd}t| dpd}tdt|d}|s/td	d
ddfS t	|\}}|s@td	dddfS t
 }|dtd |f }|sZtd	dddfS tjt|}tj|sptd	dddfS ddl}t| |d  }	t||	}
td|
|	dS )zGenerate a short-lived public share URL for an image owned by the current user.
    Body: { rel: 'User-photos/PICT_...', ttl_minutes: 30 }
    Tr[   r   r   ttl_minutesiN  r
   i  Fr]   r^   ra   rb   rO   r   rc   rd   zDatoteka ne postoji.r2   r   N<   )r_   r   
expires_at)r   rm   r   r6   rU   intmaxminr   r   r   r7   r   r8   r9   r:   r;   r   rp   timer   )r{   r   r   r   rJ   rC   rW   rK   r   expr   r$   r$   r%   user_generate_share_link   s(   
r   )&__doc__r9   ry   flaskr   r   r   r   r   r   r   r	   securityr   rC   r   pathsr   r   helpersr   r   r   r   r   r   images_servicer   r   __name__bprouter0   r   rL   rX   r   r   r$   r$   r$   r%   <module>   s2    ( 

/