public void CuratorRecommended_LimitedSongs() { var reader = new BeastSaberReader("Zingabopp", DefaultMaxConcurrency) { StoreRawData = true }; int maxSongs = 60; var settings = new BeastSaberFeedSettings((int)BeastSaberFeedName.CuratorRecommended) { MaxSongs = maxSongs }; var result = reader.GetSongsFromFeedAsync(settings).Result; Assert.IsTrue(result.Count == maxSongs); Assert.IsFalse(result.Songs.Any(s => string.IsNullOrEmpty(s.Key))); Assert.IsFalse(result.Songs.Any(s => s.Value.DownloadUri == null)); try { Assert.AreEqual(2, result.PagesChecked); } catch (AssertFailedException) { for(int i = 0; i < result.PageResults.Count(); i++) { var page = result.PageResults[i]; Console.WriteLine($"Page {i + 1}: {page.Count} songs. {page.Uri}"); } Assert.AreEqual(3, result.PagesChecked); } var firstSong = result.Songs.First().Value; Assert.IsFalse(string.IsNullOrEmpty(firstSong.RawData)); var firstRawData = JToken.Parse(firstSong.RawData); Assert.IsTrue(firstRawData["hash"]?.Value<string>().ToUpper() == firstSong.Hash); }
public void Bookmarks_UnlimitedSongs() { var reader = new BeastSaberReader("Zingabopp", DefaultMaxConcurrency); int maxSongs = 0; var settings = new BeastSaberFeedSettings((int)BeastSaberFeedName.Bookmarks) { MaxSongs = maxSongs }; var songList = reader.GetSongsFromFeedAsync(settings).Result; Assert.IsTrue(songList.Count > 0); Assert.IsFalse(songList.Songs.Any(s => string.IsNullOrEmpty(s.Key))); }
public void Followings_LimitedSongs() { var reader = new BeastSaberReader("Zingabopp", DefaultMaxConcurrency) { StoreRawData = true }; int maxSongs = 60; var settings = new BeastSaberFeedSettings((int)BeastSaberFeedName.Following) { MaxSongs = maxSongs }; var result = reader.GetSongsFromFeedAsync(settings).Result; Assert.IsTrue(result.Count == maxSongs); //Assert.IsFalse(songList.Count > maxSongs); Assert.IsFalse(result.Songs.Any(s => string.IsNullOrEmpty(s.Key))); }
protected async Task <JobStats> GetBeastSaberAsync(BeatSyncConfig config, IJobBuilder jobBuilder, JobManager jobManager, CancellationToken cancellationToken) { BeastSaberConfig sourceConfig = config.BeastSaber; JobStats sourceStats = new JobStats(); if (!sourceConfig.Enabled) { return(sourceStats); } BeastSaberReader reader = new BeastSaberReader(sourceConfig.Username, sourceConfig.MaxConcurrentPageChecks); FeedConfigBase[] feedConfigs = new FeedConfigBase[] { sourceConfig.Bookmarks, sourceConfig.Follows, sourceConfig.CuratorRecommended }; if (!feedConfigs.Any(f => f.Enabled)) { Logger.log?.Info($"No feeds enabled for {reader.Name}"); return(sourceStats); } SourceStarted?.Invoke(this, "BeastSaber"); foreach (FeedConfigBase?feedConfig in feedConfigs.Where(c => c.Enabled)) { //if (string.IsNullOrEmpty(sourceConfig.Username) && feedConfig.GetType() != typeof(BeastSaberCuratorRecommended)) //{ // Logger.log?.Warn($" {feedConfig.GetType().Name} feed not available without a valid username."); // continue; //} Logger.log?.Info($" Starting {feedConfig.GetType().Name} feed..."); FeedResult results = await reader.GetSongsFromFeedAsync(feedConfig.ToFeedSettings()).ConfigureAwait(false); if (results.Successful) { IEnumerable <IJob>?jobs = CreateJobs(results, jobBuilder, jobManager, cancellationToken); JobResult[] jobResults = await Task.WhenAll(jobs.Select(j => j.JobTask).ToArray()); JobStats feedStats = new JobStats(jobResults); ProcessFinishedJobs(jobs, jobBuilder.SongTargets, config, feedConfig); Logger.log?.Info($" Finished {feedConfig.GetType().Name} feed: ({feedStats})."); sourceStats += feedStats; } else { if (results.Exception != null) { Logger.log?.Error($" Error getting results from {feedConfig.GetType().Name}: {results.Exception.Message}"); Logger.log?.Debug(results.Exception); } else { Logger.log?.Error($" Error getting results from {feedConfig.GetType().Name}: Unknown error."); } } } Logger.log?.Info($" Finished BeastSaber reading: ({sourceStats})."); return(sourceStats); }
public void CuratorRecommended_UnlimitedSongs() { var reader = new BeastSaberReader("Zingabopp", DefaultMaxConcurrency) { StoreRawData = true }; int maxSongs = 0; var settings = new BeastSaberFeedSettings((int)BeastSaberFeedName.CuratorRecommended) { MaxSongs = maxSongs }; var result = reader.GetSongsFromFeedAsync(settings).Result; Assert.IsTrue(result.Count != 0); Assert.IsFalse(result.Songs.Any(s => string.IsNullOrEmpty(s.Key))); Assert.IsFalse(result.Songs.Any(s => s.Value.DownloadUri == null)); Assert.IsTrue(result.PagesChecked >= 26); var firstSong = result.Songs.First().Value; var firstRawData = JToken.Parse(firstSong.RawData); Assert.IsTrue(firstRawData["hash"]?.Value<string>().ToUpper() == firstSong.Hash); }