Class IntegrationManager
- Namespace
- ZeroInstall.DesktopIntegration
- Assembly
- ZeroInstall.DesktopIntegration.dll
Manages an AppList and desktop integration via AccessPoints.
[MustDisposeResource]
public class IntegrationManager : IntegrationManagerBase, IDisposable, IIntegrationManager
- Inheritance
-
IntegrationManager
- Implements
- Derived
- Inherited Members
Remarks
To prevent race-conditions there may only be one desktop integration class instance active at any given time. This class acquires a mutex upon calling its constructor and releases it upon calling Dispose().
Constructors
IntegrationManager(Config, ITaskHandler, bool)
Creates a new integration manager using the default AppList (creating a new one if missing). Performs Mutex-based locking!
public IntegrationManager(Config config, ITaskHandler handler, bool machineWide = false)
Parameters
configConfigUser settings controlling network behaviour.
handlerITaskHandlerA callback object used when the user is to be informed about the progress of long-running operations such as downloads.
machineWideboolApply operations machine-wide instead of just for the current user.
Exceptions
- IOException
A problem occurred while accessing the AppList file.
- UnauthorizedAccessException
Read or write access to the AppList file is not permitted or another desktop integration class is currently active.
- InvalidDataException
A problem occurred while deserializing an XML file.
Fields
AppListPath
The storage location of the AppList file.
protected readonly string AppListPath
Field Value
ChangedWindowMessageID
The window message ID (for use with BroadcastMessage(int)) that signals integration changes to interested observers.
public static readonly int ChangedWindowMessageID
Field Value
Config
User settings controlling network behaviour.
protected readonly Config Config
Field Value
Properties
MutexName
The name of the cross-process mutex used to signal that a desktop integration process class is currently active.
protected override string MutexName { get; }
Property Value
Methods
AddAccessPointsInternal(AppEntry, Feed, IReadOnlyCollection<AccessPoint>)
Applies AccessPoints for an application.
protected override void AddAccessPointsInternal(AppEntry appEntry, Feed feed, IReadOnlyCollection<AccessPoint> accessPoints)
Parameters
appEntryAppEntryThe application being integrated.
feedFeedThe feed providing additional metadata, icons, etc. for the application.
accessPointsIReadOnlyCollection<AccessPoint>The access points to apply.
Exceptions
- ArgumentException
Entries from
appEntryis the same reference asaccessPoints.- OperationCanceledException
The user canceled the task.
- KeyNotFoundException
An AccessPoint reference to a Capability is invalid.
- ConflictException
One or more of the
accessPointswould cause a conflict with the existing AccessPoints in AppList.- WebException
A problem occurred while downloading additional data (such as icons).
- IOException
A problem occurred while writing to the filesystem or registry.
- UnauthorizedAccessException
Write access to the filesystem or registry is not permitted.
AddAppInternal(string, Requirements, Feed)
protected override AppEntry AddAppInternal(string petName, Requirements requirements, Feed feed)
Parameters
petNamestringThe user-defined pet-name of the application.
requirementsRequirementsThe requirements describing the application to add.
feedFeedThe feed providing additional metadata, capabilities, etc. for the application.
Returns
Exceptions
- InvalidOperationException
An application with the same
petNameis already in the list.- IOException
A problem occurred while writing to the filesystem or registry.
- UnauthorizedAccessException
Write access to the filesystem or registry is not permitted.
AddAppInternal(AppEntry, Converter<FeedUri, Feed>)
Creates a new AppEntry based on an existing prototype (applying any AccessPoints) and adds it to the AppList.
protected override void AddAppInternal(AppEntry prototype, Converter<FeedUri, Feed> feedRetriever)
Parameters
prototypeAppEntryAn existing AppEntry to use as a prototype.
feedRetrieverConverter<FeedUri, Feed>Callback method used to retrieve additional Feeds on demand.
AddAppInternal(FeedTarget)
protected override AppEntry AddAppInternal(FeedTarget target)
Parameters
targetFeedTargetThe application to add.
Returns
Exceptions
- InvalidOperationException
The application is already in the list.
- IOException
A problem occurred while writing to the filesystem or registry.
- UnauthorizedAccessException
Write access to the filesystem or registry is not permitted.
Finish()
To be called after integration operations have been completed to inform the desktop environment and save the AppList.
protected override void Finish()
GetDir(bool, params string[])
Returns a path for a directory that can be used for desktop integration.
public static string GetDir(bool machineWide, params string[] resource)
Parameters
machineWidebooltrueif the directory should be machine-wide and machine-specific instead of roaming with the user profile.resourcestring[]The directory name of the resource to be stored.
Returns
- string
A fully qualified directory path. The directory is guaranteed to already exist.
Remarks
If a new directory is created with machineWide set to true on Windows, ACLs are set to deny write access for non-Administrator users.
Exceptions
- IOException
A problem occurred while creating a directory.
- UnauthorizedAccessException
Creating a directory is not permitted.
RemoveAccessPointsInternal(AppEntry, IEnumerable<AccessPoint>)
Removes already applied AccessPoints for an application.
protected override void RemoveAccessPointsInternal(AppEntry appEntry, IEnumerable<AccessPoint> accessPoints)
Parameters
appEntryAppEntryThe AppEntry containing the
accessPoints.accessPointsIEnumerable<AccessPoint>The access points to unapply.
Exceptions
- KeyNotFoundException
An AccessPoint reference to a Capability is invalid.
- IOException
A problem occurred while writing to the filesystem or registry.
- UnauthorizedAccessException
Write access to the filesystem or registry is not permitted.
RemoveAppInternal(AppEntry)
Removes an AppEntry from the AppList while unapplying any remaining AccessPoints.
protected override void RemoveAppInternal(AppEntry appEntry)
Parameters
appEntryAppEntryThe application to remove.
Exceptions
- KeyNotFoundException
An AccessPoint reference to a Capability is invalid.
- IOException
A problem occurred while writing to the filesystem or registry.
- UnauthorizedAccessException
Write access to the filesystem or registry is not permitted.
RepairAppInternal(AppEntry, Feed)
Reapplies all AccessPoints for a specific AppEntry.
protected override void RepairAppInternal(AppEntry appEntry, Feed feed)
Parameters
appEntryAppEntryThe application entry to repair.
feedFeedThe feed providing additional metadata, capabilities, etc. for the application.
Exceptions
- OperationCanceledException
The user canceled the task.
- ConflictException
appEntryconflicts with the rest of the AppList.- WebException
A problem occurred while downloading additional data (such as icons).
- IOException
A problem occurred while writing to the filesystem or registry.
- UnauthorizedAccessException
Write access to the filesystem or registry is not permitted.
UpdateAppInternal(AppEntry, Feed)
Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints.
protected override void UpdateAppInternal(AppEntry appEntry, Feed feed)
Parameters
appEntryAppEntryThe application entry to update.
feedFeedThe feed providing additional metadata, capabilities, etc. for the application.
Exceptions
- KeyNotFoundException
An AccessPoint reference to a Capability is invalid.