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