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