Fix crash on pre-release versions and enable update checks for pre-releases

This commit is contained in:
KnugiHK
2026-01-24 17:20:07 +08:00
parent f920ca82b4
commit eab98ba0d6
2 changed files with 19 additions and 14 deletions

View File

@@ -274,6 +274,10 @@ def setup_argument_parser() -> ArgumentParser:
"--check-update", dest="check_update", default=False, action='store_true', "--check-update", dest="check_update", default=False, action='store_true',
help="Check for updates (require Internet access)" 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( misc_group.add_argument(
"--assume-first-as-me", dest="assume_first_as_me", default=False, action='store_true', "--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)" 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) setup_logging(logging.INFO)
# Check for updates # Check for updates
if args.check_update: if args.check_update or args.check_update_pre:
exit(check_update()) exit(check_update(args.check_update_pre))
# Validate arguments # Validate arguments
validate_args(parser, args) validate_args(parser, args)

View File

@@ -157,11 +157,12 @@ def determine_day(last: int, current: int) -> Optional[datetime.date]:
return current return current
def check_update(): def check_update(include_beta: bool = False) -> int:
import urllib.request import urllib.request
import json import json
import importlib import importlib
from sys import platform from sys import platform
from packaging import version
PACKAGE_JSON = "https://pypi.org/pypi/whatsapp-chat-exporter/json" PACKAGE_JSON = "https://pypi.org/pypi/whatsapp-chat-exporter/json"
try: try:
@@ -172,21 +173,21 @@ def check_update():
else: else:
with raw: with raw:
package_info = json.load(raw) package_info = json.load(raw)
latest_version = tuple( if include_beta:
map(int, package_info["info"]["version"].split("."))) all_versions = [version.parse(v) for v in package_info["releases"].keys()]
__version__ = importlib.metadata.version("whatsapp_chat_exporter") latest_version = max(all_versions, key=lambda v: (v.release, v.pre))
current_version = tuple(map(int, __version__.split("."))) else:
latest_version = version.parse(package_info["info"]["version"])
current_version = version.parse(importlib.metadata.version("whatsapp_chat_exporter"))
if current_version < latest_version: if current_version < latest_version:
logging.info( logging.info(
"===============Update===============\n" "===============Update===============\n"
"A newer version of WhatsApp Chat Exporter is available." "A newer version of WhatsApp Chat Exporter is available.\n"
f"Current version: {__version__}" f"Current version: {current_version}\n"
f"Latest version: {package_info['info']['version']}" f"Latest version: {latest_version}"
) )
if platform == "win32": pip_cmd = "pip" if platform == "win32" else "pip3"
logging.info("Update with: pip install --upgrade whatsapp-chat-exporter") logging.info(f"Update with: {pip_cmd} install --upgrade whatsapp-chat-exporter {'--pre' if include_beta else ''}")
else:
logging.info("Update with: pip3 install --upgrade whatsapp-chat-exporter")
logging.info("====================================") logging.info("====================================")
else: else:
logging.info("You are using the latest version of WhatsApp Chat Exporter.") logging.info("You are using the latest version of WhatsApp Chat Exporter.")