/// <summary> /// コンストラクタ /// </summary> public NotificationsViewModel() { NotificationsStack.Initialize(); this.Notifications = new Notifications(); this._IsVisibleBackButton = false; this._TimelineItems = new ObservableCollection <TimelineItemProperties>(); this.CompositeDisposable.Add( new PropertyChangedEventListener(this.Notifications, (_, __) => { switch (__.PropertyName) { case nameof(this.Notifications.ScreenNames): this.RaisePropertyChanged(() => this.ScreenNames); break; case nameof(this.Notifications.IsOpen): this.RaisePropertyChanged(() => this.IsOpen); break; case nameof(this.Notifications.ProfileImageUrl): this.RaisePropertyChanged(() => this.ProfileImageUrl); break; case nameof(this.Notifications.TokenSuffix): this.RaisePropertyChanged(() => this.TokenSuffix); break; } }) ); this.CloseCommand = new RelayCommand(this.ToggleOpen); }
/// <summary> /// メンションを受け取ったとき /// </summary> /// <param name="tokenSuffix">アカウント番号</param> /// <param name="statusMessage">メンション</param> private void ReceiveMention(int tokenSuffix, StatusMessage statusMessage) { if (statusMessage.Status.CurrentUserRetweet != null) { return; } if (Properties.Settings.Default.IsNotify) { var text = ""; if (statusMessage.Status.ExtendedTweet != null && !string.IsNullOrEmpty(statusMessage.Status.ExtendedTweet.FullText)) { text = statusMessage.Status.ExtendedTweet.FullText; } else if (statusMessage.Status.FullText != null && !string.IsNullOrEmpty(statusMessage.Status.FullText)) { text = statusMessage.Status.FullText; } else { text = statusMessage.Status.Text; } CommonMethods.PlaySoundEffect(SoundEffect.Notification1); this.Notify(statusMessage.Status.User.Name + "さんからのメンション\n" + text, NotificationType.Normal); } if (statusMessage.Status.RetweetedStatus != null) { NotificationsStack.StackNotification( statusMessage.Status.User, statusMessage.Status.RetweetedStatus.User, Timeline.NotificationPropertiesType.Retweeted, statusMessage.Status.User.Name + "さんにツイートがリツイートされました。\n" + statusMessage.Status.RetweetedStatus.Text, statusMessage.Status.RetweetedStatus.Id); } else { MentionsStack.StackMention(statusMessage.Status); } }
/// <summary> /// イベントが流れてきたとき /// </summary> /// <param name="tokenSuffix">アカウント番号</param> /// <param name="eventMessage">イベント</param> private void ReceiveEventMessage(int tokenSuffix, EventMessage eventMessage) { if (eventMessage.Source.Id == AccountTokens.Users[tokenSuffix].Id) { return; } var isNotify = false; var isPlaySound = false; var text = ""; switch (eventMessage.Event) { case EventCode.AccessRevoked: break; case EventCode.Block: break; case EventCode.Favorite: isNotify = true; isPlaySound = true; text = eventMessage.Source.Name + "さんにいいねされました。\n" + eventMessage.TargetStatus.Text; NotificationsStack.StackNotification(eventMessage.Source, eventMessage.Target, Timeline.NotificationPropertiesType.Favorited, text, eventMessage.TargetStatus.Id); break; case EventCode.FavoritedRetweet: isNotify = true; isPlaySound = true; text = eventMessage.Source.Name + "さんにリツイートをいいねされました。\n" + eventMessage.TargetStatus.Text; NotificationsStack.StackNotification(eventMessage.Source, eventMessage.Target, Timeline.NotificationPropertiesType.RetweetFavorited, text, eventMessage.TargetStatus.Id); break; case EventCode.Follow: isNotify = true; isPlaySound = true; text = eventMessage.Source.Name + "さんにフォローされました。"; NotificationsStack.StackNotification(eventMessage.Source, eventMessage.Target, Timeline.NotificationPropertiesType.Followed, text); break; case EventCode.ListCreated: break; case EventCode.ListDestroyed: break; case EventCode.ListMemberAdded: break; case EventCode.ListMemberRemoved: break; case EventCode.ListUpdated: break; case EventCode.ListUserSubscribed: break; case EventCode.ListUserUnsubscribed: break; case EventCode.Mute: break; case EventCode.QuotedTweet: isNotify = true; isPlaySound = true; text = eventMessage.Source.Name + "さんに引用されました。\n" + eventMessage.TargetStatus.Text; break; case EventCode.RetweetedRetweet: isNotify = true; isPlaySound = true; text = eventMessage.Source.Name + "さんにリツイートをリツイートされました。\n" + eventMessage.TargetStatus.Text; break; case EventCode.Unblock: break; case EventCode.Unfavorite: break; case EventCode.Unfollow: break; case EventCode.Unmute: break; case EventCode.UserUpdate: break; } if (isPlaySound) { CommonMethods.PlaySoundEffect(SoundEffect.Notification1); } if (isNotify) { this.Notify(text, NotificationType.Normal); } }