-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopen_recent.js
87 lines (75 loc) · 1.81 KB
/
open_recent.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const path = require('path');
const sqlite3 = require('sqlite3').verbose();
const editors = {
vscode: {
async getOpenedRecentFiles() {
const db = new sqlite3.Database(`${process.env.HOME}/Library/Application Support/Code/User/globalStorage/state.vscdb`);
const data = await new Promise((res, rej) => {
db.get('select value from ItemTable where key="history.recentlyOpenedPathsList";', (err, result) => {
if (err) {
rej(err);
return;
}
res(result?.value);
})
}).catch((er) => {
console.log(er);
return {};
});
let storedJson;
try {
storedJson = JSON.parse(data);
}
catch (e) {
storedJson = {};
}
const filesInfo = [];
storedJson?.entries.forEach((item) => {
const filePath = item?.folderUri || item?.fileUri || '';
if (!filePath) {
return;
}
const info = {
title: decodeURIComponent(path.basename(filePath)),
description: filePath,
url: filePath.replace(/^file:\/\//, ''),
};
if (item?.folderUri) {
info.isDir = true;
}
else if (item.fileUri) {
info.isFile = true;
}
filesInfo.push(info);
})
return filesInfo;
},
},
};
async function getAllOpenedRecentFiles() {
const editorKeys = Object.keys(editors);
const editorIterator = {
[Symbol.asyncIterator]() {
return {
i: 0,
async next() {
if (this.i < editorKeys.length) {
this.i++;
return Promise.resolve({
done: false,
value: await editors[editorKeys].getOpenedRecentFiles(),
});
}
return Promise.resolve({ done: true });
}
};
},
};
let allFiles = [];
for await (const files of editorIterator) {
allFiles = allFiles.concat(files);
}
return allFiles;
}
exports.getAllOpenedRecentFiles = getAllOpenedRecentFiles;
exports.editors = editors;