
    dh                        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j?                  d      ed               Z ej?                  d      ede!fd              Z"ej?                  d      ed               Z#ej?                  ddg      ed               Z$ej?                  ddg      ed               Z%y)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            
      ,   t        t        d   t               t              } t	        |       }g }|D ]Q  }|d   D cg c]*  }t        |d         |d   |d   rt        |d         ndd, }}|j                  |d   |d       S t        d	|
      S c c}w )Nuser_iditemsrelts urlr   r   titler!   r   zgallery_all.html)sections)	r   r	   r   r   r   r   r   appendr   )imagesgroupedr#   secitr   s         FC:\Users\algun\Documents\ceba web\Ceba - Github\app_modules\gallery.pygallery_allr*      s     !!3VX{KF"6*GH AD  EL  AM  N  AMz|E3BuIdfgkdlYWYZ^W_M`rtu  AM  N#g,?@  -AA Ns   /Bz/galerija/<int:camera_id>	camera_idc           
         t        |       }t               }|j                  dt        d   | f      j	                         }|st        d       |d   }g }t        j                  j                  t        d      }t        j                  |      D ]  \  }}}	|	D ]  }
|
j                         j                  d      s#t        |
      \  }}||k(  s7t        j                  j                  ||
      }t        j                  j                  |t              j                  dd      }|xs t        j                  j!                  |      }|j#                  t%        |      ||d	         t'        |      }g }|D ]Q  }|d
   D cg c]*  }t%        |d         |d   |d   rt)        |d         ndd	, }}|j#                  |d   |d       S t+        d| ||      S c c}w )Nz?SELECT camera_name FROM cameras WHERE user_id=? AND camera_id=?r     camera_namezUser-photos)z.jpgz.jpegz.pngz.gifz.webp\/r   r   r   r   r   r!   r"   zcamera_gallery.html)r+   r.   r#   )strr   executer	   fetchoner
   ospathjoinr   walklowerendswithr   relpathreplacegetmtimer$   r   r   r   r   )r+   
cam_id_strdbrowr.   r%   rootdirpath_filesnamer   camabs_pathr   r&   r#   r'   r(   r   s                       r)   camera_galleryrG   (   s    YJ	B
**VY`ajYkmvXw
x  B  B  DCc
m$KF77<<]3DWWT]ED::<(()ST'-GBj 77<<6ggooh<DDT3O5277++H5oc&:3bQR  + #6*GH AD  EL  AM  N  AMz|E3BuIdfgkdlYWYZ^W_M`rtu  AM  N#g,?@  0IS^iqrr Ns   >/Gz/slikac                     t         j                  j                  dt        d      } | st	        t        d            S t        |       xs t        |       }t        |      \  }}|st        d       t               }|j                  dt        d   |f      j                         }|st        d       t        dt        |      |rt!        |      ndd	g|
      S )Nr   r   )typedefaultzgallery.gallery_allr-   5SELECT 1 FROM cameras WHERE user_id=? AND camera_id=?r   zimage_detail.htmlImage)	image_url	timestamptagsr   )r   argsgetr1   r   r   r   r   r   r
   r   r2   r	   r3   r   r   r   )rel_or_tokenr   r   rE   r>   owners         r)   image_detailrT   F   s     <<##ER#@L 5677
l
+
\/N|/\C$GBc
	BJJNQXYbQcehPijssuEc
./#:NkmZcdfZgsu  ~E  }F  LO  P  P    z/api/image/deletePOST)methodsc                     t        j                  d      xs i } t        | j                  dd            }|st	        ddd      dfS t        |      \  }}|st	        dd	d      dfS t               }|j                  d
t        d   |f      j                         }|st	        ddd      dfS t        j                  j                  t        |      }|j                  d      rt        n"t        j                  j!                  t              }t        j                  j!                  |      }|j                  |      st	        ddd      dfS t        j                  j#                  |      rit        j                  j%                  |      }	t        j&                  |	t        j(                        st	        ddd      dfS 	 t        j*                  |       	 |j                  dt        d   |f      j                         }
|
r|
d   r|
d   j1                  d      D cg c]#  }|j3                         s|j3                         % }}t        j                  j5                  |      }|D cg c]6  }t        j                  j5                  |      |k7  s&t        |      |k7  s5|8 }}|j                  ddj                  |      t        d   |f       |j7                          t	        ddi      S # t,        $ r t	        ddd      dfcY S t.        $ r t	        ddd      dfcY S w xY wc c}w c c}w # t8        j:                  $ r Y ew xY w)NTsilentr   r   FNedostaje slika.successmessage  Neispravno ime datoteke.rK   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_paths,z?UPDATE cameras SET file_paths=? WHERE user_id=? AND camera_id=?r]   )r   get_jsonr   rQ   r   r   r   r2   r	   r3   r4   r5   r6   r   
startswithr   realpathexistsdirnameaccessW_OKremovePermissionErrorOSErrorsplitstripbasenamecommitsqlite3Error)datar   rB   rE   r>   rS   rF   real_staticreal_abs
parent_dirr?   pfps	name_onlykepts                  r)   api_delete_imager}   Y   s    4(.BD
)$((5"*=
>C55GHI3NNs#FAs55OPQSVVV	BJJNQXYbQcehPijssuE5_EFKKww||K-H&)nn^&D""''JZJZ[fJgKww)H{+55OPQSVVV	ww~~hWW__X.
yyRWW-u9defhkkk	]IIhjjY\cdm\nps[tu~~  A3|$&),&7&=&=c&BP&Baggi1779&BCP((-I"ys!rww'7'7':i'GNmnoNptwNwAsDyJJX[^[c[cdh[ikrs|k}  @C  [D  EIIK It$%%#  	lu9defhkkk 	]u9UVWY\\\	] Q z == s[   >K, AL/ L%0L%%L/ ''L*L*L*"=L/ ,L"L"!L"%
L/ /MMz/share_linkc                     t        j                  d      xs i } t        t        | j	                  d      xs d            }t        | j	                  d      xs d      }t        dt        |d            }|st        d	d
d      dfS t        |      \  }}|st        d	dd      dfS t               }|j                  dt        d   |f      j                         }|st        d	dd      dfS t        j                  j!                  t"        |      }t        j                  j%                  |      st        d	dd      dfS ddl}t        |j'                               |dz  z   }	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 }
    TrY   r   r   ttl_minutesiN  r   i  Fr[   r\   r_   r`   rK   r   ra   rb   zDatoteka ne postoji.r-   r   N<   )r]   r    
expires_at)r   re   r   r1   rQ   intmaxminr   r   r   r2   r	   r3   r4   r5   r6   r   rh   timer   )ru   r   r   r   rE   r>   rS   rF   r   expr    s              r)   user_generate_share_linkr      s\    4(.BD
)#dhhuo.C*D
ECdhh}-9:Ka[%01K55GHI3NN$GB55OPQSVVV	BJJNQXYbQcehPijssuE5_EFKKww||K-H77>>(#55KLMsRR
diik
[2-
-C
#s
#CtCsCDDrU   )&__doc__r4   rs   flaskr   r   r   r   r   r   r	   r
   securityr   r>   r   pathsr   r   helpersr   r   r   r   r   r   images_servicer   r   __name__bprouter*   r   rG   rT   r}   r    rU   r)   <module>r      s   
  a a a $  0 J  J E y(# +B  B 
%&sc s  's8 (P  P" 
x0,&  1,&^ -&*E  +ErU   