-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathBlueskyApiClient.Preferences.cs
50 lines (46 loc) · 1.77 KB
/
BlueskyApiClient.Preferences.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net.Http.Headers;
using System.Net.Http;
using System.Text;
using Bluesky.NET.Constants;
using Bluesky.NET.Models;
using System.Text.Json;
using FluentResults;
using System.Threading.Tasks;
using System.Threading;
namespace Bluesky.NET.ApiClients;
partial class BlueskyApiClient
{
/// <inheritdoc/>
public async Task<Result<IReadOnlyList<PreferenceItem>>> GetPreferencesAsync(string accessToken, CancellationToken ct)
{
ct.ThrowIfCancellationRequested();
var url = $"{_baseUrl}/{UrlConstants.PreferencesPath}";
HttpRequestMessage message = new(HttpMethod.Get, url);
message.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
try
{
var httpResponse = await _httpClient.SendAsync(message, ct);
if (httpResponse.IsSuccessStatusCode)
{
using Stream contentStream = await httpResponse.Content.ReadAsStreamAsync();
FeedResponse? response = JsonSerializer.Deserialize(contentStream, ModelSerializerContext.CaseInsensitive.FeedResponse);
return response?.Preferences is IReadOnlyList<PreferenceItem> { } preferences
? Result.Ok(preferences)
: Result.Fail<IReadOnlyList<PreferenceItem>>("Preference array is null after deserialization");
}
else
{
var errorMessage = await httpResponse.Content.ReadAsStringAsync();
return Result.Fail<IReadOnlyList<PreferenceItem>>(errorMessage);
}
}
catch (Exception e)
{
return Result.Fail<IReadOnlyList<PreferenceItem>>(e.Message);
}
}
}