For PAIRGO/RENGO, games are team games (w/b are team IDs), not
individual player games. Use pmap (teams map) instead of plmap
(players map) to look up participants.
When local club exists, prefer local-stranger pairings over stranger-stranger:
- Ist vs Ist: full bonus
- Ist vs non-Ist: full bonus
- non-Ist vs non-Ist (different clubs): half bonus
- non-Ist vs non-Ist (same club): no bonus
- Fix bug: biggestCountrySize used club instead of country
- Add local club detection (>40% threshold)
- When local club exists (non-legacy mode):
* Local club members paired together: get FULL different-club bonus
* Ist vs non-Ist (different clubs): normal bonus
* Strangers from same visiting club: no bonus (normal same-club)
- Legacy mode unchanged for test compatibility
- Add LocalClubTest for local club behavior verification
- Add MacMahon39.kt parser for MM39 tournament format
- Auto-detect MM39 format in tournament import
- Import players, games, bye players, and tournament parameters
- Uses default values for time system and director since MM39 lacks those
- CountriesTool: use 'uk' key for United Kingdom
- EGFRatingsHandler: keep UK as-is (no conversion to GB)
- Pairable: convert GB to UK (inverse of previous behavior)
players array and index are now updated atomically under write lock.
Index is rebuilt every time since it stores array indices into players.
License status propagation also moved inside write lock.
OkHttp doesn't support brotli decompression. When we explicitly set
Accept-Encoding header, OkHttp disables its transparent decompression.
Solution: remove explicit Accept-Encoding header and let OkHttp handle
compression automatically (it adds gzip and transparently decompresses).
Also simplified the request headers (removed unused Sec-Fetch-* headers).
OkHttp doesn't support brotli decompression, so when servers return
brotli-compressed content, it was being read as raw binary garbage.
Removed explicit Accept-Encoding to let OkHttp handle compression
(it automatically adds gzip/deflate which it can decompress).
Also removed unnecessary Sec-Fetch-* headers.
- FFG .tou name field: use AAMMJJ-ville format (2-digit year, hyphen,
lowercase city without accents), e.g., "250830-marseille"
- EGF .h country code: use uppercase PC[FR,...] instead of PC[fr,...]
- Unify version numbers: use actual version from properties everywhere
instead of hardcoded "v0.1"
The reader and searcher were lazily initialized once, so after
rebuild() created a new index, searches still used the old reader
pointing to outdated document IDs. When those IDs were used to
index into the new players array, wrong entries were returned.
Now reader/searcher are refreshed after each build().