mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
Parse vimeo links
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using Microsoft.AspNetCore.WebUtilities;
|
||||
using Shared;
|
||||
|
||||
@@ -28,6 +29,19 @@ namespace Podsync.Services.Links
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Test input:
|
||||
https://vimeo.com/groups/109
|
||||
http://vimeo.com/groups/109
|
||||
http://www.vimeo.com/groups/109
|
||||
https://vimeo.com/groups/109/videos/
|
||||
https://vimeo.com/channels/staffpicks
|
||||
https://vimeo.com/channels/staffpicks/146224925
|
||||
https://vimeo.com/awhitelabelproduct
|
||||
vimeo.com/groups/109
|
||||
*/
|
||||
private static readonly Regex VimeoRegex = new Regex(@"^(?:https?://)?(?:www\.)?(?:vimeo.com/)(?<grp>groups|channels)?/?(?<id>\w+)", RegexOptions.Compiled);
|
||||
|
||||
public LinkInfo Parse(Uri link)
|
||||
{
|
||||
if (link == null)
|
||||
@@ -162,10 +176,33 @@ namespace Podsync.Services.Links
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var match = VimeoRegex.Match(link.AbsoluteUri);
|
||||
if (match.Success)
|
||||
{
|
||||
provider = Provider.Vimeo;
|
||||
id = match.Groups["id"]?.ToString();
|
||||
|
||||
var type = match.Groups["grp"]?.ToString();
|
||||
if (type == "groups")
|
||||
{
|
||||
linkType = LinkType.Group;
|
||||
}
|
||||
else if (type == "channels")
|
||||
{
|
||||
linkType = LinkType.Channel;
|
||||
}
|
||||
else
|
||||
{
|
||||
linkType = LinkType.User;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(id) || linkType == LinkType.Unknown || provider == Provider.Unknown)
|
||||
{
|
||||
throw new ArgumentException("This provider is not supported");
|
||||
throw new ArgumentException("Not supported provider or link format");
|
||||
}
|
||||
|
||||
return new LinkInfo
|
||||
|
@@ -40,6 +40,23 @@ namespace Podsync.Tests.Services.Links
|
||||
Assert.Equal(info.Provider, provider);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("https://vimeo.com/groups/101", LinkType.Group, "101")]
|
||||
[InlineData("http://vimeo.com/groups/102", LinkType.Group, "102")]
|
||||
[InlineData("http://www.vimeo.com/groups/103", LinkType.Group, "103")]
|
||||
[InlineData("https://vimeo.com/awhitelabelproduct", LinkType.User, "awhitelabelproduct")]
|
||||
[InlineData("https://vimeo.com/groups/104/videos/", LinkType.Group, "104")]
|
||||
[InlineData("https://vimeo.com/channels/staffpicks", LinkType.Channel, "staffpicks")]
|
||||
[InlineData("https://vimeo.com/channels/staffpicks/146224925", LinkType.Channel, "staffpicks")]
|
||||
public void ParseVimeoLinks(string link, LinkType linkType, string id)
|
||||
{
|
||||
var info = _linkService.Parse(new Uri(link));
|
||||
|
||||
Assert.Equal(info.Id, id);
|
||||
Assert.Equal(info.LinkType, linkType);
|
||||
Assert.Equal(info.Provider, Provider.Vimeo);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseInvalidLinkTest()
|
||||
{
|
||||
|
Reference in New Issue
Block a user