private async Task UploadItem(UploadDetails details) { if (!await ShouldUpload(details)) { return; } try { var filePath = FileManager.GetFilePath(_config, details.DataId); Console.WriteLine($"Uploading on {Environment.CurrentManagedThreadId}"); var url = await UploadFileCore(GetId(details.DataId), filePath); Console.WriteLine($"Updating Realm on {Environment.CurrentManagedThreadId}"); var success = await _runner.Execute((realm) => { using (var transaction = realm.BeginWrite()) { var data = realm.Find <FileData>(details.DataId); if (data == null) { transaction.Rollback(); return(false); } data.Url = url; data.Status = DataStatus.Remote; transaction.Commit(); return(true); } }); if (success) { OnFileUploaded?.Invoke(this, new FileUploadedEventArgs { FileDataId = details.DataId, FilePath = filePath, RealmConfig = _config, }); } else { Logger.Error($"Could not find data with Id: {details.DataId}"); await DeleteFileCore(details.DataId); } } catch (Exception ex) { Logger.Error(ex.Message); _ = Task.Delay(details.RetryAfter).ContinueWith(_ => { EnqueueUpload(details.DataId, Math.Min(details.RetryAfter * 2, MaxRetryDelay)); }); } }
private static RemoteFileManager GetManager(RealmConfigurationBase config) { return(_remoteManagers.GetOrAdd(config.DatabasePath, (key) => { var result = _remoteManagerFactory(); result.Start(config); result.OnFileUploaded += (s, e) => { OnFileUploaded?.Invoke(s, e); }; // TODO: trigger cleanup event with a list of files that can be deleted. return result; })); }
public void UploadFile(FileData fileData) => OnFileUploaded?.Invoke(this, fileData);
protected async Task <bool> Sync(string[] images, object sender) { try { foreach (var filePath in images) { var isUploaded = false; var tags = filePath.GetFileTags(); var fileNotExists = !DirectoryHelper.FileExists(Path.Combine( DirectoryHelper.UploadedImagesPath, filePath.GetFileName())); var path = DirectoryHelper.FailedImagesPath; if (fileNotExists) { path = DirectoryHelper.UploadedImagesPath; try { var fileName = filePath.GetFileName(); if (tempFileName.Equals(fileName)) { return(false); } tempFileName = fileName; using (var img = Image.FromFile(filePath)) { isUploaded = await Upload(ImageToByteArray(img), fileName, tags); } } catch (Exception e) { LoggingHelper.Save(e); isUploaded = false; } } var done = fileNotExists && isUploaded; if (done) { OnFileUploaded?.Invoke(sender, new ImageEventArgs { ImagePath = filePath, TargetPath = path }); } else { OnUploadFailed?.Invoke(sender, new ImageEventArgs { ImagePath = filePath, TargetPath = path }); } OnAllFilesUploaded?.Invoke(sender, EventArgs.Empty); } return(true); } catch (Exception ex) { LoggingHelper.Save(ex); return(false); } }