Skip to content

Commit

Permalink
Implement AdSlotRenderer (#41)
Browse files Browse the repository at this point in the history
* Implement AdSlotRenderer
* Add tests for AdSlotRenderer
  • Loading branch information
kuylar committed Oct 30, 2023
1 parent f17259b commit 9ae8dea
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 1 deletion.
1 change: 1 addition & 0 deletions InnerTube.Tests/SearchTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public void Setup()
[TestCase("O'zbekcha Kuylar 2020, Vol. 2", null, Description = "epic broken playlist")]
[TestCase("cars 2", "movie", Description = "movieRenderer")]
[TestCase("", "exact", Description = "backgroundPromoRenderer")]
[TestCase("vpn", null, Description = "adSlotRenderer")]
public async Task Search(string query, string paramArgs)
{
SearchParams? param = paramArgs switch
Expand Down
2 changes: 1 addition & 1 deletion InnerTube/RendererManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal static void LoadRenderers()

if (Renderers.TryGetValue(type, out Type? rendererType))
return (IRenderer)Activator.CreateInstance(rendererType, renderer)!;
return new UnknownRenderer(renderer);
return new UnknownRenderer(renderer, type);
}
catch (Exception e)
{
Expand Down
26 changes: 26 additions & 0 deletions InnerTube/Renderers/AdSlotRenderer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System.Text;
using Newtonsoft.Json.Linq;

namespace InnerTube.Renderers;

public class AdSlotRenderer : IRenderer
{
public string Type => "adSlotRenderer";

public IRenderer? Content { get; }

public AdSlotRenderer(JToken renderer)
{
JProperty? obj = renderer
.GetFromJsonPath<JObject>("fulfillmentContent.fulfilledLayout.inFeedAdLayoutRenderer.renderingContent")
?.First?.ToObject<JProperty>();
Content = obj != null ? RendererManager.ParseRenderer(obj.Value.ToObject<JObject>(), obj.Name)! : null;
}

public override string ToString() =>
new StringBuilder()
.AppendLine($"[{Type}]")
.AppendLine(string.Join('\n',
Content?.ToString()?.Split('\n').Select(x => $"\t{x}") ?? Array.Empty<string>()))
.ToString();
}
6 changes: 6 additions & 0 deletions InnerTube/Renderers/UnknownRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ public UnknownRenderer(JToken renderer)
Type = renderer.Path.Split(".").Last();
}

public UnknownRenderer(JToken renderer, string type)
{
Json = renderer;
Type = type;
}

public override string ToString()
{
return $"Unknown renderer of type: {Type}. JSON:\n\t{Json.ToString(Formatting.None)}";
Expand Down

0 comments on commit 9ae8dea

Please sign in to comment.