#198: Done
This commit is contained in:
@@ -1,9 +1,14 @@
|
|||||||
using MyToolkit.Multimedia;
|
using Google.Apis.YouTube.v3;
|
||||||
|
using Google.Apis.YouTube.v3.Data;
|
||||||
|
using MyToolkit.Multimedia;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Web;
|
||||||
using Windows.ApplicationModel.Core;
|
using Windows.ApplicationModel.Core;
|
||||||
|
using Windows.System;
|
||||||
using Windows.UI;
|
using Windows.UI;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
@@ -70,7 +75,8 @@ namespace FoxTube
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Hyperlink link = new Hyperlink { NavigateUri = new Uri(item), Foreground = new SolidColorBrush(Colors.Red) };
|
Hyperlink link = new Hyperlink();
|
||||||
|
link.Click += (s, arg) => { ProcessLink(item); };
|
||||||
link.Inlines.Add(new Run { Text = item });
|
link.Inlines.Add(new Run { Text = item });
|
||||||
block.Inlines.Add(link);
|
block.Inlines.Add(link);
|
||||||
}
|
}
|
||||||
@@ -133,5 +139,69 @@ namespace FoxTube
|
|||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async static void ProcessLink(string url)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Processing link: {url}");
|
||||||
|
if (url.Contains("youtube.com/") || url.Contains("youtu.be/"))
|
||||||
|
{
|
||||||
|
Debug.WriteLine("This is an internal youtube link");
|
||||||
|
url = url.Replace("https://", "").Replace("http://", "").Replace("wwww.", "").Replace("//", "");
|
||||||
|
Debug.WriteLine($"Prepared link: {url}");
|
||||||
|
|
||||||
|
if (url.Contains("/playlist"))
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"This is a playlist link. ID: {HttpUtility.ParseQueryString(url).Get("list")}");
|
||||||
|
MainPage.GoToPlaylist(HttpUtility.ParseQueryString(url).Get("list"));
|
||||||
|
}
|
||||||
|
else if (url.Contains("youtu.be/"))
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"This is obfuscated video link. Video ID: {url.Split('/')[1]}");
|
||||||
|
MainPage.GoToVideo(url.Split('/')[1]);
|
||||||
|
}
|
||||||
|
else if (url.Contains("/watch"))
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"This is regular video link. Video ID: {HttpUtility.ParseQueryString(url).Get("v")}");
|
||||||
|
MainPage.GoToVideo(HttpUtility.ParseQueryString(url).Get(0), HttpUtility.ParseQueryString(url).Get("list"));
|
||||||
|
}
|
||||||
|
else if (url.Contains("/v/"))
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"This is video link. ID: {url.Split('/')[2].Split('?')[0]}");
|
||||||
|
MainPage.GoToVideo(url.Split('/')[2].Split('?')[0]);
|
||||||
|
}
|
||||||
|
else if (url.Contains("/channel/"))
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"This is channel link. ID: {url.Split('/')[2]}");
|
||||||
|
MainPage.GoToChannel(url.Split('/')[2]);
|
||||||
|
}
|
||||||
|
else if (url.Contains("/user/"))
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"This is channel link with username. Username: {url.Split('/')[2]}");
|
||||||
|
ChannelsResource.ListRequest request = SecretsVault.Service.Channels.List("id");
|
||||||
|
Debug.WriteLine(request.ForUsername = url.Split('/')[2]);
|
||||||
|
request.MaxResults = 1;
|
||||||
|
MainPage.GoToChannel((await request.ExecuteAsync()).Items[0].Id);
|
||||||
|
}
|
||||||
|
else if (url.Contains("/c/"))
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"This is channel link with custom url. Custom name: {url.Split('/')[2]}");
|
||||||
|
SearchResource.ListRequest request = SecretsVault.Service.Search.List("id");
|
||||||
|
Debug.WriteLine(request.Q = url.Split('/')[2]);
|
||||||
|
request.MaxResults = 1;
|
||||||
|
MainPage.GoToChannel((await request.ExecuteAsync()).Items[0].Id.ChannelId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
await Launcher.LaunchUriAsync(new Uri(url));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -320,12 +320,14 @@ namespace FoxTube
|
|||||||
|
|
||||||
public void GoToChannel(string id)
|
public void GoToChannel(string id)
|
||||||
{
|
{
|
||||||
|
Debug.WriteLine($"Channel id: {id}");
|
||||||
MinimizeAsInitializer();
|
MinimizeAsInitializer();
|
||||||
content.Navigate(typeof(ChannelPage), id);
|
content.Navigate(typeof(ChannelPage), id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void GoToVideo(string id, string playlistId = null)
|
public async void GoToVideo(string id, string playlistId = null)
|
||||||
{
|
{
|
||||||
|
Debug.WriteLine($"Video id: {id}; Playlist id: {playlistId}");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var connection = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost();
|
var connection = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost();
|
||||||
@@ -369,6 +371,7 @@ namespace FoxTube
|
|||||||
|
|
||||||
public void GoToPlaylist(string id)
|
public void GoToPlaylist(string id)
|
||||||
{
|
{
|
||||||
|
Debug.WriteLine($"Playlist id: {id}");
|
||||||
MinimizeAsInitializer();
|
MinimizeAsInitializer();
|
||||||
content.Navigate(typeof(PlaylistPage), id);
|
content.Navigate(typeof(PlaylistPage), id);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user