/// <inheritdoc/> public override void Unapply(AppEntry appEntry, bool machineWide) { #region Sanity checks if (appEntry == null) { throw new ArgumentNullException(nameof(appEntry)); } #endregion var dispatcher = new PerTypeDispatcher <Capability>(ignoreMissing: true); if (WindowsUtils.IsWindows) { dispatcher.Add((Store.Model.Capabilities.FileType fileType) => Windows.FileType.Unregister(fileType, machineWide)); dispatcher.Add((Store.Model.Capabilities.UrlProtocol urlProtocol) => Windows.UrlProtocol.Unregister(urlProtocol, machineWide)); dispatcher.Add((Store.Model.Capabilities.AutoPlay autoPlay) => Windows.AutoPlay.Unregister(autoPlay, machineWide)); dispatcher.Add((ComServer comServer) => Windows.ComServer.Unregister(comServer, machineWide)); if (machineWide || WindowsUtils.IsWindows8) { dispatcher.Add((AppRegistration appRegistration) => Windows.AppRegistration.Unregister(appRegistration, machineWide)); } if (machineWide) { dispatcher.Add((Store.Model.Capabilities.DefaultProgram defaultProgram) => Windows.DefaultProgram.Unregister(defaultProgram)); } } else if (UnixUtils.IsUnix) { dispatcher.Add((Store.Model.Capabilities.FileType fileType) => Unix.FileType.Unregister(fileType, machineWide)); dispatcher.Add((Store.Model.Capabilities.UrlProtocol urlProtocol) => Unix.UrlProtocol.Unregister(urlProtocol, machineWide)); dispatcher.Add((Store.Model.Capabilities.DefaultProgram defaultProgram) => Unix.DefaultProgram.Unregister(defaultProgram, machineWide)); } dispatcher.Dispatch(appEntry.CapabilityLists.CompatibleCapabilities()); }
public void TestDispatchAction() { var sub1Orig = new Sub1(); Sub1 sub1Dispatched = null; var sub2Orig = new Sub2(); Sub2 sub2Dispatched = null; var dispatcher = new PerTypeDispatcher<Base>(false) { (Sub1 sub1) => sub1Dispatched = sub1, (Sub2 sub2) => sub2Dispatched = sub2 }; dispatcher.Dispatch(sub1Orig); sub1Dispatched.Should().BeSameAs(sub1Orig); dispatcher.Dispatch(sub2Orig); sub2Dispatched.Should().BeSameAs(sub2Orig); }
/// <summary> /// Reads the <see cref="DefaultCapability"/>s from <see cref="Store.Model.Feed.CapabilityLists"/> and creates a coressponding model for turning <see cref="AccessPoints.DefaultAccessPoint"/> on and off. /// </summary> private void LoadDefaultAccessPoints() { var dispatcher = new PerTypeDispatcher <Capability>(ignoreMissing: true) { (FileType fileType) => { var model = new FileTypeModel(fileType, IsCapabillityUsed <AccessPoints.FileType>(fileType)); FileTypes.Add(model); _capabilityModels.Add(model); }, (UrlProtocol urlProtocol) => { var model = new UrlProtocolModel(urlProtocol, IsCapabillityUsed <AccessPoints.UrlProtocol>(urlProtocol)); UrlProtocols.Add(model); _capabilityModels.Add(model); }, (AutoPlay autoPlay) => { var model = new AutoPlayModel(autoPlay, IsCapabillityUsed <AccessPoints.AutoPlay>(autoPlay)); AutoPlay.Add(model); _capabilityModels.Add(model); }, (ContextMenu contextMenu) => { var model = new ContextMenuModel(contextMenu, IsCapabillityUsed <AccessPoints.ContextMenu>(contextMenu)); ContextMenu.Add(model); _capabilityModels.Add(model); } }; if (_integrationManager.MachineWide) { dispatcher.Add((DefaultProgram defaultProgram) => { var model = new DefaultProgramModel(defaultProgram, IsCapabillityUsed <AccessPoints.DefaultProgram>(defaultProgram)); DefaultProgram.Add(model); _capabilityModels.Add(model); }); } dispatcher.Dispatch(AppEntry.CapabilityLists.CompatibleCapabilities()); }
/// <inheritdoc/> public override void Apply(AppEntry appEntry, Feed feed, ITaskHandler handler, bool machineWide) { #region Sanity checks if (appEntry == null) { throw new ArgumentNullException(nameof(appEntry)); } if (handler == null) { throw new ArgumentNullException(nameof(handler)); } #endregion var capabilities = appEntry.CapabilityLists.CompatibleCapabilities().ToList(); var target = new FeedTarget(appEntry.InterfaceUri, feed); var dispatcher = new PerTypeDispatcher <Capability>(ignoreMissing: true); if (WindowsUtils.IsWindows) { dispatcher.Add((Store.Model.Capabilities.FileType fileType) => Windows.FileType.Register(target, fileType, machineWide, handler)); dispatcher.Add((Store.Model.Capabilities.UrlProtocol urlProtocol) => Windows.UrlProtocol.Register(target, urlProtocol, machineWide, handler)); dispatcher.Add((Store.Model.Capabilities.AutoPlay autoPlay) => Windows.AutoPlay.Register(target, autoPlay, machineWide, handler)); dispatcher.Add((ComServer comServer) => Windows.ComServer.Register(target, comServer, machineWide, handler)); if (machineWide || WindowsUtils.IsWindows8) { dispatcher.Add((AppRegistration appRegistration) => Windows.AppRegistration.Register(target, appRegistration, capabilities.OfType <VerbCapability>(), machineWide, handler)); } if (machineWide) { dispatcher.Add((Store.Model.Capabilities.DefaultProgram defaultProgram) => Windows.DefaultProgram.Register(target, defaultProgram, handler)); } } else if (UnixUtils.IsUnix) { dispatcher.Add((Store.Model.Capabilities.FileType fileType) => Unix.FileType.Register(target, fileType, machineWide, handler)); dispatcher.Add((Store.Model.Capabilities.UrlProtocol urlProtocol) => Unix.UrlProtocol.Register(target, urlProtocol, machineWide, handler)); dispatcher.Add((Store.Model.Capabilities.DefaultProgram defaultProgram) => Unix.DefaultProgram.Register(target, defaultProgram, machineWide, handler)); } dispatcher.Dispatch(capabilities); }
public void TestDispatchFunc() { var sub1Orig = new Sub1(); var sub2Orig = new Sub2(); var dispatcher = new PerTypeDispatcher<Base, Base>(false) { (Sub1 sub1) => sub1, (Sub2 sub2) => sub2 }; dispatcher.Dispatch(sub1Orig).Should().BeSameAs(sub1Orig); dispatcher.Dispatch(sub2Orig).Should().BeSameAs(sub2Orig); }