/// <summary> /// Shows a Ok/Cancel dialog. /// </summary> /// <returns>True if Ok</returns> public static GfycatCreateRequest OkCancel(GfycatPreset preset) { var dialog = new UploadDetailsDialog(); dialog.PrepareOkCancel(preset); var result = dialog.ShowDialog(); if (!result.HasValue || !result.Value) { return(null); } var tags = dialog.TagsTextBox.Text.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); tags = tags.Length > 0 ? tags.Select(s => s.Trim()).ToArray() : null; return(new GfycatCreateRequest { Tile = dialog.TitleTextBox.Text, Description = dialog.DescriptionTextBox.Text, Tags = tags, IsPrivate = dialog.IsPrivateCheckBox.IsChecked == true }); }
private async Task <History> Upload(GfycatPreset preset, string path, NameValueCollection headers) { var create = preset.AskForDetails ? Application.Current.Dispatcher.Invoke <GfycatCreateRequest>(() => UploadDetailsDialog.OkCancel(preset)) : preset.ToCreateRequest(); var result = await WebHelper.Post("https://api.gfycat.com/v1/gfycats", Serializer.Serialize(create), headers); var createResponse = Serializer.Deserialize <GfycatCreateResponse>(result); if (createResponse.Error != null) { return new GfycatHistory { PresetName = preset.Title, DateInUtc = DateTime.UtcNow, Result = 400, GfyName = createResponse.Name, Message = createResponse.Error.Code + " - " + createResponse.Error.Description } } ; await using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var args = new Dictionary <string, string> { { "key", createResponse.Name } }; //I can't send the authorization header along the file upload. result = await WebHelper.SendFile("https://filedrop.gfycat.com", stream, createResponse.Name, args); //If response is empty/null, it means that the file was already processed. var uploadResponse = string.IsNullOrWhiteSpace(result) ? null : Serializer.Deserialize <GfycatUploadResponse>(result); while (uploadResponse?.Task != "complete") { result = await WebHelper.Get("https://api.gfycat.com/v1/gfycats/fetch/status/" + createResponse.Name, headers); uploadResponse = Serializer.Deserialize <GfycatUploadResponse>(result); if (uploadResponse.Task != "complete") { Thread.Sleep(1000); } else if (uploadResponse.Task == "error") { return new GfycatHistory { PresetName = preset.Title, DateInUtc = DateTime.UtcNow, Result = 400, GfyName = createResponse.Name, Message = uploadResponse.Error?.Code + " - " + uploadResponse.Error?.Description } } ; } var history = new GfycatHistory { PresetName = preset.Title, DateInUtc = DateTime.UtcNow, Result = 200, Link = "https://gfycat.com/" + uploadResponse.GfyName, Size = uploadResponse.Mp4Size, DeletionLink = "https://gfycat.com/delete/" + createResponse.Secret, Mp4Url = uploadResponse.Mp4Url, WebmUrl = uploadResponse.WebmUrl, GifUrl = uploadResponse.GifUrl, MobileUrl = uploadResponse.MobileUrl, WebmSize = uploadResponse.WebmSize, GifSize = uploadResponse.GifSize, GfyId = uploadResponse.GfyId, GfyName = uploadResponse.GfyName }; return(history); } }