具备界面基础功能
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace SHH.CameraDashboard
|
||||
{
|
||||
public partial class CameraRepository
|
||||
{
|
||||
public async Task<bool> UpdateImageProcessingAsync(CameraEditInfo dto)
|
||||
{
|
||||
if (dto == null) return false;
|
||||
|
||||
var serviceNode = AppGlobal.UseServiceNode;
|
||||
if (serviceNode == null) return false;
|
||||
|
||||
// 1. 使用专用的 Processing 路由
|
||||
string requestUrl = $"http://{serviceNode.ServiceNodeIp}:{serviceNode.ServiceNodePort}{WebApiRoutes.Cameras.Processing(dto.Id.ToString())}";
|
||||
|
||||
// 2. 解析分辨率字符串 (例如 "1920x1080" -> 1920, 1080)
|
||||
int width = 1280; // 默认值
|
||||
int height = 720;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(dto.TargetResolution))
|
||||
{
|
||||
var parts = dto.TargetResolution.ToLower().Split('x');
|
||||
if (parts.Length == 2)
|
||||
{
|
||||
int.TryParse(parts[0], out width);
|
||||
int.TryParse(parts[1], out height);
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 2. 构建精简的专用 JSON Payload
|
||||
// 只包含图像处理相关的字段,不发送其他干扰信息
|
||||
var payload = new
|
||||
{
|
||||
// --- 分辨率 (拆分成 int) ---
|
||||
targetWidth = width,
|
||||
targetHeight = height,
|
||||
|
||||
// 确保这些字段名与后端 Processing 接口的定义一致
|
||||
useGrayscale = dto.UseGrayscale,
|
||||
enhanceImage = dto.EnhanceImage,
|
||||
|
||||
// 缩放控制
|
||||
allowShrink = dto.AllowShrink,
|
||||
allowEnlarge = dto.AllowEnlarge, // 这里使用你确认过的 AllowEnlarge
|
||||
|
||||
// 目标分辨率
|
||||
targetResolution = dto.TargetResolution ?? ""
|
||||
};
|
||||
|
||||
string jsonBody = JsonHelper.Serialize(payload);
|
||||
|
||||
// 3. 发送请求
|
||||
// 通常专用功能接口使用 POST 或 PUT。根据你的路由命名(Processing 是名词/动词),
|
||||
// 且是对资源的部分修改,PUT 的可能性较大;但如果是“执行处理”,也可能是 POST。
|
||||
// 建议先试 PUT (因为是 Update 操作),如果报 405 则改 POST。
|
||||
await WebApiService.Instance.PostAsync(requestUrl, jsonBody, "图像处理配置");
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"更新图像处理配置失败: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// [新增] 获取指定设备的图像处理配置
|
||||
/// 对应后端: GET /api/cameras/{id}/processing
|
||||
/// </summary>
|
||||
public async Task<CameraEditInfo> GetImageProcessingAsync(long id)
|
||||
{
|
||||
var serviceNode = AppGlobal.UseServiceNode;
|
||||
if (serviceNode == null) return null;
|
||||
|
||||
// 1. 拼接 URL: http://.../api/Cameras/1001/processing
|
||||
string requestUrl = $"http://{serviceNode.ServiceNodeIp}:{serviceNode.ServiceNodePort}{WebApiRoutes.Cameras.Root}/{id}/processing";
|
||||
|
||||
try
|
||||
{
|
||||
// 2. 发送 GET 请求
|
||||
string jsonResponse = await WebApiService.Instance.GetAsync(requestUrl, "获取图像处理配置");
|
||||
if (string.IsNullOrEmpty(jsonResponse)) return null;
|
||||
|
||||
// 3. 解析后端返回的 ProcessingOptions JSON
|
||||
// 注意:这里定义一个临时类来匹配后端 JSON 结构,确保字段名一致
|
||||
var options = JsonHelper.Deserialize<ProcessingOptionsDto>(jsonResponse);
|
||||
if (options == null) return null;
|
||||
|
||||
// 4. 映射回 CameraEditInfo 给 ViewModel 使用
|
||||
return new CameraEditInfo
|
||||
{
|
||||
Id = id,
|
||||
// 将宽高拼回 "1920x1080" 格式
|
||||
TargetResolution = $"{options.targetWidth}x{options.targetHeight}",
|
||||
|
||||
// 映射开关 (注意字段名对应关系)
|
||||
AllowShrink = options.enableShrink,
|
||||
AllowEnlarge = options.enableExpand, // 后端叫 EnableExpand
|
||||
EnhanceImage = options.enableBrightness
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[Repository] 获取图像配置失败: {ex.Message}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// [内部类] 用于接收后端 JSON 的 DTO
|
||||
// 字段名需与后端 ProcessingOptions 序列化出来的 JSON 字段一致 (通常是 camelCase)
|
||||
private class ProcessingOptionsDto
|
||||
{
|
||||
public int targetWidth { get; set; }
|
||||
public int targetHeight { get; set; }
|
||||
public bool enableShrink { get; set; }
|
||||
public bool enableExpand { get; set; } // 对应后端的 EnableExpand
|
||||
public bool enableBrightness { get; set; } // 对应后端的 EnableBrightness
|
||||
public int brightness { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user