@@ -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