Ejemplo n.º 1
0
        public TrackViewModel(IContentManagerService contentManagerService, IMusicPlayerService musicPlayerService, IWebService webService, PlaylistTrack playlistTrack)
        {
            _contentManagerService = contentManagerService;
            _musicPlayerService    = musicPlayerService;
            _webService            = webService;

            PlaylistTrack = playlistTrack;
        }
        public ShellViewModel(IMainViewModel mainViewModel, IMusicPlayerService musicPlayerService)
        {
            DisplayName = "Tornado Player";

            MainViewModel = mainViewModel;

            _musicPlayerService = musicPlayerService;
        }
Ejemplo n.º 3
0
        private async Task TryPlayUrlAsync(IMusicPlayerService music, ITextChannel textChan, IUserMessage msg, IGuildUser guser, string url)
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                return;                                 // can be null or empty apparently
            }
            IGuildUser botUser = await guser.Guild.GetCurrentUserAsync();

            await msg.RemoveReactionAsync(Emote, botUser);

            bool played = await this.TryPlaySpotifyAsync(music, textChan, guser, url);

            if (played)
            {
                return;
            }

            SearchResult result = await music.LavaRestClient.SearchTracksAsync(url);

            List <ILavaTrack> tracks = result.Tracks.ToList();

            switch (result.LoadType)
            {
            case LoadType.SearchResult:
            case LoadType.TrackLoaded:
                if (tracks.Count > 0)
                {
                    await music.AddTrackAsync(guser.VoiceChannel, textChan, tracks[0]);
                }
                break;

            case LoadType.PlaylistLoaded:
                if (tracks.Count > 0)
                {
                    await music.AddPlaylistAsync(guser.VoiceChannel, textChan, result.PlaylistInfo.Name, tracks);
                }
                break;

            case LoadType.LoadFailed:
                await this.SendNonPlayableContentAsync(guser, msg, textChan, url, "File is corrupted or does not have audio");

                this.Logger.Nice("music player", ConsoleColor.Yellow, $"Could add/play track from playable content ({url})");
                break;

            case LoadType.NoMatches:
                await this.SendNonPlayableContentAsync(guser, msg, textChan, url, "Could not find the track to be added/played");

                this.Logger.Nice("music player", ConsoleColor.Yellow, $"Could not find match for playable content ({url})");
                break;

            default:
                await this.SendNonPlayableContentAsync(guser, msg, textChan, url, "Unkown error");

                this.Logger.Nice("music player", ConsoleColor.Yellow, $"Unknown error ({url})");
                break;
            }
        }
        public RecordOptionsViewModel(IEventAggregator eventAggregator, ISongsService songsService, IMusicPlayerService musicPlayerService)
            : base(eventAggregator)
        {
            Song       = new Song();
            Difficulty = Difficulty.Easy;

            _songsService       = songsService;
            _musicPlayerService = musicPlayerService;
        }
Ejemplo n.º 5
0
        public PlaybarViewModel(IEventAggregator eventAggregator, IDataService dataService, IHotKeyService hotKeyService, IMusicPlayerService musicPlayerService)
        {
            _dataService        = dataService;
            _musicPlayerService = musicPlayerService;

            eventAggregator.Subscribe(this);

            _musicPlayerService.ProgressUpdated += (sender, e) =>
            {
                if (_syncPlayer)
                {
                    _currentProgress = e.NewProgress;
                    NotifyOfPropertyChange(nameof(CurrentProgress));
                }

                ActivePlaylist.Playlist.TrackProgress = e.NewProgress;
            };
            _musicPlayerService.TrackChanged += (sender, e) => NotifyOfPropertyChange(nameof(Duration));

            _musicPlayerService.Paused += (sender, e) => NotifyOfPropertyChange(nameof(Playing));
            _musicPlayerService.Played += (sender, e) => NotifyOfPropertyChange(nameof(Playing));

            _musicPlayerService.MediaEnded += (sender, e) =>
            {
                if (Loop)
                {
                    _musicPlayerService.Stop();
                    _musicPlayerService.Play();
                }
                else
                {
                    ActivePlaylist.SelectNext();
                }
            };

            hotKeyService.HotKeyActuated += (sender, e) =>
            {
                switch (e.Shortcut)
                {
                case Shortcut.SkipBackward:
                    Previous();
                    break;

                case Shortcut.SkipForward:
                    Next();
                    break;
                }
            };

            PlaybarState playbarState = dataService.Load(Constants.DataStoreNames.PlaybarState, () => new PlaybarState(0.5, false));

            Volume = playbarState.Volume;
            Loop   = playbarState.Loop;
        }
 public ManagedPlaylistViewModel
 (
     IViewModelFactory viewModelFactory,
     IEventAggregator eventAggregator,
     IContentManagerService contentManagerService,
     IMusicPlayerService musicPlayerService,
     Playlist playlist
 )
     : base(viewModelFactory, eventAggregator, contentManagerService, musicPlayerService, playlist)
 {
     _viewModelFactory = viewModelFactory;
 }
 public CustomPlaylistViewModel
 (
     IViewModelFactory viewModelFactory,
     IEventAggregator eventAggregator,
     IContentManagerService contentManagerService,
     IMusicPlayerService musicPlayerService,
     Playlist playlist
 )
     : base(viewModelFactory, eventAggregator, contentManagerService, musicPlayerService, playlist)
 {
     Items.AddRange(playlist.Tracks.Select(track => viewModelFactory.MakeViewModel <ITrackViewModel>(track)));
 }
Ejemplo n.º 8
0
        private async Task <bool> TryPlaySpotifyAsync(IMusicPlayerService music, ITextChannel textChan, IGuildUser guser, string url)
        {
            SpotifyTrack track = await this.SpotifyToTrackAsync(url);

            if (track == null)
            {
                return(false);
            }

            await music.AddTrackAsync(guser.VoiceChannel, textChan, track);

            return(true);
        }
Ejemplo n.º 9
0
        public PlaylistViewModel(ITrackFactory trackFactory, IMusicPlayerService musicPlayerService)
        {
            _musicPlayerService = musicPlayerService;

            Tracks = new BindableCollection <ITrackViewModel>(_musicPlayerService.Tracks.Select(trackFactory.MakeTrackViewModel));

            _musicPlayerService.PlaylistLoaded += (sender, e) =>
            {
                Tracks.Clear();
                Tracks.AddRange(e.Tracks.Select(trackFactory.MakeTrackViewModel));
            };

            _musicPlayerService.TrackChanged += (sender, e) => NotifyOfPropertyChange(() => SelectedTrackIndex);
        }
Ejemplo n.º 10
0
        private static async Task OnPlayReactionAsync(PaginatorSenderService sender, Paginator <object> paginator, Cacheable <IUserMessage, ulong> cache, ISocketMessageChannel chan, SocketReaction reaction)
        {
            if (!(chan is IGuildChannel) || reaction.User.Value == null)
            {
                return;
            }
            IGuildUser guser = (IGuildUser)reaction.User.Value;

            if (guser.VoiceChannel == null)
            {
                return;
            }

            ITextChannel        textChan = (ITextChannel)chan;
            IMusicPlayerService music    = sender.ServiceManager.GetService <IMusicPlayerService>("Music");

            switch (paginator.CurrentValue)
            {
            case ILavaTrack track:
                await music.AddTrackAsync(guser.VoiceChannel, textChan, track);

                await chan.DeleteMessageAsync(paginator.Message);

                break;

            case string url:
                if (string.IsNullOrWhiteSpace(url))
                {
                    return;
                }

                SearchResult result = await music.LavaRestClient.SearchTracksAsync(url);

                List <ILavaTrack> tracks = result.Tracks.ToList();
                if (tracks.Count > 0)
                {
                    ILavaTrack tr = tracks[0];
                    await music.AddTrackAsync(guser.VoiceChannel, textChan, tr);

                    await chan.DeleteMessageAsync(paginator.Message);
                }
                else
                {
                    await sender.MessageSender.SendWarningAsync(chan, "music player", $"Could not add the following Url to the queue\n{url}");
                }

                break;
            }
        }
Ejemplo n.º 11
0
        public Game(IEventAggregator eventAggregator, IMusicPlayerService musicPlayerService)
        {
            MusicPlayerService = musicPlayerService;

            _eventAggregator = eventAggregator;
            eventAggregator.Subscribe(this);

            _missedTimer.Elapsed += lookForMissedNotes_Tick;

            Player1 = new Player()
            {
                PlayerID = PlayerID.Player1
            };
            Player2 = new Player()
            {
                PlayerID = PlayerID.Player2
            };
        }
Ejemplo n.º 12
0
        public PlaybarViewModel(IMusicPlayerService musicPlayerService)
        {
            _musicPlayerService = musicPlayerService;

            _musicPlayerService.ProgressUpdated += (sender, e) =>
            {
                if (_syncPlayer)
                {
                    _syncPlayer     = false;
                    CurrentProgress = e.NewProgress;
                    _syncPlayer     = true;
                }
            };
            _musicPlayerService.TrackChanged   += (sender, e) => NotifyOfPropertyChange(() => Duration);
            _musicPlayerService.PlaylistLoaded += (sender, e) => NotifyOfPropertyChange(() => Shuffle);

            _musicPlayerService.Paused += (sender, e) => NotifyOfPropertyChange(() => Playing);
            _musicPlayerService.Played += (sender, e) => NotifyOfPropertyChange(() => Playing);
        }
Ejemplo n.º 13
0
        private async Task OnReaction(Cacheable <IUserMessage, ulong> cache, ISocketMessageChannel chan, SocketReaction reaction)
        {
            if (!IsValidReaction(chan, reaction))
            {
                return;
            }
            IGuildUser guser = (IGuildUser)reaction.User.Value;

            if (guser.VoiceChannel == null)
            {
                return;
            }
            ITextChannel textChan = (ITextChannel)chan;
            IUserMessage msg      = await cache.GetOrDownloadAsync();

            if (!this.IsValidMessage(msg))
            {
                return;
            }

            IMusicPlayerService music = this.ServiceManager.GetService <IMusicPlayerService>("Music");

            foreach (IEmbed embed in msg.Embeds)
            {
                if (IsValidUrl(embed.Url))
                {
                    await this.TryPlayUrlAsync(music, textChan, msg, guser, embed.Url);
                }
                else if (embed.Video.HasValue)
                {
                    await this.TryPlayUrlAsync(music, textChan, msg, guser, embed.Video.Value.Url);
                }
            }

            foreach (IAttachment attachment in msg.Attachments)
            {
                if (attachment.IsPlayableAttachment())
                {
                    await this.TryPlayUrlAsync(music, textChan, msg, guser, attachment.Url);
                }
            }
        }
Ejemplo n.º 14
0
        public async Task Execute(IJobExecutionContext context)
        {
            JobDataMap           dataMap        = context.JobDetail.JobDataMap;
            IServiceManager      serviceManager = (IServiceManager)dataMap["ServiceManager"];
            DiscordShardedClient discordClient  = (DiscordShardedClient)dataMap["DiscordClient"];

            IMusicPlayerService music   = serviceManager.GetService <IMusicPlayerService>("Music");
            IRestartService     restart = serviceManager.GetService <IRestartService>("Restart");

            await music.DisconnectAllPlayersAsync("Weekly update on-going, disconnecting", true);

            SocketChannel updateChan = discordClient.GetChannel(Config.Instance.Discord.UpdateChannelID);

            if (updateChan != null)
            {
                await restart.WarnChannelAsync(updateChan, "Updating to the latest changes...");
            }

            await restart.RestartAsync();
        }
Ejemplo n.º 15
0
        private async void OnReconnectRequested(RemoteProcess proc, string publicIp)
        {
            if (string.IsNullOrWhiteSpace(publicIp) || proc.Name != "Watchdog")
            {
                return;
            }
            this.Log($"Remote nodes reconnected with IP: {publicIp}");

            IMusicPlayerService music = this.ServiceManager.GetService <IMusicPlayerService>("Music");
            await music.DisconnectAllPlayersAsync("Network issues detected, disconnecting to prevent further bugs");

            await music.StartAsync(publicIp);

            SocketChannel bugChan = this.DiscordClient.GetChannel(Config.Instance.Discord.BugReportChannelID);

            if (bugChan != null)
            {
                await this.MessageSender.SendWarningAsync(bugChan, "network errors", "Reconnected to lavalink remote server");
            }
        }
Ejemplo n.º 16
0
        public static void ShowCurrentTimeInsteadPoints(Storyboard animation, IMusicPlayerService musciPlayerService, GameView view)
        {
            #if DEBUG_TIMING
            new Thread(new ThreadStart(() =>
            {
                while (true)
                {
                    if (Application.Current == null)
                    {
                        return;
                    }

                    Application.Current.Dispatcher.BeginInvoke(new System.Action(() =>
                    {
                        var time = musciPlayerService.CurrentTime;
                        view.p1PointsBar.Points = "S: " + time.TotalSeconds.ToString("N2") + " | A: " + animation.GetCurrentTime().TotalSeconds.ToString("N2");
                    }));
                    Thread.Sleep(50);
                }
            })).Start();
            #endif
        }
Ejemplo n.º 17
0
        private protected PlaylistViewModel(IViewModelFactory viewModelFactory, IEventAggregator eventAggregator, IContentManagerService contentManagerService, IMusicPlayerService musicPlayerService, Playlist playlist)
        {
            _viewModelFactory      = viewModelFactory;
            _contentManagerService = contentManagerService;
            _musicPlayerService    = musicPlayerService;
            _tracksView            = CollectionViewSource.GetDefaultView(Items);

            DisplayName   = playlist.Name;
            Playlist      = playlist;
            SelectedIndex = Playlist.SelectedTrackIndex;

            _tracksView.SortDescriptions.Add(new SortDescription(nameof(ITrackViewModel.PlaylistTrack), ListSortDirection.Ascending));

            eventAggregator.Subscribe(this);

            Playlist.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(Playlist.IsShuffled))
                {
                    _tracksView.Refresh();
                }
            };
        }
Ejemplo n.º 18
0
 public RecordSequenceViewModel(IEventAggregator eventAggregator, IMusicPlayerService musicPlayerService)
     : base(eventAggregator)
 {
     _musicPlayerService = musicPlayerService;
 }