Skip to content

Commit

Permalink
Fix programmatic save for custom editors
Browse files Browse the repository at this point in the history
  • Loading branch information
msujew committed May 11, 2024
1 parent 38eb319 commit 7a115fb
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 25 deletions.
1 change: 0 additions & 1 deletion packages/plugin-ext/src/common/plugin-api-rpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1387,7 +1387,6 @@ export interface DocumentsMain {
$tryShowDocument(uri: UriComponents, options?: TextDocumentShowOptions): Promise<void>;
$tryOpenDocument(uri: UriComponents): Promise<boolean>;
$trySaveDocument(uri: UriComponents): Promise<boolean>;
$tryCloseDocument(uri: UriComponents): Promise<boolean>;
}

export interface EnvMain {
Expand Down
24 changes: 3 additions & 21 deletions packages/plugin-ext/src/main/browser/documents-main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ import { DisposableCollection, Disposable, UntitledResourceResolver } from '@the
import { MonacoEditorModel } from '@theia/monaco/lib/browser/monaco-editor-model';
import { RPCProtocol } from '../../common/rpc-protocol';
import { EditorModelService } from './text-editor-model-service';
import { EditorManager, EditorOpenerOptions } from '@theia/editor/lib/browser';
import { EditorOpenerOptions } from '@theia/editor/lib/browser';
import URI from '@theia/core/lib/common/uri';
import { URI as CodeURI } from '@theia/core/shared/vscode-uri';
import { ApplicationShell, Saveable } from '@theia/core/lib/browser';
import { ApplicationShell } from '@theia/core/lib/browser';
import { TextDocumentShowOptions } from '../../common/plugin-api-rpc-model';
import { Range } from '@theia/core/shared/vscode-languageserver-protocol';
import { OpenerService } from '@theia/core/lib/browser/opener-service';
Expand Down Expand Up @@ -94,7 +94,6 @@ export class DocumentsMainImpl implements DocumentsMain, Disposable {
notebookDocuments: NotebookDocumentsMainImpl,
private readonly modelService: EditorModelService,
rpc: RPCProtocol,
private editorManager: EditorManager,
private openerService: OpenerService,
private shell: ApplicationShell,
private untitledResourceResolver: UntitledResourceResolver,
Expand Down Expand Up @@ -206,13 +205,7 @@ export class DocumentsMainImpl implements DocumentsMain, Disposable {
}

async $trySaveDocument(uri: UriComponents): Promise<boolean> {
const widget = await this.editorManager.getByUri(new URI(CodeURI.revive(uri)));
if (widget) {
await Saveable.save(widget);
return true;
}

return false;
return this.modelService.save(new URI(CodeURI.revive(uri)));
}

async $tryOpenDocument(uri: UriComponents): Promise<boolean> {
Expand All @@ -226,17 +219,6 @@ export class DocumentsMainImpl implements DocumentsMain, Disposable {
}
}

async $tryCloseDocument(uri: UriComponents): Promise<boolean> {
const widget = await this.editorManager.getByUri(new URI(CodeURI.revive(uri)));
if (widget) {
await Saveable.save(widget);
widget.close();
return true;
}

return false;
}

static toEditorOpenerOptions(shell: ApplicationShell, options?: TextDocumentShowOptions): EditorOpenerOptions | undefined {
if (!options) {
return undefined;
Expand Down
4 changes: 1 addition & 3 deletions packages/plugin-ext/src/main/browser/main-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ import { DecorationsMainImpl } from './decorations/decorations-main';
import { ClipboardMainImpl } from './clipboard-main';
import { DocumentsMainImpl } from './documents-main';
import { TextEditorsMainImpl } from './text-editors-main';
import { EditorManager } from '@theia/editor/lib/browser';
import { EditorModelService } from './text-editor-model-service';
import { OpenerService } from '@theia/core/lib/browser/opener-service';
import { ApplicationShell } from '@theia/core/lib/browser/shell/application-shell';
Expand Down Expand Up @@ -94,13 +93,12 @@ export function setUpPluginApi(rpc: RPCProtocol, container: interfaces.Container
rpc.set(PLUGIN_RPC_CONTEXT.NOTEBOOK_DOCUMENTS_MAIN, notebookDocumentsMain);

const modelService = container.get(EditorModelService);
const editorManager = container.get(EditorManager);
const openerService = container.get<OpenerService>(OpenerService);
const shell = container.get(ApplicationShell);
const untitledResourceResolver = container.get(UntitledResourceResolver);
const languageService = container.get(MonacoLanguages);
const documentsMain = new DocumentsMainImpl(editorsAndDocuments, notebookDocumentsMain, modelService, rpc,
editorManager, openerService, shell, untitledResourceResolver, languageService);
openerService, shell, untitledResourceResolver, languageService);
rpc.set(PLUGIN_RPC_CONTEXT.DOCUMENTS_MAIN, documentsMain);

rpc.set(PLUGIN_RPC_CONTEXT.NOTEBOOKS_MAIN, new NotebooksMainImpl(rpc, container, commandRegistryMain));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,15 @@ export class EditorModelService {
return this.monacoModelService.models;
}

async save(uri: URI): Promise<boolean> {
const model = this.monacoModelService.get(uri.toString());
if (model) {
await model.save();
return true;
}
return false;
}

async saveAll(includeUntitled?: boolean): Promise<boolean> {
const saves = [];
for (const model of this.monacoModelService.models) {
Expand Down

0 comments on commit 7a115fb

Please sign in to comment.