public HttpResponseMessage DeleteByQuery(string query) { var status = new DeleteByQueryOperationStatus(); var cts = new CancellationTokenSource(); var task = Task.Factory.StartNew(() => { try { int totalResults; long durationInMs; status.LastProgress = "Searching for files matching the query..."; var keys = Search.Query(query, null, 0, int.MaxValue, out totalResults, out durationInMs); status.LastProgress = $"Deleting {totalResults} files..."; Action <string> progress = s => status.LastProgress = s; DeleteFiles(keys, totalResults, progress); SynchronizationTask.Context.NotifyAboutWork(); } catch (Exception e) { status.Faulted = true; status.State = RavenJObject.FromObject(new { Error = e.ToString() }); if (e is InvalidDataException) { status.ExceptionDetails = e.Message; } else { status.ExceptionDetails = e.ToString(); } throw; } finally { status.Completed = true; } }, cts.Token); long id; FileSystem.Tasks.AddTask(task, status, new Actions.TaskActions.PendingTaskDescription { StartTime = SystemTime.UtcNow, TaskType = Actions.TaskActions.PendingTaskType.DeleteFilesByQuery, Payload = string.Format("Delete by query: '{0}', for file system: {1}.", query, FileSystem.Name), }, out id, cts); return(GetMessageWithObject(new { OperationId = id }, HttpStatusCode.Accepted)); }
public HttpResponseMessage DeleteByQuery(string query) { var status = new DeleteByQueryOperationStatus(); var cts = new CancellationTokenSource(); var task = Task.Factory.StartNew(() => { try { int totalResults; status.LastProgress = "Searching for files matching the query..."; var keys = Search.Query(query, null, 0, int.MaxValue, out totalResults); status.LastProgress = string.Format("Deleting {0} files...", totalResults); Action<string> progress = s => status.LastProgress = s; DeleteFiles(keys, totalResults, progress); SynchronizationTask.Context.NotifyAboutWork(); } catch (Exception e) { status.Faulted = true; status.State = RavenJObject.FromObject(new { Error = e.ToString() }); if (e is InvalidDataException) { status.ExceptionDetails = e.Message; } else { status.ExceptionDetails = e.ToString(); } throw; } finally { status.Completed = true; } }, cts.Token); long id; FileSystem.Tasks.AddTask(task, status, new Actions.TaskActions.PendingTaskDescription { StartTime = SystemTime.UtcNow, TaskType = Actions.TaskActions.PendingTaskType.DeleteFilesByQuery, Payload = string.Format("Delete by query: '{0}', for file system: {1}.", query, FileSystem.Name), }, out id, cts); return GetMessageWithObject(new { OperationId = id }); }