FileShare/FileShare-Services/Services/FileLibrary/IFileLibraryEndpointService.cs
luoqian 2c20f9bb54 feat: 视频缩略图生成、最近文件面板与前端视图重构
- 新增 VideoThumbnailService,基于 ffmpeg 截取视频缩略图,ffprobe 提取时长
  - 新增 ManagedThumbnailMap 模型及多数据库迁移,存储缩略图元数据
  - 新增 /api/thumbnails/{id} 缩略图流端点
  - 新增最近添加/最近播放 API 与前端面板,支持列表/网格双视图切换
  - FileRecordDto 扩展 thumbnailUrl、videoDuration、lastPlayedAt 字段
  - 前端新增文件库 Tab 导航、卡片网格视图、视频海报与时长信息栏
  - 添加文件库目录不再同步全量扫描,改为后台异步自动扫描
2026-05-22 17:01:49 +08:00

93 lines
3.6 KiB
C#

using FileShare_Common.Core;
using FileShare_Services.Core;
namespace FileShare_Services.Services.FileLibrary
{
/// <summary>
/// 文件库 HTTP 端点服务接口,将 HTTP 请求适配到 <see cref="IFileLibraryService"/> 业务层。
/// </summary>
public interface IFileLibraryEndpointService
{
/// <summary>
/// 获取服务器所有磁盘驱动器。
/// </summary>
/// <param name="ctx">端点上下文。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> GetDrivesAsync(ServiceEndpointContext ctx);
/// <summary>
/// 查询指定路径下的子目录。
/// </summary>
/// <param name="request">包含路径的查询请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> GetDirectoriesAsync(DirectoryQueryRequest request);
/// <summary>
/// 获取所有已注册的文件库根目录。
/// </summary>
/// <param name="ctx">端点上下文。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> GetRootsAsync(ServiceEndpointContext ctx);
/// <summary>
/// 添加新的文件库根目录。
/// </summary>
/// <param name="request">包含路径和配置的请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> AddRootAsync(AddLibraryRootRequest request);
/// <summary>
/// 启用或禁用指定的文件库根目录。
/// </summary>
/// <param name="request">包含根目录 ID 和目标状态的请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> SetRootEnabledAsync(UpdateLibraryRootRequest request);
/// <summary>
/// 删除指定的文件库根目录。
/// </summary>
/// <param name="request">包含根目录 ID 的请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> DeleteRootAsync(DeleteLibraryRootRequest request);
/// <summary>
/// 立即扫描指定文件库根目录。
/// </summary>
/// <param name="request">包含根目录 ID 的请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> ScanRootAsync(ScanLibraryRootRequest request);
/// <summary>
/// 分页搜索已扫描的文件记录。
/// </summary>
/// <param name="request">包含分页和过滤条件的请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> SearchFilesAsync(SearchFilesRequest request);
/// <summary>
/// 根据 ID 获取文件详情。
/// </summary>
/// <param name="request">包含文件 ID 的请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> GetFileAsync(FileQueryRequest request);
/// <summary>
/// 获取文本文件预览内容。
/// </summary>
/// <param name="request">包含文件 ID 的请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> GetTextPreviewAsync(FileQueryRequest request);
/// <summary>
/// 浏览文件库目录结构。
/// </summary>
/// <param name="request">包含根目录 ID 和路径的请求。</param>
/// <returns>API 响应。</returns>
Task<IApiResponse> BrowseDirectoryAsync(BrowseDirectoryRequest request);
Task<IApiResponse> GetRecentFilesAsync(RecentFilesRequest request);
Task<IApiResponse> MarkFilePlayedAsync(MarkFilePlayedRequest request);
}
}