public async Task <IResult <Chords> > Get(ChordsLink chordsLInk) { var error = Task.FromResult(Result <Chords> .Error("invalid link")); return(await _chordsGrabbers .Where(x => x.CanGrab(chordsLInk.Origin)) .Take(1) .Select(async x => (await x.GrabChords(chordsLInk.Url)) .Bind(y => new Chords(y, chordsLInk) .Return()) ) .Aggregate(error, (x, y) => y)); }
private bool TryGetChordsLink(HtmlNode node, out ChordsLink chordsLink) { var children = node.ChildNodes; var linkNode = children.Single(child => child.HasClass("types")).ChildNodes .SingleOrDefault(x => x.HasClass("ta")); var nameNode = children.Single(child => child.HasClass("h1")).ChildNodes .Single(child => child.Name == "a"); var authorNode = children.Single(child => child.HasClass("h2")).ChildNodes .Single(child => child.Name == "a"); var url = linkNode?.GetAttributeValue("href", string.Empty); var name = nameNode.InnerText; var author = authorNode.InnerText; if (string.IsNullOrWhiteSpace(url)) { chordsLink = null; return(false); } chordsLink = new ChordsLink(_echordsUrl, _thumbnail, new Uri(url), name, author); return(true); }
public Task <IResult <Chords> > Get(ChordsLink chordsLInk) { return(_decoratee.Get(chordsLInk)); }
private static string GetHeader(ChordsLink link) { return($"{link.SongAuthor} - {link.SongName} \n" + $"Origin: {link.Origin} \n" + $"Url: {link.Url} \n"); }
public Chords(string chords, ChordsLink sourceLink) { SourceLink = sourceLink; RawChords = chords; }