U
    [Mh)                     @   s<   d Z ddlZddlmZmZ eeeee f dddZdS )zD
Project Extractor - Extract project information from activity data
    N)DictOptional)activity_datareturnc              	      s  |  ddpd  |  ddp"d|  dd}d kpVd kpVd kpVd k}|  d	d
kpztfdddD }|s|rddddS t fdddD rtd}|rd|d dddS td}tdd |D d}|rd| dddS ddddS ddddddg}tfd d|D rtd!}|rfd"|d dd#dS td$}td%d |D d}|rd"| dd#dS d&dd#dS d'd(d)d*d+g}	t fd,d|	D rd-ksd.kr"td/}
|
r|
dp|
d0nd1}d-| d2d3dS td4}|rV|dpH|d0}|d2d5dS d6}|rr|d7  nd}|rt	|d0kr|d2d8dS d9d2d:dS d;d<d=d>d?d@dAdBdCg	}t fdDd|D rdE}t|tj
}|r|d }|d0 }|dF|dS dGdH d6D }t	|d0krH|dI dF|d7 dS t	|dkrxt	|d7 d0krx|d7 dFdJdS dKdFdFdS dLdMdNdOdPdQg}t fdRd|D stfdSddTD rvtdUtj
}|r2|dp|dVpdW}|d0pd}|rdX| dY| ndX| }|dWdWdS tdZ}td[d |D d}|rjdX| dWdWdS d\dWdWdS d]d^d_g}t fd`d|D stfdaddbD r"tdctj
}|rdd|d dedfdS tdg}tdhd |D d}|rdd| dedfdS dededfdS |r`|didjdj}t	|dkr`|dk }|dF|dI dS rt	dVkrd6d7  }t	|dVkr|dldmdS |  drt	| d dVkr| d dnd}|dldodS ddddS )pz{
    Extract project information from activity data
    Returns dict with project_name, project_type, and project_file
    Zapplication_name window_title	file_pathlocklockedZlockappZlogonuicategoryZentertainmentc                 3   s   | ]}|   kV  qd S Nlower).0Zwordr    ./project_extractor.py	<genexpr>   s     z'extract_project_info.<locals>.<genexpr>)ZyoutubeZnetflixZspotifyZmusicN)project_nameZproject_typeZproject_filec                 3   s   | ]}| kV  qd S r   r   )r   Zftp_appapp_namer   r   r      s     )Z	filezillaZwinscpZftpz1([a-zA-Z0-9.-]+\.[a-zA-Z]{2,}|\d+\.\d+\.\d+\.\d+)zFTP:    zServer ManagementzServer Connectionz
[\s\-\/\\]c                 s   s.   | ]&}t |d krtd|tjs|V  qdS )   zfilezilla|ftpNlenrematchIr   partr   r   r   r   '   s     zFileZilla/FTPZcpanelZpleskZhostingZpanelZwhmZdirectadminc                 3   s   | ]}|   kV  qd S r   r   r   keywordr   r   r   r   8   s     z([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})z	Hosting: zControl Panelz[\s\-\/]c                 s   s.   | ]&}t |d krtd|tjs|V  qdS )r   zcpanel|plesk|hosting|panelNr   r   r   r   r   r   D   s     zcPanel/HostingZchromeZfirefoxZedgeZsafaribrowserc                 3   s   | ]}| kV  qd S r   r   )r   r"   r   r   r   r   U   s     z
localhost:z
127.0.0.1:z"localhost:(\d+)|127\.0\.0\.1:(\d+)   unknownzWeb DevelopmentzLocal Developmentz1https?://([^/\s]+)|([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})ZWebsitez - r   zWeb PagezWeb BrowsingzBrowser ActivityZcursorZvscodecodeZpycharmZintellijZsublimeZatomZvimZemacsc                 3   s   | ]}| kV  qd S r   r   )r   Zider   r   r   r   |   s     zW^(.+?)\s*-\s*(.+?)\s*-\s*(Visual Studio Code|Cursor|Code|PyCharm|IntelliJ|Sublime|Atom)ZDevelopmentc                 S   s(   g | ] }|rt d |t js| qS )z<Visual Studio Code|Cursor|Code|PyCharm|IntelliJ|Sublime|Atom)r   r   r   stripr   r   r   r   
<listcomp>   s     z(extract_project_info.<locals>.<listcomp>z	Code FilezIDE WorkZdatagripZpgadminZ
phpmyadminZmysqlZ
postgresqlZmongodbc                 3   s   | ]}| kV  qd S r   r   )r   Zdb_appr   r   r   r      s     c                 3   s   | ]}|   kV  qd S r   r   r    r   r   r   r      s     )ZdatabaseZsqlz=([a-zA-Z0-9_-]+)@([a-zA-Z0-9.-]+)|([a-zA-Z0-9_-]+)\s*databaser   ZDatabasezDB: @z[\s\-@]c                 s   s.   | ]&}t |d krtd|tjs|V  qdS )r   zdatagrip|pgadmin|mysql|databaseNr   r   r   r   r   r      s     zDatabase WorkpostmanZinsomniarestc                 3   s   | ]}| kV  qd S r   r   )r   Zapi_appr   r   r   r      s     c                 3   s   | ]}|   kV  qd S r   r   r    r   r   r   r      s     )Zapir*   z+([a-zA-Z0-9_-]+)\s*(API|Collection|Request)zAPI: zAPI DevelopmentzAPI Testingz[\s\-]c                 s   s.   | ]&}t |d krtd|tjs|V  qdS )r   zpostman|insomnia|apiNr   r   r   r   r   r      s     \/ZWorkZActivityz.exeZApplication)getr   anyr   searchgroupsplitnextr&   r   r   replace)r   r   Zis_system_lockZis_entertainmentZserver_matchZtitle_partsZmeaningful_partZhosting_keywordsZdomain_matchZbrowser_appsZ
port_matchZportZ	url_matchdomainZ
first_partZide_appsZide_patternZ	ide_match	file_namer   Zdb_appsZdb_matchZdb_nameZserverZapi_appsZ	api_match
path_partsZ
parent_dirZclean_titleZ	app_cleanr   )r   r   r   extract_project_info   sd    
  
r9   )__doc__r   typingr   r   strr9   r   r   r   r   <module>   s   