
    ΋Ki                     h   d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	 d dl
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 dd
lmZmZmZ  ed      Zej9                  dd        e       Z ed      Zej?                  d ed      d       ejA                  d      d        Z!ejE                  de      defd       Z#ejE                  de      defd       Z$ejK                  d       ed      fdefd       Z&ejE                  de      defd        Z'ejE                  d!e      defd"       Z(ejK                  d!e       e	d       e	d       e	d#       e	d#       e	d#       e	d#       e	d#      fded$e)d%e)d&e)d'e)d(e)d)e)d*e)fd+       Z*ejK                  d,       e	d       e	d#      fd-e+d.e)fd/       Z,ejK                  d0       e	d      fd1e)fd2       Z-ejK                  d3       e	d       e	d       e	d      fd1e)d$e)d%e)fd4       Z.ejE                  d5      d$e)d%e)fd6       Z/y)7    N)Path)FastAPIRequest
UploadFileFileForm)HTMLResponseRedirectResponseStreamingResponse)StaticFiles)Jinja2Templates   )init_dbconnect)import_sms_xml)register_regex
run_search
log_searchzdata/uploadsT)parentsexist_okzapp/templates)	directoryz/staticz
app/staticstatic)namestartupc                      t                y )N)r        P/mnt/media_drive2/site-root/code.jetlifecdn.com/xml-tools/sms-search/app/main.pyr   r      s    	)r   /)response_classrequestc                     t        d      S )N
/dashboard)r
   r!   s    r   rootr%      s    	,	''r   z/uploadc                 2    t         j                  dd| i      S )Nzupload.htmlr!   	templatesTemplateResponser$   s    r   upload_pager*      s    		#	#MIw3G	HHr   .filec                   K   t        t        j                               }t        | d| j                   z  }|j	                  d      5 }	 | j                  d       d {   }|sn|j                  |       .	 d d d        t               }t        |       t        |t        |             |j                          t        dd      S 7 i# 1 sw Y   RxY ww)N_wbi   r#   /  status_code)inttime
UPLOAD_DIRfilenameopenreadwriter   r   r   strcloser
   )r+   tsdestfchunkconns         r   uploadr@       s      499;"	Admm_-	-$yy !
IIk**eggen	  		 
$s4y!**,	,C	88 + s1   AC	CC	 C:AC	CCCr#   c           	      l   t               }|j                  d      j                         d   }|j                  d      j                         }|j                  d      j                         }|j                  d      j                         }|j	                          t
        j                  d| ||||d      S )Nz"SELECT COUNT(*) AS c FROM messagesczASELECT * FROM search_history ORDER BY created_at_ms DESC LIMIT 20zSELECT b.*, m.address, m.date_ms, m.body
       FROM bookmarks b JOIN messages m ON m.id = b.message_id
       ORDER BY b.created_at_ms DESC LIMIT 20z SELECT * FROM tags ORDER BY namezdashboard.html)r!   totalrecent_searches	bookmarkstags)r   executefetchonefetchallr:   r(   r)   )r!   r?   rC   rD   rE   rF   s         r   	dashboardrJ   3   s    	$
,,;
<
E
E
G
L%LLGHJ  ll1 HJ	 
 
8	9	B	B	D$**,		#	#$4&7 
 r   z/searchc                 4    t         j                  d| g d      S )Nsearch.html)r!   resultsr'   r$   s    r   search_pagerN   J   s    		#	#MwSU3V	WWr    modequeryaddressmsg_type	thread_iddate_from_ms
date_to_msc           	          |xs d |dk7  r|nd |xs d |xs d |xs d d}t               }	t        |	       t        |	|||       t        |	|||d      }
|	j	                          t
        j                  d| |
|||d      S )NrO   )rR   typerT   rU   rV      limitrL   )r!   rM   rQ   rP   filters)r   r   r   r   r:   r(   r)   )r!   rP   rQ   rR   rS   rT   rU   rV   r\   r?   rM   s              r   	do_searchr]   N   s     $ BHD"d (D$' 
$T4(tT5'='**,		#	#M4 
 r   z	/bookmark
message_idnotec                     t               }|j                  dt        t        j                         dz        | |f       |j	                          |j                          t        dd      S )NzOINSERT OR IGNORE INTO bookmarks(created_at_ms, message_id, note) VALUES (?,?,?)  r#   r/   r0   r   rG   r2   r3   commitr:   r
   )r^   r_   r?   s      r   bookmarkrd   o   sS    	$,,Ut	j$/ ++-**,	,C	88r   z/tagr   c                     t               }|j                  d| j                         f       |j                          |j	                          t        dd      S )Nz+INSERT OR IGNORE INTO tags(name) VALUES (?)r#   r/   r0   )r   rG   striprc   r:   r
   )r   r?   s     r   
create_tagrg   z   s?    	$,,<tzz|oN++-**,	,C	88r   z/saved-searchc                     t               }|j                  d| t        t        j                         dz        ||df       |j	                          |j                          t        dd      S )Nz]INSERT INTO saved_searches(name, created_at_ms, mode, query, filters_json) VALUES (?,?,?,?,?)ra   z{}r#   r/   r0   rb   )r   rP   rQ   r?   s       r   save_searchri      sW    	$,,c	3tyy{T!"D%6 ++-**,	,C	88r   z/export.csvc                     t               t               t        | |i d      fd}t         |       d      S )Ni  rZ   c               3      K   d D ]`  } | d   xs dj                  dd      j                  dd      j                  dd      }| d	    d
| d    d| d    d| d    d| d    d
| d b j                          y w)Nz'id,address,date_ms,type,thread_id,body
bodyrO   "z""
 idz,"rR   z",date_ms,rX   rT   z"
)replacer:   )rrl   r?   rowss     r   genzexport_csv.<locals>.gen   s     
44 aio2&&sD199$DLLTSVWdwir!I,r!I,q61Q{^DTTVW[V\\_``a 	JJLs   A;A>ztext/csv)
media_type)r   r   r   r   )rP   rQ   rw   r?   rv   s      @@r   
export_csvry      s:    	$	D$r	6$ 
35Z	88r   )0osr3   pathlibr   fastapir   r   r   r   r   fastapi.responsesr	   r
   r   fastapi.staticfilesr   fastapi.templatingr   dbr   r   
import_xmlr   searchr   r   r   r4   mkdirappr(   mounton_eventr   getr%   r*   postr@   rJ   rN   r9   r]   r2   rd   rg   ri   ry   r   r   r   <module>r      s   	   < < O O + .   & : :.!
 
    -io6	 		)[<8x	 Hi  \*(' ( +( <0I I 1I )$(I 9z 9 9$ l3w  4, <0X X 1X )L1 3iCybr(82hH 
 	
     2@ +#Cyd2h 9 9 9 9 &9 9S 9 9 / I494PS9 9c 9S 9S 9 9 9S 9 9 9r   