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',
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)

View File

@@ -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.")