Files
VDownload/VDownload.Core/Sources/Source.cs

87 lines
2.9 KiB
C#

using System.Text.RegularExpressions;
using VDownload.Core.Enums;
using VDownload.Core.Interfaces;
namespace VDownload.Core.Services.Sources
{
public static class Source
{
#region CONSTANTS
// VIDEO SOURCES REGULAR EXPRESSIONS
private static readonly (Regex Regex, VideoSource Type)[] VideoSources = new (Regex Regex, VideoSource Type)[]
{
(new Regex(@"^https://www.twitch.tv/videos/(?<id>\d+)"), VideoSource.TwitchVod),
(new Regex(@"^https://www.twitch.tv/\S+/clip/(?<id>[^?]+)"), VideoSource.TwitchClip),
(new Regex(@"^https://clips.twitch.tv/(?<id>[^?]+)"), VideoSource.TwitchClip),
};
// PLAYLIST SOURCES REGULAR EXPRESSIONS
private static readonly (Regex Regex, PlaylistSource Type)[] PlaylistSources = new (Regex Regex, PlaylistSource Type)[]
{
(new Regex(@"^https://www.twitch.tv/(?<id>[^?/]+)"), PlaylistSource.TwitchChannel),
};
#endregion
#region METHODS
// GET VIDEO SOURCE
public static IVideo GetVideo(string url)
{
VideoSource source = VideoSource.Null;
string id = string.Empty;
foreach ((Regex Regex, VideoSource Type) Source in VideoSources)
{
Match sourceMatch = Source.Regex.Match(url);
if (sourceMatch.Success)
{
source = Source.Type;
id = sourceMatch.Groups["id"].Value;
}
}
return GetVideo(source, id);
}
public static IVideo GetVideo(VideoSource source, string id)
{
IVideo videoService = null;
switch (source)
{
case VideoSource.TwitchVod: videoService = new Twitch.Vod(id); break;
case VideoSource.TwitchClip: videoService = new Twitch.Clip(id); break;
}
return videoService;
}
// GET PLAYLIST SOURCE
public static IPlaylist GetPlaylist(string url)
{
PlaylistSource source = PlaylistSource.Null;
string id = string.Empty;
foreach ((Regex Regex, PlaylistSource Type) Source in PlaylistSources)
{
Match sourceMatch = Source.Regex.Match(url);
if (sourceMatch.Success)
{
source = Source.Type;
id = sourceMatch.Groups["id"].Value;
}
}
return GetPlaylist(source, id);
}
public static IPlaylist GetPlaylist(PlaylistSource source, string id)
{
IPlaylist playlistService = null;
switch (source)
{
case PlaylistSource.TwitchChannel: playlistService = new Twitch.Channel(id); break;
}
return playlistService;
}
#endregion
}
}