mirror of
https://codeberg.org/ashley/poke.git
synced 2024-11-18 00:14:39 -05:00
81 lines
2.8 KiB
Text
81 lines
2.8 KiB
Text
|
@using InnerTube.Models
|
||
|
@using System.Web
|
||
|
@model LightTube.Contexts.ChannelContext
|
||
|
|
||
|
@{
|
||
|
ViewBag.Metadata = new Dictionary<string, string>();
|
||
|
ViewBag.Metadata["og:title"] = Model.Channel.Name;
|
||
|
ViewBag.Metadata["og:url"] = $"{Url.ActionContext.HttpContext.Request.Scheme}://{Url.ActionContext.HttpContext.Request.Host}{Url.ActionContext.HttpContext.Request.Path}{Url.ActionContext.HttpContext.Request.QueryString}";
|
||
|
ViewBag.Metadata["og:image"] = $"{Url.ActionContext.HttpContext.Request.Scheme}://{Url.ActionContext.HttpContext.Request.Host}/proxy/image?url={HttpUtility.UrlEncode(Model.Channel.Avatars.FirstOrDefault()?.Url?.ToString())}";
|
||
|
ViewBag.Metadata["twitter:card"] = $"{Url.ActionContext.HttpContext.Request.Scheme}://{Url.ActionContext.HttpContext.Request.Host}/proxy/image?url={HttpUtility.UrlEncode(Model.Channel.Avatars.LastOrDefault()?.Url?.ToString())}";
|
||
|
ViewBag.Metadata["og:description"] = Model.Channel.Description;
|
||
|
ViewBag.Title = Model.Channel.Name;
|
||
|
Layout = "_Layout";
|
||
|
|
||
|
DynamicItem[] contents;
|
||
|
try
|
||
|
{
|
||
|
contents = ((ItemSectionItem)((ItemSectionItem)Model.Channel.Videos[0]).Contents[0]).Contents;
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
contents = Model.Channel.Videos;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
<div class="channel-page">
|
||
|
@if (Model.Channel.Banners.Length > 0)
|
||
|
{
|
||
|
<img class="channel-banner" alt="Channel Banner" src="@Model.Channel.Banners.Last().Url">
|
||
|
}
|
||
|
|
||
|
<div class="channel-info-container">
|
||
|
<div class="channel-info">
|
||
|
<a href="/channel/@Model.Channel.Id" class="avatar">
|
||
|
<img src="@Model.Channel.Avatars.LastOrDefault()?.Url" alt="Channel Avatar">
|
||
|
</a>
|
||
|
<div class="name">
|
||
|
<a>@Model.Channel.Name</a>
|
||
|
<span>@Model.Channel.Subscribers</span>
|
||
|
</div>
|
||
|
<button class="subscribe-button" data-cid="@Model.Channel.Id">Subscribe</button>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<h3>About</h3>
|
||
|
<p>@Html.Raw(Model.Channel.GetHtmlDescription())</p>
|
||
|
<br><br>
|
||
|
<h3>Uploads</h3>
|
||
|
<div class="video-grid">
|
||
|
@foreach (VideoItem video in contents.Where(x => x is VideoItem).Cast<VideoItem>())
|
||
|
{
|
||
|
<a href="/watch?v=@video.Id" class="video">
|
||
|
<div class="thumbnail" style="background-image: url('@video.Thumbnails.LastOrDefault()?.Url')"><span class="video-length">@video.Duration</span></div>
|
||
|
<div class="info">
|
||
|
<span class="title max-lines-2">@video.Title</span>
|
||
|
<div>
|
||
|
<div>
|
||
|
<span>@video.Views views</span>
|
||
|
<span>@video.UploadedAt</span>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</a>
|
||
|
}
|
||
|
</div>
|
||
|
|
||
|
<div class="pagination-buttons">
|
||
|
@if (!string.IsNullOrWhiteSpace(Model.ContinuationToken))
|
||
|
{
|
||
|
<a href="/channel?id=@Model.Id">First Page</a>
|
||
|
}
|
||
|
<div class="divider"></div>
|
||
|
<span>•</span>
|
||
|
<div class="divider"></div>
|
||
|
@if (!string.IsNullOrWhiteSpace(contents.FirstOrDefault(x => x is ContinuationItem)?.Id))
|
||
|
{
|
||
|
<a href="/channel/@Model.Id?continuation=@(contents.FirstOrDefault(x => x is ContinuationItem)?.Id)">Next Page</a>
|
||
|
}
|
||
|
</div>
|
||
|
</div>
|