private Track GetTrackWithFreshYoutubeUrl(Track originalTrack) { IEnumerable <Track> tracks = playlistManager.ReadTracks().Where(t => t.Artist == originalTrack.Artist && t.Title == originalTrack.Title); DateTime timeTrackRequested = new DateTime(1970, 1, 1, 0, 0, 0); Track trackWithLatestYoutubeUrl = null; string youTubeVideo = null; foreach (Track track in tracks) { if (track.Url != null) { Match match = Regex.Match(track.Url, @"lmt(\=[^&]*)?(?=&|$)|^lmt(\=[^&]*)?(&|$)"); if (match.Success) { string timestamp; timestamp = match.Groups[1].Value; timestamp.Replace("lmt=", ""); DateTime datetime = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Convert.ToDouble(timestamp)); if (datetime > timeTrackRequested) { timeTrackRequested = datetime; trackWithLatestYoutubeUrl = track; } } } } if (timeTrackRequested.AddHours(6) >= DateTime.UtcNow || trackWithLatestYoutubeUrl == null) { var youTube = YouTube.Default; // starting point for YouTube actions youTubeVideo = youTube.GetVideo(originalTrack.TrackSource.Url).Uri; // gets a Video object with info about the video } else { youTubeVideo = trackWithLatestYoutubeUrl.Url; } Track newTrack = new Track() { Id = originalTrack.Id, Artist = originalTrack.Artist, CoverArtUrl = originalTrack.CoverArtUrl, Duration = originalTrack.Duration, TrackSource = new TrackSource() { Id = originalTrack.TrackSource.Id, SourceType = originalTrack.TrackSource.SourceType, TrackId = originalTrack.TrackSource.TrackId, Url = originalTrack.TrackSource.Url }, Title = originalTrack.Title, Url = youTubeVideo }; return(newTrack); }