Skip to content

Commit 0b6a8f1

Browse files
author
FolderView Plus Test
committed
Fix Docker sort mode runtime ordering
1 parent baecdd5 commit 0b6a8f1

6 files changed

Lines changed: 57 additions & 4 deletions

File tree

archive/folderview.plus-2026.04.05.02.txz.sha256

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
322afbafeed8b2b73a4228e38b8e04055b314f41891808f52818b9c1fcf556a0 folderview.plus-2026.04.06.13.txz

folderview.plus.plg

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@
66
<!ENTITY launch "Settings/FolderViewPlus">
77
<!ENTITY plugdir "/usr/local/emhttp/plugins/&name;">
88
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/dev/folderview.plus.plg">
9-
<!ENTITY version "2026.04.06.12">
10-
<!ENTITY md5 "5d5f33096530575c63eec74413e79a65">
9+
<!ENTITY version "2026.04.06.13">
10+
<!ENTITY md5 "7e2d4646de359a5ed8e089fa77d2bc09">
1111
]>
1212

1313
<PLUGIN name="&name;" author="&author;" version="&version;" launch="&launch;" pluginURL="&pluginURL;" icon="folder-icon.png" support="https://forums.unraid.net/topic/197631-plugin-folderview-plus/" min="7.0.0">
1414
<CHANGES>
1515

16+
###2026.04.06.13
17+
- Fix: Docker runtime rows, folder state, and container interactions.
18+
19+
1620
###2026.04.06.12
1721
- UX: Settings workspace layout, section flows, and table behavior.
1822
- Fix: Diagnostics surfaces, issue reports, and support bundle coverage.

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/docker.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1897,11 +1897,31 @@ const reorderFolderSlotsInBaseOrder = (baseOrder, folders, prefs) => {
18971897
? baseOrder.map((item) => String(item || ''))
18981898
: Object.values(baseOrder || {}).map((item) => String(item || ''));
18991899
const folderMap = folders && typeof folders === 'object' ? folders : {};
1900+
const sortMode = ['manual', 'alpha'].includes(String(prefs?.sortMode || '').trim().toLowerCase())
1901+
? String(prefs.sortMode).trim().toLowerCase()
1902+
: 'created';
1903+
const hasPinnedFolders = Array.isArray(prefs?.pinnedFolderIds) && prefs.pinnedFolderIds.length > 0;
19001904
const desiredFolderTokens = Object.keys(getPrefsOrderedFolderMap(folderMap, prefs))
19011905
.map((id) => `folder-${id}`);
19021906
if (!desiredFolderTokens.length) {
19031907
return order;
19041908
}
1909+
if (sortMode !== 'created' || hasPinnedFolders) {
1910+
let desiredIndex = 0;
1911+
return order.map((entry) => {
1912+
if (!folderRegex.test(entry)) {
1913+
return entry;
1914+
}
1915+
while (desiredIndex < desiredFolderTokens.length) {
1916+
const candidate = desiredFolderTokens[desiredIndex++];
1917+
const candidateId = candidate.replace(folderRegex, '');
1918+
if (Object.prototype.hasOwnProperty.call(folderMap, candidateId)) {
1919+
return candidate;
1920+
}
1921+
}
1922+
return entry;
1923+
});
1924+
}
19051925
const liveFolderTokens = new Set();
19061926
order.forEach((entry) => {
19071927
if (!folderRegex.test(entry)) {

tests/docker-runtime-order-regression.test.mjs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,36 @@ test('docker runtime preserves live folder placeholder order from host order on
4848
assert.deepEqual(nextOrder, ['folder-a', 'folder-c', 'folder-b']);
4949
});
5050

51-
test('docker runtime only backfills missing folder placeholders instead of reordering valid ones', () => {
51+
test('docker runtime reapplies saved alpha folder order even when host placeholders are stale', () => {
52+
assert.ok(reorderFolderSlotsMatch, 'reorderFolderSlotsInBaseOrder definition should exist');
53+
const reorderFolderSlotsInBaseOrder = new Function(
54+
'baseOrder',
55+
'folders',
56+
'prefs',
57+
'folderRegex',
58+
'getPrefsOrderedFolderMap',
59+
`${reorderFolderSlotsMatch[1]}`
60+
);
61+
62+
const folderRegex = /^folder-/;
63+
const folders = {
64+
a: { name: '07' },
65+
b: { name: '08' },
66+
c: { name: '09' }
67+
};
68+
const getPrefsOrderedFolderMap = () => ({
69+
a: folders.a,
70+
b: folders.b,
71+
c: folders.c
72+
});
73+
74+
const baseOrder = ['folder-c', 'folder-a', 'folder-b'];
75+
const nextOrder = reorderFolderSlotsInBaseOrder(baseOrder, folders, { sortMode: 'alpha' }, folderRegex, getPrefsOrderedFolderMap);
76+
77+
assert.deepEqual(nextOrder, ['folder-a', 'folder-b', 'folder-c']);
78+
});
79+
80+
test('docker runtime only backfills missing folder placeholders when sort mode remains created', () => {
5281
assert.ok(reorderFolderSlotsMatch, 'reorderFolderSlotsInBaseOrder definition should exist');
5382
const reorderFolderSlotsInBaseOrder = new Function(
5483
'baseOrder',

0 commit comments

Comments
 (0)