Archived
1
0
This repository has been archived on 2026-04-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
FoxTube/FoxTube/Controls/VideoCard.xaml.cs
T
Michael Gordeev eea3b11e23 Merged PR 21: Version 0.2.1901-2
- Added ability to delete comments. Fixes

Related Work Items: #228, #234
- Refactored Video page

Related Work Items: #183, #186
- Player refactoring
- Chat

Related Work Items: #183, #185
- New Logo draft
- Improving thumbnails quality
- Seek slider fixes

Related Work Items: #235, #237
- Regions and languagaes improved. Video cards duration display fixed. Added settings updating system

Related Work Items: #236
- Items cards' context menu. Fixed duplicating authors' name on comments replies. Another version of logo

Related Work Items: #226
- Context menu for cards done

Related Work Items: #226
- Live stats update done

Related Work Items: #183, #186
- Settings recovery system improvements
- Missync fixed. New logo. Supporting all existing qualities

Related Work Items: #207
- Added support of livestreams. Chat messages avatars added. Formatting live chat messages added. Few player fixes

Related Work Items: #183, #184
- Refactored player. Refactored changelog system. Players isn't localized

Related Work Items: #161, #211, #238
- Player fixes. Localization updates. Tiles updated

Related Work Items: #161
- Menu render fix

Related Work Items: #239
- Fullscreen mode fixes

Related Work Items: #240
- Manifest changes
- Ads development
- Video cards fixes. Localization fixes. CardAdvert created

Related Work Items: #244, #245
- Localization fixed. Player fixes. Menu fixes

Related Work Items: #243, #245
- Menu displaying fixes
- Fixes

Related Work Items: #241, #242, #249, #250
- SafeSearch filter fixed
- Video page fixes

Related Work Items: #249
- Patchnote updated
- Version updated
2019-01-08 14:55:58 +00:00

116 lines
4.8 KiB
C#

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Google.Apis.YouTube.v3;
using Google.Apis.YouTube.v3.Data;
using Windows.UI.Xaml.Media.Imaging;
using Windows.System;
using Windows.ApplicationModel.DataTransfer;
using Windows.ApplicationModel.Resources;
namespace FoxTube.Controls
{
/// <summary>
/// Video item card
/// </summary>
public sealed partial class VideoCard : UserControl
{
ResourceLoader resources = ResourceLoader.GetForCurrentView("Cards");
public string playlistId;
public string videoId;
Video item;
public VideoCard(string id, string playlist = null)
{
InitializeComponent();
Initialize(id, playlist);
}
private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
{
Height = e.NewSize.Width * 0.75;
}
public async void Initialize(string id, string playlist = null)
{
VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,contentDetails,statistics,liveStreamingDetails");
request.Id = id;
VideoListResponse response = await request.ExecuteAsync();
item = response.Items[0];
videoId = id;
playlistId = playlist;
title.Text = item.Snippet.Title;
channelName.Text = item.Snippet.ChannelTitle;
if (item.Snippet.LiveBroadcastContent == "live")
{
views.Text = $"{item.LiveStreamingDetails.ConcurrentViewers:0,0} {resources.GetString("/Cards/viewers")}";
if (item.LiveStreamingDetails.ScheduledStartTime.HasValue && item.LiveStreamingDetails.ScheduledEndTime.HasValue)
info.Text = $"{item.LiveStreamingDetails.ScheduledEndTime - item.LiveStreamingDetails.ScheduledStartTime} | {Methods.GetAgo(item.LiveStreamingDetails.ActualStartTime.Value)}";
else
info.Text = item.LiveStreamingDetails.ActualStartTime.Value.ToString();
liveTag.Visibility = Visibility.Visible;
}
else if(item.Snippet.LiveBroadcastContent == "upcoming")
{
views.Text = "";
if (item.LiveStreamingDetails.ScheduledStartTime.HasValue && item.LiveStreamingDetails.ScheduledEndTime.HasValue)
info.Text = $"{item.LiveStreamingDetails.ScheduledEndTime - item.LiveStreamingDetails.ScheduledStartTime} | {item.LiveStreamingDetails.ScheduledStartTime}";
else
info.Text = $"{Methods.GetAgo(item.Snippet.PublishedAt.Value)}";
liveTag.Visibility = Visibility.Visible;
if (item.LiveStreamingDetails.ScheduledStartTime.HasValue && (item.LiveStreamingDetails.ScheduledStartTime - DateTime.Now).Value.TotalMilliseconds > 0)
liveContent.Text = $"{resources.GetString("/Cards/goesLive")} {item.LiveStreamingDetails.ScheduledStartTime}";
else liveContent.Text = resources.GetString("/Cards/upcoming");
}
else
{
views.Text = $"{item.Statistics.ViewCount:0,0} {resources.GetString("/Cards/views")}";
info.Text = $"{item.ContentDetails.Duration.GetDuration()} | {Methods.GetAgo(item.Snippet.PublishedAt.Value)}";
}
var request1 = SecretsVault.Service.Channels.List("snippet");
request1.Id = item.Snippet.ChannelId;
ChannelListResponse response1 = await request1.ExecuteAsync();
try
{
avatar.ProfilePicture = new BitmapImage(new Uri(response1.Items[0].Snippet.Thumbnails.Medium.Url));
thumbnail.Source = new BitmapImage(new Uri((item.Snippet.Thumbnails.Maxres ?? item.Snippet.Thumbnails.Medium).Url));
}
catch { }
/*if(SecretsVault.UserHistory.Exists(x => x.Id == videoId))
{
watched.Visibility = Visibility.Visible;
leftOn.Value = SecretsVault.UserHistory.Find(x => x.Id == videoId).LeftOn;
}*/
}
public void Button_Click(object sender, RoutedEventArgs e)
{
Methods.MainPage.GoToVideo(videoId, playlistId);
}
private void ViewChannel_Click(object sender, RoutedEventArgs e)
{
Methods.MainPage.GoToChannel(item.Snippet.ChannelId);
}
private void GetLink_Click(object sender, RoutedEventArgs e)
{
DataPackage data = new DataPackage();
data.SetText($"https://www.youtube.com/watch?v={videoId}");
Clipboard.SetContent(data);
}
private async void InBrowser_Click(object sender, RoutedEventArgs e)
{
await Launcher.LaunchUriAsync($"https://www.youtube.com/watch?v={videoId}".ToUri());
}
}
}