void NodeListener_2(object s, ExtensionNodeEventArgs args) { counters[2].Update(args); }
static void HandleUserDataMigration(object sender, ExtensionNodeEventArgs args) { if (args.Change != ExtensionChange.Add) { return; } var node = (UserDataMigrationNode)args.ExtensionNode; if (!CheckVersion(node, version)) { return; } FilePath source = FilePath.Null; FilePath target = FilePath.Null; try { source = profile.GetLocation(node.SourceKind).Combine(node.SourcePath); target = UserProfile.Current.GetLocation(node.TargetKind).Combine(node.TargetPath); bool sourceIsDirectory = Directory.Exists(source); if (sourceIsDirectory) { if (Directory.Exists(target)) { return; } } else { if (File.Exists(target) || Directory.Exists(target) || !File.Exists(source)) { return; } } LoggingService.LogInfo("Migrating '{0}' to '{1}'", source, target); if (!sourceIsDirectory) { FileService.EnsureDirectoryExists(target.ParentDirectory); } var handler = node.GetHandler(); if (handler != null) { handler.Migrate(source, target); return; } if (sourceIsDirectory) { DirectoryCopy(source, target); } else { File.Copy(source, target); } } catch (Exception ex) { string message = string.Format("{0}: Failed to migrate '{1}' to '{2}'", node.Addin.Id, source.ToString() ?? "", target.ToString() ?? ""); LoggingService.LogError(message, ex); } }
static void HandleExtensionNodeEventHandler(object sender, ExtensionNodeEventArgs args) { unitTestMarkers = AddinManager.GetExtensionNodes(TestMarkersPath).OfType <IUnitTestMarkers> ().ToArray(); }
protected virtual void OnExtensionChanged(object sender, ExtensionNodeEventArgs args) { var plugin = args.ExtensionObject as CSPlugin; if (plugin != null) { string id = Addin.GetFullId(null, args.ExtensionNode.Addin.Id, args.ExtensionNode.Addin.Version); Addin addin = AddinManager.Registry.GetAddin(id); if (args.Change == ExtensionChange.Add) { var property = addin.Properties.SingleOrDefault(p => p.Name.Equals("star", StringComparison.OrdinalIgnoreCase)); if (property != null) { string verStr = string.Format("{0}.{1}.{2}.{3}", StarVersion.Major, StarVersion.Minor, StarVersion.Build, StarVersion.Revision); if (Addin.CompareVersions(verStr, property.Value) > 0) { Logger.Error("Plugin {0} requires Star version {1}+. Load failed!", addin.Description.LocalId, property.Value); AddinManager.Registry.DisableAddin(id); } } else { Logger.Error("Plugin {0} does not define a minimum Star version requirement. Load failed!", addin.Description.LocalId); AddinManager.Registry.DisableAddin(id); } string path = Path.GetDirectoryName(args.ExtensionObject.GetType().Assembly.Location); ResolveEventHandler handler = (s, e) => { AssemblyName reqName = new AssemblyName(e.Name); string dllFile = string.Format("{0}.dll", reqName.Name); string fullDllPath = Path.Combine(path, dllFile); return(Assembly.LoadFrom(fullDllPath)); }; AppDomain.CurrentDomain.AssemblyResolve += handler; _plugins.AddOrUpdate(id, plugin, (k, p) => p); plugin.Load(); Parallel.ForEach(_plugins.Values, x => x.PluginLoaded(plugin)); Logger.Info("Loaded plugin \"{0}\" ({1})", plugin.Name, addin.Version); } else if (args.Change == ExtensionChange.Remove) { plugin.Unload(); Parallel.ForEach(_plugins.Values, x => x.PluginUnloaded(plugin)); CSPlugin removed; while (!_plugins.TryRemove(id, out removed)) { Thread.Sleep(1); } Logger.Info("Unloaded plugin \"{0}\"", plugin.Name); } } }