U
    HI^                     @   st   d dl Z d dlZd dlmZ dd Zdd Zd dlmZ edd d d	lm	Z	 d dl
Z
d dlZG d
d de	jZdS )    Ndgettextc                 C   s
   t d| S )Nz
ibus-tabler   a r   '/usr/share/ibus-table/engine/factory.py<lambda>       r   c                 C   s   | S )Nr   r   r   r   r   r      r	   )require_versionIBusz1.0)r   c                       s6   e Zd ZdZd	 fdd	Zdd Z fddZ  ZS )
EngineFactoryzTable IM Engine Factory c                    s   |rZt j|dd| _t j|dd}tj||d| _| jj  | j| ji| _	nd | _i | _	|| _
tt| j| tjd d| _d| _d S )N.dbr   -user.dbfilenameZuser_db)Z
connectionZobject_pathr   )ospathbasenamereplaceZdbusnametabsqlitedbTabSqliteDbdbcommitdbdictbussuperr   __init__Zget_connectionr   ZPATH_FACTORY	engine_idengine_path)selfr   r   udb	__class__r   r   r   '   s    zEngineFactory.__init__c                 C   sF  t dd|}d}t d}||d| | _z| js|| jkrztjt	dd}W n   d}Y nX tj||d	 }|d
 }tj
|stjt	dd}tj||d	 }tj||d}|j  || j|< t| j| jt| j | j| }	|  jd7  _|	W S    td|  dd l}
|
  td| Y nX d S )Nz^table:r   z)/com/redhat/IBus/engines/table/%s/engine/z[^a-zA-Z0-9_/]_ZIBUS_TABLE_LOCATIONZtablesz/usr/share/ibus-table/tablesr   r   HOMEz.ibus/byo-tablesr      zfailed to create engine %sr   zCannot create engine %s)resubcompiler   r   r   r   r   joingetenvexistsr   r   r   tableZ	TabEnginer   strr   print	traceback	print_exc	Exception)r    Zengine_nameZengine_base_pathZ	path_pattZdb_dirr   r!   Z
byo_db_dirZ_sq_dbZenginer0   r   r   r   do_create_engine:   sH    

 
 

zEngineFactory.do_create_enginec                    s,   | j D ]}| j |   qtt|   dS )z*Destructor, which finish some task for IMEN)r   Z
sync_usrdbr   r   Zdestroy)r    Z_dbr"   r   r   
do_destroy^   s    
zEngineFactory.do_destroy)r   )__name__
__module____qualname____doc__r   r3   r4   __classcell__r   r   r"   r   r   %   s   $r   )r   r'   gettextr   r$   ZN_Zgir
   Zgi.repositoryr   r-   r   ZFactoryr   r   r   r   r   <module>   s   
