forked from sim0n00ps/OF-DL
Compare commits
No commits in common. "d3b8ca6fcda491d3261cfba0982b92735a983794" and "cb639ff18c43b3d4c6c6cc805319f67168395502" have entirely different histories.
d3b8ca6fcd
...
cb639ff18c
@ -14,7 +14,6 @@ using OF_DL.Enumerations;
|
|||||||
using OF_DL.Enumurations;
|
using OF_DL.Enumurations;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -27,9 +26,6 @@ namespace OF_DL.Helpers;
|
|||||||
|
|
||||||
public class APIHelper : IAPIHelper
|
public class APIHelper : IAPIHelper
|
||||||
{
|
{
|
||||||
private const int MAX_RETRIES = 10;
|
|
||||||
private const int DELAY_BEFORE_RETRY = 1000;
|
|
||||||
|
|
||||||
private static readonly JsonSerializerSettings m_JsonSerializerSettings;
|
private static readonly JsonSerializerSettings m_JsonSerializerSettings;
|
||||||
private readonly IDBHelper m_DBHelper;
|
private readonly IDBHelper m_DBHelper;
|
||||||
private readonly IDownloadConfig downloadConfig;
|
private readonly IDownloadConfig downloadConfig;
|
||||||
@ -123,41 +119,18 @@ public class APIHelper : IAPIHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task<string?> BuildHeaderAndExecuteRequests(Dictionary<string, string> getParams, string endpoint, HttpClient client, HttpMethod? method = null, int retryCount = 0)
|
private async Task<string?> BuildHeaderAndExecuteRequests(Dictionary<string, string> getParams, string endpoint, HttpClient client, HttpMethod? method = null)
|
||||||
{
|
{
|
||||||
Log.Debug("Calling BuildHeaderAndExecuteRequests -- Attempt number: {AttemptNumber}", retryCount + 1);
|
Log.Debug("Calling BuildHeaderAndExecuteRequests");
|
||||||
|
|
||||||
try
|
HttpRequestMessage request = await BuildHttpRequestMessage(getParams, endpoint, method);
|
||||||
{
|
using var response = await client.SendAsync(request);
|
||||||
HttpRequestMessage request = await BuildHttpRequestMessage(getParams, endpoint, method);
|
response.EnsureSuccessStatusCode();
|
||||||
|
string body = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
Debug.WriteLine($"Executing {request.Method.Method.ToUpper()} request: {request.RequestUri}\r\n\t{GetParamsString(getParams)}");
|
Log.Debug(body);
|
||||||
|
|
||||||
using var response = await client.SendAsync(request);
|
return body;
|
||||||
|
|
||||||
if (Debugger.IsAttached && !response.IsSuccessStatusCode)
|
|
||||||
Debugger.Break();
|
|
||||||
|
|
||||||
response.EnsureSuccessStatusCode();
|
|
||||||
string body = await response.Content.ReadAsStringAsync();
|
|
||||||
|
|
||||||
Log.Debug(body);
|
|
||||||
|
|
||||||
return body;
|
|
||||||
}
|
|
||||||
catch (HttpRequestException ex)
|
|
||||||
{
|
|
||||||
if (ex.StatusCode == System.Net.HttpStatusCode.TooManyRequests && retryCount < MAX_RETRIES)
|
|
||||||
{
|
|
||||||
await Task.Delay(DELAY_BEFORE_RETRY);
|
|
||||||
return await BuildHeaderAndExecuteRequests(getParams, endpoint, client, method, ++retryCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
|
|
||||||
static string GetParamsString(Dictionary<string, string> getParams)
|
|
||||||
=> string.Join(" | ", getParams.Select(kv => $"{kv.Key}={kv.Value}"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -326,16 +299,13 @@ public class APIHelper : IAPIHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<Dictionary<string, int>?> GetAllSubscriptions(Dictionary<string, string> getParams, int limit, string endpoint, bool includeRestricted, IDownloadConfig config)
|
public async Task<Dictionary<string, int>?> GetAllSubscriptions(Dictionary<string, string> getParams, string endpoint, bool includeRestricted, IDownloadConfig config)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Dictionary<string, int> users = new();
|
Dictionary<string, int> users = new();
|
||||||
Subscriptions subscriptions = new();
|
Subscriptions subscriptions = new();
|
||||||
|
|
||||||
int offset = 0;
|
|
||||||
getParams["offset"] = offset.ToString();
|
|
||||||
|
|
||||||
Log.Debug("Calling GetAllSubscrptions");
|
Log.Debug("Calling GetAllSubscrptions");
|
||||||
|
|
||||||
string? body = await BuildHeaderAndExecuteRequests(getParams, endpoint, httpClient);
|
string? body = await BuildHeaderAndExecuteRequests(getParams, endpoint, httpClient);
|
||||||
@ -343,8 +313,7 @@ public class APIHelper : IAPIHelper
|
|||||||
subscriptions = JsonConvert.DeserializeObject<Subscriptions>(body);
|
subscriptions = JsonConvert.DeserializeObject<Subscriptions>(body);
|
||||||
if (subscriptions != null && subscriptions.hasMore)
|
if (subscriptions != null && subscriptions.hasMore)
|
||||||
{
|
{
|
||||||
offset += limit;
|
getParams["offset"] = subscriptions.list.Count.ToString();
|
||||||
getParams["offset"] = offset.ToString();
|
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
@ -365,9 +334,7 @@ public class APIHelper : IAPIHelper
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
getParams["offset"] = subscriptions.list.Count.ToString();
|
||||||
offset += limit;
|
|
||||||
getParams["offset"] = offset.ToString();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,51 +368,46 @@ public class APIHelper : IAPIHelper
|
|||||||
|
|
||||||
public async Task<Dictionary<string, int>?> GetActiveSubscriptions(string endpoint, bool includeRestricted, IDownloadConfig config)
|
public async Task<Dictionary<string, int>?> GetActiveSubscriptions(string endpoint, bool includeRestricted, IDownloadConfig config)
|
||||||
{
|
{
|
||||||
int limit = 50;
|
|
||||||
Dictionary<string, string> getParams = new()
|
Dictionary<string, string> getParams = new()
|
||||||
{
|
{
|
||||||
{ "limit", $"{limit}" },
|
{ "offset", "0" },
|
||||||
|
{ "limit", "50" },
|
||||||
{ "type", "active" },
|
{ "type", "active" },
|
||||||
{ "format", "infinite"}
|
{ "format", "infinite"}
|
||||||
};
|
};
|
||||||
|
|
||||||
Log.Debug("Calling GetActiveSubscriptions");
|
return await GetAllSubscriptions(getParams, endpoint, includeRestricted, config);
|
||||||
AnsiConsole.Markup($"[red]Getting Active Subscriptions (Include Restricted: {includeRestricted})\n[/]");
|
|
||||||
|
|
||||||
return await GetAllSubscriptions(getParams, limit, endpoint, includeRestricted, config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<Dictionary<string, int>?> GetExpiredSubscriptions(string endpoint, bool includeRestricted, IDownloadConfig config)
|
public async Task<Dictionary<string, int>?> GetExpiredSubscriptions(string endpoint, bool includeRestricted, IDownloadConfig config)
|
||||||
{
|
{
|
||||||
int limit = 50;
|
|
||||||
Dictionary<string, string> getParams = new()
|
Dictionary<string, string> getParams = new()
|
||||||
{
|
{
|
||||||
{ "limit", $"{limit}" },
|
{ "offset", "0" },
|
||||||
|
{ "limit", "50" },
|
||||||
{ "type", "expired" },
|
{ "type", "expired" },
|
||||||
{ "format", "infinite"}
|
{ "format", "infinite"}
|
||||||
};
|
};
|
||||||
|
|
||||||
Log.Debug("Calling GetExpiredSubscriptions");
|
Log.Debug("Calling GetExpiredSubscriptions");
|
||||||
AnsiConsole.Markup($"[red]Getting Expired Subscriptions (Include Restricted: {includeRestricted})\n[/]");
|
|
||||||
|
|
||||||
return await GetAllSubscriptions(getParams, limit, 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)
|
||||||
{
|
{
|
||||||
int limit = 50;
|
|
||||||
Dictionary<string, string> getParams = new()
|
Dictionary<string, string> getParams = new()
|
||||||
{
|
{
|
||||||
{ "limit", $"{limit}" },
|
{ "offset", "0" },
|
||||||
|
{ "limit", "50" },
|
||||||
{ "type", "expired" },
|
{ "type", "expired" },
|
||||||
{ "format", "infinite"}
|
{ "format", "infinite"}
|
||||||
};
|
};
|
||||||
|
|
||||||
Log.Debug("Calling GetBlockedUsers");
|
Log.Debug("Calling GetBlockedUsers");
|
||||||
AnsiConsole.Markup($"[red]Getting Blocked Users\n[/]");
|
|
||||||
|
|
||||||
return await GetAllSubscriptions(getParams, limit, endpoint, true, config);
|
return await GetAllSubscriptions(getParams, endpoint, true, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Dictionary<string, int>> GetLists(string endpoint, IDownloadConfig config)
|
public async Task<Dictionary<string, int>> GetLists(string endpoint, IDownloadConfig config)
|
||||||
@ -1210,7 +1172,7 @@ public class APIHelper : IAPIHelper
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VideoResolution._240:
|
case VideoResolution._240:
|
||||||
if (medium.videoSources != null)
|
if(medium.videoSources != null)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(medium.videoSources._240))
|
if (!string.IsNullOrEmpty(medium.videoSources._240))
|
||||||
{
|
{
|
||||||
|
@ -893,6 +893,10 @@ public class Program
|
|||||||
{
|
{
|
||||||
const string OUTPUT_FILE = "blocked-users.json";
|
const string OUTPUT_FILE = "blocked-users.json";
|
||||||
|
|
||||||
|
Log.Debug($"Calling GetBlockedUsers");
|
||||||
|
|
||||||
|
AnsiConsole.Markup($"[red]Getting Blocked Users\n[/]");
|
||||||
|
|
||||||
Dictionary<string, int>? blockedUsers = await m_ApiHelper.GetBlockedUsers("/users/blocked", Config);
|
Dictionary<string, int>? blockedUsers = await m_ApiHelper.GetBlockedUsers("/users/blocked", Config);
|
||||||
|
|
||||||
if (blockedUsers is null || blockedUsers.Count == 0)
|
if (blockedUsers is null || blockedUsers.Count == 0)
|
||||||
@ -918,10 +922,15 @@ public class Program
|
|||||||
DateTime startTime = DateTime.Now;
|
DateTime startTime = DateTime.Now;
|
||||||
Dictionary<string, int> users = new();
|
Dictionary<string, int> users = new();
|
||||||
|
|
||||||
Dictionary<string, int> subsActive = await m_ApiHelper.GetActiveSubscriptions("/subscriptions/subscribes", Config.IncludeRestrictedSubscriptions, Config) ?? [];
|
Task<Dictionary<string, int>?> taskActive = m_ApiHelper.GetActiveSubscriptions("/subscriptions/subscribes", Config.IncludeRestrictedSubscriptions, Config);
|
||||||
Dictionary<string, int> subsExpired = Config!.IncludeExpiredSubscriptions
|
Task<Dictionary<string, int>?> taskExpired = Config!.IncludeExpiredSubscriptions
|
||||||
? await m_ApiHelper.GetExpiredSubscriptions("/subscriptions/subscribes", Config.IncludeRestrictedSubscriptions, Config) ?? []
|
? m_ApiHelper.GetExpiredSubscriptions("/subscriptions/subscribes", Config.IncludeRestrictedSubscriptions, Config)
|
||||||
: [] ;
|
: Task.FromResult<Dictionary<string, int>?>([]);
|
||||||
|
|
||||||
|
await Task.WhenAll(taskActive, taskExpired);
|
||||||
|
|
||||||
|
Dictionary<string, int> subsActive = await taskActive ?? [];
|
||||||
|
Dictionary<string, int> subsExpired = await taskExpired ?? [];
|
||||||
|
|
||||||
Log.Debug("Subscriptions: ");
|
Log.Debug("Subscriptions: ");
|
||||||
foreach (KeyValuePair<string, int> activeSub in subsActive)
|
foreach (KeyValuePair<string, int> activeSub in subsActive)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user