fix-71570 Added logic to handle markdown preview update on file rename and delete

This commit is contained in:
pkoushik 2019-04-05 11:38:18 +05:30
parent d234937aed
commit 3cef5067be
2 changed files with 45 additions and 15 deletions

View file

@ -381,22 +381,27 @@ export class MarkdownPreview extends Disposable {
clearTimeout(this.throttleTimer);
this.throttleTimer = undefined;
const document = await vscode.workspace.openTextDocument(resource);
if (!this.forceUpdate && this.currentVersion && this.currentVersion.resource.fsPath === resource.fsPath && this.currentVersion.version === document.version) {
if (this.line) {
this.updateForView(resource, this.line);
try {
const document = await vscode.workspace.openTextDocument(resource);
if (!this.forceUpdate && this.currentVersion && this.currentVersion.resource.fsPath === resource.fsPath && this.currentVersion.version === document.version) {
if (this.line) {
this.updateForView(resource, this.line);
}
return;
}
return;
}
this.forceUpdate = false;
this.forceUpdate = false;
this.currentVersion = { resource, version: document.version };
const content = await this._contentProvider.provideTextDocumentContent(document, this._previewConfigurations, this.line, this.state);
if (this._resource === resource) {
this.editor.title = MarkdownPreview.getPreviewTitle(this._resource, this._locked);
this.editor.iconPath = this.iconPath;
this.editor.webview.options = MarkdownPreview.getWebviewOptions(resource, this._contributionProvider.contributions);
this.editor.webview.html = content;
this.currentVersion = { resource, version: document.version };
const content = await this._contentProvider.provideTextDocumentContent(document, this._previewConfigurations, this.line, this.state);
if (this._resource === resource) {
this.editor.title = MarkdownPreview.getPreviewTitle(this._resource, this._locked);
this.editor.iconPath = this.iconPath;
this.editor.webview.options = MarkdownPreview.getWebviewOptions(resource, this._contributionProvider.contributions);
this.editor.webview.html = content;
}
}
catch (e) {
await this.showFileNotFoundError();
}
}
@ -456,7 +461,20 @@ export class MarkdownPreview extends Disposable {
}
}
vscode.workspace.openTextDocument(this._resource).then(vscode.window.showTextDocument);
try {
vscode.workspace.openTextDocument(this._resource).then(vscode.window.showTextDocument);
}
catch (e) {
await this.showFileNotFoundError();
}
}
private async showFileNotFoundError() {
const content = await this._contentProvider.provideFileNotFoundContent(this._resource);
this.editor.title = MarkdownPreview.getPreviewTitle(this._resource, this._locked);
this.editor.iconPath = this.iconPath;
this.editor.webview.options = MarkdownPreview.getWebviewOptions(this._resource, this._contributionProvider.contributions);
this.editor.webview.html = content;
}
private async onDidClickPreviewLink(path: string, fragment: string | undefined) {

View file

@ -90,6 +90,18 @@ export class MarkdownContentProvider {
</html>`;
}
public async provideFileNotFoundContent(
resource: vscode.Uri,
): Promise<string> {
const resourcePath = path.basename(resource.fsPath);
return `<!DOCTYPE html>
<html>
<body class="vscode-body">
${resourcePath} cannot be found.
</body>
</html>`;
}
private extensionResourcePath(mediaFile: string): string {
return vscode.Uri.file(this.context.asAbsolutePath(path.join('media', mediaFile)))
.with({ scheme: 'vscode-resource' })