using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Crowdin.Plugin.Operations { using Helpers.PluginLocalization; using Models; using Models.Settings; using Server_API.Serializable.Screenshot; using Server_API.Services; /// Uploads a screenshot file to Crowdin, creating or updating it by file name. public static class UploadScreenshots { public static async Task RunAsync( ScreenshotsOptions options, IProgress progress, CancellationToken cancellationToken) { progress.Report(new OperationProgress(LocalizationHelper.GetLocalStringByKey(LocalKeys.sending_to_server))); var screenshotName = Path.GetFileName(options.ScreenshotPath); var storageService = new StorageApiService(); StorageData storage = await storageService.CreateStorage(screenshotName, options.ScreenshotPath, cancellationToken); var screenshotService = new ScreenshotsApiService(); List screenshots = await screenshotService.ListScreenshots(cancellationToken); ScreenshotResultData existing = screenshots.FirstOrDefault(data => data.name == screenshotName); int uploaded = 0; int updated = 0; ScreenshotResultData result; if (existing is null) { result = await screenshotService.AddScreenshot( new AddScreenshotQueryData { storageId = storage.id, name = screenshotName }, cancellationToken); uploaded = 1; } else { result = await screenshotService.UpdateScreenshot( existing.id, new UpdateScreenshotQueryData { storageId = storage.id, name = screenshotName }, cancellationToken); updated = 1; } progress.Report(new OperationProgress( LocalizationHelper.GetLocalStringByKey(LocalKeys.saved_screenshot, result.name))); return new ScreenshotsResult(uploaded, updated); } } }