Added check for update

This commit is contained in:
Kamil
2024-12-06 00:05:36 +00:00
parent 671b813e6c
commit c5de8d9841
5 changed files with 116 additions and 22 deletions

View File

@@ -3,7 +3,8 @@ import re
from markupsafe import Markup
from app.classes import AudioProfile
from app import app
from app import app, functions, read_dev_build_file
from .version import __version__
filters = {}
@@ -55,6 +56,37 @@ def audioprofile(text: str, path: str) -> Markup:
)
return Markup(audio_profile_html)
@template_filter('version_check')
def version_check(version: str) -> Markup:
version = f"{__version__}{read_dev_build_file()}"
# if version contains a dash and the text after the dash is LOCAL, return version as a blue badge
if app.config['CHECK_FOR_UPDATES']:
if '-' in version and version.split('-')[1] == 'LOCAL':
return Markup(f"<span class='badge rounded-pill bg-primary'>{version}</span>")
# else if the version string contains a dash and the text after the dash is not LOCAL, check whether it contains another dash (like in e.g. v0.1.7-dev-89a1bc2) and split both parts
elif '-' in version and version.split('-')[1] != 'LOCAL' :
branch, commit_sha = version.split('-')[1], version.split('-')[2]
nra,url = functions.get_latest_dev_releases(branch_name = branch, commit_sha = commit_sha)
if nra:
return Markup(f"<a href='{url}' target='_blank'><span class='badge rounded-pill text-bg-warning btn-pulsing' data-bs-toggle='tooltip' title='An update for the {branch} branch is available.'>{version}</span></a>")
else:
return Markup(f"<span class='badge rounded-pill text-bg-secondary'>{version}</span>")
else:
nra,url = functions.get_latest_release(version)
if nra:
return Markup(f"<a href='{url}' target='_blank'><span class='badge rounded-pill text-bg-warning btn-pulsing' data-bs-toggle='tooltip' title='An update is available.'>{version}</span></a>")
return Markup(f"<span class='badge rounded-pill text-bg-primary'>{version}</span>")
else:
return Markup(f"<span class='badge rounded-pill text-bg-info'>{version}</span>")
@template_filter('jellyfin_link')
def jellyfin_link(jellyfin_id: str) -> Markup:

View File

@@ -206,4 +206,42 @@ def get_longest_substring(input_string):
pattern = "[" + re.escape("".join(special_chars)) + "]"
substrings = re.split(pattern, input_string)
longest_substring = max(substrings, key=len, default="")
return longest_substring
return longest_substring
@cache.memoize(timeout=3600*2)
def get_latest_dev_releases(branch_name :str, commit_sha : str):
try:
response = requests.get('https://api.github.com/repos/kamilkosek/jellyplist/releases')
if response.status_code == 200:
data = response.json()
latest_release = None
for release in data:
if branch_name in release['tag_name']:
if latest_release is None or release['published_at'] > latest_release['published_at']:
latest_release = release
if latest_release:
response = requests.get(f'https://api.github.com/repos/kamilkosek/jellyplist/git/ref/tags/{latest_release["tag_name"]}')
if response.status_code == 200:
data = response.json()
if commit_sha != data['object']['sha'][:7]:
return True, latest_release['html_url']
return False, ''
except requests.exceptions.RequestException as e:
app.logger.error(f"Error fetching latest version: {str(e)}")
return False, ''
@cache.memoize(timeout=3600*2)
def get_latest_release(tag_name :str):
try:
response = requests.get('https://api.github.com/repos/kamilkosek/jellyplist/releases/latest')
if response.status_code == 200:
data = response.json()
if data['tag_name'] != tag_name:
return True, data['html_url']
return False, ''
except requests.exceptions.RequestException as e:
app.logger.error(f"Error fetching latest version: {str(e)}")
return False,''