Example #1
0
 public void TrackSongRequest(SongRequestServiceTypeEnum songService)
 {
     this.TrySendEvent(() => this.telemetryClient.TrackEvent("SongRequest", new Dictionary <string, string> {
         { "Song Request Service", EnumHelper.GetEnumName(songService) }
     }));
     this.SendPlayFabEvent("SongRequest", "SongRequestService", EnumHelper.GetEnumName(songService));
 }
 public void TrackSongRequest(SongRequestServiceTypeEnum songService)
 {
     if (!ChannelSession.Settings.OptOutTracking)
     {
         this.telemetryClient.TrackEvent("SongRequest", new Dictionary <string, string> {
             { "Song Request Service", EnumHelper.GetEnumName(songService) }
         });
     }
 }
 private async Task StopOverlaySong(SongRequestServiceTypeEnum type)
 {
     if (ChannelSession.Services.OverlayServer != null)
     {
         await ChannelSession.Services.OverlayServer.SendSongRequest(new OverlaySongRequest()
         {
             Type = type.ToString(), Action = "stop"
         });
     }
 }
        private async Task PlayPauseOverlaySong(SongRequestServiceTypeEnum type)
        {
            IOverlayService overlay = ChannelSession.Services.OverlayServers.GetOverlay(ChannelSession.Services.OverlayServers.DefaultOverlayName);

            if (overlay != null)
            {
                await overlay.SendSongRequest(new OverlaySongRequest()
                {
                    Type = type.ToString(), Action = "playpause", Volume = ChannelSession.Settings.SongRequestVolume
                });
            }
        }
Example #5
0
 public override ActionBase GetAction()
 {
     if (this.SongRequestActionTypeComboBox.SelectedIndex >= 0)
     {
         SongRequestActionTypeEnum  actionType  = EnumHelper.GetEnumValueFromString <SongRequestActionTypeEnum>((string)this.SongRequestActionTypeComboBox.SelectedItem);
         SongRequestServiceTypeEnum serviceType = SongRequestServiceTypeEnum.All;
         if (actionType == SongRequestActionTypeEnum.SearchSongsAndPickFirstResult || actionType == SongRequestActionTypeEnum.SearchSongsAndUseArtistSelect)
         {
             serviceType = EnumHelper.GetEnumValueFromString <SongRequestServiceTypeEnum>((string)this.SongRequestServiceComboBox.SelectedItem);
         }
         return(new SongRequestAction(actionType, serviceType));
     }
     return(null);
 }
 private string GetAlbumArt(SongRequestServiceTypeEnum serviceType, string albumArtLink)
 {
     if (string.IsNullOrEmpty(albumArtLink))
     {
         if (serviceType == SongRequestServiceTypeEnum.Spotify)
         {
             return(SongRequestService.SpotifyDefaultAlbumArt);
         }
         else if (serviceType == SongRequestServiceTypeEnum.YouTube)
         {
             return(SongRequestService.YouTubeDefaultAlbumArt);
         }
     }
     return(albumArtLink);
 }
        public async Task SearchAndSelect(UserViewModel user, SongRequestServiceTypeEnum service, string identifier)
        {
            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;
            }

            if (this.lastUserSongSearches.ContainsKey(user) && int.TryParse(identifier, out int songIndex) && songIndex > 0 && songIndex <= this.lastUserSongSearches[user].Count)
            {
                songIndex = songIndex - 1;
                await this.AddSongRequest(user, this.lastUserSongSearches[user][songIndex]);

                this.lastUserSongSearches.Remove(user);
            }
            else
            {
                IEnumerable <SongRequestModel> results = await this.Search(service, identifier);

                if (results != null && results.Count() > 0)
                {
                    if (results.Count() == 1)
                    {
                        await this.AddSongRequest(user, results.First());
                    }
                    else
                    {
                        this.lastUserSongSearches[user] = new List <SongRequestModel>();
                        foreach (SongRequestModel song in results.Take(5))
                        {
                            this.lastUserSongSearches[user].Add(song);
                        }

                        List <string> resultsStrings = new List <string>();
                        for (int i = 0; i < this.lastUserSongSearches[user].Count; i++)
                        {
                            resultsStrings.Add((i + 1) + ". " + this.lastUserSongSearches[user][i].Name);
                        }
                        await ChannelSession.Chat.Whisper(user.UserName, "Multiple results found, please re-run this command with a space & the number of the song: " + string.Join(",  ", resultsStrings));
                    }
                }
                else
                {
                    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");
                }
            }
        }
        private async Task <IEnumerable <SongRequestModel> > Search(SongRequestServiceTypeEnum service, string identifier)
        {
            List <Task <IEnumerable <SongRequestModel> > > searchTasks = new List <Task <IEnumerable <SongRequestModel> > >();

            foreach (ISongRequestProviderService provider in this.enabledProviders)
            {
                if (service == SongRequestServiceTypeEnum.All || service == provider.Type)
                {
                    searchTasks.Add(provider.Search(identifier));
                }
            }

            IEnumerable <SongRequestModel>[] taskResults = await Task.WhenAll(searchTasks);

            return(taskResults.SelectMany(r => r));
        }
        public async Task SearchAndPickFirst(UserViewModel user, SongRequestServiceTypeEnum service, string identifier)
        {
            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;
            }

            IEnumerable <SongRequestModel> results = await this.Search(service, identifier);

            if (results != null && results.Count() > 0)
            {
                await this.AddSongRequest(user, results.First());
            }
            else
            {
                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");
            }
        }
 public SongRequestAction(SongRequestActionTypeEnum songRequestType, SongRequestServiceTypeEnum service = SongRequestServiceTypeEnum.All)
     : this()
 {
     this.SongRequestType = songRequestType;
     this.SpecificService = service;
 }
 public SongRequestAction()
     : base(ActionTypeEnum.SongRequest)
 {
     this.SpecificService = SongRequestServiceTypeEnum.All;
 }
 public SongRequestItemSearch(SongRequestServiceTypeEnum type, IEnumerable <string> errorMessages, bool multipleResults = false)
 {
     this.Type            = type;
     this.ErrorMessages   = new List <string>(errorMessages);
     this.MultipleResults = multipleResults;
 }
 public SongRequestItemSearch(SongRequestServiceTypeEnum type, string errorMessage, bool multipleResults = false) : this(type, new string[] { errorMessage }, multipleResults)
 {
 }
        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 SongRequestItemSearch(SongRequestServiceTypeEnum type, IEnumerable <string> errorMessages)
 {
     this.Type          = type;
     this.ErrorMessages = new List <string>(errorMessages);
 }
 public SongRequestItemSearch(SongRequestServiceTypeEnum type, string errorMessage) : this(type, new string[] { errorMessage })
 {
 }