Beispiel #1
0
        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));
        }
Beispiel #2
0
		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
			});
		}