Skip to content

Commit 4f8e852

Browse files
committed
fix: support semantic versioning format and fix version comparison
1 parent 5083afe commit 4f8e852

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

app/core/update_checker.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,38 @@ async def _check_custom_update(self, source: dict[str, Any]) -> dict[str, Any]:
173173
@staticmethod
174174
def _compare_versions(version1: str, version2: str) -> int:
175175
"""Compare version numbers, returns 1 if version1 > version2, 0 if equal, -1 if less"""
176-
v1_parts = [int(x) for x in version1.split(".")]
177-
v2_parts = [int(x) for x in version2.split(".")]
176+
177+
def parse_version(version):
178+
if "-" in version:
179+
v_parts, pre_release = version.split("-", 1)
180+
pre_release_value = 0
181+
if pre_release == "alpha":
182+
pre_release_value = -3
183+
elif pre_release == "beta":
184+
pre_release_value = -2
185+
elif pre_release == "rc":
186+
pre_release_value = -1
187+
else:
188+
v_parts = version
189+
pre_release_value = 0
190+
191+
v_nums = []
192+
for part in v_parts.split("."):
193+
try:
194+
v_nums.append(int(part))
195+
except ValueError:
196+
for ii, c in enumerate(part):
197+
if not c.isdigit():
198+
try:
199+
v_nums.append(int(part[:ii]))
200+
except ValueError:
201+
v_nums.append(0)
202+
break
203+
204+
return v_nums, pre_release_value
205+
206+
v1_parts, v1_pre = parse_version(version1)
207+
v2_parts, v2_pre = parse_version(version2)
178208

179209
for i in range(max(len(v1_parts), len(v2_parts))):
180210
v1 = v1_parts[i] if i < len(v1_parts) else 0
@@ -183,6 +213,12 @@ def _compare_versions(version1: str, version2: str) -> int:
183213
return 1
184214
elif v1 < v2:
185215
return -1
216+
217+
if v1_pre > v2_pre:
218+
return 1
219+
elif v1_pre < v2_pre:
220+
return -1
221+
186222
return 0
187223

188224
async def show_update_dialog(self, update_info: dict[str, Any]) -> None:

0 commit comments

Comments
 (0)