ó
È”Mc           @   sŒ  d  d l  m Z d  d l Td  d l Z d  d l Z d  d l Z y d  d l Z Wn e k
 rg d Z n Xd e	 f d „  ƒ  YZ
 d e	 f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d d „ Z e j d e ƒ d d „ Z e j d e ƒ d „  Z e j d e ƒ d „  Z e j d e ƒ d „  Z e j d e ƒ d S(   iÿÿÿÿ(   t   compareFiles(   t   *Nt   MediaSetc           B   s}   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z	 e d „ Z
 d d „ Z d	 „  Z d
 „  Z d „  Z RS(   c         C   s    g  |  _  i  |  _ |  j ƒ  d  S(   N(   t   _mediast   _processcachet   discover(   t   self(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   __init__$   s    		c         C   s•   |  j  ƒ  |  j 2|  j j ƒ  i  } x] t j d ƒ D]L } xC | D]; } | j ƒ  } | | k rA | | | <|  j j | ƒ qA qA Wq4 W|  j j ƒ  d  S(   Ns   discover-medias(	   t   restoreStateR   R   t   cleart   hookst   callt   getMountPointt   appendt   sort(   R   t   mountpointst   lstt   mediat
   mountpoint(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   )   s    

c         C   s"   x |  j  D] } | j ƒ  q
 Wd  S(   N(   R   t
   resetState(   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   6   s    c         C   s"   x |  j  D] } | j ƒ  q
 Wd  S(   N(   R   R   (   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   :   s    c         C   s"   x |  j  D] } | j ƒ  q
 Wd  S(   N(   R   t   mount(   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   mountAll>   s    c         C   s"   x |  j  D] } | j ƒ  q
 Wd  S(   N(   R   t   umount(   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt	   umountAllB   s    c         C   s_   t  j j | ƒ } xF |  j D]; } | j ƒ  } | | k sS | r | j | d ƒ r | Sq Wd  S(   Nt   /(   t   ost   patht   normpathR   R   t
   startswitht   None(   R   R   t   subpathR   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   findMountPointF   s    c         C   se   t  j j | ƒ } xL |  j D]A } | j ƒ  } | r | | k sY | r | j | d ƒ r | Sq Wd  S(   NR   (   R   R   R   R   t	   getDeviceR   R   (   R   R   R   R   t   device(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt
   findDeviceO   s    %c         C   sŸ   | j  d ƒ r | d } n  x | d  d k r< | d } q Wx[ |  j D]P } | j ƒ  rG | j | ƒ } t j j | ƒ r | s t | | ƒ r— | SqG qG Wd  S(   Ns   localmedia:i   i   s   //i   (	   R   R   t	   isMountedt   joinPathR   R   t   isfileR    R   (   R   R   t   comparepathR   t   filepath(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   findFileX   s    c         C   s¥  t  j j | ƒ } | |  j k rN |  j j | ƒ } | r›| j | ƒ } q›nM|  j | d t ƒ} | s |  j | d t ƒ} n  | r° | j	 ƒ  | j | ƒ } | |  j | <në t  j j
 } g  } | } xÐ | d k r~| j | ƒ | | ƒ rixi t j d | ƒ D]U } | r| j	 ƒ  |  j j | ƒ | j | ƒ } |  j j t j | | ƒ ƒ PqqW| riPqin  t  j j | ƒ } qË W|  j j t j | d  ƒ ƒ | | f S(   NR   R   s   discover-device-media(   R   R   t   dirnameR   t   gett   convertDevicePathR   t   TrueR"   R   R%   R   R
   R   R   t   updatet   dictt   fromkeysR   (   R   R'   R)   R   R%   t   pathsR   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   processFilePathe   s>    

	c         C   s,   t  j d ƒ } | r( |  j | d t ƒSd  S(   Ns   default-localmediaR   (   t   sysconfR*   R   R,   R   (   R   t   default(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt
   getDefault‰   s    c         C   s   t  |  j ƒ S(   N(   t   iterR   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   __iter__   s    N(   t   __name__t
   __module__R   R   R   R   R   R   t   FalseR   R"   R   R(   R1   R4   R6   (    (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   "   s   									$	t   Mediac           B   s¿   e  Z d  Z d d d e d „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z RS(   iè  c         C   sG   t  j j | ƒ |  _ | |  _ | |  _ | |  _ | |  _ |  j ƒ  d  S(   N(	   R   R   R   t   _mountpointt   _devicet   _typet   _optionst
   _removableR   (   R   R   R!   t   typet   optionst	   removable(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   –   s    				c         C   s   |  j  ƒ  |  _ d  S(   N(   R#   t   _wasmounted(   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   Ÿ   s    c         C   s$   |  j  r |  j ƒ  n
 |  j ƒ  d  S(   N(   RC   R   R   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   ¢   s    	c         C   s   |  j  S(   N(   R;   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   ¨   s    c         C   s   |  j  S(   N(   R<   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR    «   s    c         C   s   |  j  S(   N(   R=   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   getType®   s    c         C   s   |  j  S(   N(   R>   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt
   getOptions±   s    c         C   s   |  j  S(   N(   R?   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   isRemovable´   s    c         C   s   |  j  S(   N(   RC   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt
   wasMounted·   s    c         C   s‡   t  j j d ƒ s@ |  j r. t  j j |  j ƒ St t d ƒ ‚ n  x@ t d ƒ D]2 } | j ƒ  d  \ } } } | |  j k rM t	 SqM Wt
 S(   Ns   /proc/mountss   /proc/mounts not foundi   (   R   R   R%   R;   t   ismountt   Errort   _t   opent   splitR,   R9   (   R   t   lineR!   R   R@   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR#   º   s    	c         C   s   t  S(   N(   R,   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   Å   s    c         C   s   t  S(   N(   R,   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   È   s    c         C   s<   |  j  r8 t j d |  j  ƒ \ } } | d k r8 t Sn  t S(   Ns   eject %si    (   R<   t   commandst   getstatusoutputR,   R9   (   R   t   statust   output(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   ejectË   s    		c         C   sY   | j  d ƒ r | d } n  x$ | rB | d d k rB | d } q Wt j j |  j | ƒ S(   Ns   localmedia:/i   i    R   i   (   R   R   R   t   joinR;   (   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR$   Ó   s
    c         C   s]   | j  d ƒ r | d } n  x$ | rB | d d k rB | d } q Wt j j d |  j | ƒ S(   Ns   localmedia:/i   i    R   i   s   file://(   R   R   R   RS   R;   (   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   joinURLÚ   s
    c         C   sk   | j  |  j ƒ rg | t |  j ƒ } x$ | rK | d d k rK | d } q( Wt j j |  j | ƒ } n  | S(   Ni    R   i   (   R   R<   t   lenR   R   RS   R;   (   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR+   á   s    c         C   sN   |  j  ƒ  rJ |  j | ƒ } t j j | ƒ r4 | sC t | | ƒ rJ t Sn  t S(   N(   R#   R$   R   R   R%   R    R,   R9   (   R   R   R&   R'   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   hasFileé   s    c         C   s   |  j  | j  k  S(   N(   t   order(   R   t   other(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   __lt__ñ   s    N(   R7   R8   RW   R   R9   R   R   R   R   R    RD   RE   RF   RG   R#   R   R   RR   R$   RT   R+   RV   RY   (    (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR:   ’   s(   															t
   MountMediac           B   s   e  Z d  „  Z RS(   c         C   s¯   |  j  ƒ  r t S|  j rO d |  j |  j f } |  j r\ | d |  j 7} q\ n d |  j } |  j ry | d |  j 7} n  t j | ƒ \ } } | d k r« t j	 | ƒ t
 St S(   Ns   mount %s %ss    -t %ss   mount %ss    -o %si    (   R#   R,   R<   R;   R=   R>   RN   RO   t   ifacet   debugR9   (   R   t   cmdRP   RQ   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   ö   s    			(   R7   R8   R   (    (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyRZ   ô   s   t   UmountMediac           B   s   e  Z d  „  Z RS(   c         C   sM   |  j  ƒ  s t St j d |  j ƒ \ } } | d k rI t j | ƒ t St S(   Ns	   umount %si    (   R#   R,   RN   RO   R;   R[   R\   R9   (   R   RP   RQ   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   	  s    	(   R7   R8   R   (    (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR^     s   t
   BasicMediac           B   s   e  Z RS(    (   R7   R8   (    (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR_     s   t   AutoMountMediac           B   s   e  Z d  Z d „  Z RS(   iô  c         C   s1   y t  j |  j ƒ Wn t k
 r( t SXt Sd  S(   N(   R   t   listdirR;   t   OSErrorR9   R,   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR     s
    (   R7   R8   RW   R   (    (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR`     s   t   DeviceMediac           B   s    e  Z d  Z d „  Z d „  Z RS(   id   c         C   s9   t  j j |  j ƒ s( t  j |  j ƒ n  t j |  ƒ d  S(   N(   R   R   t   isdirR;   t   mkdirR_   R   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   &  s    c         C   s9   t  j |  ƒ y t j |  j ƒ Wn t k
 r4 n Xd  S(   N(   R_   R   R   t   rmdirR;   Rb   (   R   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyR   +  s
    (   R7   R8   RW   R   R   (    (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyRc   "  s   	s
   /etc/fstabc         C   s"  g  } t  j j |  ƒ rxt |  ƒ D]ò } | j ƒ  } | s% | d d k rT q% n  | j ƒ  } t | ƒ d k  rx q% n  | d  \ } } } | d k r  d  } n  | d k rÂ | j t	 | ƒ ƒ q% | d k sø | d k sø | j
 d ƒ sø | j
 d ƒ r% | j t | | d t ƒƒ q% q% Wn  | S(   Ni    t   #i   t   nonet
   supermountt   iso9660t   udfs   udf,iso9660s
   /dev/cdroms   /dev/dvds   /cdroms   /dvdRB   (   Rj   Rk   s   udf,iso9660(   s
   /dev/cdroms   /dev/dvd(   R   R   R%   RK   t   stripRL   RU   R   R   RZ   t   endswithR_   R,   (   t   filenamet   resultRM   t   tokensR!   R   R@   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   discoverFstabMedias2  s&    	&s   discover-mediass   /etc/auto.masterc         C   sÉ  g  } t  j |  t  j ƒ rÅx§t |  ƒ D]–} | j ƒ  } | s( | d d k rW q( n  | j ƒ  } t | ƒ d k  r{ q( n  | d  \ } } t  j | t  j ƒ r( t } xt | ƒ D]} | rØ | j d ƒ rØ t } Pn  | j ƒ  } | s³ | d d k rq³ n  | j ƒ  } t | ƒ d k r4| \ } } d  }	 n' t | ƒ d k r³ | \ } }	 } n q³ |	 rmd |	 k sy| d k r³ t  j
 j | | ƒ }
 | d	 } | j t |
 | d
 t ƒƒ q³ q³ Wq( q( Wn  | S(   Ni    Rg   i   s   #!i   s   -fstype=iso9660s   :/dev/cdroms	   :/dev/dvdi   RB   (   s   :/dev/cdroms	   :/dev/dvd(   R   t   accesst   R_OKRK   Rl   RL   RU   R9   R   R   R   RS   R   R`   R,   (   Rn   Ro   RM   Rp   t   prefixt   mapfilet	   firstlinet   keyt   locationR@   R   R!   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   discoverAutoMountMediasM  sB    	
c       	   C   s‰  g  }  t  r…d d  l } d d  l } | j } | j ƒ  | _ y$t  j ƒ  } | j d d ƒ } t  j | d ƒ } | j d ƒ } xÞ | D]Ö } | j d | ƒ }	 t  j |	 d ƒ }
 |
 j d ƒ } |
 j d ƒ } |
 j d	 ƒ } |
 j d
 ƒ } | j d | ƒ }	 t  j |	 d ƒ } | j d ƒ } | r… | d k s<| d k r… |  j	 t
 | | d t ƒƒ q… q… WWn n X| j j ƒ  } | | _ n  |  S(   Niÿÿÿÿs   org.freedesktop.Hals   /org/freedesktop/Hal/Managers   org.freedesktop.Hal.Managert   volumes   org.freedesktop.Hal.Devices   block.devices   volume.fstypes   volume.mount_points   block.storage_devices   storage.drive_typeRj   t   cdromRB   (   t   dbust   syst   StringIOt   stderrt	   SystemBust
   get_objectt	   Interfacet   FindDeviceByCapabilityt   GetPropertyR   R`   R,   t   getvalue(   Ro   R}   R~   t   olderrt   bust
   hal_objectt   hal_managert   volume_udi_listt   udit
   dev_objectRz   R!   t   fstypet   mount_pointt   storage_udit   storaget
   drive_typet   err(    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   discoverHalVolumeMediass  s<    			c       	   C   s•  g  }  t  r‘d d  l } d d  l } | j } | j ƒ  | _ y0t  j ƒ  } | j d d ƒ } t  j | d ƒ } xù | j ƒ  D]ë } | j d | ƒ } d }	 t  j | d ƒ }
 t |
 j	 |	 d ƒ ƒ } t |
 j	 |	 d ƒ ƒ } |
 j	 |	 d ƒ } t
 |
 j	 |	 d	 ƒ ƒ } t
 |
 j	 |	 d
 ƒ ƒ } | r| | d k s6| r| t | j ƒ  ƒ } |  j t | | d | ƒƒ q| q| WWn n X| j j ƒ  } | | _ n  |  S(   Niÿÿÿÿs   org.freedesktop.DeviceKit.Diskss    /org/freedesktop/DeviceKit/Diskss&   org.freedesktop.DeviceKit.Disks.Devices   org.freedesktop.DBus.Propertiest
   DeviceFilet   IdTypet   DeviceMountPathst   DeviceIsOpticalDisct   DeviceIsRemovableRj   RB   (   R|   R}   R~   R   R€   R   R‚   t   EnumerateDevicest   strt   Gett   boolt   unicodet   popR   R`   R…   (   Ro   R}   R~   R†   R‡   t	   dk_objectt   dk_interfaceR   RŒ   t	   interfaceRz   R!   R   t   mount_pathst   optical_disct   is_removableRŽ   R’   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   discoverDeviceKitDisksMedias–  s:    			c         C   s?  t  j j t j d ƒ d ƒ } t  j j | ƒ sY y t  j | ƒ Wqr t k
 rU d  SXn t  j	 | t  j
 ƒ sr d  St  j j |  ƒ \ } } d } t  j j | | ƒ } x= t  j j | ƒ rä | d 7} t  j j | | d | ƒ } q¨ W| rü | d | 7} n  t  j |  ƒ } t j | j ƒ r&d  } n d } t | |  d | ƒS(   Ns   data-dirt   mnti    i   s   .%dt   loopRA   (   R   R   RS   R2   R*   Rd   t   makedirsRb   R   Rr   t   W_OKRL   RH   t   statt   S_ISBLKt   st_modeRc   (   R   t   mntdirR)   t   basenamet   suffixR   t   stRA   (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   discoverDeviceMedia·  s*    
!	s   discover-device-media(   t   smart.util.filetoolsR    t   smartRN   Rª   R   R|   t   ImportErrorR   t   objectR   R:   RZ   R^   R_   R`   Rc   Rq   R
   t   registerRy   R“   R¥   R±   (    (    (    s/   /usr/lib/python2.7/dist-packages/smart/media.pyt   <module>   s2   

pb$	!		