Spaces:
Sleeping
Sleeping
File size: 4,959 Bytes
25cdf03 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
import adaptive_cards.card_types as types
from adaptive_cards.card import AdaptiveCard
from adaptive_cards.elements import TextBlock, Image, Media
from adaptive_cards.containers import Container, ImageSet
from adaptive_cards.actions import ActionSubmit
import re
from app.schemas.adaptive_cards_schema import ICreateMediaAC
def custom_media(anwser):
regex_http = r'https?://[^\s"]+'
url_search = re.search(regex_http, anwser)
url_search_all = re.findall(regex_http, anwser)
regex_image = r"\b(https?|ftp):\/\/[^\s/$.?#].[^\s]*\.(jpg|jpeg|png|gif|webp)\b"
url_image_search = re.search(regex_image, anwser)
if url_image_search:
url_image = url_search.group()
if url_image.endswith(")"):
url_image = url_image[:-1]
if url_image.endswith(")."):
url_image = url_image[:-2]
media = Image(url=url_image)
return None
return ICreateMediaAC(media_object=media, media_type="image", url=url_image)
regex_audio = r"\b(https?|ftp):\/\/[^\s/$.?#].[^\s]*\.(mp3|wav|ogg)\b"
url_search_audio = re.search(regex_audio, anwser)
if url_search_audio:
url_audio = url_search_audio.group()
media = Media(
sources=[{"mimeType": "audio/mp3", "url": url_audio}],
poster="https://adaptivecards.io/content/poster-audio.jpg",
)
return ICreateMediaAC(media_object=media, media_type="audio", url=url_audio)
regex_video = r"\b(https?|ftp):\/\/[^\s/$.?#].[^\s]*\.(mp4|webm|ogg)\b"
url_search_video = re.search(regex_video, anwser)
if url_search_video:
url_video = url_search_video.group()
media = Media(
sources=[{"mimeType": "video/mp4", "url": url_video}],
# poster="https://adaptivecards.io/content/poster-video.png",
poster="https://douglasgreen.com/wp-content/uploads/2014/03/video-play-btn-featured.png",
)
return ICreateMediaAC(media_object=media, media_type="video", url=url_video)
regex_youtube_video = (
r"(https?://)?(www\.)?"
"(youtube|youtu|youtube-nocookie)\\.(com|be)/"
"(watch\\?v=|embed/|v/|.+\\?v=)?([^&=%\\?]{11})"
)
url_search_youtube_video = re.search(regex_youtube_video, anwser)
if url_search_youtube_video:
url_youtube_video = url_search_youtube_video.group()
media = Media(
sources=[{"mimeType": "video/mp4", "url": url_youtube_video}],
)
return ICreateMediaAC(
media_object=media, media_type="youtube_video", url=url_youtube_video
)
if len(url_search_all) > 0:
list_media_element = []
for photo in url_search_all:
if "https://images.unsplash.com" in photo:
media = Image(url=photo)
list_media_element.append(media)
body_container_images = ImageSet(images=list_media_element)
return None
return ICreateMediaAC(
media_object=body_container_images, media_type="image", url=""
)
return None
def create_hidden_video_card(url):
return Media(
sources=[
{
"mimeType": "video/mp4",
"url": url,
}
],
is_visible=False,
)
def create_adaptive_card(answer: str, actions: list[str] = []) -> AdaptiveCard:
custom_media_element: ICreateMediaAC | None = custom_media(answer)
custom_media_item = (
custom_media_element.media_object if custom_media_element else None
)
hidden_video_youtube = None
# if custom_media_element.media_type == "youtube_video":
# hidden_video_youtube = create_hidden_video_card(custom_media_element.url)
if custom_media_element and custom_media_element.media_type == "youtube_video":
hidden_video_youtube = create_hidden_video_card(custom_media_element.url)
# if custom_media_element:
# answer = answer.replace(custom_media_element.url, "")
description_text = TextBlock(text=answer, wrap=True)
items = [
description_text,
custom_media_item,
hidden_video_youtube,
]
body_container = Container(items=items)
# crear action
actions = [ActionSubmit(title=action) for action in actions]
# Crear Adaptive Card
adaptive_card = AdaptiveCard(body=[body_container], actions=actions, version="1.5")
return adaptive_card
def create_image_card(image_url: str) -> AdaptiveCard:
image = Image(url=image_url)
body_container = Container(items=[image])
adaptive_card = AdaptiveCard(body=[body_container], version="1.5")
return adaptive_card
def create_loading_card(image_url: str) -> AdaptiveCard:
image = Image(
url=image_url,
size="small",
horizontal_alignment=types.HorizontalAlignment.LEFT,
)
body_container = Container(items=[image])
adaptive_card = AdaptiveCard(body=[body_container], version="1.5")
return adaptive_card
|