コード例 #1
0
 /// <summary>
 /// Update the opacities of elements in the ChannelControl
 /// </summary>
 private void UpdateOpacity()
 {
     if ((IsUnread && !IsMuted && HavePermission) || Type == 4)
     {
         // Show the text at 100% because there's an unread message
         ChannelName.Fade(1, 200).Start();
     }
     else
     {
         if (!HavePermission)
         {
             // Show at 15% because the user can't enter the channel
             ChannelName.Fade(0.15f, 200).Start();
             HashtagIcon.Fade(0.15f, 200).Start();
             VoiceIcon.Fade(0.15f, 200).Start();
         }
         else if (IsMuted)
         {
             // Show at 35% because the channel is muted
             ChannelName.Fade(0.35f, 200).Start();
             HashtagIcon.Fade(0.35f, 200).Start();
             VoiceIcon.Fade(0.35f, 200).Start();
         }
         else
         {
             // Show at 55%, standard opacity
             ChannelName.Fade(0.55f, 200).Start();
             HashtagIcon.Fade(0.55f, 200).Start();
             VoiceIcon.Fade(0.55f, 200).Start();
         }
     }
 }
コード例 #2
0
        private async void OnPropertyChanged(DependencyObject d, DependencyProperty prop)
        {
            if (prop == IsSelectedProperty)
            {
                if (Type == 2)
                {
                    // Because it's a Voice Channel the Voice Icon needs to be brighter too
                    if (IsSelected)
                    {
                        VoiceIcon.Fade(1, 200).Start();
                        SelectIndicator.Fade(0.4f, 200).Start();
                    }
                    else
                    {
                        VoiceIcon.Fade(0.4f, 200).Start();
                        SelectIndicator.Fade(0.4f, 200).Start();
                    }
                }
                else
                {
                    // Show Selected indicator if selected
                    if (IsSelected)
                    {
                        SelectIndicator.Fade(1, 200).Start();
                    }
                    else
                    {
                        SelectIndicator.Fade(0, 200).Start();
                    }
                }

                // Tie up loose ends
                UpdateOpacity();
                UpdateHidden();
            }
            if (prop == UserStatusProperty)
            {
                // Set the Presense icon
                if (UserStatus != null && UserStatus.Status != null && UserStatus.Status != "invisible")
                {
                    rectangle.Fill = (SolidColorBrush)App.Current.Resources[UserStatus.Status];
                }
                else
                {
                    rectangle.Fill = (SolidColorBrush)App.Current.Resources["offline"];
                }

                // Set the game status
                if (UserStatus != null && UserStatus.Game != null)
                {
                    // There's a game, show it
                    playing.Visibility = Visibility.Visible;
                    game.Visibility    = Visibility.Visible;

                    // Set name of the game
                    game.Text = UserStatus.Game.Name;

                    // Check if Rich Presence
                    if (UserStatus.Game.State != null || UserStatus.Game.Details != null || UserStatus.Game.SessionId != null)
                    {
                        game.Opacity    = 1;
                        rich.Visibility = Visibility.Visible;
                    }
                    else
                    {
                        game.Opacity    = 0.4;
                        rich.Visibility = Visibility.Collapsed;
                    }

                    // Check type of rich-presense
                    switch (UserStatus.Game.Type)
                    {
                    case 0:
                        playing.Text = App.GetString("/Controls/Playing");
                        break;

                    case 1:
                        playing.Text = App.GetString("/Controls/Streaming");
                        break;

                    case 2:
                        playing.Text = App.GetString("/Controls/ListeningTo");
                        break;

                    case 3:
                        playing.Text = App.GetString("/Controls/Watching");
                        break;
                    }
                }
                else
                {
                    // There's no game, hide it all
                    playing.Visibility = Visibility.Collapsed;
                    rich.Visibility    = Visibility.Collapsed;
                    game.Visibility    = Visibility.Collapsed;
                }
            }
            if (prop == SubtitleProperty)
            {
                // Update Subtitle text
                if (Subtitle != "")
                {
                    SubTitle.Visibility = Visibility.Visible;
                    SubTitle.Text       = Subtitle;
                }
                else
                {
                    SubTitle.Visibility = Visibility.Collapsed;
                }
            }
            if (prop == IsUnreadProperty)
            {
                if (IsUnread && !IsMuted)
                {
                    // Show indicator
                    UnreadIndicator.Visibility = Visibility.Visible;
                }
                else
                {
                    // Hide indicator
                    UnreadIndicator.Visibility = Visibility.Collapsed;
                }

                // Tie up loose ends
                UpdateOpacity();
                UpdateHidden();
            }
            if (prop == HavePermissionProperty)
            {
                if (HavePermission)
                {
                    // Enable the channel if it can be entered
                    IsEnabled = true;
                    UpdateOpacity();
                }
                else
                {
                    // Disable the channel if it can't be entered
                    IsEnabled = false;
                    UpdateOpacity();
                }
            }
            if (prop == IsMutedProperty)
            {
                if (IsMuted)
                {
                    // Show muted icon
                    MuteIcon.Visibility = Visibility.Visible;

                    // Hide unread
                    UnreadIndicator.Visibility = Visibility.Collapsed;
                }
                else
                {
                    // Hide muted icon
                    MuteIcon.Visibility = Visibility.Collapsed;

                    // Show unread
                    if (IsUnread)
                    {
                        UnreadIndicator.Visibility = Visibility.Visible;
                    }
                }

                // Tie up loose ends
                UpdateOpacity();
                UpdateHidden();
            }
            if (prop == IsTypingProperty)
            {
                if (IsTyping && !IsMuted)
                {
                    // Show typing indicator
                    TypingIndic.Visibility = Visibility.Visible;
                    TypingIndic.Fade(1, 200).Start();
                }
                else
                {
                    // Hide typing indicator
                    await TypingIndic.Fade(0, 200).StartAsync();

                    TypingIndic.Visibility = Visibility.Collapsed;
                }
            }
            if (prop == NotificationCountProperty)
            {
                if (NotificationCount > 0)
                {
                    // Show Notification text
                    NotificationCounter.Text = NotificationCount.ToString();
                    ShowBadge.Begin();
                }
                else
                {
                    // Hide Notification text
                    HideBadge.Begin();
                }

                //Tie up loose ends
                UpdateHidden();
            }
            if (prop == ChnNameProperty)
            {
                // Update Channel Name
                ChannelName.Text = CName;
            }
            if (prop == ImageUrlProperty)
            {
                if (ImageUrl != "")
                {
                    // Update Image Source
                    ChannelImageBrush.ImageSource = new BitmapImage(new Uri(ImageUrl));
                }
            }
            if (prop == TypeProperty)
            {
                // Reset
                ChannelName.FontWeight = FontWeights.Normal;
                ChannelName.Foreground = (SolidColorBrush)App.Current.Resources["Foreground"];
                Chevron.Visibility     = Visibility.Collapsed;
                HoverCache.Visibility  = Visibility.Collapsed;

                this.Margin = new Thickness(0);

                //TEXT
                if (Type == 0)
                {
                    HashtagIcon.Visibility          = Visibility.Visible;
                    VoiceIcon.Visibility            = Visibility.Collapsed;
                    MemberList.Visibility           = Visibility.Collapsed;
                    ChannelImage.Visibility         = Visibility.Collapsed;
                    ChannelImageBackdrop.Visibility = Visibility.Collapsed;
                    rectangle.Visibility            = Visibility.Collapsed;
                    grid.Height = Double.NaN;
                }

                //VOICE
                else if (Type == 2)
                {
                    HashtagIcon.Visibility          = Visibility.Collapsed;
                    ChannelImage.Visibility         = Visibility.Collapsed;
                    VoiceIcon.Visibility            = Visibility.Visible;
                    Chevron.Visibility              = Visibility.Collapsed;
                    ChannelImageBackdrop.Visibility = Visibility.Collapsed;
                    rectangle.Visibility            = Visibility.Collapsed;
                    VoiceMembers = new Dictionary <string, VoiceMemberContainer>();
                    grid.Height  = Double.NaN;

                    // Subscribe to event of VoiceState changing
                    GatewayManager.Gateway.VoiceStateUpdated += Gateway_VoiceStateUpdated;

                    // Add users to list of voice members
                    foreach (var user in LocalState.VoiceDict.Values)
                    {
                        if (user.ChannelId == Id)
                        {
                            VoiceMembers.Add(user.UserId, new VoiceMemberContainer()
                            {
                                VoiceState = LocalState.VoiceDict[user.UserId]
                            });
                        }
                    }

                    // Add Voice Members to display
                    if (VoiceMembers != null && VoiceMembers.Count > 0)
                    {
                        MemberList.Visibility = Visibility.Visible;
                        foreach (VoiceMemberContainer member in VoiceMembers.Values)
                        {
                            if (LocalState.Guilds[App.CurrentGuildId].members.ContainsKey(member.VoiceState.UserId))
                            {
                                MemberList.Items.Add(member);
                            }
                        }
                    }
                    else
                    {
                        MemberList.Visibility = Visibility.Collapsed;
                    }
                }

                //DM
                else if (Type == 1)
                {
                    HashtagIcon.Visibility          = Visibility.Collapsed;
                    VoiceIcon.Visibility            = Visibility.Collapsed;
                    ChannelImageBackdrop.Visibility =
                        LocalState.DMs[Id].Users.FirstOrDefault().Avatar == null ?
                        Visibility.Visible : Visibility.Collapsed;
                    ChannelImage.Visibility       = Visibility.Visible;
                    rectangle.Visibility          = Visibility.Visible;
                    Chevron.Visibility            = Visibility.Collapsed;
                    rectangle.Visibility          = Visibility.Visible;
                    grid.Height                   = 48;
                    ChannelImage.Margin           = new Thickness(0, 6, 6, 6);
                    ChannelImageBackdrop.Fill     = Common.DiscriminatorColor(LocalState.DMs[Id].Users.FirstOrDefault().Discriminator);
                    ChannelImageBrush.ImageSource = new BitmapImage(Common.AvatarUri(LocalState.DMs[Id].Users.FirstOrDefault().Avatar, LocalState.DMs[Id].Users.FirstOrDefault().Id, "?size=64"));
                    MemberList.Visibility         = Visibility.Collapsed;
                }

                //GROUP DM
                else if (Type == 3)
                {
                    HashtagIcon.Visibility          = Visibility.Collapsed;
                    VoiceIcon.Visibility            = Visibility.Collapsed;
                    ChannelImageBackdrop.Visibility = Visibility.Collapsed;
                    ChannelImage.Visibility         = Visibility.Visible;
                    rectangle.Visibility            = Visibility.Collapsed;
                    Chevron.Visibility = Visibility.Collapsed;
                    grid.Height        = 48;

                    // Set icon (if null)
                    if (string.IsNullOrEmpty(Icon))
                    {
                        if (App.Current.RequestedTheme == ApplicationTheme.Dark)
                        {
                            ChannelImageBrush.ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/DiscordAssets/Friends_dark.png"));
                        }
                        else
                        {
                            ChannelImageBrush.ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/DiscordAssets/Friends_light.png"));
                        }
                    }

                    ChannelImage.Margin   = new Thickness(0, 6, 6, 6);
                    MemberList.Visibility = Visibility.Collapsed;
                }

                //CHANNEL CATEGORY
                else if (Type == 4)
                {
                    HashtagIcon.Visibility          = Visibility.Collapsed;
                    VoiceIcon.Visibility            = Visibility.Collapsed;
                    ChannelImageBackdrop.Visibility = Visibility.Collapsed;
                    ChannelImage.Visibility         = Visibility.Collapsed;
                    rectangle.Visibility            = Visibility.Collapsed;
                    ChannelName.FontWeight          = FontWeights.Light;
                    ChannelName.Foreground          = (SolidColorBrush)App.Current.Resources["Blurple"];
                    Chevron.Visibility    = Visibility.Visible;
                    HoverCache.Visibility = Visibility.Visible;
                    this.Margin           = new Thickness(0, 18, 0, 0);
                    MemberList.Visibility = Visibility.Collapsed;
                    grid.Height           = Double.NaN;
                }

                // Tie up loose ends
                UpdateOpacity();

                // Clear Voice Update event if applicable
                if (Type != 2)
                {
                    GatewayManager.Gateway.VoiceStateUpdated -= Gateway_VoiceStateUpdated;
                }
            }
            if (prop == IsHiddenProperty)
            {
                UpdateHidden();
            }
            if (prop == NSFWProperty)
            {
                if (NSFW)
                {
                    HashtagIcon.Foreground = ChannelName.Foreground = (SolidColorBrush)App.Current.Resources["dnd"];
                }
                else
                {
                    HashtagIcon.Foreground = ChannelName.Foreground = (SolidColorBrush)App.Current.Resources["Foreground"];
                }
            }
            if (prop == IconProperty)
            {
                if (!string.IsNullOrEmpty(Icon))
                {
                    ChannelImageBrush.ImageSource = new BitmapImage(new Uri("https://cdn.discordapp.com/channel-icons/" + Id + "/" + Icon + ".png"));
                }
            }
        }
コード例 #3
0
        private async void OnPropertyChanged(DependencyObject d, DependencyProperty prop)
        {
            //if (!App.CurrentGuildIsDM && Id != "")
            //{
            //    if (!Storage.Cache.Guilds[App.CurrentGuildId].Channels[Id].chnPerms.EffectivePerms.Administrator && !Storage.Cache.Guilds[App.CurrentGuildId].Channels[Id].chnPerms.EffectivePerms.ReadMessages)
            //    {
            //        this.Visibility = Visibility.Collapsed;
            //    }
            //}

            if (prop == IsSelectedProperty)
            {
                if (Type == 2)
                {
                    if (IsSelected)
                    {
                        ChannelName.Fade(1, 200).Start();
                        VoiceIcon.Fade(1, 200).Start();
                        SelectIndicator.Fade(0.6f, 200).Start();
                    }
                    else
                    {
                        ChannelName.Fade(0.6f, 200).Start();
                        VoiceIcon.Fade(0.6f, 200).Start();
                        SelectIndicator.Fade(0.6f, 200).Start();
                    }
                }
                else
                {
                    if (IsSelected)
                    {
                        SelectIndicator.Fade(1, 200).Start();
                    }
                    else
                    {
                        SelectIndicator.Fade(0, 200).Start();
                    }
                }
                UpdateHidden();
            }

            if (prop == UserStatusProperty)
            {
                if (UserStatus != "" && UserStatus != null)
                {
                    Status.Fill = (SolidColorBrush)App.Current.Resources[UserStatus];
                }
            }
            if (prop == SubtitleProperty)
            {
                if (Subtitle != "")
                {
                    SubTitle.Visibility = Visibility.Visible;
                    SubTitle.Text       = Subtitle;
                }
                else
                {
                    SubTitle.Visibility = Visibility.Collapsed;
                }
            }
            if (prop == PlayingProperty)
            {
                if (Playing.HasValue)
                {
                    PlayingBlock.Visibility = Visibility.Visible;
                    switch (Playing.Value.Type)
                    {
                    case 0:
                        PlayingType.Text = App.GetString("/Controls/Playing");
                        break;

                    case 1:
                        PlayingType.Text = App.GetString("/Controls/Streaming");
                        break;
                    }
                    PlayingText.Text = Playing.Value.Name;
                }
                else
                {
                    PlayingBlock.Visibility = Visibility.Collapsed;
                }
            }

            if (prop == IsUnreadProperty)
            {
                if (IsUnread && !IsMuted)
                {
                    ChannelName.Fade(1, 200).Start();
                    UnreadIndicator.Visibility = Visibility.Visible;
                    if (IsHidden)
                    {
                        //await this.Fade(0, 200, 0).StartAsync();
                        this.Visibility = Visibility.Collapsed;
                    }
                }
                else
                {
                    ChannelName.Fade(0.6f, 200).Start();
                    UnreadIndicator.Visibility = Visibility.Collapsed;
                    if (IsHidden)
                    {
                        this.Visibility = Visibility.Visible;
                        this.Fade(1, 200, 0).Start();
                    }
                }
                UpdateHidden();
            }
            if (prop == IsMutedProperty)
            {
                if (IsMuted)
                {
                    ChannelName.Opacity = 0.5;
                    MuteIcon.Visibility = Visibility.Visible;
                    ChannelName.Fade(0.75f, 200).Start();
                    UnreadIndicator.Visibility = Visibility.Collapsed;
                }
                else
                {
                    MuteIcon.Visibility = Visibility.Collapsed;
                }
                UpdateHidden();
            }
            if (prop == IsTypingProperty)
            {
                if (IsTyping)
                {
                    TypingIndic.Visibility = Visibility.Visible;
                    TypingIndic.Fade(1, 200).Start();
                }
                else
                {
                    await TypingIndic.Fade(0, 200).StartAsync();

                    TypingIndic.Visibility = Visibility.Collapsed;
                }
            }
            if (prop == NotificationCountProperty)
            {
                if (NotificationCount > 0)
                {
                    NotificationCounter.Text = NotificationCount.ToString();
                    ShowBadge.Begin();
                }
                else
                {
                    HideBadge.Begin();
                }
                UpdateHidden();
            }
            if (prop == ChnNameProperty)
            {
                ChannelName.Text = CName;
            }
            if (prop == ImageUrlProperty)
            {
                if (ImageUrl != "")
                {
                    ChannelImageBrush.ImageSource = new BitmapImage(new Uri(ImageUrl));
                }
            }
            if (prop == TypeProperty)
            {
                ChannelName.FontWeight = FontWeights.Normal;
                ChannelName.Opacity    = 0.75;
                ChannelName.Foreground = (SolidColorBrush)App.Current.Resources["Foreground"];
                Chevron.Visibility     = Visibility.Collapsed;
                HoverCache.Visibility  = Visibility.Collapsed;

                this.Margin = new Thickness(0);

                if (Type == 0)
                {
                    //TEXT
                    HashtagIcon.Visibility = Visibility.Visible;
                    VoiceIcon.Visibility   = Visibility.Collapsed;
                    MemberList.Visibility  = Visibility.Collapsed;
                    Tapped -= JoinVoiceChannel;
                }
                else if (Type == 2)
                {
                    //VOICE
                    HashtagIcon.Visibility = Visibility.Collapsed;
                    VoiceIcon.Visibility   = Visibility.Visible;

                    VoiceMembers = new Dictionary <string, VoiceMemberContainer>();

                    GatewayManager.Gateway.VoiceStateUpdated += Gateway_VoiceStateUpdated;

                    foreach (var user in LocalState.VoiceDict.Values)
                    {
                        if (user.ChannelId == Id)
                        {
                            VoiceMembers.Add(user.UserId, new VoiceMemberContainer()
                            {
                                VoiceState = LocalState.VoiceDict[user.UserId]
                            });
                        }
                    }

                    if (VoiceMembers != null)
                    {
                        foreach (VoiceMemberContainer member in VoiceMembers.Values)
                        {
                            if (LocalState.Guilds[App.CurrentGuildId].members.ContainsKey(member.VoiceState.UserId))
                            {
                                MemberList.Items.Add(member);
                            }
                        }
                        //Debug MemberList.Items.Add(new VoiceMemberControl.SimpleMember() { Member = Storage.Cache.Guilds[App.CurrentGuildId].Members[Storage.Cache.CurrentUser.Raw.Id] });
                    }

                    Tapped += JoinVoiceChannel;
                }
                else if (Type == 1)
                {
                    //DM
                    HashtagIcon.Visibility = Visibility.Collapsed;
                    if (LocalState.DMs[Id].Users.FirstOrDefault().Avatar == null)
                    {
                        ChannelImageBackdrop.Visibility = Visibility.Visible;
                    }
                    ChannelImage.Visibility       = Visibility.Visible;
                    Status.Visibility             = Visibility.Visible;
                    grid.Height                   = 48;
                    ChannelImage.Margin           = new Thickness(0, 6, 6, 6);
                    ChannelImageBackdrop.Fill     = Common.DiscriminatorColor(LocalState.DMs[Id].Users.FirstOrDefault().Discriminator);
                    ChannelImageBrush.ImageSource = new BitmapImage(Common.AvatarUri(LocalState.DMs[Id].Users.FirstOrDefault().Avatar, LocalState.DMs[Id].Users.FirstOrDefault().Id, "?size=64"));
                    MemberList.Visibility         = Visibility.Collapsed;
                    Tapped -= JoinVoiceChannel;
                }
                else if (Type == 3)
                {
                    //GROUP DM
                    HashtagIcon.Visibility          = Visibility.Collapsed;
                    ChannelImageBackdrop.Visibility = Visibility.Visible;
                    ChannelImage.Visibility         = Visibility.Visible;
                    Status.Visibility = Visibility.Collapsed;
                    grid.Height       = 48;
                    //ChannelImageBrush.ImageSource = new SvgImageSource(new Uri("ms-appx:///Assets/DiscordAssets/groupchat.svg"));

                    if (App.Current.RequestedTheme == ApplicationTheme.Dark)
                    {
                        ChannelImageBrush.ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/DiscordAssets/Friends_dark.png"));
                    }
                    else
                    {
                        ChannelImageBrush.ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/DiscordAssets/Friends_light.png"));
                    }

                    ChannelImage.Margin   = new Thickness(0, 6, 6, 6);
                    MemberList.Visibility = Visibility.Collapsed;
                    Tapped -= JoinVoiceChannel;
                }
                else if (Type == 4)
                {
                    //CHANNEL CATEGORY
                    HashtagIcon.Visibility          = Visibility.Collapsed;
                    VoiceIcon.Visibility            = Visibility.Collapsed;
                    ChannelImageBackdrop.Visibility = Visibility.Collapsed;
                    ChannelImage.Visibility         = Visibility.Collapsed;
                    Status.Visibility      = Visibility.Collapsed;
                    ChannelName.FontWeight = FontWeights.Light;
                    ChannelName.Opacity    = 1;
                    ChannelName.Foreground = (SolidColorBrush)App.Current.Resources["Blurple"];
                    Chevron.Visibility     = Visibility.Visible;
                    HoverCache.Visibility  = Visibility.Visible;
                    this.Margin            = new Thickness(0, 18, 0, 0);
                    MemberList.Visibility  = Visibility.Collapsed;
                    Tapped -= JoinVoiceChannel;
                }

                if (Type != 2)
                {
                    GatewayManager.Gateway.VoiceStateUpdated -= Gateway_VoiceStateUpdated;
                }
            }
            if (prop == IsHiddenProperty)
            {
                UpdateHidden();
            }
            if (prop == NSFWProperty)
            {
                if (NSFW)
                {
                    HashtagIcon.Foreground = ChannelName.Foreground = (SolidColorBrush)App.Current.Resources["dnd"];
                }
                else
                {
                    HashtagIcon.Foreground = ChannelName.Foreground = (SolidColorBrush)App.Current.Resources["Foreground"];
                }
            }
        }