完善功能

This commit is contained in:
root 2024-11-30 19:24:00 +08:00
parent c3a4faae8f
commit cf25e63de7
4 changed files with 29 additions and 10 deletions

2
.gitignore vendored
View file

@ -1,5 +1,7 @@
src/bin src/bin
src/.vs src/.vs
src/obj src/obj
src/lib
src/download
src/.config src/.config
*.user *.user

View file

@ -91,9 +91,9 @@ namespace iFileProxy.Controllers
} }
// 如果任务正在运行,先尝试中断 // 如果任务正在运行,先尝试中断
if (taskInfo.Status == TaskState.Running) if (taskInfo.Status == TaskState.Running && _taskManager.GetRunningTaskInfo(taskId) != null)
{ {
_taskManager.TryKillTask(taskInfo); _taskManager.TryKillTask(_taskManager.GetRunningTaskInfo(taskId));
} }
// 删除任务记录 // 删除任务记录
@ -165,7 +165,7 @@ namespace iFileProxy.Controllers
try try
{ {
// 先获取任务信息 // 先获取任务信息
var taskInfo = _dbGateService.GetTaskDetail(taskId); var taskInfo = _taskManager.GetRunningTaskInfo(taskId);
if (taskInfo == null) if (taskInfo == null)
{ {
return Ok(new CommonRsp return Ok(new CommonRsp

View file

@ -324,7 +324,7 @@ namespace iFileProxy.Services
sqlCmd.Parameters.AddWithValue("@tid", taskInfo.TaskId); sqlCmd.Parameters.AddWithValue("@tid", taskInfo.TaskId);
if (sqlCmd.ExecuteNonQuery() >= 1) if (sqlCmd.ExecuteNonQuery() >= 1)
{ {
_logger.Debug($"Task: {taskInfo.TaskId} Status Change to {taskInfo.Status}"); _logger.Information($"Task: {taskInfo.TaskId} Status Change to {taskInfo.Status}");
return true; return true;
} }
else else

View file

@ -237,7 +237,6 @@ namespace iFileProxy.Services
{ {
_logger.Error($"task: {taskInfo.TaskId} 进程退出状态异常 ExitCode: {aria2c.ExitCode}"); _logger.Error($"task: {taskInfo.TaskId} 进程退出状态异常 ExitCode: {aria2c.ExitCode}");
taskInfo.Status = TaskState.Error; taskInfo.Status = TaskState.Error;
_dbGateService.UpdateTaskStatus(taskInfo);
} }
else else
{ {
@ -341,6 +340,16 @@ namespace iFileProxy.Services
return new ServerTaskLoadInfo { Queuing = _pendingTasks.Count , Running = _runningTasks.Count}; return new ServerTaskLoadInfo { Queuing = _pendingTasks.Count , Running = _runningTasks.Count};
} }
public TaskInfo? GetRunningTaskInfo(string taskId)
{
if (_runningTasks.TryGetValue(taskId, out var taskInfo))
{
return taskInfo;
}
return null;
}
public void TryKillTask(TaskInfo taskInfo) public void TryKillTask(TaskInfo taskInfo)
{ {
try try
@ -349,13 +358,20 @@ namespace iFileProxy.Services
if (_runningTasks.TryGetValue(taskInfo.TaskId, out var runningTask)) if (_runningTasks.TryGetValue(taskInfo.TaskId, out var runningTask))
{ {
_logger.Information($"正在尝试中断任务: {taskInfo.TaskId}"); _logger.Information($"正在尝试中断任务: {taskInfo.TaskId}");
// 更新任务状态为已取消
taskInfo.Status = TaskState.Canceled;
_dbGateService.UpdateTaskStatus(taskInfo);
// 如果存在进程则kill掉
foreach (var p in Process.GetProcesses())
{
if (p.Id == taskInfo.Process.Id)
p.Kill();
}
// 从运行任务字典中移除 // 从运行任务字典中移除
_runningTasks.Remove(taskInfo.TaskId); _runningTasks.Remove(taskInfo.TaskId);
// 更新任务状态为已取消
taskInfo.Status = TaskState.Canceled;
_dbGateService.UpdateTaskStatus(taskInfo);
// 删除未完成的文件 // 删除未完成的文件
var filePath = Path.Combine(_appConfig.DownloadOptions.SavePath, taskInfo.FileName); var filePath = Path.Combine(_appConfig.DownloadOptions.SavePath, taskInfo.FileName);
@ -382,7 +398,8 @@ namespace iFileProxy.Services
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.Error($"中断任务时发生错误: {ex.Message}"); _logger.Error("中断任务时发生错误: {ex}",ex);
throw; throw;
} }
} }