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 }); } }
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 }) { }