Spaces:
Sleeping
Sleeping
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 | |