Skip to content

The winprofile doc treats Android's live MaxRate=25000 as history - #1758

Merged
xroche merged 4 commits into
masterfrom
maxrate-doc-live-writer
Sep 23, 2026
Merged

xroche merged 4 commits into
masterfrom
maxrate-doc-live-writer

Conversation

@xroche

@xroche xroche commented Sep 23, 2026

Copy link
Copy Markdown
Owner

Android's OptionsMapper.java seeds MaxRate to 25000, so a project nobody edited carries -A25000. A profile from another front end that omits the key opens there as a cap too. The doc called that literal something old profiles carry, which read a live writer as history.

httrack-android's OptionsMapper.java carries a fieldsDefaults row seeding
MaxRate to 25000, and initializeMap() puts it into every fresh project. Its own
golden argv records -A25000 for a run that sets no transfer rate, and
WinProfileOmissionTest asserts the value reaches every saved profile.

The paragraph called the literal MaxRate=25000 a thing old profiles carry, so it
read a live writer as an old file. Two neighbouring claims went with it: the
front ends no longer all "pass nothing at all", and "Both cells describe the
target rather than WebHTTrack today" named the wrong front end once Android
turned out to diverge too.

Signed-off-by: Xavier Roche <roche@httrack.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
@xroche
xroche enabled auto-merge (squash) September 23, 2026 10:36
xroche and others added 3 commits September 23, 2026 12:39
The httrack-android session corrected the mechanism. ourDefaults() has one call
site, inside serialize(), so it is the writer's omission table and never runs on
a load. The reader substitution comes from HTTrackActivity.java loading a project
with resetMap(), which seeds MaxRate to 25000, and then unserialize(), which
overlays only the keys the file states.

That makes the effect cross-repository, which is what this document is for: a
winprofile.ini written by WinHTTrack or WebHTTrack without a MaxRate line opens
there as a 25000 cap rather than as no cap. Android's own profiles are unaffected,
because absentMeansSame() gives NO_DEFAULT priority and always writes the key.

Verified against httrack-android through the GitHub API, not a checkout.

Signed-off-by: Xavier Roche <roche@httrack.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
absentMeansSame() returns value.length() == 0 for a NO_DEFAULT key, so the key
is written only while its baseline is non-empty. resetMap() runs initializeMap()
and then loadDefaultPreferences(), and OptionsActivity's save-default menu item
writes every field's current value into those preferences, so the baseline is
not pinned at the 25000 seed.

The httrack-android session caught it. The cross-front-end effect stands either
way, because a file that omits the key never overwrites whatever baseline is in
force.

Signed-off-by: Xavier Roche <roche@httrack.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
The empty baseline that drops MaxRate on a save also fixes the read. resetMap()
overlays the user's saved "" over the seed, unserialize() leaves it alone for a
file that omits the key, and SimpleOption emits nothing for a non-numeric value,
so the profile opens with no cap. The 25000 follows from the seeded baseline
being in force, which is the default state rather than every state.

Caught by the httrack-android session, which had just supplied the corner the
claim contradicted.

Signed-off-by: Xavier Roche <roche@httrack.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
@xroche
xroche merged commit af344ad into master Sep 23, 2026
37 checks passed
@xroche
xroche deleted the maxrate-doc-live-writer branch September 23, 2026 11:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant