From c5de8d9841d442d0709c190431200c93be5c34fd Mon Sep 17 00:00:00 2001 From: Kamil Date: Fri, 6 Dec 2024 00:05:36 +0000 Subject: [PATCH] Added check for update --- app/filters.py | 34 +++++++++++++++++++++++- app/functions.py | 40 ++++++++++++++++++++++++++++- config.py | 2 +- static/css/styles.css | 60 ++++++++++++++++++++++++++++++------------- templates/base.html | 2 +- 5 files changed, 116 insertions(+), 22 deletions(-) diff --git a/app/filters.py b/app/filters.py index f1ec19e..c4ff498 100644 --- a/app/filters.py +++ b/app/filters.py @@ -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"{version}") + # 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"{version}") + else: + return Markup(f"{version}") + else: + nra,url = functions.get_latest_release(version) + if nra: + return Markup(f"{version}") + + + return Markup(f"{version}") + else: + return Markup(f"{version}") + + + + + + + @template_filter('jellyfin_link') def jellyfin_link(jellyfin_id: str) -> Markup: diff --git a/app/functions.py b/app/functions.py index f82805a..ea9ce53 100644 --- a/app/functions.py +++ b/app/functions.py @@ -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 \ No newline at end of file + 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,'' \ No newline at end of file diff --git a/config.py b/config.py index 7f254c7..b996c99 100644 --- a/config.py +++ b/config.py @@ -32,7 +32,7 @@ class Config: LIDARR_URL = os.getenv('LIDARR_URL','') LIDARR_MONITOR_ARTISTS = os.getenv('LIDARR_MONITOR_ARTISTS','false').lower() == 'true' MUSIC_STORAGE_BASE_PATH = os.getenv('MUSIC_STORAGE_BASE_PATH') - + CHECK_FOR_UPDATES = os.getenv('CHECK_FOR_UPDATES','true').lower() == 'true' # SpotDL specific configuration SPOTDL_CONFIG = { 'cookie_file': '/jellyplist/cookies.txt', diff --git a/static/css/styles.css b/static/css/styles.css index 3c1e918..7425b90 100644 --- a/static/css/styles.css +++ b/static/css/styles.css @@ -3,16 +3,18 @@ body { } .sidebar { - background-color: #1a1d21; + background-color: #1a1d21; height: 100vh; padding-top: 20px; padding-left: 10px; color: white; } + .top-bar { - background-color: #1a1d21; + background-color: #1a1d21; } + .sidebar h3 { color: white; padding-left: 15px; @@ -50,47 +52,51 @@ body { width: 140px; margin-right: 10px; } -.logo img{ + +.logo img { width: 100%; } + @media screen and (min-width: 1600px) { .modal-dialog { - max-width: 90%; /* New width for default modal */ + max-width: 90%; + /* New width for default modal */ } } -.searchbar{ + +.searchbar { margin-bottom: auto; margin-top: auto; height: 60px; background-color: #353b48; border-radius: 30px; padding: 10px; - } +} - .search_input{ +.search_input { color: white; border: 0; outline: 0; background: none; width: 450px; - caret-color:transparent; + caret-color: transparent; line-height: 40px; transition: width 0.4s linear; - } +} - .searchbar:hover > .search_input{ +.searchbar:hover>.search_input { /* padding: 0 10px; */ width: 450px; - caret-color:red; + caret-color: red; /* transition: width 0.4s linear; */ - } +} - .searchbar:hover > .search_icon{ +.searchbar:hover>.search_icon { background: white; color: #e74c3c; - } +} - .search_icon{ +.search_icon { height: 40px; width: 40px; float: right; @@ -98,6 +104,24 @@ body { justify-content: center; align-items: center; border-radius: 50%; - color:white; - text-decoration:none; - } \ No newline at end of file + color: white; + text-decoration: none; +} + +.btn-pulsing { + animation: pulse 2s infinite; + } + + @keyframes pulse { + 0% { + transform: scale(1); + } + + 50% { + transform: scale(1.08); + } + + 100% { + transform: scale(1); + } + } \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 93bb6b7..53d6a38 100644 --- a/templates/base.html +++ b/templates/base.html @@ -116,7 +116,7 @@ - {{version}} + {{version | version_check}}