forked from sim0n00ps/OF-DL
		
	Updated subscription lookup to match OF website.
It always increments the offset with the limit before making the next request.
This commit is contained in:
		
							parent
							
								
									cb639ff18c
								
							
						
					
					
						commit
						1429da5ac6
					
				@ -26,6 +26,9 @@ 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;
 | 
				
			||||||
@ -119,10 +122,12 @@ public class APIHelper : IAPIHelper
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private async Task<string?> BuildHeaderAndExecuteRequests(Dictionary<string, string> getParams, string endpoint, HttpClient client, HttpMethod? method = null)
 | 
					    private async Task<string?> BuildHeaderAndExecuteRequests(Dictionary<string, string> getParams, string endpoint, HttpClient client, HttpMethod? method = null, int retryCount = 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Log.Debug("Calling BuildHeaderAndExecuteRequests");
 | 
					        Log.Debug("Calling BuildHeaderAndExecuteRequests -- Attempt number: {AttemptNumber}", retryCount + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
            HttpRequestMessage request = await BuildHttpRequestMessage(getParams, endpoint, method);
 | 
					            HttpRequestMessage request = await BuildHttpRequestMessage(getParams, endpoint, method);
 | 
				
			||||||
            using var response = await client.SendAsync(request);
 | 
					            using var response = await client.SendAsync(request);
 | 
				
			||||||
            response.EnsureSuccessStatusCode();
 | 
					            response.EnsureSuccessStatusCode();
 | 
				
			||||||
@ -132,6 +137,17 @@ public class APIHelper : IAPIHelper
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            return 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;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private async Task<HttpRequestMessage> BuildHttpRequestMessage(Dictionary<string, string> getParams, string endpoint, HttpMethod? method = null)
 | 
					    private async Task<HttpRequestMessage> BuildHttpRequestMessage(Dictionary<string, string> getParams, string endpoint, HttpMethod? method = null)
 | 
				
			||||||
@ -299,13 +315,16 @@ public class APIHelper : IAPIHelper
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public async Task<Dictionary<string, int>?> GetAllSubscriptions(Dictionary<string, string> getParams, string endpoint, bool includeRestricted, IDownloadConfig config)
 | 
					    public async Task<Dictionary<string, int>?> GetAllSubscriptions(Dictionary<string, string> getParams, int limit, 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);
 | 
				
			||||||
@ -313,7 +332,8 @@ public class APIHelper : IAPIHelper
 | 
				
			|||||||
            subscriptions = JsonConvert.DeserializeObject<Subscriptions>(body);
 | 
					            subscriptions = JsonConvert.DeserializeObject<Subscriptions>(body);
 | 
				
			||||||
            if (subscriptions != null && subscriptions.hasMore)
 | 
					            if (subscriptions != null && subscriptions.hasMore)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                getParams["offset"] = subscriptions.list.Count.ToString();
 | 
					                offset += limit;
 | 
				
			||||||
 | 
					                getParams["offset"] = offset.ToString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                while (true)
 | 
					                while (true)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@ -334,7 +354,9 @@ public class APIHelper : IAPIHelper
 | 
				
			|||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    getParams["offset"] = subscriptions.list.Count.ToString();
 | 
					
 | 
				
			||||||
 | 
					                    offset += limit;
 | 
				
			||||||
 | 
					                    getParams["offset"] = offset.ToString();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -368,46 +390,51 @@ 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()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            { "offset", "0" },
 | 
					            { "limit", $"{limit}" },
 | 
				
			||||||
            { "limit", "50" },
 | 
					 | 
				
			||||||
            { "type", "active" },
 | 
					            { "type", "active" },
 | 
				
			||||||
            { "format", "infinite"}
 | 
					            { "format", "infinite"}
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return await GetAllSubscriptions(getParams, endpoint, includeRestricted, config);
 | 
					        Log.Debug("Calling GetActiveSubscriptions");
 | 
				
			||||||
 | 
					        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()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            { "offset", "0" },
 | 
					            { "limit", $"{limit}" },
 | 
				
			||||||
            { "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, endpoint, includeRestricted, config);
 | 
					        return await GetAllSubscriptions(getParams, limit, 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()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            { "offset", "0" },
 | 
					            { "limit", $"{limit}" },
 | 
				
			||||||
            { "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, endpoint, true, config);
 | 
					        return await GetAllSubscriptions(getParams, limit, 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)
 | 
				
			||||||
@ -1172,7 +1199,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,10 +893,6 @@ 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)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user