Skip to content

Commit 16f577c

Browse files
2.1
1 parent 93f8b7f commit 16f577c

File tree

9 files changed

+72
-88
lines changed

9 files changed

+72
-88
lines changed

MCModVersionUpdater/CHANGELOG.md

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,10 @@ All notable changes to this project are documented here.
88
<summary><strong>Version 2.x</strong></summary>
99

1010
<details open>
11-
<summary><strong>Version 2.0</strong></summary>
12-
13-
### Added
14-
- New scan mode: `Attempt to update mod (Fabric only)`.
15-
- Main panel info bubbles for `Scan mode` and `Target Minecraft version`.
16-
- Filter-aware `Download All` action for direct matched links.
17-
- Source count indicator in the panel and settings.
18-
19-
### Changed
20-
- Large UI cleanup across panel and settings.
21-
- Main panel is draggable and auto closes after successful scans.
22-
- Scan mode flow simplified into clearer mode names.
23-
- Main scan upload was condensed to one `Upload ZIP/Folder` button with ZIP and Folder picker.
24-
- Compare mode upload sections were cleaned up and organized side by side.
25-
- Theme behavior and settings layout were refined for consistency.
26-
- Additional Sources section now matches the stacked layout used in other settings sections.
11+
<summary><strong>Version 2.1</strong></summary>
2712

2813
### Fixed
29-
- Compare mode identity filtering now keeps valid rows instead of over-filtering.
30-
- Fabric update mode now resolves the minimum available Fabric Loader version correctly for the target game version.
31-
- Close button size and placement no longer cut into long panel titles.
32-
- Corrected `1.26` references to `26.1`.
33-
- Export output remains `.meta4` and respects active filters.
14+
- Scan failures caused by `Resource::kQuotaBytes quota exceeded` now fail safely, and Settings now points you to `Clear API cache` when that error appears.
3415

3516
</details>
3617

MCModVersionUpdater/README.md

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,45 @@
11
# Mod Update Checker
22

3-
Version `2.0`
3+
Version 2.1
44

5-
Mod Update Checker is a Chromium-based extension that scans Minecraft modpacks and compares mods against a selected target Minecraft version.
5+
A Chromium-based extension that scans Minecraft modpacks and helps map mods to a selected target Minecraft version.
66

7-
It is built to speed up upgrade, downgrade, comparison, duplicate check, and targeted update workflows.
8-
9-
<img width="1123" height="902" alt="image" src="https://github.com/user-attachments/assets/b05be34e-4f26-4db7-bdb4-92eac887d46f" />
10-
<img width="354" height="373" alt="image" src="https://github.com/user-attachments/assets/11b06a93-e9c4-4961-a87c-b5b50cd2c1a3" />
7+
Built to speed up upgrade, downgrade, compare, duplicate, and targeted update workflows.
118

129
---
1310

1411
## Overview
1512

16-
Mod Update Checker analyzes ZIP files and folders, then compares each mod against supported sources.
13+
Mod Update Checker analyzes ZIPs and folders, then compares each mod against supported sources.
1714

18-
The results table includes:
15+
The results table shows:
1916

2017
- Mod name
2118
- Current version
2219
- Selected version
2320
- Match status
24-
- Upgrade or downgrade state by mode
21+
- Upgradable or Downgradable state by mode
2522
- Last updated date
2623
- Direct and site links
2724

2825
---
2926

3027
## Core Features
3128

32-
- Single upload flow with ZIP and folder support
29+
- Single upload button with ZIP and Folder picker
3330
- Header filters with multi-token `;` matching
34-
- Last Updated filtering with newest and oldest sorting
35-
- Match links split into `Direct - Source` for downloads and `Site - Source` for project pages
31+
- Last Updated filter plus newest and oldest sort
32+
- Match links split into:
33+
- `Direct - Source` for downloads and export
34+
- `Site - Source` for project pages
3635
- Export to `.meta4` for JDownloader2
37-
- `Download All` support for filtered direct links
38-
- Theme support for Light, Dark, Github (Dark), and SNES
39-
- Draggable in-page panel that closes after successful scans
36+
- `Download All` for filtered direct links
37+
- Theme support:
38+
- Light
39+
- Dark
40+
- Github (Dark)
41+
- SNES
42+
- Draggable in-page panel that auto closes after successful scans
4043

4144
---
4245

@@ -57,24 +60,25 @@ This mode takes one Fabric JAR and:
5760

5861
- Opens the archive
5962
- Locates `fabric.mod.json` or `fabric.mod.jsonm`
60-
- Updates the `minecraft` dependency to the selected target version
61-
- Updates the Fabric Loader dependency using the minimum available loader for the target version
62-
- Rebuilds the JAR and prompts for an output filename
63+
- Updates `minecraft` dependency to the selected target version
64+
- Updates Fabric Loader dependency using the minimum available loader for the target version
65+
- Rebuilds the JAR and prompts for output filename
6366

6467
---
6568

6669
## Settings
6770

6871
- Target Minecraft version database
69-
- Default search mode
72+
- Search mode default
7073
- Reverse search toggle
7174
- Include beta and alpha toggles
7275
- Fuzzy replacement search toggle
7376
- Theme and table density
7477
- Additional Sources list
7578
- Prefer Additional Sources toggle
76-
- CurseForge API key support
77-
- Optional Modrinth API key support
79+
- API keys:
80+
- CurseForge API key
81+
- Modrinth API key optional
7882

7983
---
8084

@@ -90,8 +94,8 @@ If `Prefer Additional Sources over Modrinth/CurseForge` is enabled, those source
9094

9195
1. Download or clone this repository.
9296
2. Open `chrome://extensions`.
93-
3. Enable **Developer Mode**.
94-
4. Click **Load unpacked**.
97+
3. Enable Developer Mode.
98+
4. Click `Load unpacked`.
9599
5. Select the extension folder.
96100

97101
---
@@ -100,17 +104,17 @@ If `Prefer Additional Sources over Modrinth/CurseForge` is enabled, those source
100104

101105
1. Open Modrinth or CurseForge.
102106
2. Open the panel.
103-
3. Select a scan mode.
104-
4. Select a target Minecraft version.
105-
5. Upload a ZIP or folder.
106-
6. Review and filter the results.
107+
3. Select scan mode.
108+
4. Select target Minecraft version.
109+
5. Upload ZIP or Folder.
110+
6. Review and filter results.
107111
7. Export `.meta4` or use `Download All`.
108112

109113
---
110114

111115
## Notes
112116

113-
- This tool assists with discovery and matching. It does not guarantee full pack compatibility.
117+
- This tool assists discovery and matching. It does not guarantee full pack compatibility.
114118
- Some mods may not have files for the selected target version.
115119
- If CurseForge API is not configured, CurseForge rows can show `ADD CURSEFORGE API`.
116120
- Version `26.1` is included in the default version database.
@@ -120,15 +124,15 @@ If `Prefer Additional Sources over Modrinth/CurseForge` is enabled, those source
120124

121125
## Release Status
122126

123-
Current stable release: `2.0`
127+
Current stable release: `2.1`
124128

125129
For full release history, see [CHANGELOG.md](./CHANGELOG.md).
126130

127131
---
128132

129133
## License
130134

131-
See [LICENSE](./LICENSE).
135+
See `LICENSE`.
132136

133137
---
134138

MCModVersionUpdater/background.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const DEFAULT_OPTIONS = {
1212
preferAdditionalSources: false,
1313
additionalSourceUrls: [],
1414
minecraftVersionDatabase: [
15+
"26.1.1",
1516
"26.1",
1617
"1.21.11","1.21.10","1.21.9","1.21.8","1.21.7","1.21.6","1.21.5","1.21.4","1.21.3","1.21.2","1.21.1","1.21",
1718
"1.20.6","1.20.5","1.20.4","1.20.3","1.20.2","1.20.1","1.20",
@@ -31,6 +32,7 @@ const DEFAULT_OPTIONS = {
3132

3233
async function getLocalStorage(keys) { return await chrome.storage.local.get(keys); }
3334
async function setLocalStorage(payload) { return await chrome.storage.local.set(payload); }
35+
async function removeLocalStorage(keys) { return await chrome.storage.local.remove(keys); }
3436

3537
function normalizeLegacyVersion(version) {
3638
const clean = String(version || "").trim();
@@ -289,7 +291,29 @@ async function cachedFetchJson(url, cacheKey, headers = {}) {
289291
const response = await fetch(url, { headers });
290292
if (!response.ok) throw new Error(`Request failed with ${response.status}`);
291293
const data = await response.json();
292-
await setLocalStorage({ [key]: { ts: now, data } });
294+
try {
295+
await setLocalStorage({ [key]: { ts: now, data } });
296+
} catch {
297+
try {
298+
const storageItems = await getLocalStorage(null);
299+
const cacheEntries = Object.entries(storageItems || {})
300+
.filter(([entryKey]) => String(entryKey || "").startsWith("cache_"))
301+
.map(([entryKey, entryValue]) => ({
302+
key: entryKey,
303+
ts: Number(entryValue?.ts || 0)
304+
}))
305+
.sort((a, b) => a.ts - b.ts);
306+
307+
const keysToRemove = cacheEntries.slice(0, Math.max(10, Math.ceil(cacheEntries.length / 4))).map((entry) => entry.key);
308+
if (keysToRemove.length) {
309+
await removeLocalStorage(keysToRemove);
310+
}
311+
312+
await setLocalStorage({ [key]: { ts: now, data } });
313+
} catch {
314+
// Cache is best effort only. If storage is full, continue without writing.
315+
}
316+
}
293317
return data;
294318
}
295319

MCModVersionUpdater/content.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
preferAdditionalSources: false,
8282
additionalSourceUrls: [],
8383
minecraftVersionDatabase: [
84+
"26.1.1",
8485
"26.1",
8586
"1.21.11","1.21.10","1.21.9","1.21.8","1.21.7","1.21.6","1.21.5","1.21.4","1.21.3","1.21.2","1.21.1","1.21",
8687
"1.20.6","1.20.5","1.20.4","1.20.3","1.20.2","1.20.1","1.20",
@@ -510,15 +511,6 @@
510511
targetVersion: normalizeLegacyVersion(items.targetVersion),
511512
minecraftVersionDatabase: sanitizeMinecraftVersionDatabase(items.minecraftVersionDatabase)
512513
};
513-
const changedTarget = normalized.targetVersion !== String(items.targetVersion || "");
514-
const changedDb = JSON.stringify(normalized.minecraftVersionDatabase) !== JSON.stringify(items.minecraftVersionDatabase || DEFAULTS.minecraftVersionDatabase);
515-
if (changedTarget || changedDb) {
516-
chrome.storage.sync.set({
517-
targetVersion: normalized.targetVersion,
518-
minecraftVersionDatabase: normalized.minecraftVersionDatabase
519-
}, () => resolve(normalized));
520-
return;
521-
}
522514
resolve(normalized);
523515
});
524516
});
@@ -1021,7 +1013,7 @@
10211013
const lines = [
10221014
'<?xml version="1.0" encoding="utf-8"?>',
10231015
'<metalink xmlns="urn:ietf:params:xml:ns:metalink" version="4.0">',
1024-
" <generator>Mod Update Checker v2.0</generator>",
1016+
" <generator>Mod Update Checker v2.1</generator>",
10251017
` <published>${new Date().toISOString()}</published>`
10261018
];
10271019
for (const entry of entries) {

MCModVersionUpdater/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"manifest_version": 3,
33
"name": "Mod Update Checker",
4-
"version": "2.0",
4+
"version": "2.1",
55
"description": "Scan CurseForge or Modrinth modpack ZIPs, target a Minecraft version for conversion, compare mod availability, and open saved fallback searches.",
66
"permissions": ["storage"],
77
"host_permissions": [

MCModVersionUpdater/options.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,9 @@ <h2>API and Cache</h2>
239239

240240
<button class="btn" id="saveBtn">Save settings</button>
241241
<button class="btn" id="clearCacheBtn">Clear API cache</button>
242+
<div class="muted">
243+
If you see `Resource::kQuotaBytes quota exceeded`, press `Clear API cache`.
244+
</div>
242245
<div id="status"></div>
243246
</div>
244247

MCModVersionUpdater/options.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const defaults = {
1717
modrinthApiKey: "",
1818
preferAdditionalSources: false,
1919
minecraftVersionDatabase: [
20+
"26.1.1",
2021
"26.1",
2122
"1.21.11","1.21.10","1.21.9","1.21.8","1.21.7","1.21.6","1.21.5","1.21.4","1.21.3","1.21.2","1.21.1","1.21",
2223
"1.20.6","1.20.5","1.20.4","1.20.3","1.20.2","1.20.1","1.20",

MCModVersionUpdater/popup.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</style>
1212
</head>
1313
<body>
14-
<h3>Mod Update Checker v2.0</h3>
14+
<h3>Mod Update Checker v2.1</h3>
1515
<p>Open Modrinth or CurseForge and use the page panel to pick a scan mode, set the target version, and scan a ZIP or folder.</p>
1616
<p><a href="options.html" target="_blank">Open settings</a></p>
1717
<p><a href="roadmap.html" target="_blank">Open roadmap</a></p>

MCModVersionUpdater/roadmap.html

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,12 @@
1818
</head>
1919
<body>
2020
<h1>Roadmap</h1>
21-
<div class="stamp">Last updated: March 26, 2026 (v2.0)</div>
21+
<div class="stamp">Last updated: April 04, 2026 (v2.1)</div>
2222

2323
<div class="card">
24-
<h2>New in v2.0</h2>
25-
<ul class="done">
26-
<li>Major UI cleanup across panel and settings.</li>
27-
<li>Panel is draggable and auto closes after successful scan results open.</li>
28-
<li>Main upload flow is now one button with ZIP and Folder picker.</li>
29-
<li>Scan mode flow was simplified into clear mode names.</li>
30-
<li>Added Fabric mod update mode for direct JAR metadata update.</li>
31-
<li>Added info bubbles for scan mode and target version.</li>
32-
<li>Added source count indicator in panel and settings.</li>
33-
<li>Added filter-aware Download All alongside `.meta4` export.</li>
34-
<li>Compare mode upload layout was cleaned up and organized side by side.</li>
35-
</ul>
36-
</div>
37-
38-
<div class="card">
39-
<h2>Fixed in v2.0</h2>
24+
<h2>Fixed in v2.1</h2>
4025
<ul class="fixed">
41-
<li>Compare mode now keeps valid rows and avoids over-filtering matched identities.</li>
42-
<li>Compare mode now checks matched target file data before showing a mod as upgradable or downgradable.</li>
43-
<li>Compare old and new matching now uses project keys and target file stems for better accuracy when local mod versions do not include game version text.</li>
44-
<li>Fabric update mode now resolves the correct minimum available Fabric Loader version for the selected target game version.</li>
45-
<li>Fabric update mode now edits only minecraft and fabricloader dependencies.</li>
46-
<li>Close button sizing and corner placement no longer overlap long panel titles.</li>
47-
<li>Version label cleanup completed for `26.1` references.</li>
26+
<li>Scan failures caused by <code>Resource::kQuotaBytes quota exceeded</code> now fail safely, and Settings now tells you to press <code>Clear API cache</code> when that error appears.</li>
4827
</ul>
4928
</div>
5029

0 commit comments

Comments
 (0)