/// <summary>
 /// Publish an event to notify media service that the image processing
 /// has been completed.
 /// </summary>
 /// <param name="id"></param>
 /// <param name="storageLocations"></param>
 /// <returns></returns>
 private async Task PublishMediaItemProcessedAsync(Guid id, List <MediaItemStorageLocationDto> storageLocations)
 {
     MediaItemProcessedEvent processedEvent = new MediaItemProcessedEvent
     {
         Id = id,
         StorageLocations = storageLocations,
     };
     await _bus.PublishAsync(processedEvent);
 }
        public async Task OnRequestAsync(MediaItemProcessedEvent request)
        {
            Logger.LogMessage("MediaItemProcessedEventProcessor Media Item Request. Id: {0}", request.Id);

            Stopwatch stopWatch = Stopwatch.StartNew();

            try
            {
                MediaItem mediaItem = await _mediaService.LoadAsync(request.Id);

                if (mediaItem == null)
                {
                    throw new Exception("Did not find media item to update");
                }

                await DeleteUploadedImageAsync(mediaItem);

                foreach (var mediaItemStorageLocationDto in request.StorageLocations)
                {
                    mediaItem.StorageLocations.Add(Mapper.Map <MediaItemStorageLocation>(mediaItemStorageLocationDto));
                }

                // Update the history type
                mediaItem.HistoryType = MediaHistoryType.History;
                await _mediaService.SaveAsync(mediaItem);

                // TODO: Also add/update a "Latest" type for the device
                // to allow quick access to the devices latest media?

                await RaiseNewMediaItem(mediaItem);
            }
            catch (Exception ex)
            {
                Logger.LogException(ex, "Error updating media item with processed locations");
            }
            finally
            {
                stopWatch.Stop();
                Logger.LogMessage("Metid Item Processed Event for {0} took {1}ms", request.Id, stopWatch.ElapsedMilliseconds);
            }
        }