Открыть виртуальный файл из TreeProvider и ссылочный элемент дерева при сохранении файла - PullRequest
0 голосов
/ 20 декабря 2018

Я создал базовый класс 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

...