Example #1
0
    public static async Task <List <ImgurAlbum> > GetAlbums(ImgurPreset preset)
    {
        if (!await IsAuthorized(preset))
        {
            return(null);
        }

        var headers = new NameValueCollection
        {
            { "Authorization", "Bearer " + preset.AccessToken }
        };

        var response = await WebHelper.Get("https://api.imgur.com/3/account/me/albums", headers);

        var responseAux = Serializer.Deserialize <ImgurAlbumsResponse>(response);

        if (responseAux == null || (!responseAux.Success && responseAux.Status != 200))
        {
            return(null);
        }

        var list = responseAux.Data.Select(s => new ImgurAlbum(s)).ToList();

        preset.Albums = new ArrayList(list);

        return(list);
    }
Example #2
0
    public static async Task <ValidatedEventArgs> IsValid(ImgurPreset preset)
    {
        if (!preset.IsAnonymous && !await Imgur.IsAuthorized(preset))
        {
            return(new ValidatedEventArgs("S.SaveAs.Warning.Upload.NotAuthorized", StatusReasons.UploadServiceUnauthorized, () => App.MainViewModel.OpenOptions.Execute(Options.UploadIndex)));
        }

        return(await preset.IsValid());
    }
Example #3
0
    private async Task <History> Upload(ImgurPreset preset, string path, Dictionary <string, string> args, NameValueCollection headers)
    {
        await using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            var result = await WebHelper.SendFile("https://api.imgur.com/3/image", stream, path, args, headers, "image");

            var response = Serializer.Deserialize <ImgurUploadResponse>(result);

            //Error when sending video.
            //{"data":{"errorCode":null,"ticket":"7234557b"},"success":true,"status":200}
            //{"data":{"error":"No image data was sent to the upload api","request":"\/3\/image","method":"POST"},"success":false,"status":400}

            if (response == null || (!response.Success && response.Status != 200))
            {
                LogWriter.Log("It was not possible to upload to Imgur", result);

                return(new ImgurHistory
                {
                    PresetName = preset.Title,
                    DateInUtc = DateTime.UtcNow,
                    Result = 400,
                    Message = response?.Status + " - " + (response?.Data?.Error ?? result)
                });
            }

            if (string.IsNullOrEmpty(response.Data?.Link))
            {
                LogWriter.Log("It was not possible to upload to Imgur", result);

                return(new ImgurHistory
                {
                    PresetName = preset.Title,
                    DateInUtc = DateTime.UtcNow,
                    Result = 400,
                    Message = "Upload failed. The link was not provided."
                });
            }

            var history = new ImgurHistory
            {
                PresetName   = preset.Title,
                DateInUtc    = DateTime.UtcNow,
                Result       = 200,
                Id           = response.Data.Id,
                Link         = $"https://imgur.com/{response.Data.Id}",
                DeletionLink = $"https://imgur.com/delete/{response.Data.DeleteHash}",
                Mp4          = response.Data.Mp4,
                Webm         = response.Data.Webm,
                Gifv         = response.Data.Gifv,
                Gif          = response.Data.Link
            };

            return(history);
        }
    }
Example #4
0
    private void TypeComboBox_Selected(object sender, RoutedEventArgs e)
    {
        if (!IsLoaded)
        {
            return;
        }

        if (TypeComboBox.SelectedIndex < 1)
        {
            MainPresenter.Content = null;
            return;
        }

        if (!IsEditing)
        {
            //Create a new model.
            switch ((UploadDestinations)TypeComboBox.SelectedIndex)
            {
            case UploadDestinations.Imgur:
                CurrentPreset = new ImgurPreset();
                break;

            case UploadDestinations.Gfycat:
                CurrentPreset = new GfycatPreset();
                break;

            case UploadDestinations.Yandex:
                CurrentPreset = new YandexPreset();
                break;
            }
        }

        switch ((UploadDestinations)TypeComboBox.SelectedIndex)
        {
        case UploadDestinations.Imgur:
            MainPresenter.Content = new ImgurPanel {
                DataContext = CurrentPreset
            };
            break;

        case UploadDestinations.Gfycat:
            MainPresenter.Content = new GfycatPanel {
                DataContext = CurrentPreset
            };
            break;

        case UploadDestinations.Yandex:
            MainPresenter.Content = new YandexPanel {
                DataContext = CurrentPreset
            };
            break;
        }
    }
Example #5
0
    public static async Task <bool> RefreshToken(ImgurPreset preset)
    {
        var args = new Dictionary <string, string>
        {
            { "refresh_token", preset.RefreshToken },
            { "client_id", Secret.ImgurId },
            { "client_secret", Secret.ImgurSecret },
            { "grant_type", "refresh_token" }
        };

        return(await GetTokens(preset, args));
    }
Example #6
0
    public static async Task <bool> IsAuthorized(ImgurPreset preset)
    {
        if (string.IsNullOrWhiteSpace(preset.RefreshToken))
        {
            return(false);
        }

        if (!IsAuthorizationExpired(preset))
        {
            return(true);
        }

        return(await RefreshToken(preset));
    }
Example #7
0
    private static async Task <bool> GetTokens(ImgurPreset preset, Dictionary <string, string> args)
    {
        var response = await WebHelper.PostMultipart("https://api.imgur.com/oauth2/token", args);

        if (string.IsNullOrEmpty(response))
        {
            return(false);
        }

        var token = Serializer.Deserialize <OAuth2Token>(response);

        if (string.IsNullOrEmpty(token?.AccessToken))
        {
            return(false);
        }

        preset.AccessToken  = token.AccessToken;
        preset.RefreshToken = token.RefreshToken;
        preset.ExpiryDate   = DateTime.UtcNow + TimeSpan.FromSeconds(token.ExpiresIn - 10);
        return(true);
    }
Example #8
0
    public static async Task <string> AskForAlbum(ImgurPreset preset)
    {
        var albums = await GetAlbums(preset);

        return(Application.Current.Dispatcher.Invoke <string>(() => PickAlbumDialog.OkCancel(albums)));
    }
Example #9
0
 public static bool IsAuthorizationExpired(ImgurPreset preset)
 {
     return(DateTime.UtcNow > preset.ExpiryDate);
 }