Skip to content

Commit a96e390

Browse files
committed
Catch any errors that occur during CopyModList. Fence output text in markdown codeblock
1 parent 55af0f2 commit a96e390

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

frontend/src/lib/components/left-bar/Settings.svelte

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
149149
async function copyModList() {
150150
// Generate mod entries
151-
const modList = await Promise.all(Object.keys($manifestMods).map(async (modReference) => {
151+
const modList = (await Promise.all(Object.keys($manifestMods).map(async (modReference) => {
152152
let modName = modReference;
153153
if($offline) {
154154
modName = (await OfflineGetMod(modReference)).name;
@@ -159,23 +159,17 @@
159159
}
160160
}
161161
162-
// Only return valid info if the mod is enabled
163-
if(!$lockfileMods[modReference]) {
164-
//How to enforce error handling?
165-
$error = `Tried to copy a disabled mod`;
166-
return {
167-
friendlyName: '',
168-
modReference: '',
169-
version: '',
170-
};
171-
} else {
162+
// Only return info if the mod is enabled
163+
if($lockfileMods[modReference]) {
172164
return {
173165
friendlyName: modName,
174166
modReference,
175167
version: $lockfileMods[modReference].version,
176168
};
169+
} else {
170+
return undefined;
177171
}
178-
}));
172+
}))).filter((mod) => mod !== undefined);
179173
// Sort by Friendly Name
180174
modList.sort((a, b) => {
181175
const x = a.friendlyName.toLowerCase();
@@ -192,14 +186,20 @@
192186
mod.modReference = mod.modReference.padEnd(maxModReferenceLen, ' ');
193187
modListString += `${mod.friendlyName} ${mod.modReference} ${mod.version}\n`;
194188
});
195-
navigator.clipboard.writeText(modListString.trim());
189+
const markdownCodeblockFence = '```';
190+
navigator.clipboard.writeText(`${markdownCodeblockFence}\n${modListString.trim()}\n${markdownCodeblockFence}`);
196191
}
197192
198193
function localeName(locale: string) {
199194
if (!locale) return 'N/A';
200195
return new Intl.DisplayNames([locale], { type: 'language' }).of(locale);
201196
}
202197
198+
// appease svelte "stores must be declared at the top of the file"
199+
function displayError(err: unknown) {
200+
$error = err;
201+
}
202+
203203
$: if ($queueAutoStart && $queuedMods.length === 0 && $hasPendingProfileChange) {
204204
$hasPendingProfileChange = false;
205205
addQueuedModAction('__apply__', 'apply', Apply).catch((e) => error.set(e));
@@ -348,7 +348,12 @@
348348
</li>
349349
<hr class="divider" />
350350
<li>
351-
<button on:click={() => copyModList()}>
351+
<button
352+
on:click={() => {
353+
copyModList().catch((error) => {
354+
displayError(`failed to copy mod list: ${error}`);
355+
});
356+
}}>
352357
<span class="h-5 w-5"/>
353358
<span class="flex-auto">
354359
<T defaultValue="Copy mod list" keyName="settings.copy-mod-list"/>

0 commit comments

Comments
 (0)