public async Task <Stream> ReadFileContentsAsync(SystemFilepath systemPath) { var(dirname, basename) = systemPath.Split(); var directory = directoryFactory.Open(dirname); return(await directory.ReadFileAsync(basename)); }
public void ConfigureServices(IServiceCollection services) { var currentDirectory = new SystemFilepath(Directory.GetCurrentDirectory()); services .AddSingleton <IDirectoryFactory>(new DirectoryFactory(currentDirectory)) .AddSingleton <IFileHasher, FileHasher>() .AddSingleton <IDirectoryListingService, DirectoryListingService>() .AddSingleton <IFileContentService, FileContentService>() .AddControllers(options => options.SuppressAsyncSuffixInActionNames = false) .AddJsonOptions(options => options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull); }
private IEnumerable <FileSyncFile> GetAllFilesOnClient(SystemFilepath currentDirectory) { var directory = directoryFactory.Open(currentDirectory); foreach (var file in directory.GetFiles()) { yield return(FileSyncFile.FromFileInfo(file, currentDirectory)); } foreach (var subdirectory in directory.GetSubdirectories()) { var fullPath = currentDirectory.Combine(subdirectory.Name); foreach (var file in GetAllFilesOnClient(fullPath)) { yield return(file); } } }
static void ConfigureServices(IServiceCollection services) { var currentDirectory = new SystemFilepath(Directory.GetCurrentDirectory()); var httpClient = new HttpClient { BaseAddress = new AbsoluteUri("http://localhost:5000/") }; services .AddSingleton <IDirectoryFactory>(new DirectoryFactory(currentDirectory)) .AddSingleton <IFileHasher, FileHasher>() .AddSingleton <ITextView>(new ConsoleView { IsVerbose = true }) .AddSingleton(httpClient) .AddSingleton <IFileServiceApi, FileServiceHttpClient>() .AddSingleton <SyncClient>(); }
public IEnumerable <Either <FileSyncDirectory, FileSyncFile> > GetListing(SystemFilepath systemPath) { var directory = directoryFactory.Open(systemPath); foreach (var directoryInfo in directory.GetSubdirectories()) { yield return(FileSyncDirectory.FromDirectoryInfo( directoryInfo, parentDirectory: systemPath, listingEndpoint: Endpoints.Listing)); } foreach (var fileInfo in directory.GetFiles()) { yield return(FileSyncFile.FromFileInfo( fileInfo, parentDirectory: systemPath, fileHasher, contentEndpoint: Endpoints.Content)); } }
public Ciphertext <SHA1> HashFile(SystemFilepath filepath) { var fileContents = File.ReadAllText(filepath.ToString()); return(Ciphertext.SHA1(fileContents, salt: Array.Empty <byte>())); }
public FileSystemDirectory(SystemFilepath filepath) { Directory.CreateDirectory(filepath.ToString()); Filepath = filepath; }
public async Task WriteFileContentsAsync(SystemFilepath systemPath, Stream contents) { var(dirname, basename) = systemPath.Split(); var directory = directoryFactory.Open(dirname); await directory.WriteFileAsync(basename, contents); }
public DirectoryFactory(SystemFilepath root) => this.root = root;