selectable persistence providers

This commit is contained in:
Eugene Pankov
2017-07-31 13:52:32 +02:00
parent 514fdbfb6a
commit 1c62f3074c
8 changed files with 70 additions and 46 deletions

View File

@@ -3,8 +3,8 @@ const psNode = require('ps-node')
let nodePTY
import * as fs from 'mz/fs'
import { Subject } from 'rxjs'
import { Injectable } from '@angular/core'
import { Logger, LogService, ElectronService } from 'terminus-core'
import { Injectable, Inject } from '@angular/core'
import { Logger, LogService, ElectronService, ConfigService } from 'terminus-core'
import { exec } from 'mz/child_process'
import { SessionOptions, SessionPersistenceProvider } from '../api'
@@ -178,7 +178,8 @@ export class SessionsService {
private lastID = 0
constructor (
private persistence: SessionPersistenceProvider,
@Inject(SessionPersistenceProvider) private persistenceProviders: SessionPersistenceProvider[],
private config: ConfigService,
electron: ElectronService,
log: LogService,
) {
@@ -187,9 +188,10 @@ export class SessionsService {
}
async prepareNewSession (options: SessionOptions): Promise<SessionOptions> {
if (this.persistence) {
let recoveryId = await this.persistence.startSession(options)
options = await this.persistence.attachSession(recoveryId)
let persistence = this.getPersistence()
if (persistence) {
let recoveryId = await persistence.startSession(options)
options = await persistence.attachSession(recoveryId)
}
return options
}
@@ -198,10 +200,11 @@ export class SessionsService {
this.lastID++
options.name = `session-${this.lastID}`
let session = new Session(options)
let persistence = this.getPersistence()
session.destroyed$.first().subscribe(() => {
delete this.sessions[session.name]
if (this.persistence) {
this.persistence.terminateSession(session.recoveryId)
if (persistence) {
persistence.terminateSession(session.recoveryId)
}
})
this.sessions[session.name] = session
@@ -209,9 +212,14 @@ export class SessionsService {
}
async recover (recoveryId: string): Promise<SessionOptions> {
if (!this.persistence) {
return null
let persistence = this.getPersistence()
if (persistence) {
return await persistence.attachSession(recoveryId)
}
return await this.persistence.attachSession(recoveryId)
return null
}
private getPersistence (): SessionPersistenceProvider {
return this.persistenceProviders.find(x => x.id === this.config.store.terminal.persistence) || null
}
}