Skip to content

Commit

Permalink
Launch main web app from profile
Browse files Browse the repository at this point in the history
  • Loading branch information
FrayxRulez committed Jul 23, 2024
1 parent e1805a5 commit bfec240
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 10 deletions.
77 changes: 77 additions & 0 deletions Telegram/Common/MessageHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -581,6 +581,10 @@ public static void OpenTelegramUrl(IClientService clientService, INavigationServ
{
NavigateToWebApp(clientService, navigation, webApp.BotUsername, webApp.StartParameter, webApp.WebAppShortName, source);
}
else if (internalLink is InternalLinkTypeMainWebApp mainWebApp)
{
NavigateToMainWebApp(clientService, navigation, mainWebApp.BotUsername, mainWebApp.StartParameter, source);
}
}

private static async void NavigateToPremiumGiftCode(IClientService clientService, INavigationService navigation, string code)
Expand Down Expand Up @@ -790,6 +794,79 @@ private static async void NavigateToWebApp(IClientService clientService, INaviga
}
}

public static async void NavigateToMainWebApp(IClientService clientService, INavigationService navigation, string botUsername, string startParameter, OpenUrlSource source = null)
{
var response = await clientService.SendAsync(new SearchPublicChat(botUsername));
if (response is Chat chat && clientService.TryGetUser(chat, out User botUser))
{
NavigateToMainWebApp(clientService, navigation, botUser, startParameter, source);
}
else
{
ToastPopup.Show(Strings.NoUsernameFound, new LocalFileSource("ms-appx:///Assets/Toasts/Info.tgs"));
}
}

public static async void NavigateToMainWebApp(IClientService clientService, INavigationService navigation, User botUser, string startParameter, OpenUrlSource source = null)
{
if (botUser.Type is not UserTypeBot { HasMainWebApp: true })
{
return;
}

AttachmentMenuBot menuBot = null;
if (botUser.Type is UserTypeBot { CanBeAddedToAttachmentMenu: true })
{
menuBot = await clientService.SendAsync(new GetAttachmentMenuBot(botUser.Id)) as AttachmentMenuBot;
}

var popup = new MessagePopup
{
Title = Strings.AppName,
Message = Strings.BotWebViewStartPermission,
PrimaryButtonText = Strings.Start,
SecondaryButtonText = Strings.Cancel,
};

if (menuBot?.RequestWriteAccess is true)
{
var textBlock = new TextBlock
{
TextWrapping = TextWrapping.Wrap
};

var markdown = ClientEx.ParseMarkdown(string.Format(Strings.OpenUrlOption2, botUser.FirstName));
if (markdown != null)
{
TextBlockHelper.SetFormattedText(textBlock, markdown);
}
else
{
textBlock.Text = Strings.OpenUrlOption2;
}

popup.CheckBoxLabel = textBlock;
}

var confirm = await popup.ShowQueuedAsync();
if (confirm != ContentDialogResult.Primary)
{
return;
}

var chatId = source switch
{
OpenUrlSourceChat sourceMessage => sourceMessage.ChatId,
_ => 0
};

var responsa = await clientService.SendAsync(new GetMainWebApp(chatId, botUser.Id, startParameter, Theme.Current.Parameters, Strings.AppName));
if (responsa is MainWebApp webApp)
{
navigation.NavigateToWebApp(botUser, webApp.Url, menuBot: menuBot);
}
}

private static async void NavigateToUnknownDeepLink(IClientService clientService, string url)
{
var response = await clientService.SendAsync(new GetDeepLinkInfo(url));
Expand Down
13 changes: 12 additions & 1 deletion Telegram/Controls/ProfileHeader.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,8 @@
</controls:HeaderedControl>
</StackPanel>

<controls:HeaderedControl x:Name="InfoPanel">
<controls:HeaderedControl x:Name="InfoPanel"
IsFooterLink="True">
<controls:BadgeButton x:Name="Description"
Visibility="Collapsed"
Style="{StaticResource GlyphSubtitleBadgeButtonStyle}"
Expand Down Expand Up @@ -405,6 +406,16 @@
</DataTemplate>
</controls:BadgeButton.ContentTemplate>
</controls:BadgeButton>

<Border x:Name="BotMainApp"
Background="{ThemeResource SettingsItemBackground}">
<Button Click="{x:Bind ViewModel.OpenMainWebApp}"
Content="{CustomResource ProfileBotOpenApp}"
Style="{StaticResource AccentButtonStyle}"
HorizontalAlignment="Stretch"
Margin="12"
Height="36" />
</Border>
</controls:HeaderedControl>

<controls:HeaderedControl x:Name="ChannelMembersPanel"
Expand Down
39 changes: 30 additions & 9 deletions Telegram/Controls/ProfileHeader.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -720,25 +720,44 @@ public void UpdateUser(Chat chat, User user, bool secret)
OpenChat.Content = Strings.VoipGroupOpenChat;


if (user.Type is UserTypeBot userTypeBot && userTypeBot.CanBeEdited)
if (user.Type is UserTypeBot userTypeBot)
{
Call.Visibility = Visibility.Collapsed;
VideoCall.Visibility = Visibility.Collapsed;
if (userTypeBot.CanBeEdited)
{
Call.Visibility = Visibility.Collapsed;
VideoCall.Visibility = Visibility.Collapsed;

Edit.Visibility = Visibility.Visible;
Search.Visibility = Visibility.Visible;
Grid.SetColumn(Search, 2);
Grid.SetColumn(Edit, 1);
Edit.Visibility = Visibility.Visible;
Search.Visibility = Visibility.Visible;
Grid.SetColumn(Search, 2);
Grid.SetColumn(Edit, 1);

BotPanel.Visibility = Visibility.Visible;
}
else
{
Edit.Visibility = Visibility.Collapsed;
BotPanel.Visibility = Visibility.Collapsed;
}

BotPanel.Visibility = Visibility.Visible;
if (userTypeBot.HasMainWebApp)
{
BotMainApp.Visibility = Visibility.Visible;
InfoPanel.Footer = Strings.ProfileBotOpenAppInfo;
}
else
{
BotMainApp.Visibility = Visibility.Collapsed;
InfoPanel.Footer = string.Empty;
}
}
else
{
Edit.Visibility = Visibility.Collapsed;
BotPanel.Visibility = Visibility.Collapsed;
BotMainApp.Visibility = Visibility.Collapsed;
}


// Unused:
Location.Visibility = Visibility.Collapsed;

Expand Down Expand Up @@ -931,6 +950,7 @@ public void UpdateBasicGroup(Chat chat, BasicGroup group)
VideoCall.Visibility = Visibility.Collapsed;

BotPanel.Visibility = Visibility.Collapsed;
BotMainApp.Visibility = Visibility.Collapsed;

AnonymousNumber.Visibility = Visibility.Collapsed;
AnonymousNumberSeparator.Visibility = Visibility.Collapsed;
Expand Down Expand Up @@ -1036,6 +1056,7 @@ public void UpdateSupergroup(Chat chat, Supergroup group)

// Unused:
BotPanel.Visibility = Visibility.Collapsed;
BotMainApp.Visibility = Visibility.Collapsed;
MiscPanel.Visibility = Visibility.Collapsed;
UserPhone.Visibility = Visibility.Collapsed;
//UserCommonChats.Visibility = Visibility.Collapsed;
Expand Down
15 changes: 15 additions & 0 deletions Telegram/Strings/en/Resources.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12272,6 +12272,21 @@ public static class R
/// </summary>
public static string ProfileBirthdayValue => Resource.GetString("ProfileBirthdayValue");

/// <summary>
/// Localized resource similar to "Open App"
/// </summary>
public static string ProfileBotOpenApp => Resource.GetString("ProfileBotOpenApp");

/// <summary>
/// Localized resource similar to "By launching this mini app, you agree to the **Terms of Service for Mini Apps.**"
/// </summary>
public static string ProfileBotOpenAppInfo => Resource.GetString("ProfileBotOpenAppInfo");

/// <summary>
/// Localized resource similar to "https://telegram.org/tos/mini-apps"
/// </summary>
public static string ProfileBotOpenAppInfoLink => Resource.GetString("ProfileBotOpenAppInfoLink");

/// <summary>
/// Localized resource similar to "Channel"
/// </summary>
Expand Down
9 changes: 9 additions & 0 deletions Telegram/Strings/en/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -7992,6 +7992,15 @@ Payments will go directly to the developer of {0}. Telegram cannot provide any g
<data name="ProfileBirthdayValueYear_other" xml:space="preserve">
<value>{1} ({0} years old)</value>
</data>
<data name="ProfileBotOpenApp" xml:space="preserve">
<value>Open App</value>
</data>
<data name="ProfileBotOpenAppInfo" xml:space="preserve">
<value>By launching this mini app, you agree to the **Terms of Service for Mini Apps.**</value>
</data>
<data name="ProfileBotOpenAppInfoLink" xml:space="preserve">
<value>https://telegram.org/tos/mini-apps</value>
</data>
<data name="ProfileChannel" xml:space="preserve">
<value>Channel</value>
</data>
Expand Down
10 changes: 10 additions & 0 deletions Telegram/ViewModels/ProfileViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1113,6 +1113,16 @@ private async void SetTimer(int? ttl)

#endregion

public void OpenMainWebApp()
{
if (_chat == null || !ClientService.TryGetUser(_chat, out User user))
{
return;
}

MessageHelper.NavigateToMainWebApp(ClientService, NavigationService, user, string.Empty);
}

#region Supergroup

public void OpenSimilarChat(Chat chat)
Expand Down

0 comments on commit bfec240

Please sign in to comment.