diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-08-09 21:40:52 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-08-09 21:40:52 -0400 |
| commit | 058f9c11ff4e56c8359c4fae697616ddc54ec4c9 (patch) | |
| tree | afe9cbda78cc68e9c77bab45cd2215fc29ada3a9 /MediaBrowser.Common.Implementations/IO/IsoManager.cs | |
| parent | e0c387446b2562ac6b153d36d357a71e70fa736b (diff) | |
update to re-worked iso manager
Diffstat (limited to 'MediaBrowser.Common.Implementations/IO/IsoManager.cs')
| -rw-r--r-- | MediaBrowser.Common.Implementations/IO/IsoManager.cs | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/MediaBrowser.Common.Implementations/IO/IsoManager.cs b/MediaBrowser.Common.Implementations/IO/IsoManager.cs new file mode 100644 index 000000000..de88ddada --- /dev/null +++ b/MediaBrowser.Common.Implementations/IO/IsoManager.cs @@ -0,0 +1,75 @@ +using MediaBrowser.Model.IO; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Common.Implementations.IO +{ + /// <summary> + /// Class IsoManager + /// </summary> + public class IsoManager : IIsoManager + { + /// <summary> + /// The _mounters + /// </summary> + private readonly List<IIsoMounter> _mounters = new List<IIsoMounter>(); + + /// <summary> + /// Mounts the specified iso path. + /// </summary> + /// <param name="isoPath">The iso path.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>IsoMount.</returns> + /// <exception cref="System.ArgumentNullException">isoPath</exception> + /// <exception cref="System.ArgumentException"></exception> + public Task<IIsoMount> Mount(string isoPath, CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(isoPath)) + { + throw new ArgumentNullException("isoPath"); + } + + var mounter = _mounters.FirstOrDefault(i => i.CanMount(isoPath)); + + if (mounter == null) + { + throw new ArgumentException(string.Format("No mounters are able to mount {0}", isoPath)); + } + + return mounter.Mount(isoPath, cancellationToken); + } + + /// <summary> + /// Determines whether this instance can mount the specified path. + /// </summary> + /// <param name="path">The path.</param> + /// <returns><c>true</c> if this instance can mount the specified path; otherwise, <c>false</c>.</returns> + public bool CanMount(string path) + { + return _mounters.Any(i => i.CanMount(path)); + } + + /// <summary> + /// Adds the parts. + /// </summary> + /// <param name="mounters">The mounters.</param> + public void AddParts(IEnumerable<IIsoMounter> mounters) + { + _mounters.AddRange(mounters); + } + + /// <summary> + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// </summary> + public void Dispose() + { + foreach (var mounter in _mounters) + { + mounter.Dispose(); + } + } + } +} |
