public async Task AddSongRequest(UserViewModel user, SongRequestServiceTypeEnum service, string identifier, bool pickFirst = false) { if (!this.IsEnabled) { await ChannelSession.Chat.Whisper(user.UserName, "Song Requests are not currently enabled"); return; } if (string.IsNullOrEmpty(identifier)) { await ChannelSession.Chat.Whisper(user.UserName, "You must specify your request with the command. For details on how to request songs, check out: https://github.com/SaviorXTanren/mixer-mixitup/wiki/Song-Requests#requesting-songs"); return; } List <Task <SongRequestItemSearch> > allTaskSearches = new List <Task <SongRequestItemSearch> >(); if (ChannelSession.Settings.SongRequestServiceTypes.Contains(SongRequestServiceTypeEnum.YouTube) && (service == SongRequestServiceTypeEnum.All || service == SongRequestServiceTypeEnum.YouTube)) { allTaskSearches.Add(this.GetYouTubeSongRequest(user, identifier, pickFirst)); } if (ChannelSession.Settings.SongRequestServiceTypes.Contains(SongRequestServiceTypeEnum.Spotify) && (service == SongRequestServiceTypeEnum.All || service == SongRequestServiceTypeEnum.Spotify)) { allTaskSearches.Add(this.GetSpotifySongRequest(user, identifier, pickFirst)); } List <SongRequestItemSearch> allSearches = new List <SongRequestItemSearch>(await Task.WhenAll(allTaskSearches)); SongRequestItemSearch requestSearch = null; if (service != SongRequestServiceTypeEnum.All) { if (allSearches.First(s => s.Type == service).FoundSingleResult) { requestSearch = allSearches.First(s => s.Type == service); } } if (requestSearch == null) { foreach (SongRequestItemSearch search in allSearches) { if (search.FoundSingleResult) { requestSearch = search; break; } } } if (requestSearch == null) { foreach (SongRequestItemSearch search in allSearches) { if (search.MultipleResults) { requestSearch = search; break; } } } if (requestSearch != null) { if (requestSearch.FoundSingleResult) { await SongRequestService.songRequestLock.WaitAndRelease(() => { this.allRequests.Add(requestSearch.SongRequest); return(Task.FromResult(0)); }); ChannelSession.Services?.Telemetry?.TrackSongRequest(requestSearch.Type); await ChannelSession.Chat.SendMessage(string.Format("{0} was added to the queue.", requestSearch.SongRequest.Name)); GlobalEvents.SongRequestsChangedOccurred(); return; } else { foreach (string errorMessage in requestSearch.ErrorMessages) { await ChannelSession.Chat.Whisper(user.UserName, errorMessage); } return; } } await ChannelSession.Chat.Whisper(user.UserName, "We were unable to find a song that matched you request. For details on how to request songs, check out: https://github.com/SaviorXTanren/mixer-mixitup/wiki/Song-Requests#requesting-songs"); return; }
public async Task AddSongRequest(UserViewModel user, string identifier) { if (!this.IsEnabled) { await ChannelSession.Chat.Whisper(user.UserName, "Song Requests are not currently enabled"); return; } if (string.IsNullOrEmpty(identifier)) { await ChannelSession.Chat.Whisper(user.UserName, "You must specify your request with the command. For details on how to request songs, check out: https://github.com/SaviorXTanren/mixer-mixitup/wiki/Song-Requests#requesting-songs"); return; } List <Task <SongRequestItemSearch> > allRequests = new List <Task <SongRequestItemSearch> >(); if (ChannelSession.Settings.SongRequestServiceTypes.Contains(SongRequestServiceTypeEnum.YouTube)) { allRequests.Add(this.GetYouTubeSongRequest(identifier)); } if (ChannelSession.Settings.SongRequestServiceTypes.Contains(SongRequestServiceTypeEnum.SoundCloud)) { allRequests.Add(this.GetSoundCloudSongRequest(identifier)); } if (ChannelSession.Settings.SongRequestServiceTypes.Contains(SongRequestServiceTypeEnum.Spotify)) { allRequests.Add(this.GetSpotifySongRequest(user, identifier)); } SongRequestItemSearch requestSearch = null; foreach (SongRequestItemSearch search in await Task.WhenAll(allRequests)) { requestSearch = search; if (requestSearch.SongRequest != null) { break; } } if (requestSearch != null) { if (requestSearch.SongRequest != null) { await DesktopSongRequestService.songRequestLock.WaitAsync(); if (this.allRequests.Count == 0) { await this.PlaySong(requestSearch.SongRequest); } this.allRequests.Add(requestSearch.SongRequest); DesktopSongRequestService.songRequestLock.Release(); await ChannelSession.Chat.SendMessage(string.Format("{0} was added to the queue", requestSearch.SongRequest.Name)); GlobalEvents.SongRequestsChangedOccurred(); return; } else { foreach (string errorMessage in requestSearch.ErrorMessages) { await ChannelSession.Chat.Whisper(user.UserName, errorMessage); } return; } } await ChannelSession.Chat.Whisper(user.UserName, "We were unable to find a song that matched you request. For details on how to request songs, check out: https://github.com/SaviorXTanren/mixer-mixitup/wiki/Song-Requests#requesting-songs"); return; }