public void Update(ImageEntry entry, ImageStatus status) { lock (myLock) { var image = this.DbContext.Image.Single(x => x.Id == entry.Id); image.Status = status; this.DbContext.SaveChanges(); } }
private SourceImage GetFromCacheEntry( ImageEntry entry) { FileInfo file = null; var status = this.TryConvertPath(entry.Key, out file) ? entry.Status : ImageStatus.Skipped; return new SourceImage( entry.Key, file, entry.LastModified, entry.FileSize, status); }
public async Task<FileInfo> DownloadAsync( SourceImage image, ImageEntry entry, DownloadTracker tracker, DatabaseTracker dbTracker) { var file = image.File; var started = false; long downloaded = 0; try { var response = await this.Client.GetObjectAsync(new GetObjectRequest() { BucketName = this.BucketName, Key = image.Key }); var tmp = Path.GetTempFileName(); long transferred = 0; response.WriteObjectProgressEvent += (sender, p) => { if (!started) { tracker.Start(); } started = true; downloaded = p.TransferredBytes; tracker.Downloaded(downloaded - transferred); transferred = downloaded; }; await response.WriteResponseStreamToFileAsync(tmp, false, CancellationToken.None); if (this.DebugMode) { File.Delete(tmp); } else { if (!this.SafeMove(tmp, file.FullName)) { image.MarkFailed(); dbTracker.Update(entry, ImageStatus.Failed); tracker.Fail(); return null; } } this.Logger.LogDebug("Download Complete: {0} -> {1}", image.Key, file?.FullName ?? "-"); image.MarkCompleted(); dbTracker.Update(entry, ImageStatus.Completed); if (started) { tracker.Complete(); } return file; } catch (Exception ec) { this.Logger.LogDebug("Download Failed: {0} -> {1}", image.Key, file?.FullName ?? "-"); this.Logger.LogDebug("Exception: {0}", ec.ToString()); image.MarkFailed(); dbTracker.Update(entry, ImageStatus.Failed); if (started) { tracker.Fail(); tracker.Downloaded(image.TotalBytes - downloaded); } return null; } }