ó
G¥êRc           @   sY   d  d l  Z  d  d l Z d  d l Z d  d l Z d „  Z d „  Z d d d „  ƒ  YZ d S(   iÿÿÿÿNc           C   s*   d t  j k r t  j d St  j j d ƒ S(   s)   Determine the location of .meetings file.t   MEETINGSs   ~/.meetings(   t   ost   environt   patht
   expanduser(    (    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   locate_rc_file
   s    c          C   sc   y- t  d d ƒ }  |  j ƒ  } |  j ƒ  | SWn/ t k
 r^ } | j t j k rU d S| ‚ n Xd S(   s@   Determine the default meetings if .meetings file does not exist.s   /etc/discuss/meetings.defaultt   rt    N(   t   opent   readt   closet   IOErrort   errnot   ENOENT(   t   sourcet   defaultt   err(    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   get_default_meetings   s    
t   RCFilec           B   sb   e  Z d  Z d
 d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z RS(   s   The .meetings file interface.c         C   sT   | s t  ƒ  } n  | |  _ t j j | ƒ sF t ƒ  } |  j | ƒ n  |  j ƒ  d  S(   N(   R   t   locationR   R   t   isfileR   t   updateContentst   load(   t   selfR   R   (    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   __init__%   s    		c         C   s9   | j  ƒ  } t |  j d ƒ } | j | ƒ | j ƒ  d S(   s>   Update the contents of .meetings file with the following text.t   wN(   t   stripR   R   t   writeR
   (   R   t   textt   rcfile(    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyR   1   s    c         C   si  t  |  j d ƒ } i  } x7| D]/} t j d | j ƒ  ƒ } | s_ t d | j ƒ  f ƒ ‚ n  t | j d ƒ ƒ } i t | d @ƒ d 6t | d @ƒ d 6t | j d ƒ ƒ d 6t | j d	 ƒ ƒ d
 6| j d ƒ j	 ƒ  d 6| j d ƒ d 6| j d ƒ j
 d ƒ d 6} | d j
 d ƒ d | d <| d | d f } d | | d <| | | <q W| |  _ |  j ƒ  d S(   s;   Read all the entries in the .meetings file into the object.R   s4   ^(\d):(\d+):(\d+):([a-zA-Z\d.\-]+):([^:]+):([^:]+):$s$   Malformed .meetings file entry: '%s'i   t   changedi   t   deletedt   last_timestampi   t   last_transactioni   t   hostnamei   R   i   t   ,t   namest   /iÿÿÿÿt   displaynames   %s:%sR   N(   R   R   t   ret   matchR   t
   ValueErrort   intt   groupt   boolt   lowert   splitt   entriest   recache(   R   R   R/   t   lineR(   t   statust   entryt   entry_id(    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyR   9   s*    	c         C   sv   i  |  _  xf |  j j ƒ  D]U } x- | d D]! } | d | d f |  j  | <q* W| d | d f |  j  | d <q Wd S(   s%   Update the meeting name lookup cache.R$   R"   R   R   N(   t   cacheR/   t   values(   R   R3   t   name(    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyR0   V   s
    	c      
   C   s´   t  |  j d ƒ } x‘ |  j j ƒ  D]€ } d } | d rE | d O} n  | d r\ | d O} n  d | | d | d	 | d
 | d d j | d ƒ f } | j | ƒ q" W| j ƒ  d S(   s   Save the new .meetings file.R   i    R   i   R   i   s   %d:%d:%d:%s:%s:%s:
R    R!   R"   R   R#   R$   N(   R   R   R/   R6   t   joinR   R
   (   R   R   R3   R2   R1   (    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   save_   s    
 
 c         C   s&   t  | ƒ t k r | S|  j j | ƒ S(   s6   Look up the meeting name and get a (host, path) tuple.(   t   typet   tupleR5   t   get(   R   R7   (    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   lookupo   s    c         C   s…   |  j  | ƒ } | |  j k r- t d ƒ ‚ n  t t j ƒ  ƒ |  j | d <t | ƒ |  j | d k r t | ƒ |  j | d <n  d S(   s*   Set the last read entry for given meeting.s+   Attempted to touch the non-existent meetingR    R!   N(   R=   R/   R)   R*   t   time(   R   t   meetingt   last(    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   touchw   s    c         C   s  | j  } | |  j k r+ t d | ƒ ‚ n  | j ƒ  | d j d ƒ d } |  j | ƒ rn t d | ƒ ‚ n  |  j | j ƒ r– t d | j ƒ ‚ n  i	 t d 6t d 6d d	 6d d
 6| d d 6| d d 6| j | g d 6| d 6d | d 6} | |  j | <|  j	 ƒ  d S(   s.   Adds a given meeting object to .meetings file.s%   Meeting %s:%s is already in .meetingsi   R%   iÿÿÿÿs"   Meeting %s is already in .meetingsR   R   i    R    R!   R"   R   R$   R&   s   %s:%sR   N(
   t   idR/   R)   t	   load_infoR.   R=   t	   long_namet   Truet   FalseR0   (   R   R?   t   mtg_idR&   R3   (    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   add‚   s*    	
c         C   sI   |  j  | ƒ } | |  j k r1 t d | ƒ ‚ n  |  j | =|  j ƒ  d S(   s(   Remove a meeting from the .meetings files   '%s' is not in meetings file.N(   R=   R/   R)   R0   (   R   R?   t   mtg(    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   deletež   s
    
N(   t   __name__t
   __module__t   __doc__t   NoneR   R   R   R0   R9   R=   RA   RH   RJ   (    (    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyR   "   s   								(    (   R   R   R'   R>   R   R   R   (    (    (    s2   /usr/lib/python2.7/dist-packages/discuss/rcfile.pyt   <module>   s   0			