Exemple #1
0
        public async Task MulticastItemMessagesAsync(IList <ItemLookUpResult.Item> itemList)
        {
            int count = 0;
            List <ISendMessage> messageList = new List <ISendMessage>();

            while (count < itemList.Count)
            {
                messageList.Clear();

                // 한번에 보낼 수 있는 건 5개.
                for (int i = 0; i < 5; ++i)
                {
                    if (count >= itemList.Count)
                    {
                        break;
                    }

                    // 캐러셀 하나에는 10개까지...인데 그럼 한번에 50개 보낼 수 있는건가?
                    string altText = itemList[count].title;
                    if (count < itemList.Count - 1)
                    {
                        altText += " 외";
                    }
                    CarouselContainerFlexMessage carouselMessage = FlexMessage.CreateCarouselMessage(altText);

                    for (int j = 0; j < 10; ++j)
                    {
                        if (count >= itemList.Count)
                        {
                            break;
                        }

                        BubbleContainer container = itemList[count].ToBubbleContainer();
                        carouselMessage.AddBubbleContainer(container);

                        count++;
                    }

                    messageList.Add(carouselMessage);
                }

                if (messageList.Count > 0)
                {
                    await MulticastMessagesAsync(messageList);
                }
            }
        }
        public void Show()
        {
            Visibility = Visibility.Visible;
            BubbleContainer.UpdateLayout();

            // Move away from view to avoid flashing before positioning in Animate
            var pointerTransform = this.PointerRectangle.RenderTransform as TranslateTransform;
            var bubbleTransform  = this.BubbleContainer.RenderTransform as TranslateTransform;

            bubbleTransform.Y  = -this.LayoutRoot.ActualHeight;
            pointerTransform.Y = bubbleTransform.Y;

            if (IsLoaded)
            {
                Animate();
            }
        }
        public static BubbleContainer ToBubbleContainer(this ItemLookUpResult.Item item)
        {
            string linkUrl  = Aladin.Utils.UnescapeUrl(item.link);
            string coverUrl = item.hqCover;

            UriTemplateAction linkAction = new UriTemplateAction("상품 페이지로 이동", linkUrl);

            // 이미지
            ImageComponent hero = new ImageComponent(coverUrl);

            hero.Size        = ComponentSize.Full;
            hero.AspectMode  = AspectMode.Cover;
            hero.AspectRatio = AspectRatio._151_1;   // 잘려도 여러개(그래봐야 2개까지지만) 나오는게 낫다고 의견이 나와서
            hero.Action      = linkAction;

            // 바디
            // 부제가 있으면 따로 처리를 해준다.
            string titleStr    = item.title;
            string subTitleStr = item.subInfo.subTitle;

            if (!string.IsNullOrEmpty(subTitleStr))
            {
                int index = titleStr.IndexOf(subTitleStr);
                if (index >= 0)
                {
                    titleStr = titleStr.Substring(0, index - 3);
                }
            }

            // 성인물이면 추가로 표시를 해준다.
            if (item.adult)
            {
                string emoji = char.ConvertFromUtf32(0x1f51e);
                titleStr = emoji + " " + titleStr;
            }

            TextComponent title = new TextComponent(titleStr);

            title.Size   = ComponentSize.Lg;
            title.Weight = Weight.Bold;
            TextComponent subTitle = null;

            if (!string.IsNullOrEmpty(subTitleStr))
            {
                subTitle      = new TextComponent(subTitleStr);
                subTitle.Size = ComponentSize.Sm;
            }
            TextComponent author = new TextComponent(item.author);

            author.Size   = ComponentSize.Sm;
            author.Margin = Spacing.Sm;
            TextComponent publisher = new TextComponent(item.publisher);

            publisher.Size = ComponentSize.Sm;
            TextComponent pubDate = new TextComponent(item.pubDate);

            pubDate.Size = ComponentSize.Sm;
            TextComponent priceStandard = new TextComponent($"정가 {item.priceStandard}원 / ");

            priceStandard.Size = ComponentSize.Sm;
            priceStandard.Flex = 0;
            TextComponent priceSales = new TextComponent($"판매가 {item.priceSales}원 ");

            priceSales.Size   = ComponentSize.Sm;
            priceSales.Weight = Weight.Bold;
            priceSales.Flex   = 0;
            BoxComponent price = new BoxComponent(BoxLayout.Baseline);

            price.Contents.Add(priceStandard);
            price.Contents.Add(priceSales);

            BoxComponent body = new BoxComponent(BoxLayout.Vertical);

            body.Contents.Add(title);
            if (subTitle != null)
            {
                body.Contents.Add(subTitle);
            }
            body.Contents.Add(author);
            body.Contents.Add(publisher);
            body.Contents.Add(pubDate);
            body.Contents.Add(price);
            body.Action = linkAction;

            BubbleContainer container = new BubbleContainer();

            container.Hero = hero;
            container.Body = body;

            return(container);
        }