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 Changed_BeastSaber() { var c = new PluginConfig(); var defaultValue = c.BeastSaber; var newValue = new BeastSaberConfig(); Assert.AreEqual(defaultValue, c.BeastSaber); c.ResetConfigChanged(); Assert.IsFalse(c.ConfigChanged); c.BeastSaber = newValue; Assert.IsTrue(c.ConfigChanged); Assert.AreEqual(newValue, c.BeastSaber); }
public static void CreateBeastSaberSettingsUI(SubMenu parent, BeastSaberConfig sourceConfig) { string sourceName = "BeastSaber"; CreateSourceSettings(sourceName, parent, sourceConfig); var maxConcurrentPageChecks = parent.AddInt("Max Concurrent Page Checks", $"How many {sourceName} pages to check at the same time.", 1, 15, 1); maxConcurrentPageChecks.GetValue += delegate { return(sourceConfig.MaxConcurrentPageChecks); }; maxConcurrentPageChecks.SetValue += delegate(int value) { if (sourceConfig.MaxConcurrentPageChecks == value) { return; } sourceConfig.MaxConcurrentPageChecks = value; // Config.ConfigChanged = true; }; var username = parent.AddString("Username", "Your BeastSaber username. Required to use the Bookmarks and Follows feeds"); username.GetValue += delegate { return(sourceConfig.Username ?? ""); }; username.SetValue += delegate(string value) { if (sourceConfig.Username == value) { return; } sourceConfig.Username = value; // Config.ConfigChanged = true; }; var bookmarks = CreateFeedSettings("Bookmarks", sourceName, sourceConfig.Bookmarks, parent); var follows = CreateFeedSettings("Follows", sourceName, sourceConfig.Follows, parent); var curator = CreateFeedSettings("Curator Recommended", sourceName, sourceConfig.CuratorRecommended, parent); }