
    |~g%                     $   d dl m Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  G d de      Z ede      Z G d dej"                  ee         Z  G d de e         Z!y)    )gettextN)
ModuleType)DictListTypeTypeVarIterableOptionalGeneric)GObjectGio)bmexit)ErrorDialog)
BasePlugin)GSignals)PluginExceptionc                       e Zd Zy)LoadExceptionN)__name__
__module____qualname__     </usr/lib/python3/dist-packages/blueman/main/PluginManager.pyr   r      s    r   r   _T)boundc                   
    e Zd ZU ej                  j
                  dej                  ffej                  j
                  dej                  ffdZee	d<   de
e   dededdf fdZedee   fd	       Zdeee
e   f   fd
Zdee   fdZdeeee   f   fdZdeeee   f   fdZddee   deddfdZdedefdZdedefdZde
e   ddfdZdedefdZdeddfdZdeeef   fdZ  e!d      Z"de
e"   de#e"   fdZ$ xZ%S )PluginManagerN)plugin-loadedplugin-unloaded__gsignals__plugin_classmodule_pathparentreturnc                     t         |           i | _        i | _        i | _        i | _        g | _        || _        || _        || _	        y N)
super__init___PluginManager__deps_PluginManager__cfls_plugins_PluginManager__classes_PluginManager__loadedr$   r#   r"   selfr"   r#   r$   	__class__s       r   r)   zPluginManager.__init__   sH    ,.,.').0#%&(r   c                     g S r'   r   r0   s    r   config_listzPluginManager.config_list+   s    	r   c                     | j                   S r'   )r-   r3   s    r   get_classeszPluginManager.get_classes/   s    ~~r   c                     | j                   S r'   )r.   r3   s    r   
get_loadedzPluginManager.get_loaded2       }}r   c                     | j                   S r'   )r*   r3   s    r   get_dependencieszPluginManager.get_dependencies5       {{r   c                     | j                   S r'   )r+   r3   s    r   get_conflictszPluginManager.get_conflicts8   r<   r   nameuser_actionc                 J   |r 	 | j                  | j                  |          y | j                  j                  J t        j                  j                  | j                  j                        }g }t        j                  |      D ]W  \  }}}|D ]L  }	|	j!                  d      s|	j!                  d      r'|	j!                  d      r9|j#                  |	dd        N Y t%        j&                  |       |D ]2  }
	 t)        j*                  | j                  j,                  d|
 z          4 | j6                  j9                         D ]n  }|| j                  |j,                  <   |j,                  | j:                  vrg | j:                  |j,                  <   |j,                  | j<                  vrg | j<                  |j,                  <   |j>                  D ]G  }|| j:                  vrg | j:                  |<   | j:                  |   j#                  |j,                         I |j@                  D ]  }|| j<                  vrg | j<                  |<   | j<                  |   j#                  |j,                         || j<                  |j,                     vsd| j<                  |j,                     j#                  |        q | jB                  }| j                  jE                         D ]  \  }}| j:                  |   D ]#  }| j                  |   jF                  rd|_#        % |jH                  s|sJ|j,                  |v sY|jF                  r|rd|j,                  z   |v ry| j                  |        y # t        $ r Y y t        $ rN |rIt	        t        d      t        j                               }|j                          |j                           Y y w xY w# t.        $ r t%        j0                  d	|
 d
       Y t2        $ r&}t%        j4                  d|
 d|        Y d }~'d }~ww xY w)Nz<b>An error has occurred while loading a plugin. Please notify the developers with the content of this message to our </b>
<a href="http://github.com/blueman-project/blueman/issues">website.</a>)excpz.pyz.pycz_.pyr   .zUnable to load plugin module Texc_infozFailed to start plugin z: F!)%_PluginManager__load_pluginr-   r   	Exceptionr   _	traceback
format_excrundestroyr#   __file__ospathdirnamewalkendswithappendlogginginfo	importlibimport_moduler   ImportErrorerrorr   warningr"   __subclasses__r*   r+   __depends____conflicts__r4   items__unloadable____autoload__)r0   r?   r@   drQ   pluginsrootdirsfilesfpluginerrclsccldeps                   r   load_pluginzPluginManager.load_plugin;   s   ""4>>$#78 ((444wwt//889!# 	,D$ ,::e$ajj.@AJJvDVNN1Qr7+,	,
 	W 	KFK''(8(8(A(AaxL(PQ	K $$335 	8C+.DNN3<<(||4;;.,.CLL)||4;;.,.CLL)__ 4DKK'%'DKKNA%%cll34
 && 8DKK'%'DKKNA%%cll3DKK55KK-44Q78	8( --/ 	(ID#{{4( /~~c*99).C&/
   RCLLB,>++sS\\7IR7O""3'	(k !    	#A 'r %s *3)=)=)?	AA
 EEGIIK  	2  W =fXFQUVV" K"9&C5 IJJKs6   M* :/O*	O5AO
O#P"4P"<PP"ri   c                      yNFr   r0   ri   s     r   disable_pluginzPluginManager.disable_plugin~   s    r   c                      y)NTr   rr   s     r   enable_pluginzPluginManager.enable_plugin   s    r   rk   c                 4   |j                   | j                  v ry |j                  D ]Y  }|| j                  vs|| j                  vrt	        d|j                    d|       	 | j                  | j                  |          [ | j                  |j                      D ]  }|| j                  v rw| j                  |   j                  |j                  kD  rQ| j                  |      s@| j                  |j                         s%t        j                  d|j                    d        y || j                  v s|j                  | j                  |   j                  kD  r#| j                  |      s| j                  |       t        d|j                    d       t        j                  d|         || j                         }	 |j#                          || j$                  |j                   <   | j                  j'                  |j                          | j)                  d|j                          y # t        $ r}t        j                  |        d }~ww xY w# t        $ r< t        j*                  d	|j                    d
       |j,                  s
t/                 w xY w)NzCould not satisfy dependency z -> zNot loading z) because its conflict has higher priorityzNot loading conflicting plugin z due to lower priorityzloading r   zFailed to load TrE   )r   r.   r^   r-   rI   rH   rV   	exceptionr+   __priority__rs   ru   r\   unload_pluginr   rW   r$   _loadr,   rU   emitr[   ra   r   )r0   rk   rn   ecflinsts         r   __load_pluginzPluginManager.__load_plugin   s,   <<4==(?? 	C$--'dnn,#&CCLL>QUVYUZ$[\\&&t~~c':;	 ;;s||, 	pCdnn$>>#&33c6F6FFtObObcfOg $ 2 23<< @OOl3<<.@i$jkdmm###dnnS&9&F&FFtOaOabeOf&&s+'*I#,,Wm(noo	p 	xu%&4;;	5JJL +/DMM#,,'MM  .IIos||4A ! %%a(*  	MMOCLL>:TJ%%	s%   "H+ I +	I4I

IAJkeyc                 ^    	 | j                   |   S # t        $ r | j                  |   cY S w xY wr'   )r,   KeyError__dict__)r0   r   s     r   __getattr__zPluginManager.__getattr__   s4    	&==%% 	&==%%	&s    ,,c                    | j                   |   j                  r| j                  |   D ]  }| j                  |        || j                  v rst        j                  d|        	 | j                  |   }|j                          | j                  j                  |       | j                  |= | j                  d|       y y t        d| d      # t        $ r t        j                  d       Y y w xY w)Nz
Unloading r    zPlugin cannot be unloadedzPlugin  is not unloadable)r-   ra   r*   ry   r.   rV   rW   r,   _unloadremover{   NotImplementedErrorr\   rI   )r0   r?   rc   r~   s       r   ry   zPluginManager.unload_plugin   s    >>$..[[& &""1%& t}}$z$017==.DLLN MM((.d+II/6 % gdV+=>?? + AOO$?@As   &C C10C1c                     | j                   S r'   )r,   r3   s    r   get_pluginszPluginManager.get_plugins   r9   r   _Uprotocolc              #   n   K   | j                   D ]"  }| j                  |   }t        ||      s| $ y wr'   )r.   r,   
isinstance)r0   r   r?   ri   s       r   get_loaded_pluginsz PluginManager.get_loaded_plugins   s6     MM 	D]]4(F&(+	s   +55rq   )&r   r   r   r   SignalFlagsNO_HOOKSTYPE_STRINGr!   r   __annotations__r   r   r   objectr)   propertyr   strr4   r   r6   r8   r;   r>   r
   boolro   rs   ru   rH   r   ry   r   r   r   r	   r   __classcell__r1   s   @r   r   r      s   !--66w?R?R>TU#//88$ATAT@VWL( 

)T"X 
)J 
)PV 
)[_ 
) T#Y  T#tBx-0 DI $sDI~"6 tCcN3 A( A(4 A(TX A(FS T C D *5b *5d *5X&s &v &@# @$ @(T#r']  
B48  r   r   c                        e Zd Zdee   dededdf fdZdede	fdZ
dede	fd	Zded
e	ddfdZedee   fd       Zdej"                  deddfdZ xZS )PersistentPluginManagerr"   r#   r$   r%   Nc                     t         |   |||       t        j                  d      | _        | j                  j                  d| j                         y )Nzorg.blueman.general)	schema_idzchanged::plugin-list)r(   r)   r   Settings _PersistentPluginManager__configconnecton_property_changedr/   s       r   r)   z PersistentPluginManager.__init__   s@    {F;/DE4d6N6NOr   ri   c                 .    | j                   d   }d|z   |v S Nplugin-listrG   r   r0   ri   rd   s      r   rs   z&PersistentPluginManager.disable_plugin   s    --.V|w&&r   c                 (    | j                   d   }||v S Nr   r   r   s      r   ru   z%PersistentPluginManager.enable_plugin   s    --.  r   statec                     | j                   d   }||v r|j                  |       nd|z   |v r|j                  d|z          |j                  |st        d|z         n
t        |             || j                   d<   y r   )r   r   rU   r   )r0   ri   r   rd   s       r   
set_configz"PersistentPluginManager.set_config   sk    --.WNN6"6\W$NN3<(s3<(3v;G'.m$r   c                 $    | j                   d   }|S r   r   )r0   lists     r   r4   z#PersistentPluginManager.config_list   s    --6r   configr   c                 @   ||   D ]  }|j                  d      }|r|j                  d      }	 | j                         |   }|j                  s|rt	        j
                  d| d       nN|| j                         v r|r| j                  |       n(|| j                         vr|s	 | j                  |d        y # t        $ r1}t	        j                  |       | j                  |d       Y d }~8d }~ww xY w# t        $ r t	        j
                  d| d       Y w xY w)	NrG   z	warning: r   T)r@   Fzwarning: Plugin z
 not found)
startswithlstripr6   ra   rV   r\   r8   ry   ro   rI   rw   r   r   )r0   r   r   itemdisablerk   r|   s          r   r   z+PersistentPluginManager.on_property_changed   s   3K 	Dooc*G{{3'(,(8(8(:4(@))gOOiv5G$HIT__..7&&t,!2275((4(@	 % 5))!,e445  "24&
 CDs6   A5C7$B::	C4'C/*C7/C44C77"DD)r   r   r   r   r   r   r   r)   r   r   rs   ru   r   r   r   r4   r   r   r   r   r   s   @r   r   r      s    PT"X PJ PPV P[_ P'S 'T '!C !D !/ /T /d / T#Y  #,, S T r   r   )"r   rJ   rP   rV   rK   rX   typesr   typingr   r   r   r   r	   r
   r   gi.repositoryr   r   blueman.Functionsr   blueman.gui.CommonUir   blueman.plugins.BasePluginr   blueman.bluemantypingr   blueman.plugins.errorsr   rI   r   r   r   r   r   r   r   <module>r      sv      	     I I I & $ , 1 * 2	I 	 T$zGOOWR[ zz4mB/ 4r   