57 lines
1.8 KiB
C#
57 lines
1.8 KiB
C#
using System;
|
|
using System.IO;
|
|
using appsrv.server;
|
|
using System.Collections.Generic;
|
|
using appsrv.exceptions;
|
|
|
|
namespace appsrv.resources
|
|
{
|
|
public class DirectoryResource : Resource
|
|
{
|
|
public DirectoryInfo DirectoryInfo { get; }
|
|
public bool IndexingEnabled { get; set; }
|
|
|
|
public DirectoryResource(DirectoryInfo directoryInfo)
|
|
:this(directoryInfo,null)
|
|
{
|
|
}
|
|
public DirectoryResource(DirectoryInfo directoryInfo,Resource container)
|
|
:base(directoryInfo.Name,container)
|
|
{
|
|
DirectoryInfo = directoryInfo;
|
|
}
|
|
|
|
public override void Hit(Stack<string> requestPath, HttpRequest request)
|
|
{
|
|
if (requestPath.Count > 0)
|
|
{
|
|
String nextResourceName = requestPath.Pop();
|
|
|
|
DirectoryInfo[] directoryInfos = DirectoryInfo.GetDirectories(nextResourceName);
|
|
if (directoryInfos.Length == 1){
|
|
DirectoryResource directoryResource = new DirectoryResource(directoryInfos[0],this);
|
|
directoryResource.Request(requestPath, request);
|
|
} else {
|
|
FileInfo[] fileInfos = DirectoryInfo.GetFiles(nextResourceName);
|
|
if (fileInfos.Length == 1){
|
|
FileResource fileResource = new FileResource(fileInfos[0],this);
|
|
fileResource.Request(requestPath, request);
|
|
} else {
|
|
throw new ResourceNotFoundException(Path, nextResourceName);
|
|
}
|
|
}
|
|
|
|
} else {
|
|
if (IndexingEnabled){
|
|
|
|
// ToDo: Create index...
|
|
|
|
} else {
|
|
base.Hit(requestPath, request);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|