You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.3 KiB
123 lines
4.3 KiB
using MediaBrowser.Common.Extensions;
|
|
using System;
|
|
using System.IO;
|
|
|
|
namespace MediaBrowser.Common.IO
|
|
{
|
|
/// <summary>
|
|
/// This is a wrapper for storing large numbers of files within a directory on a file system.
|
|
/// Simply pass a filename into GetResourcePath and it will return a full path location of where the file should be stored.
|
|
/// </summary>
|
|
public class FileSystemRepository
|
|
{
|
|
/// <summary>
|
|
/// Gets or sets the path.
|
|
/// </summary>
|
|
/// <value>The path.</value>
|
|
protected string Path { get; set; }
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="FileSystemRepository" /> class.
|
|
/// </summary>
|
|
/// <param name="path">The path.</param>
|
|
/// <exception cref="System.ArgumentNullException"></exception>
|
|
public FileSystemRepository(string path)
|
|
{
|
|
if (string.IsNullOrEmpty(path))
|
|
{
|
|
throw new ArgumentNullException();
|
|
}
|
|
|
|
Path = path;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the full path of where a resource should be stored within the repository
|
|
/// </summary>
|
|
/// <param name="uniqueName">Name of the unique.</param>
|
|
/// <param name="fileExtension">The file extension.</param>
|
|
/// <returns>System.String.</returns>
|
|
/// <exception cref="System.ArgumentNullException">
|
|
/// </exception>
|
|
public string GetResourcePath(string uniqueName, string fileExtension)
|
|
{
|
|
if (string.IsNullOrEmpty(uniqueName))
|
|
{
|
|
throw new ArgumentNullException("uniqueName");
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(fileExtension))
|
|
{
|
|
throw new ArgumentNullException("fileExtension");
|
|
}
|
|
|
|
var filename = uniqueName.GetMD5() + fileExtension;
|
|
|
|
return GetResourcePath(filename);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the resource path.
|
|
/// </summary>
|
|
/// <param name="filename">The filename.</param>
|
|
/// <returns>System.String.</returns>
|
|
/// <exception cref="System.ArgumentNullException"></exception>
|
|
public string GetResourcePath(string filename)
|
|
{
|
|
if (string.IsNullOrEmpty(filename))
|
|
{
|
|
throw new ArgumentNullException("filename");
|
|
}
|
|
|
|
var prefix = filename.Substring(0, 1);
|
|
|
|
var path = System.IO.Path.Combine(Path, prefix);
|
|
|
|
return System.IO.Path.Combine(path, filename);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Determines if a resource is present in the repository
|
|
/// </summary>
|
|
/// <param name="uniqueName">Name of the unique.</param>
|
|
/// <param name="fileExtension">The file extension.</param>
|
|
/// <returns><c>true</c> if the specified unique name contains resource; otherwise, <c>false</c>.</returns>
|
|
public bool ContainsResource(string uniqueName, string fileExtension)
|
|
{
|
|
return ContainsFilePath(GetResourcePath(uniqueName, fileExtension));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Determines if a file with a given name is present in the repository
|
|
/// </summary>
|
|
/// <param name="filename">The filename.</param>
|
|
/// <returns><c>true</c> if the specified filename contains filename; otherwise, <c>false</c>.</returns>
|
|
/// <exception cref="System.ArgumentNullException"></exception>
|
|
public bool ContainsFilename(string filename)
|
|
{
|
|
if (string.IsNullOrEmpty(filename))
|
|
{
|
|
throw new ArgumentNullException();
|
|
}
|
|
|
|
return ContainsFilePath(GetResourcePath(filename));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Determines if a file is present in the repository
|
|
/// </summary>
|
|
/// <param name="path">The path.</param>
|
|
/// <returns><c>true</c> if [contains file path] [the specified path]; otherwise, <c>false</c>.</returns>
|
|
/// <exception cref="System.ArgumentNullException"></exception>
|
|
public bool ContainsFilePath(string path)
|
|
{
|
|
if (string.IsNullOrEmpty(path))
|
|
{
|
|
throw new ArgumentNullException();
|
|
}
|
|
|
|
return File.Exists(path);
|
|
}
|
|
}
|
|
}
|