public void MoveNext() { _trackQueue.MoveNext(); CurrentTrackChanged?.Invoke(_trackQueue.CurrentTrack); }
public void MovePrevious() { _trackQueue.MovePrevious(); CurrentTrackChanged?.Invoke(_trackQueue.CurrentTrack); }
private void _Initialize(bool isAutoSubscribing, int pollingIntervalMilliseconds) { IsAutoSubscribing = isAutoSubscribing; // ポーリング _Polling = new System.Timers.Timer(pollingIntervalMilliseconds); _Polling.Elapsed += (s, e) => { var isRunning = Helper.AimpRemoteWindowHandle != IntPtr.Zero; // 通知が購読されていない if (!IsSubscribed) { if (isRunning && IsAutoSubscribing) { // 通知を購読 Subscribe(); } } // 通知が購読されている else { if (isRunning) { // PositionProperty var position = Helper.SendPropertyMessage(PlayerProperty.Position, PropertyAccessMode.Get).ToInt32(); PositionPropertyChanged?.Invoke(position); } else { // AIMPが終了した Unsubscribe(); } } }; _Polling.Start(); _Receiver = new MessageReceiver(); _Receiver.MessageReceived += (message, wParam, lParam) => { // NotifyMessageReceived を発行 if (message == (WindowMessage)AimpWindowMessage.Notify) { NotifyMessageReceived?.Invoke((NotifyType)wParam, lParam); } }; NotifyMessageReceived += (type, lParam) => { // PropertyChanged を発行 if (type == NotifyType.Property) { PropertyChanged?.Invoke((PlayerProperty)lParam); } // CurrentTrackChanged を発行 else if (type == NotifyType.TrackStart) { CurrentTrackChanged?.Invoke(Helper.ReadTrackInfo()); } else if (type == NotifyType.TrackInfo) { } else { throw new ApplicationException($"NotifyType '{type}' is undefined value"); } }; PropertyChanged += (type) => { var propertyValue = Helper.SendPropertyMessage(type, PropertyAccessMode.Get).ToInt32(); // DurationPropertyChanged を発行 if (type == PlayerProperty.Duration) { DurationPropertyChanged?.Invoke(TimeSpan.FromMilliseconds(propertyValue)); } // IsMutePropertyChanged を発行 else if (type == PlayerProperty.IsMute) { IsMutePropertyChanged?.Invoke(propertyValue != 0); } // IsRepeatPropertyChanged を発行 else if (type == PlayerProperty.IsRepeat) { IsRepeatPropertyChanged?.Invoke(propertyValue != 0); } // IsShufflePropertyChanged を発行 else if (type == PlayerProperty.IsShuffle) { IsShufflePropertyChanged?.Invoke(propertyValue != 0); } // PositionPropertyChanged を発行 else if (type == PlayerProperty.Position) { PositionPropertyChanged?.Invoke(propertyValue); } // StatePropertyChanged を発行 else if (type == PlayerProperty.State) { StatePropertyChanged?.Invoke((PlayerState)propertyValue); } // VolumePropertyChanged を発行 else if (type == PlayerProperty.Volume) { VolumePropertyChanged?.Invoke(propertyValue); } else { throw new ApplicationException($"PropertyType '{type}' is undefined value"); } }; }