U
    h                     @   s   d Z ddlZddlZddlmZmZmZ ddlmZmZ ddl	m
Z
 ddlZddlZe
d edZdd	 Zd
d Zdd Zdd Zedkre  dS )zX
Simple Windows ActivityWatch to Database Sync
No complex setup needed - just run this!
    N)datetime	timedeltatimezone)create_enginetext)load_dotenvz
.env.localDATABASE_URLc                  C   s  t d ztt} d}t d|  tj| ddd}|jdkrRt d W d	S | }t d
t| d t	t
j}|tdd }g }| D ]\}}d| krqt d| d z| d| d}	| | dd}
tj|	|
dd}|jdkrt d|  W q| }t dt| d |D ]}|di }|dd}|dd}|dk rhq2dd|d|d d!|d"d|d#d|t|d$d%|t|ddt	t
jd&
}|| q2W q tk
r } z t d'| d(|  W Y qW 5 d)}~X Y qX q|rt d*t| d+ |  }td,}d}|D ]N}z||| |d-7 }W n. tk
r } zW Y qLW 5 d)}~X Y nX qL|  t d.| d/ W 5 Q R  W d0S Q R X nt d1 W d0S W n8 tk
r } zt d2|  W Y d	S d)}~X Y nX d)S )3z<Pull data from your local ActivityWatch and save to databaseu.   🔄 Syncing ActivityWatch data to database...zhttp://127.0.0.1:5600u$   📡 Connecting to ActivityWatch at z/api/0/buckets
   )timeout   u@   ❌ Could not connect to ActivityWatch - make sure it's running!Fu   📦 Found z buckets   )ZhoursZafku   📈 Processing z...z/api/0/buckets/z/events)startendlimit)paramsr
   u"   ⚠️  Could not get events from z	   Found z eventsdatadurationr   	timestamp Zankita_gholapzAnkita GholapZappZapplicationZUnknowntitleurlZz+00:00)
Zdeveloper_idZdeveloper_nameZapplication_nameZwindow_titler   r   r   bucket_namecategoryZ
created_atu   ⚠️  Error processing z: Nu   💾 Saving z activities to database...a2  
                    INSERT INTO activity_records (
                        developer_id, developer_name, application_name,
                        window_title, url, duration, timestamp, bucket_name,
                        category, created_at
                    ) VALUES (
                        :developer_id, :developer_name, :application_name,
                        :window_title, :url, :duration, :timestamp, :bucket_name,
                        :category, :created_at
                    )
                    ON CONFLICT DO NOTHING
                   u   ✅ Successfully saved z activities!Tu   📝 No new activities to saveu   ❌ Error: )printr   r   requestsgetZstatus_codejsonlenr   nowr   Zutcr   itemslowerZ	isoformatZfromisoformatreplacecategorize_activityappend	ExceptionZconnectr   ZexecuteZcommit)ZengineZaw_urlZbuckets_responseZbucketsZend_timeZ
start_timeZactivities_to_saver   Zbucket_infoZ
events_urlr   Zevents_responseZeventsZeventr   r   r   ZactivityeZconnZinsert_queryZsaved_count r(   ./simple_sync.pysync_activitywatch_to_database   s    





 
r*   c                 C   sl   | sdS |   }d|ks(d|ks(d|kr,dS d|ksDd|ksDd|krHd	S d
|ks`d|ks`d|krdd
S dS dS )z#Simple categorization of activitiesunknownZcursorZvscodecodeZdevelopmentZchromeZfirefoxZedgeZbrowserZterminalcmdZ
powershellZgeneralN)r"   )Zapp_nameZ	app_lowerr(   r(   r)   r$      s    r$   c               
   C   s   t d t d t d zJt dt d d t rDt d nt d t d	 td
 qW nJ tk
r~   t d Y n0 tk
r }  zt d|   W 5 d} ~ X Y nX dS )z#Run continuous sync every 5 minutesu.   🚀 Starting continuous ActivityWatch sync...u   ⏹️  Press Ctrl+C to stopz2--------------------------------------------------u   
🔄 [z%H:%M:%Sz] Starting sync...u   ✅ Sync completed successfullyu   ❌ Sync failedu&   ⏳ Waiting 5 minutes for next sync...i,  u   
🛑 Sync stopped by useru   ❌ Unexpected error: N)	r   r   r    strftimer*   timesleepKeyboardInterruptr&   )r'   r(   r(   r)   continuous_sync   s    
r2   c                  C   sh   dd l } td td t| jdkr<| jd dkr<t  n(td t rTtd ntd td	 d S )
Nr   u    🔄 ActivityWatch Database Syncz(========================================r   z--continuouszRunning one-time sync...u4   
🎉 Sync completed! Check your dashboard for data.u5   
❌ Sync failed. Make sure ActivityWatch is running.z;
To run continuous sync: python simple_sync.py --continuous)sysr   r   argvr2   r*   )r3   r(   r(   r)   main   s    
r5   __main__)__doc__r   r   r   r   r   Z
sqlalchemyr   r   Zdotenvr   osr/   getenvr   r*   r$   r2   r5   __name__r(   r(   r(   r)   <module>   s   
w