
    0j              
           d dl Z d dlZd dlZdZd Zd ZdefdZdededz  fdZ	d	e
d
efdZd	e
fdZd	e
dedz  fdZd	e
defdZd	e
defdZd	e
de
de
de
de
f
dZd	e
defdZdefdZy)    Nzmaxservice.dbc                  j    dj                  t        j                  t        j                  d            S )N    )k)joinrandomchoicesstringdigits     $/var/www/html/maxservice/database.pygen_keyr      s     776>>&--1566r   c                  R  K   t        j                  t              4 d {   } | j                  d       d {    | j                  d       d {    dD ]h  \  }}|dk(  r | j                  d| d|        d {    +| j                  d| d|        d {    | j                  d| d|        d {    j | j	                          d {    d d d       d {    y 7 7 7 7 t#  Y xY w7 ]#  Y _xY w7 G#  Y xY w7 67 (# 1 d {  7  sw Y   y xY ww)Na  CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            access_key TEXT UNIQUE NOT NULL,
            telegram_chat_id TEXT,
            key_sent INTEGER DEFAULT 0,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP)a$  CREATE TABLE IF NOT EXISTS sessions (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            user_id INTEGER REFERENCES users(id),
            session_json TEXT,
            status TEXT DEFAULT 'pending',
            poll_interval INTEGER DEFAULT 300,
            mute_filter INTEGER DEFAULT 1,
            notify_telegram INTEGER DEFAULT 0,
            notify_webpush INTEGER DEFAULT 0,
            push_subscription TEXT,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            updated_at DATETIME DEFAULT CURRENT_TIMESTAMP)))
access_keyzTEXT UNIQUE)telegram_chat_idTEXT)key_sentINTEGER DEFAULT 0)notify_telegramr   )notify_webpushr   )push_subscriptionr   r   zALTER TABLE users ADD COLUMN  z ALTER TABLE sessions ADD COLUMN 	aiosqliteconnectDB_PATHexecutecommit)dbcoldefns      r   init_dbr#      sB      )    Rjj > ? 	? 	? jj > ? 	? 	?
 	IC
 l"::(EcU!D6&RSSS ::(EcU!D6&RSSS::(HQtf&UVVV	 iikA     	?	?$ TSVA       s   D'C-D'DC/DC1D$C5>C3?C5DC>C<C>#D=D>DDDDD''D(D'/D1D3C55C97D<C>>D DDD	DD'D$DD$ D'returnc            	      P  K   t        j                  t              4 d {   } t        d      D ]c  }t	               }| j                  d|f      4 d {   }|j                          d {   s	 d d d       d {     nd d d       d {    e | j                  df       d {    | j                          d {    t         j                  | _	        | j                  d|f      4 d {   }t        |j                          d {         cd d d       d {    cd d d       d {    S 7 7 7 7 7 # 1 d {  7  sw Y   +xY w7 7 7 l7 Q7 ?7 0# 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nd   z'SELECT id FROM users WHERE access_key=?z)INSERT INTO users (access_key) VALUES (?)&SELECT * FROM users WHERE access_key=?)r   r   r   ranger   r   fetchoner   Rowrow_factorydict)r    _keycurs       r   create_userr0   +   st      ) 
. 
.Rs 	A)Czz"KcVT  X[ \\^++    	
 jjDsfMMMiik"::FO 	. 	.SVclln,-	. 	. 	.
. 
. 
.+     	N	.,	.
.	. 	. 	.
. 
. 
. 
. 
.s:  F&D=F&0FE 
FE,E
-E2F=E>FEF,E-FE 0F5E"6F9E*E$E*F&E&'F+F&7E(8F& FEFFEEE	F F"F$E*&F(F&*E<	0E31E<	8F?F&
FF&F#FF#F&r.   c                   K   t        j                  t              4 d {   }t         j                  |_        |j                  d| f      4 d {   }|j                          d {   }|rt        |      nd cd d d       d {    cd d d       d {    S 7 ~7 O7 97 7 # 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nr'   r   r   r   r*   r+   r   r)   r,   )r.   r    r/   rows       r   get_user_by_keyr4   9   s       ) . .R"::FO 	. 	.SV&C #49	. 	. 	.. . .	.&	..	. 	. 	.. . . . .   C%BC%-CB!CB))B#*B)<CB%	CC%B'C%!C#B)%C'C%)B;	/B20B;	7C>C%	C
C%C"CC"C%user_idtg_idc                   K   t        j                  t              4 d {   }|j                  d|| f       d {    |j	                          d {    d d d       d {    y 7 I7 /7 7 # 1 d {  7  sw Y   y xY ww)Nz.UPDATE users SET telegram_chat_id=? WHERE id=?r   )r6   r7   r    s      r   set_telegramr9   @   sw       )  RjjIESZK[\\\iik  \   f   BA*BA2A,A2A.A2B$A0%B,A2.A20B2B8A;9B Bc                   K   t        j                  t              4 d {   }|j                  d| f       d {    |j	                          d {    d d d       d {    y 7 H7 /7 7 # 1 d {  7  sw Y   y xY ww)Nz&UPDATE users SET key_sent=1 WHERE id=?r   )r6   r    s     r   mark_key_sentr<   E   ss       )  RjjAG:NNNiik  N   sf   BA)BA1A+A1A-A1B#A/$B+A1-A1/B1B7A:8B?Bc                   K   t        j                  t              4 d {   }t         j                  |_        |j                  d| f      4 d {   }|j                          d {   }|rt        |      nd cd d d       d {    cd d d       d {    S 7 ~7 O7 97 7 # 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nz?SELECT * FROM sessions WHERE user_id=? ORDER BY id DESC LIMIT 1r2   )r6   r    r/   r3   s       r   get_sessionr>   J   s       ) . .R"::_biakl 	. 	.ps&C #49	. 	. 	.. . .	.&	..	. 	. 	.. . . . .r5   session_jsonc                   K   t        j                  t        d      4 d {   }|j                  d| f      4 d {   }|j	                          d {   }d d d       d {    r|j                  d|| f       d {    n|j                  d| |f       d {    |j                          d {    d d d       d {    y 7 7 7 |7 n# 1 d {  7  sw Y   ~xY w7 g7 L7 67 (# 1 d {  7  sw Y   y xY ww)Ng      >@)timeoutz'SELECT id FROM sessions WHERE user_id=?zaUPDATE sessions SET session_json=?, status='active', updated_at=CURRENT_TIMESTAMP WHERE user_id=?zLINSERT INTO sessions (user_id, session_json, status) VALUES (?, ?, 'active'))r   r   r   r   r)   r   )r6   r?   r    r/   r3   s        r   save_sessionrB   Q   s	      $7  2::G'T 	' 	'X[&C	' 	' **sw'  
 **^,'   iik  	'&	' 	' 	' 	'
 	   s    D	CD	C4CC4CCCC4&C'C4C,C4!C."C49C0:C4>D		C2
D	C4CC4C)	C C)	%C4.C40C42D	4D:C=;DD	statusc                   K   t        j                  t              4 d {   }|j                  d|| f       d {    |j	                          d {    d d d       d {    y 7 I7 /7 7 # 1 d {  7  sw Y   y xY ww)NzJUPDATE sessions SET status=?, updated_at=CURRENT_TIMESTAMP WHERE user_id=?r   )r6   rC   r    s      r   set_session_statusrE   d   sx       )  Rjjehnpwgxyyyiik  y   r:   poll_intervalmute_filterr   r   c           	        K   t        j                  t              4 d {   }|j                  d||||| f       d {    |j	                          d {    d d d       d {    y 7 L7 /7 7 # 1 d {  7  sw Y   y xY ww)NzgUPDATE sessions SET poll_interval=?, mute_filter=?, notify_telegram=?, notify_webpush=? WHERE user_id=?r   )r6   rF   rG   r   r   r    s         r   update_settingsrI   i   s       )  Rjj  CK.'RT 	T 	Tiik  	T   sg   B
A-B
A5A/ A5A1A5B
'A3(B
/A51A53B
5B;A><BB
subc                   K   t        j                  t              4 d {   }|j                  d|| f       d {    |j	                          d {    d d d       d {    y 7 I7 /7 7 # 1 d {  7  sw Y   y xY ww)Nz7UPDATE sessions SET push_subscription=? WHERE user_id=?r   )r6   rJ   r    s      r   save_push_subscriptionrL   o   sx       )  RjjRUXZaTbccciik  c   r:   c                    K   t        j                  t              4 d {   } t         j                  | _        | j                  d      4 d {   }|j                          d {   D cg c]  }t        |       c}cd d d       d {    cd d d       d {    S 7 7 W7 Ac c}w 7 !7 # 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)NzSELECT s.*, u.access_key, u.telegram_chat_id, u.key_sent
            FROM sessions s JOIN users u ON u.id=s.user_id
            WHERE s.status='active' AND s.session_json IS NOT NULL)r   r   r   r*   r+   r   fetchallr,   )r    r/   rs      r   get_all_active_sessionsrP   t   s       ) ; ;R":: F G 	; 	;JM+.<<>%9:DG:	; 	; 	;; ; ;	; &::	;;	; 	; 	;; ; ; ; ;s   C0B%C0+CB'CB4'B)(B4.B+ B4CB0CC0B2 C0'C)B4+B40C2C04C	:B=;C	C	C0CC0C-!C$"C-)C0)r   r   r
   r   r   r#   r,   r0   strr4   intr9   r<   r>   rB   rE   rI   rL   listrP   r   r   r   <module>rT      s       
7!F.4 ..s .td{ . C 
 
.s .td{ . 3 &c 3 
3 s  _b tw # C 
;t ;r   