From eab98ba0d65b4d1262e48fc4a506b2f0f76eba5b Mon Sep 17 00:00:00 2001 From: KnugiHK <24708955+KnugiHK@users.noreply.github.com> Date: Sat, 24 Jan 2026 17:20:07 +0800 Subject: [PATCH] Fix crash on pre-release versions and enable update checks for pre-releases --- Whatsapp_Chat_Exporter/__main__.py | 8 ++++++-- Whatsapp_Chat_Exporter/utility.py | 25 +++++++++++++------------ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/Whatsapp_Chat_Exporter/__main__.py b/Whatsapp_Chat_Exporter/__main__.py index 55aaf27..4aeb9da 100644 --- a/Whatsapp_Chat_Exporter/__main__.py +++ b/Whatsapp_Chat_Exporter/__main__.py @@ -274,6 +274,10 @@ def setup_argument_parser() -> ArgumentParser: "--check-update", dest="check_update", default=False, action='store_true', help="Check for updates (require Internet access)" ) + misc_group.add_argument( + "--check-update-pre", dest="check_update_pre", default=False, action='store_true', + help="Check for updates including pre-releases (require Internet access)" + ) misc_group.add_argument( "--assume-first-as-me", dest="assume_first_as_me", default=False, action='store_true', help="Assume the first message in a chat as sent by me (must be used together with -e)" @@ -775,8 +779,8 @@ def main(): setup_logging(logging.INFO) # Check for updates - if args.check_update: - exit(check_update()) + if args.check_update or args.check_update_pre: + exit(check_update(args.check_update_pre)) # Validate arguments validate_args(parser, args) diff --git a/Whatsapp_Chat_Exporter/utility.py b/Whatsapp_Chat_Exporter/utility.py index f5aaba7..6ccbee6 100644 --- a/Whatsapp_Chat_Exporter/utility.py +++ b/Whatsapp_Chat_Exporter/utility.py @@ -157,11 +157,12 @@ def determine_day(last: int, current: int) -> Optional[datetime.date]: return current -def check_update(): +def check_update(include_beta: bool = False) -> int: import urllib.request import json import importlib from sys import platform + from packaging import version PACKAGE_JSON = "https://pypi.org/pypi/whatsapp-chat-exporter/json" try: @@ -172,21 +173,21 @@ def check_update(): else: with raw: package_info = json.load(raw) - latest_version = tuple( - map(int, package_info["info"]["version"].split("."))) - __version__ = importlib.metadata.version("whatsapp_chat_exporter") - current_version = tuple(map(int, __version__.split("."))) + if include_beta: + all_versions = [version.parse(v) for v in package_info["releases"].keys()] + latest_version = max(all_versions, key=lambda v: (v.release, v.pre)) + else: + latest_version = version.parse(package_info["info"]["version"]) + current_version = version.parse(importlib.metadata.version("whatsapp_chat_exporter")) if current_version < latest_version: logging.info( "===============Update===============\n" - "A newer version of WhatsApp Chat Exporter is available." - f"Current version: {__version__}" - f"Latest version: {package_info['info']['version']}" + "A newer version of WhatsApp Chat Exporter is available.\n" + f"Current version: {current_version}\n" + f"Latest version: {latest_version}" ) - if platform == "win32": - logging.info("Update with: pip install --upgrade whatsapp-chat-exporter") - else: - logging.info("Update with: pip3 install --upgrade whatsapp-chat-exporter") + pip_cmd = "pip" if platform == "win32" else "pip3" + logging.info(f"Update with: {pip_cmd} install --upgrade whatsapp-chat-exporter {'--pre' if include_beta else ''}") logging.info("====================================") else: logging.info("You are using the latest version of WhatsApp Chat Exporter.")