コード例 #1
0
    /// <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
        });
    }
コード例 #2
0
ファイル: Gfycat.cs プロジェクト: pawlos/ScreenToGif
    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);
        }
    }