Merge pull request #53 from jr-k/develop

Release v1.14
This commit is contained in:
JRK 2024-05-13 14:10:28 +02:00 committed by GitHub
commit 5b3204bd26
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 57 additions and 28 deletions

View File

@ -165,6 +165,9 @@ class Variable:
return bool(int(self._value))
def as_string(self) -> str:
if self._value is None:
return ''
return str(self._value)
def as_int(self) -> int:

View File

@ -3,7 +3,6 @@ import re
import subprocess
import platform
from urllib.parse import urlparse, parse_qs
from typing import Optional, List, Dict
from enum import Enum
from cron_descriptor import ExpressionDescriptor
@ -159,21 +158,40 @@ def get_ip_address() -> Optional[str]:
return None
def regex_search(pattern: str, string: str, group: int):
"""Shortcut method to search a string for a given pattern.
:param str pattern:
A regular expression pattern.
:param str string:
A target string to search.
:param int group:
Index of group to return.
:rtype:
str or tuple
:returns:
Substring pattern matches.
"""
regex = re.compile(pattern)
results = regex.search(string)
if not results:
return False
return results.group(group)
def get_yt_video_id(url: str) -> str:
if not url.startswith('http'):
url = 'http://' + url
if len(url) <= 14:
return url
query = urlparse(url)
try:
if 'youtube' in query.hostname:
if query.path == '/watch':
return parse_qs(query.query)['v'][0]
elif query.path.startswith(('/embed/', '/v/')):
return query.path.split('/')[2]
elif 'youtu.be' in query.hostname:
return query.path[1:]
except:
return ''
return ''
"""Extract the ``video_id`` from a YouTube url.
This function supports the following patterns:
- :samp:`https://youtube.com/watch?v={video_id}`
- :samp:`https://youtube.com/embed/{video_id}`
- :samp:`https://youtu.be/{video_id}`
:param str url:
A YouTube url containing a video id.
:rtype: str
:returns:
YouTube video id.
"""
return regex_search(r"(?:v=|\/)([0-9A-Za-z_-]{11}).*", url, group=1)

View File

@ -33,10 +33,12 @@
<i class="fa fa-sort icon-left"></i>
</a>
{% set icon_type = 'globe' %}
{% if slide.type == 'video' %}
{% set icon_type = 'video' %}
{% elif slide.type == 'picture' %}
{% if slide.type == enum_slide_type.VIDEO %}
{% set icon_type = 'film' %}
{% elif slide.type == enum_slide_type.PICTURE %}
{% set icon_type = 'image' %}
{% elif slide.type == enum_slide_type.YOUTUBE %}
{% set icon_type = 'video' %}
{% endif %}
<i class="fa fa-{{ icon_type }} icon-left"></i>
@ -79,15 +81,21 @@
<a href="javascript:void(0);" class="item-edit slide-edit">
<i class="fa fa-pencil"></i>
</a>
{% if not fleet_mode or not slide.has_file() %}
<a href="{{ slide.location }}" class="item-download slide-download" target="_blank">
<i class="fa fa-eye"></i>
</a>
{% elif var_external_url.value|length > 0 %}
<a href="{{ var_external_url.value }}/{{ slide.location }}" class="item-download slide-download" target="_blank">
<i class="fa fa-eye"></i>
</a>
{% set location = slide.location %}
{% if var_external_url.as_string().strip()|length > 0 and slide.has_file() %}
{% set location = var_external_url.value ~ '/' ~ slide.location %}
{% endif %}
{% if slide.type == enum_slide_type.YOUTUBE %}
{% set location = 'https://www.youtube.com/watch?v=' ~ slide.location %}
{% endif %}
<a href="{{ location }}" class="item-download slide-download" target="_blank">
<i class="fa fa-eye"></i>
</a>
<a href="javascript:void(0);" class="item-delete slide-delete">
<i class="fa fa-trash"></i>
</a>