Skip to content

Commit ae29124

Browse files
committed
Move Skip Data Folder to Experimental, editable backup items for Custom apps
- Moved 'Skip Data Folder' toggle from Config dialog to Settings > Experimental - Custom apps now show all preset backup items as checkable options - Users can check/uncheck backup items when editing Custom apps - Added helper text when no items selected (only addon folders backed up) - Removed skip_data_folder from per-app config (now global setting)
1 parent 9dd6787 commit ae29124

File tree

3 files changed

+43
-39
lines changed

3 files changed

+43
-39
lines changed

frontend/src/lib/ConfigTab.svelte

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@
2626
data_path: '',
2727
app_type: 'vscode', // 'vscode' or 'custom'
2828
backup_items: [],
29-
addon_paths: [],
30-
skip_data_folder: false // Skip data folder in backup/reset
29+
addon_paths: []
3130
};
3231
3332
// VSCode preset backup items
@@ -193,11 +192,9 @@
193192
if (type === 'vscode') {
194193
// Reset to preset items
195194
newApp.backup_items = vscodePresetItems.map(item => ({ ...item }));
196-
newApp.skip_data_folder = false; // VSCode preset always manages data folder
197195
} else {
198-
// Custom: clear all items, nothing selected by default
199-
newApp.backup_items = [];
200-
// Keep skip_data_folder as is (user can toggle)
196+
// Custom: show all preset items as unchecked options
197+
newApp.backup_items = vscodePresetItems.map(item => ({ ...item, enabled: false }));
201198
}
202199
}
203200
@@ -219,7 +216,6 @@
219216
newApp.exe_path = fullConfig.paths?.exe_paths?.[0] || '';
220217
newApp.data_path = fullConfig.paths?.data_paths?.[0] || '';
221218
newApp.addon_paths = fullConfig.addon_backup_paths || [];
222-
newApp.skip_data_folder = fullConfig.skip_data_folder || false;
223219
224220
// Determine app type and populate backup items
225221
const existingItems = fullConfig.backup_items || [];
@@ -250,12 +246,29 @@
250246
});
251247
} else {
252248
newApp.app_type = 'custom';
253-
newApp.backup_items = existingItems.map(item => ({
254-
path: item.path,
255-
description: item.description || '',
256-
optional: item.optional ?? true,
257-
enabled: true
249+
// Start with all preset items disabled
250+
const allItems = vscodePresetItems.map(preset => ({
251+
...preset,
252+
enabled: false
258253
}));
254+
255+
// Enable items that exist in the saved config
256+
existingItems.forEach(item => {
257+
const presetIndex = allItems.findIndex(p => p.path === item.path);
258+
if (presetIndex >= 0) {
259+
allItems[presetIndex].enabled = true;
260+
} else {
261+
// Custom item not in preset, add it
262+
allItems.push({
263+
path: item.path,
264+
description: item.description || 'Custom item',
265+
optional: item.optional ?? true,
266+
enabled: true
267+
});
268+
}
269+
});
270+
271+
newApp.backup_items = allItems;
259272
}
260273
261274
showAddDialog = true;
@@ -326,8 +339,7 @@
326339
reset_folder: newApp.data_path
327340
},
328341
backup_items: enabledItems,
329-
addon_backup_paths: newApp.addon_paths,
330-
skip_data_folder: newApp.skip_data_folder
342+
addon_backup_paths: newApp.addon_paths
331343
};
332344
333345
try {
@@ -349,8 +361,7 @@
349361
data_path: '',
350362
app_type: 'vscode',
351363
backup_items: vscodePresetItems.map(item => ({ ...item })),
352-
addon_paths: [],
353-
skip_data_folder: false
364+
addon_paths: []
354365
};
355366
customItemPath = '';
356367
customItemDesc = '';
@@ -671,29 +682,6 @@
671682
+ Add Folder
672683
</button>
673684
</div>
674-
675-
<!-- Skip Data Folder Toggle (Custom only) -->
676-
{#if newApp.app_type === 'custom'}
677-
<div class="p-3 rounded-lg bg-[var(--bg-elevated)] border border-[var(--border)]">
678-
<div class="flex items-center justify-between">
679-
<div>
680-
<label class="text-sm font-medium text-[var(--text-primary)]">Skip Data Folder</label>
681-
<p class="text-xs text-[var(--text-muted)] mt-0.5">Only backup/reset Additional Folders</p>
682-
</div>
683-
<button
684-
class="w-10 h-5 rounded-full transition-all relative
685-
{newApp.skip_data_folder ? 'bg-[var(--primary)]' : 'bg-[var(--bg-hover)] border border-[var(--border)]'}"
686-
on:click={() => newApp.skip_data_folder = !newApp.skip_data_folder}
687-
>
688-
<div class="absolute top-0.5 w-4 h-4 rounded-full bg-white shadow transition-all
689-
{newApp.skip_data_folder ? 'left-5' : 'left-0.5'}"></div>
690-
</button>
691-
</div>
692-
{#if newApp.skip_data_folder}
693-
<p class="text-xs text-[var(--warning)] mt-2">⚠️ Data folder will NOT be backed up or reset</p>
694-
{/if}
695-
</div>
696-
{/if}
697685
</div>
698686
699687
<!-- Right Column: Backup Items -->
@@ -739,6 +727,13 @@
739727
{/each}
740728
</div>
741729
730+
<!-- Helper text for Custom apps with no items selected -->
731+
{#if newApp.app_type === 'custom' && !newApp.backup_items.some(item => item.enabled)}
732+
<p class="text-xs text-[var(--text-muted)] text-center py-2 mt-2 bg-[var(--bg-hover)] rounded">
733+
No items selected = only Additional Folders will be backed up
734+
</p>
735+
{/if}
736+
742737
<!-- Add Custom Item -->
743738
<div class="flex gap-2 mt-3 pt-3 border-t border-[var(--border)]">
744739
<input

frontend/src/lib/SettingsTab.svelte

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,13 @@
288288
checked={$settings.debugMode}
289289
on:change={() => toggle('debugMode')}
290290
/>
291+
292+
<SettingToggle
293+
label="Skip Data Folder (Global)"
294+
description="Only backup/restore Additional Folders, skip main data folder"
295+
checked={$settings.skipDataFolder}
296+
on:change={() => toggle('skipDataFolder')}
297+
/>
291298
</div>
292299
{/if}
293300
</div>

frontend/src/lib/stores/settings.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const defaultSettings = {
3333
showRestoreAddonOnly: false,
3434
debugMode: false,
3535
experimentalRestoreAccountOnly: false, // Quick account switch (restore only state.vscdb)
36+
skipDataFolder: false, // Only backup/restore Additional Folders, skip main data folder
3637
};
3738

3839
function createSettingsStore() {
@@ -112,6 +113,7 @@ function createSettingsStore() {
112113
showRestoreAddonOnly: currentSettings.showRestoreAddonOnly,
113114
debugMode: currentSettings.debugMode,
114115
experimentalRestoreAccountOnly: currentSettings.experimentalRestoreAccountOnly,
116+
skipDataFolder: currentSettings.skipDataFolder,
115117
}
116118
};
117119
return JSON.stringify(exportData, null, 2);

0 commit comments

Comments
 (0)