
    g
f	                      X    d Z dZdZdZdZdZddlmZmZ ddl	Z	dd	l
mZmZ  G d
 d      Zy)zJSON backend for Orca settingsz$Id$z
$Revision$z$Date$z7Copyright (c) 2010-2011 Consorcio Fernando de los Rios.LGPL    )loaddumpN)settingsacssc                   h    e Zd Zd Zd Zd Zd Zd Zd ZddZ	dd	Z
dd
Zd Zd ZddZd Zd Zy)Backendc                    i | _         i | _        i | _        i | _        t        j
                  j                  |d      | _        t        j
                  j                  |d      | _        dt        j                  i i di| _        y)z& Initialize the JSON Backend.
        zuser-settings.confzapp-settingsdefault)profilepronunciationskeybindingsN)generalr   r   profilesospathjoinsettingsFileappPrefsDirr   r   _defaultProfiles)selfprefsDirs     </usr/lib/python3/dist-packages/orca/backends/json_backend.py__init__zBackend.__init__$   sq      GGLL3GH77<<.A!*(:J:JLNIK-. !"    c                     || j                   ||d}|| _        | j                   | _        || _        || _        t        | j                  d      }t        ||d       |j                          y)zN Save default settings for all the properties from
            orca.settings. )r   r   r   r   w   indentN)	r   r   r   r   r   openr   r   close)r   r   r   r   prefsr   s         r   saveDefaultSettingszBackend.saveDefaultSettings4   sm     $!22#1 +-
 --,&D--s3UL+r   c                     t         j                  j                  | j                  | d      }t         j                  j	                  |      r)t        |d      }t        |      }|j                          |S i }|S )N.confr)r   r   r   r   existsr!   r   r"   )r   appNamefileNamer   r#   s        r   getAppSettingszBackend.getAppSettingsE   sh    77<< 0 0WIU2CD77>>(##.L&E   Er   c                    | j                  |      }|j                  di       }|||d||<   ||d<   t        j                  j	                  | j
                  | d      }t        |d      }	t        ||	d       |	j                          y )Nr   )r   r   r   r&   r   r   r   )	r+   getr   r   r   r   r!   r   r"   )
r   r)   r   r   r   r   r#   r   r*   r   s
             r   saveAppSettingszBackend.saveAppSettingsP   s    ##G,99Z,(//=,79 %j77<< 0 0WIU2CDHc*UL+r   c                     |d}||d<   ||d<   t        | j                  d      5 }t        |      }||d   |<   |j                  d       |j	                          t        ||d	       ddd       y# 1 sw Y   yxY w)
zS Save minimal subset defined in the profile against current 
            defaults. Nr   r   r   r+r   r   r   r   )r!   r   r   seektruncater   )r   r   r   r   r   r   r#   s          r   saveProfileSettingszBackend.saveProfileSettings]   s     ?G$2 !!,$##T* 	0l&E)0E*g&a !!#Q/	0 	0 	0s   AA11A:c                     t        | j                        }	 t        |      }|d   j	                         | _        |d   | _        |d   | _        |d   j	                         | _        y# t        $ r Y yw xY w)z$ Load from config file all settings Nr   r   r   r   )	r!   r   r   
ValueErrorcopyr   r   r   r   )r   r   r#   s      r   _getSettingszBackend._getSettingsn   s|    D--.	&E Y',,.#$45 /j)..0  		s   A' '	A32A3Nc                    | j                          | j                  j                         }|j                  dddg      }||d   }| j                  |   j                         }|j                         D ]D  \  }}|dk(  r0|j                         D ]  \  }}t        j                  |      ||<    |dvs@|||<   F 	 |d   |d<   |S # t        $ r	 ||d<   Y |S w xY w)	zZ Get general settings from default settings and
            override with profile values. startingProfileDefaultr      voices)r9   activeProfiler   r=   )	r7   r   r6   r-   r   itemsr   ACSSKeyError)	r   r   generalSettingsdefaultProfileprofileSettingskeyvalue	voiceTypevoiceDefs	            r   
getGeneralzBackend.getGeneralz   s    	,,++-(,,->.7-CE?$Q'G--0557)//1 	-JCh+0;;= ;'Ix'+yy':E)$;>>',$	-	>/>y/IOO,   	>/=OO,	>s   ;C CCc                     | j                          | j                  j                         }| j                  |   j                         }d|v r|d   }|S )z` Get pronunciation settings from default settings and
            override with profile values. r   )r7   r   r6   r   )r   r   r   rC   s       r   getPronunciationszBackend.getPronunciations   sT     	,,113--0557.,-=>Nr   c                     | j                          | j                  j                         }| j                  |   j                         }d|v r|d   }|S )z^ Get keybindings settings from default settings and
            override with profile values. r   )r7   r   r6   r   )r   r   r   rC   s       r   getKeybindingszBackend.getKeybindings   sS     	&&++---0557O+)-8Kr   c                 V    t         j                  j                  | j                         S )z  Check if we're in first start. )r   r   r(   r   )r   s    r   isFirstStartzBackend.isFirstStart   s      77>>$"3"3444r   c                     || j                   |<   t        | j                  d      5 }t        |      }||d   |<   |j	                  d       |j                          t        ||d       d d d        y # 1 sw Y   y xY w)Nr0   r   r   r   r   )r   r!   r   r   r1   r2   r   )r   rD   rE   r   r#   s        r   _setProfileKeyzBackend._setProfileKey   sv    !S$##T* 	0l&E$)E)S!a !!#Q/	0 	0 	0s   AA22A;c                 F    || j                   d<   | j                  d|       y)zSet firstStart. This user-configurable setting is primarily
        intended to serve as an indication as to whether or not initial
        configuration is needed.
firstStartN)r   rP   )r   rE   s     r   setFirstStartzBackend.setFirstStart   s"     &+\"L%0r   c                     | j                          g }| j                  j                         D ]?  }| j                  |   j                         }|j	                  |j                  d             A |S )z List available profiles. r   )r7   r   keysr6   appendr-   )r   r   profileNameprofileDicts       r   availableProfileszBackend.availableProfiles   sb    ==--/ 	8K--499;KOOKOOI67	8 r   c                 B     fd} j                   v r | j                          t         j                  d      5 }t        |      }|d   v r: ||d          |j	                  d       |j                          t        ||d       ddd       y# 1 sw Y   yxY w)zRemove an existing profilec                     | = t        |       dk(  r2j                  D ]"  }j                  |   j                         | |<   $ y y )Nr   )lenr   r6   )dictrW   r   r   s     r   removeProfileFromz0Backend.removeProfile.<locals>.removeProfileFrom   sO    W4yA~#'#8#8 RK(,(=(=k(J(O(O(QD%R r   r0   r   r   r   r   N)r   r!   r   r   r1   r2   r   )r   r   r^   r   r#   s   ``   r   removeProfilezBackend.removeProfile   s    	R dmm#dmm,$##T* 	4l&E%
++!%
"34!!!$%%'UL3	4 	4 	4s   ABB)N)r   )F)__name__
__module____qualname__r   r$   r+   r.   r3   r7   rH   rJ   rL   rN   rP   rS   rY   r_    r   r   r	   r	   "   sH    " "	0"
1,5
01	4r   r	   )__doc____id____version____date____copyright____license__jsonr   r   r   orcar   r   r	   rc   r   r   <module>rl      s8   , %I  	 u4 u4r   