Skip to content

Release v9.3.0 - #22

Merged
corecommit merged 59 commits into
mainfrom
testing
Sep 29, 2026
Merged

corecommit merged 59 commits into
mainfrom
testing

Conversation

@corecommit

Copy link
Copy Markdown
Owner

What's included

This PR promotes the tested v9.3.0 changes from testing to main.

Highlights

  • Added the online skin browser with search and skin previews
  • Added the ability to download and apply skins directly
  • Improved launcher startup and instance list performance
  • Improved Discord Rich Presence
  • Improved translations
  • Fixed portable installs, world imports, skin applying, and several other issues
  • Improved Linux and Windows packaging and compatibility

Notes

  • Full release details are available in the changelog.
  • Target release: v9.3.0

fuis18 and others added 30 commits August 30, 2026 14:57
Backport the world import fix (Prism #5282) and accept root-level
level.dat when identifying world saves, so dropping a world ZIP onto
the launcher installs it into an instance instead of falling back to
the import-modpack dialog. Nested world ZIPs no longer fail silently.
ToastNotification's API split into prepareToast() (contents) and
showToast(pos) (animated reveal); maybeShowStarToast() still called the
old 5-argument showToast(), breaking every build. Strip trailing NUL
bytes from MainWindow.cpp and drop unused 'this' lambda captures.
Merge pull request #16 from fuis18/main
Fixing drag & drop and dont delete v9.2.7, only add v9.2.8 to testing branch
Linux binary tarball now bundles libcmark.so.0.30.2, libtomlplusplus.so.3 and
libqrencode.so.4 into bin/ (RUNPATH=$ORIGIN/), so the launcher no longer
fails on distros whose cmark has a different SONAME (e.g. openSUSE's 0.31.2).

The Arch source tarball is written to /tmp and moved into packaging/arch/ so
tar no longer reads its own output ("file changed as we read it") and dies
under set -e.

Windows builds compile cmark 0.31.2 from source: MSYS2 dropped
mingw-w64-x86_64-cmark for the MINGW64 environment, so the setup step failed
with 'target not found'.
Fixing binaries on Arch Linux and Windows
Updated version number from v9.2.9 to v9.2.8 and adjusted changelog entries accordingly.
Added Linux binary tarball and completed translations for Finnish, Hungarian, Japanese, and Laotian.
…l dirs

Instances vanishing after an update: the data root moves between the install
folder and the user data folder, so the launcher looked at an empty directory
while the instances sat untouched in the old one.

- Launcher.in: portable.txt is now checked via ${LAUNCHER_DIR}, so portable
  mode no longer depends on the caller's working directory
- Application: handleFlippedDataRoot() offers instances stranded in the other
  data root (AppData <-> install dir) and migrates them, asking at most once
- NSIS upgrade: resolves the real install path via InstallLocation, and never
  recursively wipes $INSTDIR when it holds portable.txt, UserData or instances
- installer.nsi (unused duplicate of pollymc_installer.nsi) removed
- DisplayVersion now uses ${VERSION} instead of a hardcoded 9.0.0

Packaging:
- PKGBUILD: cmark moved to depends, fixes libcmark.so.0.31.2 load failure
- CPack DEB Recommends uses commas, the semicolon form made the published
  .deb and apt index uninstallable (dpkg: invalid package name)
- bot-server and bots.json fall back to per-user locations when the install
  dir is read-only, fixing npm install EACCES and silently dropped bot lists
- README: how to install a downloaded .pkg.tar.zst (pacman -U)

Housekeeping: drop stale "Readme [skip-all]" and the unused releases.json.
- InstanceList: group lookup hits the index directly instead of resolving
  the instance first, which was a linear scan per query and made view
  sorting/layout quadratic
- InstanceDelegate: cache the shaped text layout per text and width instead
  of re-running QTextLayout for every visible row on each repaint and sizeHint
- Application: batch the startup setting migrations into one file write with
  SettingsObject::Lock, and defer the D-Bus/shared-library capability probes
  past first paint (MSA/Flame flags stay synchronous because the first-run
  wizard reads them from the constructor)
- MainWindow: fill in the status bar description after the UI has painted so
  selecting an instance no longer parses component JSON first, and reuse one
  theme QActionGroup instead of leaking a group per rebuild
- MTPixmapCache: cap auto-growth at 128 MB instead of INT_MAX/4 KB (~512 GB)
- Application::logo(): keep the decoded SVG icon instead of re-reading it
- INISettingsObject::resumeSave(): clear the pending save flag after saving
Rename the placeholder v9.2.8 changelog section to v9.3.0 and document the
unreleased work: instance-loss and packaging fixes, bot-server read-only
install fallback, and the startup/sorting/repaint optimizations. Bump
Launcher_VERSION and the Arch pkgver to match so tag builds and the
changelog check agree.
slideOut() and updatePosition() bailed whenever any animation was running,
so a click in the first 250ms stopped the auto-hide timer and left the card
stuck on screen, a close click never emitted dismissed(), and a resize
mid-animation left the card at the old spot. Stop an in-flight slide-in and
continue from the current position, and retarget the running animation's
end value instead of only storing it. Note added to the v9.3.0 changelog.
Updated the changelog to reflect improvements in instance list sorting, text caching, icon caching, and Discord Rich Presence branding.
Updated changelog for version 9.3.0 with changes related to startup performance and UI improvements.
A new "View skins online" button opens a browser for the crafty.gg skin
catalog: page navigation, player-name search, the player behind every
skin, a rotatable 3D preview and a "Use skin" button that downloads the
picked skin, adds it to the local skin library and applies it right away
(uploaded for Microsoft accounts, stored for the offline skin agent for
offline accounts).

Textures are cached under cache/skins so a revisit costs no requests.
The skin upload now refreshes an expired 24 hour launcher token before
sending the upload instead of only after it, which is what made skin
changes fail with HTTP 401.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… check

All crafty.gg requests pass one shared gate - at most 120 per rolling minute
with 500 ms between starts - so browsing and previewing skins online never
reaches the API's 150/minute rate limit, and a rare HTTP 429 is retried after
the wait the server asks for instead of failing the page.

The macOS bundle verification now greps text files only and matches the real
git ref, so the local branch name inside third-party binaries no longer fails
the job.
cmake --build was called without a directory, so it printed its usage text
and the macOS job failed before compiling anything.
… check

All crafty.gg requests pass one shared gate - at most 120 per rolling minute
with 500 ms between starts - so browsing and previewing skins online never
reaches the API's 150/minute rate limit, and a rare HTTP 429 is retried after
the wait the server asks for instead of failing the page.

The macOS bundle verification now greps text files only and matches the real
git ref, so the local branch name inside third-party binaries no longer fails
the job.
… check [skip release]

All crafty.gg requests pass one shared gate - at most 120 per rolling minute
with 500 ms between starts - so browsing and previewing skins online never
reaches the API's 150/minute rate limit, and a rare HTTP 429 is retried after
the wait the server asks for instead of failing the page.

The macOS bundle verification now greps text files only and matches the real
git ref, so the local branch name inside third-party binaries no longer fails
the job.
…ip release]

The main window title is PollyMC-Continued <version> with no branch/channel
suffix, and no application display name is registered with Qt anymore, so the
other windows (Quick Setup, offline player name dialog, every other dialog)
keep just their own title instead of getting the launcher name and version
appended after it.

Linux, Windows and .deb CI packages now hide git metadata like the macOS and
Arch packages already did, so their version string carries no commit hash.
corecommit and others added 29 commits September 28, 2026 07:37
Searching in the View skins online browser now asks crafty.gg's own text
search (player names, tags and styles - the same search the crafty.gg site
uses) and merges its hits with the matched player's own skins into one
scrollable list, instead of jumping to whatever single player happened to
match the query. The text matches lead the first page and the player's own
skins paginate behind it, so a name search still lists every skin of that
player while a tag search shows what the catalog has for that word.

Rows show a plain mannequin while their texture downloads instead of an
empty square, and the player name is filled in together with the texture,
so results look like a normal list right away. The search field now says it
matches players, tags and styles.

The crafty request gate now reserves the slot it has to wait for, so a burst
of downloads (one page of textures, for example) goes out one every 500 ms
instead of all at once after the same delay.
Homebrew stopped shipping bottles for macOS 14, so the job compiled
ccache -> asciidoctor -> ruby -> rust -> llvm@22 from source and died on an
llvm@22 patch checksum. macOS 15 has bottles for every formula the job
installs, so the install step pours prebuilt bottles again instead of
building LLVM for an hour.
The Help slot showed a "Will fix later." message box because
Launcher_HELP_URL is empty in this fork. It now falls back to
Launcher_DISCORD_URL (the same invite as the Discord menu entry), so the
button always opens the server in the browser.
…release]

Split the main toolbar into separator-delimited groups (Add instance |
Folders, Settings, Performance presets | More | Accounts), rename the
Help toolbar button to More, and keep Check for update inside its
dropdown with its icon instead of showing it as a separate button.
Order the Help/More menu by what each entry does (update, logs and bug
report first, then wiki/news/bots, community links, maintenance, About
last) - the toolbar dropdown copies that order, so both change together.
Enable QMenu tooltips on the three menus built in code (More, Accounts,
Export) since toolTipsVisible defaults to off, and add tooltips to the
11 actions that had none.
…ase]

Ran lupdate over launcher/ to pull in the57 strings missing from the
catalog (skin browser and skin manager, the More menu, the new toolbar
tooltips) and translated all of them for Russian, Ukrainian, German and
Afrikaans, matching each file's existing terminology. lrelease compiles
all four with 2416/2416 finished and none left unfinished.
…[skip release]

French gets the same57 new strings as ru/uk/de/af (skin browser, More
menu, toolbar tooltips), bringing those five languages to 2416/2416
finished. Also repairs five translations that lost a placeholder: ru and
uk printed a literal 1%2%/$2, and fr had "ce 1%" plus "a ete" written as
"à été" in the three shortcut messages.
Placeholder audit across every catalog found 210 finished translations
that could not render their message: reversed (1%), spaced (% 1), dropped
or duplicated tokens, plus strays where the source has no placeholder at
all. Fixed all of them across 47 languages, keeping each file's own
wording. Also wrapped the two plural messages in fi and lo with
<numerusform>, since bare text in a numerus message makes lrelease fail
and neither language compiled at all. All 90 finished files now build a
.qm with zero placeholder mismatches.
All 1876 unfinished entries now carry Hindi text (the skin browser, the
More menu and the new toolbar tooltips among them), the two empty plural
forms are translated, and the log-length message's %l typo is repaired in
both places. lrelease builds 2416/2416 finished, none left unfinished.
All 2043 unfinished entries now carry Bangla text, matching the file's
existing terminology, and the two messages that used the Bengali digit
for the commit and build-date placeholders are repaired. lrelease builds
2416/2416 finished with none left unfinished.
Added a new online skin browser, improved skin application process, and completed Hindi and Bangla translations. Enhanced startup speed, instance list sorting, and caching mechanisms, while fixing various bugs related to instance detection, translations, and Discord Rich Presence.
Removed pagination buttons and added a new bottom bar layout with navigation and action buttons.
Removed unnecessary comments and reorganized the layout to include a button box for closing the dialog.
Disable site button when no skin is selected.
Removed the on_siteBtn_clicked method from SkinBrowserDialog.
@corecommit
corecommit merged commit ee71267 into main Sep 29, 2026
8 checks passed
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.

2 participants