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
{
///
/// Class IsoManager
///
public class IsoManager : IIsoManager
{
///
/// The _mounters
///
private readonly List _mounters = new List();
///
/// Mounts the specified iso path.
///
/// The iso path.
/// The cancellation token.
/// IsoMount.
/// isoPath
///
public Task 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);
}
///
/// Determines whether this instance can mount the specified path.
///
/// The path.
/// true if this instance can mount the specified path; otherwise, false.
public bool CanMount(string path)
{
return _mounters.Any(i => i.CanMount(path));
}
///
/// Adds the parts.
///
/// The mounters.
public void AddParts(IEnumerable mounters)
{
_mounters.AddRange(mounters);
}
///
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
///
public void Dispose()
{
foreach (var mounter in _mounters)
{
mounter.Dispose();
}
}
}
}