Updated blocked user lookup with progress status

This commit is contained in:
Casper Sparre 2025-09-02 21:17:59 +02:00
parent 1c39b29d65
commit 65371702dd
2 changed files with 75 additions and 6 deletions

View File

@ -414,17 +414,79 @@ public class APIHelper : IAPIHelper
return await GetAllSubscriptions(getParams, endpoint, includeRestricted, config); return await GetAllSubscriptions(getParams, endpoint, includeRestricted, config);
} }
public async Task<Dictionary<string, int>?> GetBlockedUsers(string endpoint, IDownloadConfig config) public async Task<Dictionary<string, int>?> GetBlockedUsers(string endpoint, IDownloadConfig config, StatusContext ctx)
{ {
int limit = 50;
int offset = 0;
bool includeRestricted = true;
Dictionary<string, string> getParams = new() Dictionary<string, string> getParams = new()
{ {
{ "type", "expired" }, ["format"] = "infinite",
{ "format", "infinite"} ["limit"] = limit.ToString(),
["offset"] = offset.ToString()
}; };
Log.Debug("Calling GetBlockedUsers"); try
{
Dictionary<string, int> users = [];
return await GetAllSubscriptions(getParams, endpoint, true, config); Log.Debug("Calling GetBlockedUsers");
bool isLastLoop = false;
while (true)
{
string? body = await BuildHeaderAndExecuteRequests(getParams, endpoint, httpClient);
if (string.IsNullOrWhiteSpace(body))
break;
Subscriptions? subscriptions = JsonConvert.DeserializeObject<Subscriptions>(body, m_JsonSerializerSettings);
ctx.Status($"[red]Getting Blocked Users\n[/] [red]Found {users.Count}[/]");
ctx.Spinner(Spinner.Known.Dots);
ctx.SpinnerStyle(Style.Parse("blue"));
if (subscriptions?.list is null)
break;
foreach (Subscriptions.List item in subscriptions.list)
{
if (users.ContainsKey(item.username))
continue;
bool isRestricted = item.isRestricted ?? false;
bool isRestrictedButAllowed = isRestricted && includeRestricted;
if (!isRestricted || isRestrictedButAllowed)
users.Add(item.username, item.id);
}
if (isLastLoop)
break;
if (!subscriptions.hasMore || subscriptions.list.Count == 0)
isLastLoop = true;
offset += subscriptions.list.Count;
getParams["offset"] = offset.ToString();
}
return users;
}
catch (Exception ex)
{
Console.WriteLine("Exception caught: {0}\n\nStackTrace: {1}", ex.Message, ex.StackTrace);
Log.Error("Exception caught: {0}\n\nStackTrace: {1}", ex.Message, ex.StackTrace);
if (ex.InnerException != null)
{
Console.WriteLine("\nInner Exception:");
Console.WriteLine("Exception caught: {0}\n\nStackTrace: {1}", ex.InnerException.Message, ex.InnerException.StackTrace);
Log.Error("Inner Exception: {0}\n\nStackTrace: {1}", ex.InnerException.Message, ex.InnerException.StackTrace);
}
}
return null;
} }
public async Task<Dictionary<string, int>> GetLists(string endpoint, IDownloadConfig config) public async Task<Dictionary<string, int>> GetLists(string endpoint, IDownloadConfig config)

View File

@ -891,7 +891,14 @@ public class Program
{ {
const string OUTPUT_FILE = "blocked-users.json"; const string OUTPUT_FILE = "blocked-users.json";
Dictionary<string, int>? blockedUsers = await m_ApiHelper.GetBlockedUsers("/users/blocked", Config); Dictionary<string, int>? blockedUsers = null;
await AnsiConsole
.Status()
.StartAsync("[red]Getting Blocked Users[/]", async ctx =>
{
blockedUsers = await m_ApiHelper.GetBlockedUsers("/users/blocked", Config, ctx);
});
if (blockedUsers is null || blockedUsers.Count == 0) if (blockedUsers is null || blockedUsers.Count == 0)
{ {