Skip to content

Releases: shyoo/awardtracker

v1.3.8

Choose a tag to compare

@shyoo shyoo released this 25 Jul 08:03
878eaa0

Award Tracker v1.3.8

This release adds support for advanced database backup and restore, custom storage folder configuration with Tkinter directory picker, SQLite db initialization, conflict detection, crawling and parsing United Club one-time passes, and fixing incorrect status/tier extraction false positives for IHG One Rewards.


🚀 New Features & Fixes

  • Database Management (Issue #69): Added import/export utility, standalone card container for settings, native folder browsing via Tkinter, active DB path dynamic resolving, and automatic DB metadata creation for newly selected directories.
  • United Club Passes: Added support for crawling and parsing United Club one-time passes, including tracking their details, codes, and expiration dates.
  • IHG One Rewards Status (Issue #109): Resolved incorrect Diamond Elite status mapping for Platinum Elite members. Introduced tracker/goal target exclusions, priority specific selectors (.header-member-level-name), and length-based tag filtering.

📁 Commits in this Release

  • 878eaa0fc1ab62d64f02fa35b0d026f8d16d6bd7 feat(ihg): fix status extraction false positives and bump version to v1.3.8 (#112) (#109)
  • 4efaf26857cc3a036643d19c31539d80ccd2ea2c feat(united): add support for crawling and parsing United Club one-time passes (#111)
  • def66d42b59f652e259d57a5eb0578639935e7cf feat(db): add database management, import/export, cloud storage folder support and conflict detection (#110) (#69)

v1.3.7

Choose a tag to compare

@shyoo shyoo released this 15 Jul 04:29
90824ba

Award Tracker v1.3.7

This release introduces fixes for the expiration logic and navigation flows in both the World of Hyatt and ANA Mileage Club plugins.


🚀 New Features & Fixes

World of Hyatt

  • Hyatt Expiration Exclude Future Awards: Excluded dates in the future (such as Free Night Award expirations) from being evaluated as qualifying activity dates. Only past or present transaction dates are now captured, ensuring accurate 24-month expiration calculation.
  • Unit Test Coverage: Added test_hyatt_last_activity_date_extraction to verify future date filtering.

ANA Mileage Club

  • Detailed Expiration Navigation & Fallback: Modified the scraper to attempt to load the detailed validity page first. If blocked (e.g. for 0-mileage accounts), it falls back to the summary page.
  • Month/Year & Korean Date Parsing: Enhanced the regex patterns and date parser to match and parse Month, Year formats (e.g. Jan, 2029) and Korean date formats, dynamically calculating the last day of the month.
  • Combined Mileage Column Filtering: When parsing the summary table, only extract dates for columns where the combined expiring mileage is greater than 0.
  • Auto-Login Cookies Click Fix: Fixed a bug where substring matches of "ok" inside words like "Tokyo" or "booking" caused accidental clicks and redirection.

📁 Commits in this Release

  • 90824ba feat(hyatt): exclude future award expiration dates from qualifying activity dates and bump version to v1.3.7 (#108) (#106)
  • 9b0ff36 feat(ana): add detailed expiration page navigation and fallback summary parsing (#107) (#95)

v1.3.6

Choose a tag to compare

@shyoo shyoo released this 11 Jul 00:20
e4524cf

Award Tracker v1.3.6

This release fixes ANA Mileage Club (AMC) points synchronization anomalies, including incorrect user membership status tier detection and false mileage expiration date warnings.


🚀 New Features & Fixes

  • Refined Status Tier Extraction: Scans status tier keywords specifically within the header user profile container rather than the entire page, avoiding false positives from promotional/FAQ text.
  • Context-Aware Expiration Parsing: Verifies that parsed dates have an ancestor with expiration keywords (e.g. valid, expiry,유효,만료,有効,期限) to prevent matching unrelated dates.
  • Zero-Balance Handling: Disables expiration extraction for 0-balance accounts, cleanly setting the expiration date to None.
  • Unit Testing: Added target test cases to check status promotion banner text isolation and zero-balance handling.

📁 Commits in this Release

  • 99be57d feat(ana): add support for ANA Mileage Club status-tier and expiration validation fixes

v1.3.5

Choose a tag to compare

@shyoo shyoo released this 07 Jul 06:05
927e9a1

Award Tracker v1.3.5

This release improves Google Chrome binary path detection on macOS by querying Launch Services and Spotlight, fixing the "Chrome not found! Install it first!" error on Apple Silicon M4 and macOS Tahoe systems. It also unifies and refactors Chrome path resolution across the British Airways, JetBlue, and Wyndham plugins.


🚀 New Features & Fixes

  • Dynamic Chrome Path Resolution: Added automatic fallbacks using macOS Launch Services (osascript) and Spotlight (mdfind) queries to find Google Chrome, resolving translocation and custom/localized applications path issues on macOS M4/Tahoe.
  • Chrome Detection Unification: Refactored plugins/british.py, plugins/jetblue.py, and plugins/wyndham.py to use the centralized get_chrome_binary() helper from plugins/base.py, cleaning up duplicate path checks.

📁 Commits in this Release

  • 970e17f bump: version to v1.3.5
  • f1a3298 fix(macos): resolve 'Chrome not found' on macOS M4/Tahoe by adding Launch Services (osascript) and Spotlight (mdfind) fallbacks to get_chrome_binary, and reuse helper in BA, JetBlue, and Wyndham plugins

v1.3.4

Choose a tag to compare

@shyoo shyoo released this 03 Jul 19:56
4f627b2

Award Tracker v1.3.4

This release is a critical hotfix addressing a startup crash introduced in v1.3.3 where the Marriott Bonvoy plugin failed to import properly due to a missing datetime import, preventing the application from launching entirely.


?? New Features & Fixes

  • Marriott Plugin Startup Crash (Issue #99): Fixed a NameError: name 'datetime' is not defined caused by a missing from datetime import datetime import in plugins/marriott.py. The calculate_expiration method used datetime as a type annotation in its signature, which Python evaluates at class definition time, crashing the plugin manager on startup.

?? Commits in this Release

  • 2acf8b4 fix(marriott): add missing datetime import causing startup NameError (issue #99)

v1.3.3

Choose a tag to compare

@shyoo shyoo released this 01 Jul 23:29
6fe7665

Award Tracker v1.3.3

This release rolls back the Marriott plugin's expiration date extraction to its previous activity-date harvesting logic to resolve a regression, aligns the unit tests accordingly, and resolves macOS Chrome path detection issues for frozen bundles.


🚀 New Features & Fixes

  • Marriott Rollback & Test Alignment: Restored the Marriott plugin's older date extraction logic and updated the unit tests to match, preventing failures under the older approach.
  • macOS Chrome Detection Fix: Resolved the 'Chrome not found' issue in frozen .app bundles on macOS by introducing helpers (get_chrome_binary and get_sb_kwargs) in the base plugin.

📁 Commits in this Release

  • 8ab0c7a fix(marriott): rollback marriott.py to resolve regression and align tests accordingly
  • 0ba6f58 fix(macos): resolve 'Chrome not found! Install it first!' in frozen .app bundle by adding get_chrome_binary() and get_sb_kwargs() helpers to base.py and updating all 24 plugins (#97)

v1.3.2

Choose a tag to compare

@shyoo shyoo released this 01 Jul 05:04
c4f0cb9

Award Tracker v1.3.2

This release fixes the Marriott points expiration calculation regression, resolves plugin module import NameErrors, adds Inno Setup safety guards in Windows release builds, and includes manual sync exclusion fixes and sync history editing capabilities.


🚀 New Features & Fixes

  • Marriott Point Expiration Fix: Refactored the Marriott Bonvoy scraper to parse the explicit expiration date displayed on the page instead of estimating it from the activity list transaction dates, resolving false "Expired" status issues.
  • Plugin Module Import Fixes: Resolved NameErrors in 6 plugins (Alaska, American, Avianca, Hilton, IHG, Marriott) where the datetime type hint was used at class-definition scope without being imported.
  • Release Script Safety Check: Modified release-win.ps1 to throw an error and exit with code 1 if the Inno Setup Compiler (ISCC.exe) is not found, ensuring setup installer compilation errors do not pass silently.
  • Manual Sync Counter Exclusions: Excluded manual accounts from the failed sync count in the dashboard.
  • Editable Sync History Logs: Allowed users to view, edit, or delete historical synchronization log entries.

📁 Commits in this Release

  • c4f0cb9 Fix marriott expiration (#84) (#96)
  • a5dbc19 fix(sync): exclude manual accounts from failed sync counts (issue #91) (#94)
  • 3c92aab feat(history): allow users to edit or delete historical synchronization log entries (issue #92) (#93)

v1.3.1

Choose a tag to compare

@shyoo shyoo released this 25 Jun 09:53
0b34bfc

Award Tracker v1.3.1

Bug fixes, test resilience improvements, and a refactor to eliminate duplicated interactive login instructions across templates.


🚀 New Features & Fixes

  • Marriott Expiration Fix (issue #84): Fixed incorrect expiration date detection where the regex was matching a session token (expiresIn) instead of the actual points expiration date, causing points to incorrectly show as expired.
  • JetBlue Session Loop Fix (issue #83): Fixed sync loop when the user didn't check "Keep me signed in" during interactive login. Sync now reports a clear error instead of looping, and the interactive login prompt explicitly warns users to check "Keep me signed in" in bold red.
  • Test Resilience: Made 5 previously failing tests resilient to missing optional dependencies (psutil, dateutil) and absent local reference HTML files by using skipTest and stdlib alternatives.
  • Interactive Login Instructions Refactor: Moved all plugin-specific interactive login modal instructions (JetBlue, British Airways, Wyndham, Virgin Atlantic, Air Canada) from hardcoded JS if/else chains in templates into structured interactive_login_instructions properties on each plugin class. Adding instructions for new plugins now only requires a property override in the plugin file.
  • Pre-push Test Requirement: Updated AGENTS.md to mandate running the full test suite before any push-to-remote workflow.
  • New Tests: Added 8 tests covering interactive login instruction properties, template helper, and plugin mode consistency.

📁 Commits in this Release

  • 68b34d5 fix(marriott): fix incorrect expiration date detection and display (issue #84) (#87)
  • 0fbfe07 Merge pull request #88 from shyoo/fix-test-failures
  • ae7930d fix(tests): make 5 failing tests resilient to missing optional dependencies and reference files
  • 7d072b5 Merge pull request #89 from shyoo/fix-jetblue-session-loop
  • 471082b fix(jetblue): stop sync loop when session expired and clarify "Keep me signed in" requirement (issue #83)
  • c0d6074 refactor(interactive-login): move plugin-specific login instructions into plugin classes, add pre-push test step to AGENTS.md, and bump version to v1.3.1

v1.3.0

Choose a tag to compare

@shyoo shyoo released this 21 Jun 06:37
a383fcf

Award Tracker v1.3.0

This release introduces support for custom expiration tracking on manual accounts, manual certificate/voucher tracking under any program, clear date options, and updated dashboard formatting.


🚀 New Features & Fixes

  • Custom Expiration Dates on Manual Accounts: Users can now specify and clear custom expiration dates on manual programs. These follow standard project warnings (critical, warning, safe) and flash red (animate-pulse) when nearing expiration.
  • Manual Certificates & Vouchers CRUD: Users can manually add, edit, and delete custom certificates/vouchers (e.g. CapitalOne travel vouchers) under any program. Custom certificates are ignored and preserved when automated scraping runs.
  • Improved Date Inputs: Adds a "Clear" button to all expiration date inputs to easily clear expiration dates from the interface.
  • Polished Metadata Formatting: Replaced the technical is_custom: True output on the dashboard and detail pages with a clean label: "Custom Certificate & Voucher", and hides empty metadata fields.

📁 Commits in this Release

  • a1e4499f0e87c0f6e0688dc958415ca632938e56 feat(expirations): add support for manual custom expiration tracking and manual certificate tracking with clear options and updated dashboard rendering

v1.2.14

Choose a tag to compare

@shyoo shyoo released this 20 Jun 01:13

Award Tracker v1.2.14

This release introduces the Wyndham Rewards points expiration date presentation, crawling, and parsing, along with robust MFA/login challenge verification and Earner Premier Cardmember point exemptions.


🚀 New Features & Fixes

  • Wyndham Expiration Scraper: Crawls and parses .points-expiration (4-year rule) and .account-expiration (18-month inactivity rule) from the page/activity tab, displaying the earlier of the two.
  • Wyndham Login & MFA Robustness: Detects redirects off-dashboard or Okta/Auth0 challenge pages (looking for specific elements like ulp-container and mfa-sms-challenge) to correctly raise Interaction Required errors and avoid false positives. Includes a 10-second wait/check loop to resolve dynamic page loading race conditions.
  • Earner Premier Cardmember Point Exemption: Detects the Earner Premier cardmember notice in page content to exempt point expiration and updates the status to append (EARNER PREMIER).
  • Exemption Suffix: Displays the custom status badge Never Expires (Earner Premier).
  • Tests: Comprehensive unit tests covering Wyndham expiration parsing, fallback calculation, MFA checks, and cardmember exemption scenarios (independently of external downloaded files).

📁 Commits in this Release

  • 8224dc9 bump: version to v1.2.14
  • f2fdb55 feat(wyndham): implement points expiration date crawling, parsing, login/MFA robustness, and Earner Premier exemption (#78)
  • 854e64e refactor: move program-specific properties into individual plugin files and update README (#74)
  • 4f868e3 feat(jetblue): add support for JetBlue TrueBlue auto-sync and interactive login (#73) (#72)