-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Fix HTML renderers to escape HTML tags - Implement MovieRenderer - Implement CompactMovieRenderer - Fix the video cache breaking for videos longer than 6 hours - Implement chapters
- Loading branch information
Showing
12 changed files
with
204 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,24 @@ | ||
namespace InnerTube.Formatters; | ||
using System.Web; | ||
|
||
namespace InnerTube.Formatters; | ||
|
||
/// <summary> | ||
/// Formatter used to output rich texts in HTML format | ||
/// </summary> | ||
public class HtmlFormatter : IFormatter | ||
{ | ||
/// <inheritdoc /> | ||
public string FormatBold(string text) => $"<b>{Sanitize(text)}</b>"; | ||
public string FormatBold(string text) => $"<b>{text}</b>"; | ||
|
||
/// <inheritdoc /> | ||
public string FormatItalics(string text) => $"<i>{Sanitize(text)}</i>"; | ||
public string FormatItalics(string text) => $"<i>{text}</i>"; | ||
|
||
/// <inheritdoc /> | ||
public string FormatUrl(string text, string url) => $"<a href=\"{url}\">{Sanitize(text)}</a>"; | ||
public string FormatUrl(string text, string url) => $"<a href=\"{url}\">{text}</a>"; | ||
|
||
/// <inheritdoc /> | ||
public string HandleLineBreaks(string text) => text.Replace("\n", "<br>"); | ||
|
||
private string Sanitize(string text) => text | ||
.Replace("<", "<") | ||
.Replace(">", ">"); | ||
/// <inheritdoc /> | ||
public string Sanitize(string text) => HttpUtility.HtmlEncode(text); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
using System.Text; | ||
using Newtonsoft.Json.Linq; | ||
|
||
namespace InnerTube.Renderers; | ||
|
||
public class ChapterRenderer : IRenderer | ||
{ | ||
public string Type => "chapterRenderer"; | ||
public string Title { get; } | ||
public IEnumerable<Thumbnail> Thumbnails { get; } | ||
public ulong TimeRangeStartMillis { get; } | ||
|
||
public ChapterRenderer(JToken renderer) | ||
{ | ||
Title = Utils.ReadText(renderer.GetFromJsonPath<JObject>("title")); | ||
Thumbnails = Utils.GetThumbnails(renderer.GetFromJsonPath<JArray>("thumbnail.thumbnails") ?? new JArray()); | ||
TimeRangeStartMillis = renderer.GetFromJsonPath<ulong>("timeRangeStartMillis"); | ||
} | ||
|
||
public override string ToString() | ||
{ | ||
StringBuilder sb = new StringBuilder() | ||
.AppendLine($"[{Type}] {Title}") | ||
.AppendLine($"- TimeRangeStartMillis: ({TimeSpan.FromMilliseconds(TimeRangeStartMillis)}) {TimeRangeStartMillis}") | ||
.AppendLine($"- Thumbnail count: {Thumbnails.Count()}"); | ||
|
||
return sb.ToString(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
using System.Text; | ||
using Newtonsoft.Json.Linq; | ||
|
||
namespace InnerTube.Renderers; | ||
|
||
public class CompactMovieRenderer : IRenderer | ||
{ | ||
public string Type => "compactMovieRenderer"; | ||
|
||
public string Id { get; } | ||
public string Title { get; } | ||
public IEnumerable<string> TopMetadataItems { get; } | ||
public TimeSpan Duration { get; } | ||
public IEnumerable<Thumbnail> Thumbnails { get; } | ||
public Channel Channel { get; } | ||
|
||
public CompactMovieRenderer(JToken renderer) | ||
{ | ||
Id = renderer["videoId"]!.ToString(); | ||
Title = renderer.GetFromJsonPath<string>("title.simpleText")!; | ||
TopMetadataItems = | ||
renderer.GetFromJsonPath<JArray>("topMetadataItems")?.Select(x => Utils.ReadText((JObject)x)) ?? | ||
Array.Empty<string>(); | ||
Thumbnails = Utils.GetThumbnails(renderer.GetFromJsonPath<JArray>("thumbnail.thumbnails") ?? new JArray()); | ||
Channel = new Channel | ||
{ | ||
Id = renderer.GetFromJsonPath<string>("shortBylineText.runs[0].navigationEndpoint.browseEndpoint.browseId")!, | ||
Title = renderer.GetFromJsonPath<string>("shortBylineText.runs[0].text")!, | ||
Avatar = null, | ||
Subscribers = null, | ||
Badges = Array.Empty<Badge>() | ||
}; | ||
|
||
Duration = Utils.ParseDuration(renderer["lengthText"]?["simpleText"]?.ToString()!); | ||
} | ||
|
||
public override string ToString() | ||
{ | ||
StringBuilder sb = new StringBuilder() | ||
.AppendLine($"[{Type}] {Title}") | ||
.AppendLine($"- Id: {Id}") | ||
.AppendLine($"- Duration: {Duration}") | ||
.AppendLine($"- Thumbnail count: {Thumbnails.Count()}") | ||
.AppendLine($"- Channel: {Channel}") | ||
.AppendLine($"- TopMetadataItems:\n\t{string.Join("\n\t", TopMetadataItems.Select(x => $"- {x}"))}"); | ||
|
||
return sb.ToString(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
using System.Text; | ||
using System.Text.Json.Nodes; | ||
using Newtonsoft.Json.Linq; | ||
|
||
namespace InnerTube.Renderers; | ||
|
||
public class MovieRenderer : IRenderer | ||
{ | ||
public string Type => "movieRenderer"; | ||
|
||
public string Id { get; } | ||
public string Title { get; } | ||
public string DescriptionSnippet { get; } | ||
public IEnumerable<string> BottomMetadataItems { get; } | ||
public IEnumerable<string> TopMetadataItems { get; } | ||
public TimeSpan Duration { get; } | ||
public IEnumerable<Thumbnail> Thumbnails { get; } | ||
public Channel Channel { get; } | ||
public IEnumerable<Badge> Badges { get; } | ||
|
||
public MovieRenderer(JToken renderer) | ||
{ | ||
Id = renderer["videoId"]!.ToString(); | ||
Title = Utils.ReadText(renderer.GetFromJsonPath<JObject>("title") ?? new JObject()); | ||
BottomMetadataItems = | ||
renderer.GetFromJsonPath<JArray>("bottomMetadataItems")?.Select(x => Utils.ReadText((JObject)x)) ?? | ||
Array.Empty<string>(); | ||
TopMetadataItems = | ||
renderer.GetFromJsonPath<JArray>("topMetadataItems")?.Select(x => Utils.ReadText((JObject)x)) ?? | ||
Array.Empty<string>(); | ||
DescriptionSnippet = Utils.ReadText(renderer.GetFromJsonPath<JObject>("descriptionSnippet") ?? | ||
new JObject(), true); | ||
Thumbnails = Utils.GetThumbnails(renderer.GetFromJsonPath<JArray>("thumbnail.thumbnails") ?? new JArray()); | ||
Channel = new Channel | ||
{ | ||
Id = null, | ||
Title = renderer.GetFromJsonPath<string>("longBylineText.runs[0].text")!, | ||
Avatar = null, | ||
Subscribers = null, | ||
Badges = renderer.GetFromJsonPath<JArray>("ownerBadges") | ||
?.Select(x => new Badge(x["metadataBadgeRenderer"]!)) ?? Array.Empty<Badge>() | ||
}; | ||
Badges = renderer["badges"]?.ToObject<JArray>()?.Select(x => new Badge(x["metadataBadgeRenderer"]!)) ?? | ||
Array.Empty<Badge>(); | ||
|
||
Duration = Utils.ParseDuration(renderer["lengthText"]?["simpleText"]?.ToString()!); | ||
} | ||
|
||
public override string ToString() | ||
{ | ||
StringBuilder sb = new StringBuilder() | ||
.AppendLine($"[{Type}] {Title}") | ||
.AppendLine($"- Id: {Id}") | ||
.AppendLine($"- Duration: {Duration}") | ||
.AppendLine($"- Thumbnail count: {Thumbnails.Count()}") | ||
.AppendLine($"- Channel: {Channel}") | ||
.AppendLine($"- Badges: {string.Join(" | ", Badges.Select(x => x.ToString()))}") | ||
.AppendLine($"- TopMetadataItems:\n\t{string.Join("\n\t", TopMetadataItems.Select(x => $"- {x}"))}") | ||
.AppendLine($"- BottomMetadataItems:\n\t{string.Join("\n\t", BottomMetadataItems.Select(x => $"- {x}"))}") | ||
.AppendLine(DescriptionSnippet); | ||
|
||
return sb.ToString(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters