From 5ab61f12ac3bbe23382c1e5ccd098746cc79caaa Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Sun, 28 Jul 2019 18:05:26 +0200 Subject: [PATCH] Added functionality to the ContactInfoControl --- Shared/Classes/TaskExtensions.cs | 51 +++++ Shared/Shared.csproj | 1 + .../Controls/Chat/ChatDetailsControl.xaml.cs | 3 +- .../Controls/Chat/ChatMasterControl.xaml.cs | 5 +- UWPX_UI/Controls/Chat/ContactInfoControl.xaml | 86 ++++++-- .../Controls/Chat/ContactInfoControl.xaml.cs | 70 +++++- .../Controls/OMEMO/OmemoButtonControl.xaml | 3 +- UWPX_UI/Pages/ContactInfoPage.xaml | 10 +- UWPX_UI/Pages/ContactInfoPage.xaml.cs | 51 ++++- .../Controls/ContactInfoControlContext.cs | 139 +++++++++++- .../ContactInfoControlDataTemplate.cs | 200 ++++++++++++++++++ .../NavigatedToContactInfoPageEventArgs.cs | 49 +++++ UWPX_UI_Context/UWPX_UI_Context.csproj | 2 + 13 files changed, 644 insertions(+), 26 deletions(-) create mode 100644 Shared/Classes/TaskExtensions.cs create mode 100644 UWPX_UI_Context/Classes/DataTemplates/Controls/ContactInfoControlDataTemplate.cs create mode 100644 UWPX_UI_Context/Classes/Events/NavigatedToContactInfoPageEventArgs.cs diff --git a/Shared/Classes/TaskExtensions.cs b/Shared/Classes/TaskExtensions.cs new file mode 100644 index 000000000..f0fa68e8a --- /dev/null +++ b/Shared/Classes/TaskExtensions.cs @@ -0,0 +1,51 @@ +using System.Runtime.CompilerServices; +using System.Threading.Tasks; + +namespace Shared.Classes +{ + public static class TaskExtensions + { + //--------------------------------------------------------Attributes:-----------------------------------------------------------------\\ + #region --Attributes-- + + + #endregion + //--------------------------------------------------------Constructor:----------------------------------------------------------------\\ + #region --Constructors-- + + + #endregion + //--------------------------------------------------------Set-, Get- Methods:---------------------------------------------------------\\ + #region --Set-, Get- Methods-- + + + #endregion + //--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\ + #region --Misc Methods (Public)-- + /// + /// Configures await to false. + /// Same as: .ConfigureAwait(false) + /// + public static ConfiguredTaskAwaitable ConfAwaitFalse(this Task task) + { + return task.ConfigureAwait(false); + } + + #endregion + + #region --Misc Methods (Private)-- + + + #endregion + + #region --Misc Methods (Protected)-- + + + #endregion + //--------------------------------------------------------Events:---------------------------------------------------------------------\\ + #region --Events-- + + + #endregion + } +} diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj index 46cb4b279..982e70e56 100644 --- a/Shared/Shared.csproj +++ b/Shared/Shared.csproj @@ -143,6 +143,7 @@ + diff --git a/UWPX_UI/Controls/Chat/ChatDetailsControl.xaml.cs b/UWPX_UI/Controls/Chat/ChatDetailsControl.xaml.cs index 40e16b9e2..b90d2ff4c 100644 --- a/UWPX_UI/Controls/Chat/ChatDetailsControl.xaml.cs +++ b/UWPX_UI/Controls/Chat/ChatDetailsControl.xaml.cs @@ -4,6 +4,7 @@ using UWPX_UI_Context.Classes; using UWPX_UI_Context.Classes.DataContext.Controls; using UWPX_UI_Context.Classes.DataTemplates; +using UWPX_UI_Context.Classes.Events; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; @@ -125,7 +126,7 @@ private void Info_mfo_Click(object sender, RoutedEventArgs e) } else { - UiUtils.NavigateToPage(typeof(ContactInfoPage), new NavigatedToUserProfileEventArgs(Chat.Chat, Chat.Client)); + UiUtils.NavigateToPage(typeof(ContactInfoPage), new NavigatedToContactInfoPageEventArgs(Chat.Client, Chat.Chat)); } } } diff --git a/UWPX_UI/Controls/Chat/ChatMasterControl.xaml.cs b/UWPX_UI/Controls/Chat/ChatMasterControl.xaml.cs index bc890abf1..ec124a612 100644 --- a/UWPX_UI/Controls/Chat/ChatMasterControl.xaml.cs +++ b/UWPX_UI/Controls/Chat/ChatMasterControl.xaml.cs @@ -8,6 +8,7 @@ using UWPX_UI_Context.Classes; using UWPX_UI_Context.Classes.DataContext.Controls; using UWPX_UI_Context.Classes.DataTemplates; +using UWPX_UI_Context.Classes.Events; using Windows.UI; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; @@ -185,7 +186,7 @@ private void ShowProfile_mfo_Click(object sender, RoutedEventArgs e) } else { - UiUtils.NavigateToPage(typeof(ContactInfoPage), new NavigatedToUserProfileEventArgs(Chat.Chat, Chat.Client)); + UiUtils.NavigateToPage(typeof(ContactInfoPage), new NavigatedToContactInfoPageEventArgs(Chat.Client, Chat.Chat)); } } @@ -197,7 +198,7 @@ private static void ChatPropertyChanged(DependencyObject d, DependencyPropertyCh } } - private void VIEW_MODEL_OnError(ChatMasterControlContext sender, UWPX_UI_Context.Classes.Events.OnErrorEventArgs args) + private void VIEW_MODEL_OnError(ChatMasterControlContext sender, OnErrorEventArgs args) { InfoDialog dialog = new InfoDialog(args.TITLE, args.MESSAGE) { diff --git a/UWPX_UI/Controls/Chat/ContactInfoControl.xaml b/UWPX_UI/Controls/Chat/ContactInfoControl.xaml index 2d46f27fe..d6295be9d 100644 --- a/UWPX_UI/Controls/Chat/ContactInfoControl.xaml +++ b/UWPX_UI/Controls/Chat/ContactInfoControl.xaml @@ -6,6 +6,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:omemoControls="using:UWPX_UI.Controls.OMEMO" + xmlns:valueConverter="using:UWPX_UI_Context.Classes.ValueConverter" HorizontalAlignment="Center" mc:Ignorable="d"> @@ -24,6 +25,7 @@ + - + Text="{x:Bind VIEW_MODEL.MODEL.Presence, Mode=OneWay, Converter={StaticResource PresenceStringValueConverter}}"/> @@ -62,8 +64,9 @@ Margin="0,10,0,0" IsTextSelectionEnabled="True" MaxLines="1" - Text="com8@xmpp.uwpx.org" - TextTrimming="CharacterEllipsis"/> + Text="{x:Bind VIEW_MODEL.MODEL.ChatState, Mode=OneWay}" + TextTrimming="CharacterEllipsis" + Visibility="{x:Bind VIEW_MODEL.MODEL.ChatState, Mode=OneWay, Converter={StaticResource StringEmptyVisibilityValueConverter}}"/> @@ -83,22 +86,24 @@ + Text="{x:Bind VIEW_MODEL.MODEL.Nickname, Mode=OneWay}"/> diff --git a/UWPX_UI/Controls/Chat/ContactInfoControl.xaml.cs b/UWPX_UI/Controls/Chat/ContactInfoControl.xaml.cs index fe3da3935..e0971ffa4 100644 --- a/UWPX_UI/Controls/Chat/ContactInfoControl.xaml.cs +++ b/UWPX_UI/Controls/Chat/ContactInfoControl.xaml.cs @@ -1,4 +1,9 @@ -using Windows.UI.Xaml.Controls; +using Data_Manager2.Classes.DBTables; +using Shared.Classes; +using UWPX_UI_Context.Classes.DataContext.Controls; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using XMPP_API.Classes; namespace UWPX_UI.Controls.Chat { @@ -6,7 +11,21 @@ public sealed partial class ContactInfoControl: UserControl { //--------------------------------------------------------Attributes:-----------------------------------------------------------------\\ #region --Attributes-- + public readonly ContactInfoControlContext VIEW_MODEL = new ContactInfoControlContext(); + public ChatTable Chat + { + get { return (ChatTable)GetValue(ChatProperty); } + set { SetValue(ChatProperty, value); } + } + public static readonly DependencyProperty ChatProperty = DependencyProperty.Register(nameof(Chat), typeof(ChatTable), typeof(ContactInfoControl), new PropertyMetadata(null, OnChatChanged)); + + public XMPPClient Client + { + get { return (XMPPClient)GetValue(ClientProperty); } + set { SetValue(ClientProperty, value); } + } + public static readonly DependencyProperty ClientProperty = DependencyProperty.Register(nameof(Client), typeof(XMPPClient), typeof(ContactInfoControl), new PropertyMetadata(null, OnClientChanged)); #endregion //--------------------------------------------------------Constructor:----------------------------------------------------------------\\ @@ -29,7 +48,10 @@ public ContactInfoControl() #endregion #region --Misc Methods (Private)-- - + private void UpdateView(DependencyPropertyChangedEventArgs e) + { + VIEW_MODEL.UpdateView(e); + } #endregion @@ -39,7 +61,51 @@ public ContactInfoControl() #endregion //--------------------------------------------------------Events:---------------------------------------------------------------------\\ #region --Events-- + private static void OnChatChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is ContactInfoControl contactInfoControl) + { + contactInfoControl.UpdateView(e); + } + } + + private static void OnClientChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is ContactInfoControl contactInfoControl) + { + contactInfoControl.UpdateView(e); + } + } + + private async void ProbePresence_mfo_Click(object sender, RoutedEventArgs e) + { + await VIEW_MODEL.SendPresenceProbeAsync(Client, Chat).ConfAwaitFalse(); + } + + private async void RejectPresenceSubscription_mfo_Click(object sender, RoutedEventArgs e) + { + await VIEW_MODEL.RejectPresenceSubscriptionAsync(Client, Chat).ConfAwaitFalse(); + } + private async void RemoveFromRoster_mfo_Click(object sender, RoutedEventArgs e) + { + await VIEW_MODEL.SwitchChatInRosterAsync(Client, Chat).ConfAwaitFalse(); + } + + private async void CancelPresenceSubscription_mfo_Click(object sender, RoutedEventArgs e) + { + await VIEW_MODEL.CancelPresenceSubscriptionAsync(Client, Chat).ConfAwaitFalse(); + } + + private async void RequestPresenceSubscription_mfo_Click(object sender, RoutedEventArgs e) + { + await VIEW_MODEL.RequestPresenceSubscriptionAsync(Client, Chat).ConfAwaitFalse(); + } + + private async void Mute_btn_Click(object sender, RoutedEventArgs e) + { + await VIEW_MODEL.ToggleChatMutedAsync(Chat).ConfAwaitFalse(); + } #endregion } diff --git a/UWPX_UI/Controls/OMEMO/OmemoButtonControl.xaml b/UWPX_UI/Controls/OMEMO/OmemoButtonControl.xaml index 09a786bf8..a47a1fd69 100644 --- a/UWPX_UI/Controls/OMEMO/OmemoButtonControl.xaml +++ b/UWPX_UI/Controls/OMEMO/OmemoButtonControl.xaml @@ -20,7 +20,8 @@ FontSize="20" FontWeight="Bold" Foreground="{x:Bind OmemoEnabled, Mode=OneWay, Converter={StaticResource OmemoBoolBrushValueConverter}}" - Style="{ThemeResource ButtonRevealStyle}"> + Style="{ThemeResource ButtonRevealStyle}" + ToolTipService.ToolTip="Enable/Disable Encryption"> diff --git a/UWPX_UI/Pages/ContactInfoPage.xaml b/UWPX_UI/Pages/ContactInfoPage.xaml index a8476b4bf..6b7fd5a02 100644 --- a/UWPX_UI/Pages/ContactInfoPage.xaml +++ b/UWPX_UI/Pages/ContactInfoPage.xaml @@ -30,15 +30,19 @@ - + + Margin="0,10,0,0" + Visibility="Collapsed"/> + Margin="0,10,0,0" + Visibility="Collapsed"/> diff --git a/UWPX_UI/Pages/ContactInfoPage.xaml.cs b/UWPX_UI/Pages/ContactInfoPage.xaml.cs index 60546c2fb..d00b0f592 100644 --- a/UWPX_UI/Pages/ContactInfoPage.xaml.cs +++ b/UWPX_UI/Pages/ContactInfoPage.xaml.cs @@ -1,6 +1,13 @@ -using UWPX_UI_Context.Classes.DataContext.Pages; +using Data_Manager2.Classes.DBManager; +using Data_Manager2.Classes.DBTables; +using Data_Manager2.Classes.Events; +using Shared.Classes; +using UWPX_UI_Context.Classes.DataContext.Pages; +using UWPX_UI_Context.Classes.Events; +using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; +using XMPP_API.Classes; namespace UWPX_UI.Pages { @@ -10,6 +17,23 @@ public sealed partial class ContactInfoPage: Page #region --Attributes-- public readonly ContactInfoPageContext VIEW_MODEL = new ContactInfoPageContext(); + public ChatTable Chat + { + get { return (ChatTable)GetValue(ChatProperty); } + set { SetValue(ChatProperty, value); } + } + public static readonly DependencyProperty ChatProperty = DependencyProperty.Register(nameof(Chat), typeof(ChatTable), typeof(ContactInfoPageContext), new PropertyMetadata(null, OnChatChanged)); + + public XMPPClient Client + { + get { return (XMPPClient)GetValue(ClientProperty); } + set { SetValue(ClientProperty, value); } + } + public static readonly DependencyProperty ClientProperty = DependencyProperty.Register(nameof(Client), typeof(XMPPClient), typeof(ContactInfoPageContext), new PropertyMetadata(null)); + + // So we don't have to always interrupt the main task when a chat changed: + private string chatId = null; + #endregion //--------------------------------------------------------Constructor:----------------------------------------------------------------\\ #region --Constructors-- @@ -44,11 +68,36 @@ public ContactInfoPage() protected override void OnNavigatedTo(NavigationEventArgs e) { titleBar.OnPageNavigatedTo(); + + if (e.Parameter is NavigatedToContactInfoPageEventArgs args) + { + Chat = args.CHAT; + Client = args.CLIENT; + } + ChatDBManager.INSTANCE.ChatChanged -= INSTANCE_ChatChanged; + ChatDBManager.INSTANCE.ChatChanged += INSTANCE_ChatChanged; } protected override void OnNavigatedFrom(NavigationEventArgs e) { titleBar.OnPageNavigatedFrom(); + ChatDBManager.INSTANCE.ChatChanged -= INSTANCE_ChatChanged; + } + + private static void OnChatChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is ContactInfoPage contactInfoPage) + { + contactInfoPage.chatId = e.NewValue is ChatTable chat ? chat.id : null; + } + } + + private async void INSTANCE_ChatChanged(ChatDBManager handler, ChatChangedEventArgs args) + { + if (!(args.CHAT is null) && string.Equals(args.CHAT.id, chatId)) + { + await SharedUtils.CallDispatcherAsync(() => Chat = args.CHAT).ConfAwaitFalse(); + } } #endregion diff --git a/UWPX_UI_Context/Classes/DataContext/Controls/ContactInfoControlContext.cs b/UWPX_UI_Context/Classes/DataContext/Controls/ContactInfoControlContext.cs index 774a95670..9b9cc2ef7 100644 --- a/UWPX_UI_Context/Classes/DataContext/Controls/ContactInfoControlContext.cs +++ b/UWPX_UI_Context/Classes/DataContext/Controls/ContactInfoControlContext.cs @@ -1,10 +1,18 @@ -namespace UWPX_UI_Context.Classes.DataContext.Controls +using System.Threading.Tasks; +using Data_Manager2.Classes.DBManager; +using Data_Manager2.Classes.DBTables; +using Shared.Classes; +using UWPX_UI_Context.Classes.DataTemplates.Controls; +using Windows.UI.Xaml; +using XMPP_API.Classes; + +namespace UWPX_UI_Context.Classes.DataContext.Controls { public class ContactInfoControlContext { //--------------------------------------------------------Attributes:-----------------------------------------------------------------\\ #region --Attributes-- - + public readonly ContactInfoControlDataTemplate MODEL = new ContactInfoControlDataTemplate(); #endregion //--------------------------------------------------------Constructor:----------------------------------------------------------------\\ @@ -19,7 +27,132 @@ public class ContactInfoControlContext #endregion //--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\ #region --Misc Methods (Public)-- - + public void UpdateView(DependencyPropertyChangedEventArgs e) + { + if (e.NewValue is ChatTable chat) + { + MODEL.UpdateView(chat); + } + else if (e.NewValue is XMPPClient client) + { + MODEL.UpdateView(client); + } + } + + public async Task SendPresenceProbeAsync(XMPPClient client, ChatTable chat) + { + if (client is null || chat is null) + { + return; + } + + await client.GENERAL_COMMAND_HELPER.sendPresenceProbeAsync(client.getXMPPAccount().getFullJid(), chat.chatJabberId); + } + + public async Task RequestPresenceSubscriptionAsync(XMPPClient client, ChatTable chat) + { + if (client is null || chat is null) + { + return; + } + + await client.GENERAL_COMMAND_HELPER.requestPresenceSubscriptionAsync(chat.chatJabberId); + } + + public async Task CancelPresenceSubscriptionAsync(XMPPClient client, ChatTable chat) + { + if (client is null || chat is null) + { + return; + } + + await client.GENERAL_COMMAND_HELPER.unsubscribeFromPresenceAsync(chat.chatJabberId).ConfAwaitFalse(); + await Task.Run(() => + { + switch (chat.subscription) + { + case "to": + chat.subscription = "none"; + break; + + case "both": + chat.subscription = "from"; + break; + } + ChatDBManager.INSTANCE.setChat(chat, false, true); + }).ConfAwaitFalse(); + } + + public async Task RejectPresenceSubscriptionAsync(XMPPClient client, ChatTable chat) + { + if (client is null || chat is null) + { + return; + } + + await client.GENERAL_COMMAND_HELPER.answerPresenceSubscriptionRequestAsync(chat.chatJabberId, false).ConfAwaitFalse(); + await Task.Run(() => + { + switch (chat.subscription) + { + case "from": + chat.subscription = "none"; + break; + + case "both": + chat.subscription = "to"; + break; + } + ChatDBManager.INSTANCE.setChat(chat, false, true); + }).ConfAwaitFalse(); + } + + public async Task SwitchChatInRosterAsync(XMPPClient client, ChatTable chat) + { + if (client is null || chat is null) + { + return; + } + + await SetChatInRosterAsync(client, chat, !chat.inRoster).ConfAwaitFalse(); + } + + private async Task SetChatInRosterAsync(XMPPClient client, ChatTable chat, bool inRoster) + { + if (chat.inRoster != inRoster) + { + await Task.Run(() => + { + chat.inRoster = inRoster; + MODEL.UpdateView(chat); + ChatDBManager.INSTANCE.setChat(chat, false, true); + }).ConfAwaitFalse(); + } + + if (inRoster) + { + await client.GENERAL_COMMAND_HELPER.addToRosterAsync(chat.chatJabberId).ConfAwaitFalse(); + } + else + { + await client.GENERAL_COMMAND_HELPER.removeFromRosterAsync(chat.chatJabberId).ConfAwaitFalse(); + } + } + + public async Task ToggleChatMutedAsync(ChatTable chat) + { + if (chat is null) + { + return; + } + + await Task.Run(() => + { + chat.muted = !chat.muted; + MODEL.UpdateView(chat); + ChatDBManager.INSTANCE.setChat(chat, false, true); + }).ConfAwaitFalse(); + } #endregion diff --git a/UWPX_UI_Context/Classes/DataTemplates/Controls/ContactInfoControlDataTemplate.cs b/UWPX_UI_Context/Classes/DataTemplates/Controls/ContactInfoControlDataTemplate.cs new file mode 100644 index 000000000..e94c751ba --- /dev/null +++ b/UWPX_UI_Context/Classes/DataTemplates/Controls/ContactInfoControlDataTemplate.cs @@ -0,0 +1,200 @@ +using Data_Manager2.Classes.DBTables; +using Shared.Classes; +using Windows.UI.Xaml; +using XMPP_API.Classes; + +namespace UWPX_UI_Context.Classes.DataTemplates.Controls +{ + public class ContactInfoControlDataTemplate: AbstractDataTemplate + { + //--------------------------------------------------------Attributes:-----------------------------------------------------------------\\ + #region --Attributes-- + private bool _PresenceFlyoutEnabled; + public bool PresenceFlyoutEnabled + { + get => _PresenceFlyoutEnabled; + set => SetProperty(ref _PresenceFlyoutEnabled, value); + } + private Visibility _RequestPresenceSubscriptionVisibility; + public Visibility RequestPresenceSubscriptionVisibility + { + get => _RequestPresenceSubscriptionVisibility; + set => SetProperty(ref _RequestPresenceSubscriptionVisibility, value); + } + private Visibility _CancelPresenceSubscriptionVisibility; + public Visibility CancelPresenceSubscriptionVisibility + { + get => _CancelPresenceSubscriptionVisibility; + set => SetProperty(ref _CancelPresenceSubscriptionVisibility, value); + } + private Visibility _RejectPresenceSubscriptionVisibility; + public Visibility RejectPresenceSubscriptionVisibility + { + get => _RejectPresenceSubscriptionVisibility; + set => SetProperty(ref _RejectPresenceSubscriptionVisibility, value); + } + private Visibility _ProbePresenceVisibility; + public Visibility ProbePresenceVisibility + { + get => _ProbePresenceVisibility; + set => SetProperty(ref _ProbePresenceVisibility, value); + } + private string _RemoveFromRosterText; + public string RemoveFromRosterText + { + get => _RemoveFromRosterText; + set => SetProperty(ref _RemoveFromRosterText, value); + } + private string _AccountBareJid; + public string AccountBareJid + { + get => _AccountBareJid; + set => SetProperty(ref _AccountBareJid, value); + } + private string _ChatBareJid; + public string ChatBareJid + { + get => _ChatBareJid; + set => SetChatBareJidProperty(value); + } + private string _ChatStatus; + public string ChatStatus + { + get => _ChatStatus; + set => SetProperty(ref _ChatStatus, value); + } + private string _ChatState; + public string ChatState + { + get => _ChatState; + set => SetProperty(ref _ChatState, value); + } + private string _MuteGlyph; + public string MuteGlyph + { + get => _MuteGlyph; + set => SetProperty(ref _MuteGlyph, value); + } + private string _MuteTooltip; + public string MuteTooltip + { + get => _MuteTooltip; + set => SetProperty(ref _MuteTooltip, value); + } + private Presence _Presence; + public Presence Presence + { + get => _Presence; + set => SetProperty(ref _Presence, value); + } + private string _Nickname; + public string Nickname + { + get => _Nickname; + set => SetNicknameProperty(value); + } + private bool _DifferentNickname; + public bool DifferentNickname + { + get => _DifferentNickname; + set => SetProperty(ref _DifferentNickname, value); + } + + #endregion + //--------------------------------------------------------Constructor:----------------------------------------------------------------\\ + #region --Constructors-- + + + #endregion + //--------------------------------------------------------Set-, Get- Methods:---------------------------------------------------------\\ + #region --Set-, Get- Methods-- + private void SetNicknameProperty(string value) + { + if (SetProperty(ref _Nickname, value, nameof(Nickname))) + { + DifferentNickname = !string.Equals(Nickname, ChatBareJid); + } + } + + private void SetChatBareJidProperty(string value) + { + if (SetProperty(ref _ChatBareJid, value, nameof(ChatBareJid))) + { + DifferentNickname = !string.Equals(Nickname, ChatBareJid); + } + } + + #endregion + //--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\ + #region --Misc Methods (Public)-- + public void UpdateView(XMPPClient client) + { + AccountBareJid = client.getXMPPAccount().getBareJid(); + } + + public void UpdateView(ChatTable chat) + { + // Subscription state: + ProbePresenceVisibility = Visibility.Collapsed; + RequestPresenceSubscriptionVisibility = Visibility.Collapsed; + CancelPresenceSubscriptionVisibility = Visibility.Collapsed; + RejectPresenceSubscriptionVisibility = Visibility.Collapsed; + PresenceFlyoutEnabled = true; + + switch (chat.subscription) + { + case "to": + CancelPresenceSubscriptionVisibility = Visibility.Visible; + ProbePresenceVisibility = Visibility.Visible; + break; + case "both": + CancelPresenceSubscriptionVisibility = Visibility.Visible; + ProbePresenceVisibility = Visibility.Visible; + RejectPresenceSubscriptionVisibility = Visibility.Visible; + break; + case "subscribe": + PresenceFlyoutEnabled = false; + break; + case "unsubscribe": + RequestPresenceSubscriptionVisibility = Visibility.Visible; + break; + case "from": + RequestPresenceSubscriptionVisibility = Visibility.Visible; + RejectPresenceSubscriptionVisibility = Visibility.Visible; + break; + case "none": + default: + RequestPresenceSubscriptionVisibility = Visibility.Visible; + break; + } + + // Menu flyout: + RemoveFromRosterText = chat.inRoster ? "Remove from roster" : "Add to roster"; + + // Info: + ChatBareJid = chat.chatJabberId; + Nickname = chat.chatJabberId; + ChatStatus = chat.status; + ChatState = chat.chatState; + MuteGlyph = chat.muted ? "\uE74F" : "\uE767"; + MuteTooltip = chat.muted ? "Unmute" : "Mute"; + } + + #endregion + + #region --Misc Methods (Private)-- + + + #endregion + + #region --Misc Methods (Protected)-- + + + #endregion + //--------------------------------------------------------Events:---------------------------------------------------------------------\\ + #region --Events-- + + + #endregion + } +} diff --git a/UWPX_UI_Context/Classes/Events/NavigatedToContactInfoPageEventArgs.cs b/UWPX_UI_Context/Classes/Events/NavigatedToContactInfoPageEventArgs.cs new file mode 100644 index 000000000..726c82005 --- /dev/null +++ b/UWPX_UI_Context/Classes/Events/NavigatedToContactInfoPageEventArgs.cs @@ -0,0 +1,49 @@ +using Data_Manager2.Classes.DBTables; +using XMPP_API.Classes; + +namespace UWPX_UI_Context.Classes.Events +{ + public class NavigatedToContactInfoPageEventArgs + { + //--------------------------------------------------------Attributes:-----------------------------------------------------------------\\ + #region --Attributes-- + public readonly ChatTable CHAT; + public readonly XMPPClient CLIENT; + + #endregion + //--------------------------------------------------------Constructor:----------------------------------------------------------------\\ + #region --Constructors-- + public NavigatedToContactInfoPageEventArgs(XMPPClient client, ChatTable chat) + { + CHAT = chat; + CLIENT = client; + } + + #endregion + //--------------------------------------------------------Set-, Get- Methods:---------------------------------------------------------\\ + #region --Set-, Get- Methods-- + + + #endregion + //--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\ + #region --Misc Methods (Public)-- + + + #endregion + + #region --Misc Methods (Private)-- + + + #endregion + + #region --Misc Methods (Protected)-- + + + #endregion + //--------------------------------------------------------Events:---------------------------------------------------------------------\\ + #region --Events-- + + + #endregion + } +} diff --git a/UWPX_UI_Context/UWPX_UI_Context.csproj b/UWPX_UI_Context/UWPX_UI_Context.csproj index 44da47386..7e6ab7b10 100644 --- a/UWPX_UI_Context/UWPX_UI_Context.csproj +++ b/UWPX_UI_Context/UWPX_UI_Context.csproj @@ -215,6 +215,7 @@ + @@ -261,6 +262,7 @@ +