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); }