// // Created by Shell on 2026-06-18. // #ifndef SEADISK_SEAFILE_FILE_SYSTEM_HPP #define SEADISK_SEAFILE_FILE_SYSTEM_HPP #include #include #include "../api/seafile_api.hpp" #include "../api/token_type.hpp" namespace seafile::fs { class SeafileFileSystem final { std::string repo_id; std::string token; TokenType token_type = TokenType::TOKEN; SeaFileApi api; std::wstring volume_label; public: explicit SeafileFileSystem(const std::string& server, const std::wstring& volume_label) : api(server), volume_label(volume_label) { } tl::expected initialize(const std::string& username, const std::string& password); SeafileFileSystem(const SeafileFileSystem&) = delete; SeafileFileSystem(SeafileFileSystem&&) = delete; SeafileFileSystem& operator=(const SeafileFileSystem&) = delete; SeafileFileSystem& operator=(SeafileFileSystem&&) = delete; NTSTATUS GetVolumeInfo(FSP_FSCTL_VOLUME_INFO* VolumeInfo) const; NTSTATUS SetVolumeLabel_(PWSTR VolumeLabel, FSP_FSCTL_VOLUME_INFO* VolumeInfo); NTSTATUS GetSecurityByName(PWSTR FileName, PUINT32 PFileAttributes, PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T* PSecurityDescriptorSize); NTSTATUS Create(PWSTR FileName, UINT32 CreateOptions, UINT32 GrantedAccess, UINT32 FileAttributes, PSECURITY_DESCRIPTOR SecurityDescriptor, UINT64 AllocationSize, PVOID* PFileContext, FSP_FSCTL_FILE_INFO* FileInfo); NTSTATUS Open( PWSTR FileName, UINT32 CreateOptions, UINT32 GrantedAccess, PVOID* PFileContext, FSP_FSCTL_FILE_INFO* FileInfo); NTSTATUS Read(PVOID FileContext, PVOID Buffer, UINT64 Offset, ULONG Length, PULONG PBytesTransferred); NTSTATUS GetFileInfo(HANDLE Handle, FSP_FSCTL_FILE_INFO* FileInfo); VOID Close(PVOID FileContext0); VOID Cleanup(PVOID FileContext, PWSTR FileName, ULONG Flags); NTSTATUS Overwrite( PVOID FileContext, UINT32 FileAttributes, BOOLEAN ReplaceFileAttributes, UINT64 AllocationSize, FSP_FSCTL_FILE_INFO* FileInfo); NTSTATUS ReadDirectory(PVOID FileContext, PWSTR Pattern, PWSTR Marker, PVOID Buffer, ULONG BufferLength, PULONG PBytesTransferred); NTSTATUS GetDirInfoByName(PVOID FileContext, PWSTR FileName, FSP_FSCTL_DIR_INFO* DirInfo); }; } #endif //SEADISK_SEAFILE_FILE_SYSTEM_HPP