Author: lluis
Date: 2007-05-25 13:06:17 -0400 (Fri, 25 May 2007)
New Revision: 77951

Modified:
   trunk/mono-addins/Mono.Addins/ChangeLog
   trunk/mono-addins/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs
Log:
* Mono.Addins.Database/AddinDatabase.cs: Fixed several issues when
  Enabling/Disabling add-ins.

Modified: trunk/mono-addins/Mono.Addins/ChangeLog
===================================================================
--- trunk/mono-addins/Mono.Addins/ChangeLog     2007-05-25 16:32:58 UTC (rev 
77950)
+++ trunk/mono-addins/Mono.Addins/ChangeLog     2007-05-25 17:06:17 UTC (rev 
77951)
@@ -1,3 +1,8 @@
+2007-05-25  Lluis Sanchez Gual <[EMAIL PROTECTED]> 
+
+       * Mono.Addins.Database/AddinDatabase.cs: Fixed several issues when
+         Enabling/Disabling add-ins.
+
 2007-05-18  Lluis Sanchez Gual <[EMAIL PROTECTED]> 
 
        * Mono.Addins.Database/SetupProcess.cs,

Modified: trunk/mono-addins/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs
===================================================================
--- trunk/mono-addins/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs 
2007-05-25 16:32:58 UTC (rev 77950)
+++ trunk/mono-addins/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs 
2007-05-25 17:06:17 UTC (rev 77951)
@@ -209,7 +209,8 @@
                                        if (exactVersionMatch)
                                                return null;
                                }
-                               else
+                               else if (enabledOnly)
+                                       // Ignore the 'not installed' flag when 
disabled add-ins are allowed
                                        return null;
                        }
                
@@ -255,7 +256,9 @@
                                }
                                
                                // Cache lookups with negative result
-                               cachedAddinSetupInfos [id] = this;
+                               // Ignore the 'not installed' flag when 
disabled add-ins are allowed
+                               if (enabledOnly)
+                                       cachedAddinSetupInfos [id] = this;
                                return null;
                        }
                }
@@ -302,7 +305,10 @@
                public bool IsAddinEnabled (string id)
                {
                        Addin ainfo = GetInstalledAddin (id);
-                       return ainfo.Enabled;
+                       if (ainfo != null)
+                               return ainfo.Enabled;
+                       else
+                               return false;
                }
                
                internal bool IsAddinEnabled (string id, bool exactVersionMatch)
@@ -319,7 +325,7 @@
                
                internal void EnableAddin (string id, bool exactVersionMatch)
                {
-                       Addin ainfo = GetInstalledAddin (id, exactVersionMatch);
+                       Addin ainfo = GetInstalledAddin (id, exactVersionMatch, 
false);
                        if (ainfo == null)
                                // It may be an add-in root
                                return;
@@ -327,9 +333,6 @@
                        if (IsAddinEnabled (id))
                                return;
                        
-                       Configuration.DisabledAddins.Remove (id);
-                       SaveConfiguration ();
-
                        // Enable required add-ins
                        
                        foreach (Dependency dep in 
ainfo.AddinInfo.Dependencies) {
@@ -339,6 +342,10 @@
                                        EnableAddin (adepid, false);
                                }
                        }
+
+                       Configuration.DisabledAddins.Remove (id);
+                       SaveConfiguration ();
+
                        if (AddinManager.IsInitialized && 
AddinManager.Registry.RegistryPath == registry.RegistryPath)
                                AddinManager.SessionService.ActivateAddin (id);
                }
@@ -351,36 +358,45 @@
 
                        if (!IsAddinEnabled (id))
                                return;
-
+                       
                        Configuration.DisabledAddins.Add (id);
                        SaveConfiguration ();
                        
                        // Disable all add-ins which depend on it
                        
-                       string idName = Addin.GetIdName (id);
-                       
-                       foreach (Addin ainfo in GetInstalledAddins ()) {
-                               foreach (Dependency dep in 
ainfo.AddinInfo.Dependencies) {
-                                       AddinDependency adep = dep as 
AddinDependency;
-                                       if (adep == null)
-                                               continue;
-                                       
-                                       string adepid = Addin.GetFullId 
(ainfo.AddinInfo.Namespace, adep.AddinId, null);
-                                       if (adepid != idName)
-                                               continue;
-                                       
-                                       // The add-in that has been disabled, 
might be a requeriment of this one, or maybe not
-                                       // if there is an older version 
available. Check it now.
-                                       
-                                       adepid = Addin.GetFullId 
(ainfo.AddinInfo.Namespace, adep.AddinId, adep.Version);
-                                       Addin adepinfo = GetInstalledAddin 
(adepid, false, true);
-                                       
-                                       if (adepinfo == null) {
-                                               DisableAddin (ainfo.Id);
-                                               break;
+                       try {
+                               string idName = Addin.GetIdName (id);
+                               
+                               foreach (Addin ainfo in GetInstalledAddins ()) {
+                                       foreach (Dependency dep in 
ainfo.AddinInfo.Dependencies) {
+                                               AddinDependency adep = dep as 
AddinDependency;
+                                               if (adep == null)
+                                                       continue;
+                                               
+                                               string adepid = Addin.GetFullId 
(ainfo.AddinInfo.Namespace, adep.AddinId, null);
+                                               if (adepid != idName)
+                                                       continue;
+                                               
+                                               // The add-in that has been 
disabled, might be a requeriment of this one, or maybe not
+                                               // if there is an older version 
available. Check it now.
+                                               
+                                               adepid = Addin.GetFullId 
(ainfo.AddinInfo.Namespace, adep.AddinId, adep.Version);
+                                               Addin adepinfo = 
GetInstalledAddin (adepid, false, true);
+                                               
+                                               if (adepinfo == null) {
+                                                       DisableAddin (ainfo.Id);
+                                                       break;
+                                               }
                                        }
                                }
                        }
+                       catch {
+                               // If something goes wrong, enable the add-in 
again
+                               Configuration.DisabledAddins.Remove (id);
+                               SaveConfiguration ();
+                               throw;
+                       }
+
                        if (AddinManager.IsInitialized && 
AddinManager.Registry.RegistryPath == registry.RegistryPath)
                                AddinManager.SessionService.UnloadAddin (id);
                }               

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to