public override async Task <DBSubscription> CreateSubscriptionAsync(Uri uri) { var id = uri.Segments.ElementAtOrDefault(2); if (id == null) { return(null); } if (uri.Segments.ElementAt(1) == "c/" || uri.Segments.ElementAt(1) == "user/") { var channelId = await PollyHelper.WebFallbackAsync(() => _client.ChannelId(uri.AbsoluteUri)); if (channelId == null) { return(null); } id = channelId; } using (var xmlReader = XmlReader.Create($"https://www.youtube.com/feeds/videos.xml?channel_id={id}", new XmlReaderSettings { Async = true })) { var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { case SyndicationElementType.Content: var content = await feedReader.ReadContent(); if (string.Equals(content.Name, "title", StringComparison.OrdinalIgnoreCase)) { return(new DBSubscription { Source = ESource.Youtube, IsProtected = false, SourceId = id, Username = content.Value }); } break; } } } return(null); }