Я создал базовый класс TreeProvider, который обеспечивает доступ к структуре, подобной папке, из веб-API.Каждый элемент в API является блоком JSON, поэтому я использую VSCode, чтобы отредактировать этот JSON, а затем отправить его обратно в API.
Элемент открывается в типе файловой системы памяти, у меня это работает, используяПример файловой системы, созданной командой vscode: https://github.com/Microsoft/vscode-extension-samples/tree/master/fsprovider-sample
Где я сейчас борюсь, как мне ссылаться на идентификатор элемента, который был сохранен?Я хотел бы установить свойства, такие как, ID и APIConnection для самого файла при его открытии, но я не уверен, как это сделать, так как я открываю файл в VSCode, используя uri в памяти:
// this command is executed whenever a tree item is "clicked"
export default async function(item :ArcGISItem, scope : any){
// get the item data from the api using the TreeItem.id
let data = await item.connection.getItem(item.id);
const file = `memfs:/${item.id}.json`;
const uri = Uri.parse(file);
// create a virtual file using the filesystem api and the json data
scope.fs.writeFile(uri, Buffer.from(data), {
create: true, overwrite: true
});
// open the document and format it
workspace.openTextDocument(uri).then(doc => {
window.showTextDocument(doc);
commands.executeCommand('editor.action.format');
}, (e: any) => console.warn(e));
}
Хорошо, как я уже сказал, теперь мне нужно определить, когда изменяются эти вирулентные файлы, и затем отправить их обратно в API.Я передаю фс непосредственно в TreeProvider, чтобы он знал, как следить за изменениями файлов:
fs.onDidChangeFile((e) => {
console.log(e);
// seems janky
const id = e[0].uri.path.substring(1).split('.')[0];
// then...
// recursively this.getChildren() until child.id === id ??
// const child = getChildrenrecursivelyById(id);
// get content from file?
// const jsonContent = fs.readFile(e[0].uri.external)
// update item using the api (axios)
// child.connection.updateItem(id, jsonContent);
});
это приводит к журналу с массивом из 1 элемента:
Array[1]
0:Object
type:1
uri:Object
$mid:1
fsPath:"\328f052b2be24637b7305a08f877a443.json"
external:"memfs:/328f052b2be24637b7305a08f877a443.json"
path:"/328f052b2be24637b7305a08f877a443.json"
scheme:"memfs"
Любые идеи, что я могу сделать дальше?
Для справки, мой полный плагин vscode находится здесь: https://github.com/roemhildtg/vscode-arcgis-assistant