theia-sprotty
Version:
Glue code for sprotty diagrams in a Theia IDE
44 lines (39 loc) • 1.72 kB
text/typescript
/*
* Copyright (C) 2017 TypeFox and others.
*
* Licensed under the Apache License, Version 2.0 (the "License") you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*/
import { inject, injectable } from 'inversify'
import { ExportSvgAction } from 'sprotty/lib'
import { FileSystem } from '@theia/filesystem/lib/common'
import { MessageService } from '@theia/core/lib/common'
()
export class TheiaFileSaver {
constructor((FileSystem) protected readonly fileSystem: FileSystem,
(MessageService) protected readonly messageService: MessageService) {
}
save(sourceUri: string, action: ExportSvgAction) {
this.getNextFileName(sourceUri).then(fileName =>
this.fileSystem.createFile(fileName, { content: action.svg })
.then(() =>
this.messageService.info(`Diagram exported to '${fileName}'`)
)
.catch((error) =>
this.messageService.error(`Error exporting diagram '${error}`)
)
)
}
getNextFileName(sourceUri: string): Promise<string> {
return new Promise<string>(resolve => this.tryNextFileName(sourceUri, 0, resolve))
}
tryNextFileName(sourceURI: string, count: number, resolve: (fileName: string) => void) {
const currentName = sourceURI + (count === 0 ? '' : count) + '.svg'
this.fileSystem.exists(currentName).then(exists => {
if (!exists)
resolve(currentName)
else
this.tryNextFileName(sourceURI, ++count, resolve)
})
}
}