1
0
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:
Maksym Pavlenko
2017-01-06 13:36:14 -08:00
parent dce590a047
commit 18bbaeec6d
2 changed files with 55 additions and 1 deletions

View File

@@ -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

View File

@@ -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()
{