Пример #1
0
        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;
        }