Esempio n. 1
0
        private static AdaptiveText GetTileAdaptiveText(TileContentBuilder builder, TileSize size)
        {
            TileBinding tileBinding;

            switch (size)
            {
            case TileSize.Small:
                tileBinding = builder.Content.Visual.TileSmall;
                break;

            case TileSize.Medium:
                tileBinding = builder.Content.Visual.TileMedium;
                break;

            case TileSize.Wide:
                tileBinding = builder.Content.Visual.TileWide;
                break;

            case TileSize.Large:
                tileBinding = builder.Content.Visual.TileLarge;
                break;

            default:
                return(null);
            }

            var content = (TileBindingContentAdaptive)tileBinding.Content;

            return(content.Children.FirstOrDefault() as AdaptiveText);
        }
Esempio n. 2
0
        public static TileNotification CreateTileNotificationForMessage(DiscordMessage message)
        {
            var tileContentBuilder = new TileContentBuilder()
                                     .SetBranding(TileBranding.NameAndLogo)
                                     .AddTile(TileSize.Large)
                                     .AddTile(TileSize.Medium)
                                     .AddTile(TileSize.Wide);

            if (message.Channel is DiscordDmChannel dm)
            {
                if (!string.IsNullOrEmpty(dm.IconHash))
                {
                    tileContentBuilder.SetPeekImage(new Uri(dm.IconUrl));
                }

                if (!string.IsNullOrEmpty(dm.Recipient?.AvatarHash))
                {
                    tileContentBuilder.SetPeekImage(new Uri(dm.Recipient.GetAvatarUrl(ImageFormat.Png)));
                }

                tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText()
                {
                    Text = GetChannelHeaderName(message.Channel), HintStyle = AdaptiveTextStyle.Base
                })
                .AddAdaptiveTileVisualChild(new AdaptiveText()
                {
                    Text = GetMessageContent(message), HintStyle = AdaptiveTextStyle.Caption, HintWrap = true
                })
                .SetDisplayName(new Moment(message.Timestamp.UtcDateTime).Calendar());
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(message.Channel.Guild.IconUrl))
                {
                    tileContentBuilder.SetPeekImage(new Uri(message.Channel.Guild.IconUrl + "?size=1024"));
                }

                tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText()
                {
                    Text = $"#{message.Channel.Name}", HintStyle = AdaptiveTextStyle.Base
                })
                .AddAdaptiveTileVisualChild(new AdaptiveText()
                {
                    Text = message.Channel.Guild.Name, HintStyle = AdaptiveTextStyle.Body
                })
                .AddAdaptiveTileVisualChild(new AdaptiveText()
                {
                    Text = GetMessageContent(message), HintStyle = AdaptiveTextStyle.Caption, HintWrap = true
                })
                .SetDisplayName(new Moment(message.Timestamp.UtcDateTime).Calendar());
            }

            var tileContent = tileContentBuilder.GetTileContent();
            var doc         = new XmlDocument();

            doc.LoadXml(tileContent.GetContent());

            return(new TileNotification(doc));
        }
Esempio n. 3
0
        public static TileNotification CreateTileNotificationForChannel(DiscordChannel channel)
        {
            var tileContentBuilder = new TileContentBuilder()
                                     .SetBranding(TileBranding.NameAndLogo)
                                     .AddTile(TileSize.Large)
                                     .AddTile(TileSize.Medium)
                                     .AddTile(TileSize.Wide);

            if (channel is DiscordDmChannel dm)
            {
                if (!string.IsNullOrEmpty(dm.IconHash))
                {
                    tileContentBuilder.SetPeekImage(new Uri(dm.IconUrl));
                }

                if (!string.IsNullOrEmpty(dm.Recipient?.AvatarHash))
                {
                    tileContentBuilder.SetPeekImage(new Uri(dm.Recipient.AvatarUrl));
                }

                tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText()
                {
                    Text = GetChannelHeaderName(channel), HintStyle = AdaptiveTextStyle.Base
                });
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(channel.Guild.IconUrl))
                {
                    tileContentBuilder.SetPeekImage(new Uri(channel.Guild.IconUrl + "?size=1024"));
                }

                tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText()
                {
                    Text = $"#{channel.Name}", HintStyle = AdaptiveTextStyle.Base
                })
                .AddAdaptiveTileVisualChild(new AdaptiveText()
                {
                    Text = channel.Guild.Name, HintStyle = AdaptiveTextStyle.Body
                });
            }

            var tileContent = tileContentBuilder.GetTileContent();
            var doc         = new XmlDocument();

            doc.LoadXml(tileContent.GetContent());

            return(new TileNotification(doc));
        }
Esempio n. 4
0
 private static TileBinding GenerateImageTileBinding(List <KeyValuePair <string, string> > pairs)
 {
     if (pairs != null && pairs.Count > 0)
     {
         return(new TileBinding
         {
             Branding = TileBranding.NameAndLogo,
             Content = TileContentBuilder.CreatePhotosTileContent(pairs.Select(x => new TileBasicImage()
             {
                 Source = x.Key, AlternateText = x.Value
             }))
         });
     }
     return(null);
 }
Esempio n. 5
0
        public void AddTextTest_OnLargeTileOnly()
        {
            // Arrange
            string             text    = "text on large tile";
            TileContentBuilder builder = new TileContentBuilder();

            builder.AddTile(TileSize.Large);

            // Act
            builder.AddText(text);

            // Assert
            var tileText = GetTileAdaptiveText(builder, TileSize.Large);

            Assert.IsNotNull(tileText);
            Assert.AreSame("text on large tile", (string)tileText.Text);
        }
Esempio n. 6
0
        public static TileContent GenerateTileContent()
        {
            TileContentBuilder builder = new TileContentBuilder();

            // Small Tile
            builder.AddTile(Notifications.TileSize.Small)
            .SetTextStacking(TileTextStacking.Center, Notifications.TileSize.Small)
            .AddText("Mon", Notifications.TileSize.Small, hintStyle: AdaptiveTextStyle.Body, hintAlign: AdaptiveTextAlign.Center)
            .AddText("63°", Notifications.TileSize.Small, hintStyle: AdaptiveTextStyle.Base, hintAlign: AdaptiveTextAlign.Center);

            // Medium Tile
            builder.AddTile(Notifications.TileSize.Medium)
            .AddAdaptiveTileVisualChild(
                new AdaptiveGroup()
            {
                Children =
                {
                    GenerateSubgroup("Mon", "Mostly Cloudy.png", 63, 42),
                    GenerateSubgroup("Tue", "Cloudy.png",        57, 38)
                }
            }, Notifications.TileSize.Medium);

            // Wide Tile
            builder.AddTile(Notifications.TileSize.Wide)
            .AddAdaptiveTileVisualChild(
                new AdaptiveGroup()
            {
                Children =
                {
                    GenerateSubgroup("Mon", "Mostly Cloudy.png", 63, 42),
                    GenerateSubgroup("Tue", "Cloudy.png",        57, 38),
                    GenerateSubgroup("Wed", "Sunny.png",         59, 43),
                    GenerateSubgroup("Thu", "Sunny.png",         62, 42),
                    GenerateSubgroup("Fri", "Sunny.png",         71, 66)
                }
            }, Notifications.TileSize.Wide);

            // Large tile
            builder.AddTile(Notifications.TileSize.Large, GenerateLargeTileContent());

            // Set the base URI for the images, so we don't redundantly specify the entire path
            builder.Content.Visual.BaseUri = new Uri("Assets/NotificationAssets/", UriKind.Relative);

            return(builder.Content);
        }
Esempio n. 7
0
        /// <summary>
        /// Method which sends a tile update.
        /// </summary>
        /// <param name="text">The text of the notification</param>
        public static void SendTileNotification(string text)
        {
            TileContentBuilder builder = new TileContentBuilder();

            builder.AddTile(TileSize.Medium)
            .SetBranding(TileBranding.Logo)
            .SetTextStacking(TileTextStacking.Center, TileSize.Medium)
            .AddText(text, TileSize.Medium, AdaptiveTextStyle.Default, hintWrap: true, hintAlign: AdaptiveTextAlign.Center);

            builder.AddTile(TileSize.Wide)
            .SetBranding(TileBranding.Logo)
            .SetTextStacking(TileTextStacking.Center, TileSize.Wide)
            .AddText(text, TileSize.Wide, AdaptiveTextStyle.Body, hintWrap: true, hintAlign: AdaptiveTextAlign.Center);

            builder.AddTile(TileSize.Large)
            .SetBranding(TileBranding.Logo)
            .SetTextStacking(TileTextStacking.Center, TileSize.Large)
            .AddText(text, TileSize.Large, AdaptiveTextStyle.Body, hintWrap: true, hintAlign: AdaptiveTextAlign.Center);

            TileUpdateManager.CreateTileUpdaterForApplication().Update(new TileNotification(builder.Content.GetXml()));
        }
Esempio n. 8
0
        public static TileContent GenerateTileContent(string username, string avatarLogoSource)
        {
            var builder = new TileContentBuilder();

            // Medium Tile built using only builder method.
            builder.AddTile(Notifications.TileSize.Medium)
            .SetPeekImage(new Uri(avatarLogoSource, UriKind.Relative), Notifications.TileSize.Medium, hintCrop: TilePeekImageCrop.Circle)
            .SetTextStacking(TileTextStacking.Center, Notifications.TileSize.Medium)
            .AddText("Hi,", Notifications.TileSize.Medium, hintStyle: AdaptiveTextStyle.Base, hintAlign: AdaptiveTextAlign.Center)
            .AddText(username, Notifications.TileSize.Medium, hintStyle: AdaptiveTextStyle.CaptionSubtle, hintAlign: AdaptiveTextAlign.Center);

            // Wide Tile using custom-made layout.
            builder.AddTile(Notifications.TileSize.Wide)
            .AddAdaptiveTileVisualChild(GenerateWideTileContent(username, avatarLogoSource), Notifications.TileSize.Wide);

            // Large Tile using custom-made layout conjunction with builder helper method
            builder.AddTile(Notifications.TileSize.Large)
            .AddAdaptiveTileVisualChild(CreateLargeTileLogoPayload(avatarLogoSource), Notifications.TileSize.Large)
            .AddText("Hi,", Notifications.TileSize.Large, hintAlign: AdaptiveTextAlign.Center, hintStyle: AdaptiveTextStyle.Title)
            .AddText(username, Notifications.TileSize.Large, hintAlign: AdaptiveTextAlign.Center, hintStyle: AdaptiveTextStyle.SubtitleSubtle);

            return(builder.Content);
        }