public async Task <PublishResult> SubmitAsync(IProgress <float> progress = null) { var result = default(PublishResult); progress?.Report(0); if (consumerAppId == 0) { consumerAppId = SteamClient.AppId; } // // Checks // if (ContentFolder != null) { if (!System.IO.Directory.Exists(ContentFolder.FullName)) { throw new System.Exception($"UgcEditor - Content Folder doesn't exist ({ContentFolder.FullName})"); } if (!ContentFolder.EnumerateFiles("*", System.IO.SearchOption.AllDirectories).Any()) { throw new System.Exception($"UgcEditor - Content Folder is empty"); } } // // Item Create // if (creatingNew) { result.Result = Steamworks.Result.Fail; var created = await SteamUGC.Internal.CreateItem(consumerAppId, creatingType); if (!created.HasValue) { return(result); } result.Result = created.Value.Result; if (result.Result != Steamworks.Result.OK) { return(result); } FileId = created.Value.PublishedFileId; result.NeedsWorkshopAgreement = created.Value.UserNeedsToAcceptWorkshopLegalAgreement; result.FileId = FileId; } result.FileId = FileId; // // Item Update // { var handle = SteamUGC.Internal.StartItemUpdate(consumerAppId, FileId); if (handle == 0xffffffffffffffff) { return(result); } if (Title != null) { SteamUGC.Internal.SetItemTitle(handle, Title); } if (Description != null) { SteamUGC.Internal.SetItemDescription(handle, Description); } if (MetaData != null) { SteamUGC.Internal.SetItemMetadata(handle, MetaData); } if (Language != null) { SteamUGC.Internal.SetItemUpdateLanguage(handle, Language); } if (ContentFolder != null) { SteamUGC.Internal.SetItemContent(handle, ContentFolder.FullName); } if (PreviewFile != null) { SteamUGC.Internal.SetItemPreview(handle, PreviewFile); } if (Visibility.HasValue) { SteamUGC.Internal.SetItemVisibility(handle, Visibility.Value); } if (Tags != null && Tags.Count > 0) { using (var a = SteamParamStringArray.From(Tags.ToArray())) { var val = a.Value; SteamUGC.Internal.SetItemTags(handle, ref val); } } if (KeyValueTagsToRemove != null) { foreach (var key in KeyValueTagsToRemove) { SteamUGC.Internal.RemoveItemKeyValueTags(handle, key); } } if (KeyValueTags != null) { foreach (var keyWithValues in KeyValueTags) { var key = keyWithValues.Key; foreach (var value in keyWithValues.Value) { SteamUGC.Internal.AddItemKeyValueTag(handle, key, value); } } } result.Result = Steamworks.Result.Fail; if (ChangeLog == null) { ChangeLog = ""; } var updating = SteamUGC.Internal.SubmitItemUpdate(handle, ChangeLog); while (!updating.IsCompleted) { if (progress != null) { ulong total = 0; ulong processed = 0; var r = SteamUGC.Internal.GetItemUpdateProgress(handle, ref processed, ref total); switch (r) { case ItemUpdateStatus.PreparingConfig: { progress?.Report(0.1f); break; } case ItemUpdateStatus.PreparingContent: { progress?.Report(0.2f); break; } case ItemUpdateStatus.UploadingContent: { var uploaded = total > 0 ? ((float)processed / (float)total) : 0.0f; progress?.Report(0.2f + uploaded * 0.7f); break; } case ItemUpdateStatus.UploadingPreviewFile: { progress?.Report(0.8f); break; } case ItemUpdateStatus.CommittingChanges: { progress?.Report(1); break; } } } await Task.Delay(1000 / 60); } progress?.Report(1); var updated = updating.GetResult(); if (!updated.HasValue) { return(result); } result.Result = updated.Value.Result; if (result.Result != Steamworks.Result.OK) { return(result); } result.NeedsWorkshopAgreement = updated.Value.UserNeedsToAcceptWorkshopLegalAgreement; result.FileId = FileId; } return(result); }