public async Task <Stream> ReadFileContentsAsync(SystemFilepath systemPath)
        {
            var(dirname, basename) = systemPath.Split();
            var directory = directoryFactory.Open(dirname);

            return(await directory.ReadFileAsync(basename));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
        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));
            }
        }
Пример #6
0
        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;