Skip to content

Commit 485fb74

Browse files
committed
fix: Make Caching#orderFolder behave like BrowserTree#orderFolder
to avoid haywire when using Caching in CachingTreeWrapper as source for sync cache (unsyncable bookmarks would cause havoc) fixes #2056 Signed-off-by: Marcel Klehr <[email protected]>
1 parent fdeff70 commit 485fb74

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

src/lib/adapters/Caching.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import difference from 'lodash/difference'
66

77
import Ordering from '../interfaces/Ordering'
88
import {
9-
MissingItemOrderError,
109
UnknownBookmarkUpdateError,
1110
UnknownCreateTargetError, UnknownFolderItemOrderError, UnknownFolderOrderError, UnknownFolderUpdateError,
1211
UnknownMoveOriginError,
@@ -166,23 +165,22 @@ export default class CachingAdapter implements Adapter, BulkImportResource<TItem
166165
throw new UnknownFolderItemOrderError(id + ':' + JSON.stringify(item))
167166
}
168167
})
169-
folder.children.forEach(child => {
170-
const item = order.find((item) => item.type === child.type && String(item.id) === String(child.id))
171-
if (!item) {
172-
throw new MissingItemOrderError(
173-
id + ':' + child.inspect()
174-
)
175-
}
176-
})
177-
if (order.length !== folder.children.length) {
178-
const diff = difference(folder.children.map(i => i.id), order.map(i => i.id))
179-
throw new MissingItemOrderError(id + ':' + JSON.stringify(diff))
180-
}
181168
const newChildren = []
182169
order.forEach(item => {
183170
const child = folder.findItem(item.type, item.id)
184171
newChildren.push(child)
185172
})
173+
const diff = difference(folder.children.map(i => i.id), order.map(i => i.id))
174+
if (diff.length) {
175+
Logger.log('Folder ordering is missing some of the folders children (moving on): ' + id + ':' + JSON.stringify(diff))
176+
// We don't just append at the end but put them back where they were
177+
// In order to be in line with BrowserTree
178+
diff.forEach(item => {
179+
const child = folder.findItem(item.type, item.id)
180+
const index = folder.children.indexOf(child)
181+
newChildren.slice(0, index - 1).concat([child],newChildren.slice(index - 1))
182+
})
183+
}
186184
folder.children = newChildren
187185
}
188186

0 commit comments

Comments
 (0)