private FileSystemMediaFileFolder CreateFolder(string dir) { string relativeDir = GetRelativePath(dir); var folder = new FileSystemMediaFileFolder(relativeDir, Store.Id, _context.CreateDataSourceId(new MediaDataId(_folderType, relativeDir), typeof(IMediaFileFolder))); folder.IsReadOnly = IsReadOnlyFolder(folder.Path); return(folder); }
public T GetData <T>(IDataId dataId) where T : class, IData { if (dataId == null) { throw new ArgumentNullException("dataId"); } CheckInterface(typeof(T)); MediaDataId mediaDataId = dataId as MediaDataId; if (mediaDataId == null) { return(null); } if (mediaDataId.MediaType == _folderType) { if (typeof(T) != typeof(IMediaFileFolder)) { throw new ArgumentException("The dataId specifies a IMediaFileFolder, but the generic method was invoked with different type"); } FileSystemMediaFileFolder folder = (from dirInfo in C1Directory.GetDirectories(_rootDir, "*", SearchOption.AllDirectories) where GetRelativePath(dirInfo) == mediaDataId.Path select CreateFolder(dirInfo)).FirstOrDefault(); return(folder as T); } else if (mediaDataId.MediaType == _fileType) { if (typeof(T) != typeof(IMediaFile)) { throw new ArgumentException("The dataId specifies a IMediaFile, but the generic method was invoked with different type"); } FileSystemMediaFile file = (from fileInfo in C1Directory.GetFiles(_rootDir, "*", SearchOption.AllDirectories) where GetRelativePath(Path.GetDirectoryName(fileInfo)) == mediaDataId.Path && Path.GetFileName(fileInfo) == mediaDataId.FileName select CreateFile(fileInfo)).FirstOrDefault(); return(file as T); } else { return(Store as T); } }