Skip to content

Commit 2b4ac21

Browse files
committed
sketches sorting
1 parent b961a5a commit 2b4ac21

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

arduino-ide-extension/src/browser/widgets/cloud-sketchbook/cloud-sketchbook-tree.ts

+28
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { firstToUpperCase } from '../../../common/utils';
3232
import { ArduinoPreferences } from '../../arduino-preferences';
3333
import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-service-client-impl';
3434
import { FileStat } from '@theia/filesystem/lib/common/files';
35+
import { WorkspaceNode } from '@theia/navigator/lib/browser/navigator-tree';
3536

3637
const MESSAGE_TIMEOUT = 5 * 1000;
3738
const deepmerge = require('deepmerge').default;
@@ -265,6 +266,33 @@ export class CloudSketchbookTree extends SketchbookTree {
265266
}
266267
}
267268

269+
async resolveChildren(parent: CompositeTreeNode): Promise<TreeNode[]> {
270+
return (await super.resolveChildren(parent)).sort((a, b) => {
271+
if (
272+
WorkspaceNode.is(parent) &&
273+
FileStatNode.is(a) &&
274+
FileStatNode.is(b)
275+
) {
276+
const syncNodeA =
277+
CloudSketchbookTree.CloudSketchTreeNode.is(a) &&
278+
CloudSketchbookTree.CloudSketchTreeNode.isSynced(a);
279+
const syncNodeB =
280+
CloudSketchbookTree.CloudSketchTreeNode.is(b) &&
281+
CloudSketchbookTree.CloudSketchTreeNode.isSynced(b);
282+
283+
const syncComparison = Number(syncNodeB) - Number(syncNodeA);
284+
285+
// same sync status, compare on modified time
286+
if (syncComparison === 0) {
287+
return (a.fileStat.mtime || 0) - (b.fileStat.mtime || 0);
288+
}
289+
return syncComparison;
290+
}
291+
292+
return 0;
293+
});
294+
}
295+
268296
/**
269297
* Retrieve fileStats for the given node, merging the local and remote childrens
270298
* Local children take prevedence over remote ones

0 commit comments

Comments
 (0)