3
`]                 @   sf   d dl m Z  d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	d dl
Z	G dd dZdd ZdS )    )globNc               @   sh   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdddZdd Z	dd Z
dd Zdd Zdd ZdS )QuirkChecker/usr/share/jockey/quirksc             C   s.   || _ || _g | _| j  | j | _d| _d S )Nz/usr/share/X11/xorg.conf.d)_handlerquirks_path_quirksget_quirks_from_pathget_system_info_system_info_xorg_conf_d_path)selfhandlerpath r   5/usr/lib/python3/dist-packages/Quirks/quirkapplier.py__init__!   s    
zQuirkChecker.__init__c             C   s|   g | _ tjj| jrfx`ttjj| jdD ]6}tjj|r*tj	d|  | j
|}|  j |7  _ q*W ntj	d| j  | j S )z5check all the files in a directory looking for quirks*z
Parsing %sz%s does not exist)r   osr   isdirr   r   joinisfileloggingdebugget_quirks_from_file)r   fZquirksr   r   r   r   )   s    
z!QuirkChecker.get_quirks_from_pathc             C   s   t jj|}|j S )z5check all the files in a directory looking for quirks)QuirksZquirkreaderZ	ReadQuirkZ
get_quirks)r   Z
quirk_filer   r   r   r   7   s    z!QuirkChecker.get_quirks_from_filec             C   s   t jj }|j S )zGet system info for the quirk)r   Z	quirkinfoZ	QuirkInfoZget_dmi_info)r   Z
quirk_infor   r   r   r	   =   s    
zQuirkChecker.get_system_infoc             C   s   d}xr|j j D ]d}x^|j | D ]P}| jj|r | jj||kr t|j | dkr tjd| jj||f  dS q W qW tjd |S )zSee if tags match system infoT   zFailure to match %s with %sFZSuccess)Z
match_tagskeysr
   getlenr   r   )r   quirkresulttagvalr   r   r   matches_tagsB   s    
zQuirkChecker.matches_tagsTc             C   s   x| j D ]~}| jj dd |jD krtjd|j  | j|r||r`tjd|j  | j	| qtjd|j  | j
| qtjd qW dS )z)Process quirks and do something with themc             S   s   g | ]}|j  j qS r   )lowerstrip).0xr   r   r   
<listcomp>R   s    z.QuirkChecker._check_quirks.<locals>.<listcomp>zProcessing quirk %szApplying quirk %szUnapplying quirk %szQuirk doesn't matchN)r   r   r%   r   r   r   idr$   info_apply_quirk_unapply_quirk)r   enabler    r   r   r   _check_quirksO   s    
zQuirkChecker._check_quirksc             C   s   | j d dS )zEnable all quirks for a handlerTN)r/   )r   r   r   r   enable_quirks_   s    zQuirkChecker.enable_quirksc             C   s   | j d dS )z Disable all quirks for a handlerFN)r/   )r   r   r   r   disable_quirksc   s    zQuirkChecker.disable_quirksc             C   s    d| j | j|jj jddf S )z$Return the path to the X config filez%s/10-%s-%s.conf -)r   r   r*   r%   replace)r   r    r   r   r   _get_destination_pathg   s    z"QuirkChecker._get_destination_pathc             C   s   | j |}tjddd}|j|j |j  tjj|j	}t
j|j tj|j	 yt
jd|  |j| W n tk
r   t
jd dS X dS )z!Get the xorg snippet and apply itwF)modedeletezCreating %szError during write()T)r5   tempfileZNamedTemporaryFilewriteZ	x_snippetclosexkitZ
xorgparserZParsernamer   r   Z
globaldictr   unlinkIOError	exception)r   r    destinationZtmp_fileZtmp_xkitr   r   r   r,   l   s    

zQuirkChecker._apply_quirkc             C   sN   | j |}tjd|  ytj| W n" ttfk
rH   tjd dS X dS )z%Remove the file with the xorg snippetzRemoving %s ...zCannot unlink destinationFT)r5   r   r   r   r>   OSErrorr?   r@   )r   r    rA   r   r   r   r-      s    

zQuirkChecker._unapply_quirkN)r   )T)__name__
__module____qualname__r   r   r   r	   r$   r/   r0   r1   r5   r,   r-   r   r   r   r   r       s   

r   c              C   s0   t ddd} | j  | j  ttjjt dS )NZnvidiaz/home/alberto/oem/jockey/quirks)r   r   )r   r0   r1   printr   r   abspath__file__)ar   r   r   main   s
    rJ   )r   r   sysr9   r   Zxkit.xutilsr<   Zxkit.xorgparserZQuirks.quirkreaderr   ZQuirks.quirkinfor   rJ   r   r   r   r   <module>   s   n