Skip to content

Commit

Permalink
Merge pull request #52 from cocopon/more-disposable
Browse files Browse the repository at this point in the history
More disposable
  • Loading branch information
cocopon committed May 27, 2020
2 parents 0029e0e + acd4cff commit 234bd5f
Show file tree
Hide file tree
Showing 12 changed files with 68 additions and 21 deletions.
14 changes: 13 additions & 1 deletion src/main/js/api/folder-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {TestUtil} from '../misc/test-util';
import {Color} from '../model/color';
import {Disposable} from '../model/disposable';
import {FolderApi} from './folder';
import {SeparatorApi} from './separator';

function createApi(): FolderApi {
const c = new FolderController(TestUtil.createWindow().document, {
Expand Down Expand Up @@ -56,12 +57,23 @@ describe(FolderApi.name, () => {

it('should add separator', () => {
const api = createApi();
api.addSeparator();
const s = api.addSeparator();
assert.instanceOf(s, SeparatorApi);

const cs = api.controller.uiControllerList.items;
assert.instanceOf(cs[cs.length - 1], SeparatorController);
});

it('should dispose separator', () => {
const api = createApi();
const cs = api.controller.uiControllerList.items;

const s = api.addSeparator();
assert.strictEqual(cs.length, 1);
s.dispose();
assert.strictEqual(cs.length, 0);
});

it('should add input', () => {
const PARAMS = {
foo: 1,
Expand Down
4 changes: 3 additions & 1 deletion src/main/js/api/folder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {ButtonApi} from './button';
import * as EventHandlerAdapters from './event-handler-adapters';
import {InputBindingApi} from './input-binding';
import {MonitorBindingApi} from './monitor-binding';
import {SeparatorApi} from './separator';
import {
ButtonParams,
InputParams,
Expand Down Expand Up @@ -83,12 +84,13 @@ export class FolderApi {
return new ButtonApi(uc);
}

public addSeparator(opt_params?: SeparatorParams): void {
public addSeparator(opt_params?: SeparatorParams): SeparatorApi {
const params = opt_params || {};
const uc = new SeparatorController(this.controller.document, {
disposable: new Disposable(),
});
this.controller.uiControllerList.add(uc, params.index);
return new SeparatorApi(uc);
}

public on<EventName extends keyof FolderApiEventHandlers>(
Expand Down
2 changes: 1 addition & 1 deletion src/main/js/api/root-boolean-monitor-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ describe(RootApi.name, () => {
if (b instanceof MonitorBinding) {
const t = b.ticker;
if (t instanceof IntervalTicker) {
t.dispose();
t.disposable.dispose();
}
}
});
Expand Down
2 changes: 1 addition & 1 deletion src/main/js/api/root-number-monitor-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ describe(RootApi.name, () => {
if (b instanceof MonitorBinding) {
const t = b.ticker;
if (t instanceof IntervalTicker) {
t.dispose();
t.disposable.dispose();
}
}
});
Expand Down
2 changes: 1 addition & 1 deletion src/main/js/api/root-string-monitor-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ describe(RootApi.name, () => {
if (b instanceof MonitorBinding) {
const t = b.ticker;
if (t instanceof IntervalTicker) {
t.dispose();
t.disposable.dispose();
}
}
});
Expand Down
10 changes: 10 additions & 0 deletions src/main/js/api/root-ui-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ describe(RootApi.name, () => {
assert.instanceOf(cs[cs.length - 1], SeparatorController);
});

it('should dispose separator', () => {
const api = createApi();
const cs = api.controller.uiControllerList.items;

const s = api.addSeparator();
assert.strictEqual(cs.length, 1);
s.dispose();
assert.strictEqual(cs.length, 0);
});

it('should handle root folder events', (done) => {
const api = createApi('pane');

Expand Down
4 changes: 3 additions & 1 deletion src/main/js/api/root.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {InputBindingApi} from './input-binding';
import {MonitorBindingApi} from './monitor-binding';
import * as Preset from './preset';
import {PresetObject} from './preset';
import {SeparatorApi} from './separator';
import {
ButtonParams,
FolderParams,
Expand Down Expand Up @@ -117,12 +118,13 @@ export class RootApi {
return new FolderApi(uc);
}

public addSeparator(opt_params?: SeparatorParams): void {
public addSeparator(opt_params?: SeparatorParams): SeparatorApi {
const params = opt_params || {};
const uc = new SeparatorController(this.controller.document, {
disposable: new Disposable(),
});
this.controller.uiControllerList.add(uc, params.index);
return new SeparatorApi(uc);
}

/**
Expand Down
19 changes: 19 additions & 0 deletions src/main/js/api/separator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import {SeparatorController} from '../controller/separator';

export class SeparatorApi {
/**
* @hidden
*/
public readonly controller: SeparatorController;

/**
* @hidden
*/
constructor(controller: SeparatorController) {
this.controller = controller;
}

public dispose(): void {
this.controller.disposable.dispose();
}
}
2 changes: 1 addition & 1 deletion src/main/js/binding/monitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export class MonitorBinding<In> {
}

public dispose(): void {
this.ticker.dispose();
this.ticker.disposable.dispose();
}

public read(): void {
Expand Down
19 changes: 11 additions & 8 deletions src/main/js/misc/ticker/interval.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import {Disposable} from '../../model/disposable';
import {Emitter} from '../emitter';
import {Ticker, TickerEvents} from './ticker';

/**
* @hidden
*/
export class IntervalTicker implements Ticker {
public readonly disposable: Disposable;
public readonly emitter: Emitter<TickerEvents>;
private active_: boolean;
private doc_: Document;
Expand Down Expand Up @@ -40,16 +42,17 @@ export class IntervalTicker implements Ticker {
// win.addEventListener('blur', this.onWindowBlur_);
// win.addEventListener('focus', this.onWindowFocus_);
// }
}

public dispose(): void {
if (this.id_ !== null) {
const win = this.doc_.defaultView;
if (win) {
win.clearInterval(this.id_);
this.disposable = new Disposable();
this.disposable.emitter.on('dispose', () => {
if (this.id_ !== null) {
const win = this.doc_.defaultView;
if (win) {
win.clearInterval(this.id_);
}
}
}
this.id_ = null;
this.id_ = null;
});
}

private onTick_(): void {
Expand Down
7 changes: 3 additions & 4 deletions src/main/js/misc/ticker/manual.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
import {Disposable} from '../../model/disposable';
import {Emitter} from '../emitter';
import {Ticker, TickerEvents} from './ticker';

/**
* @hidden
*/
export class ManualTicker implements Ticker {
public readonly disposable: Disposable;
public readonly emitter: Emitter<TickerEvents>;

constructor() {
this.disposable = new Disposable();
this.emitter = new Emitter();
}

public dispose(): void {
// Do nothing
}

public tick(): void {
this.emitter.emit('tick', {
sender: this,
Expand Down
4 changes: 2 additions & 2 deletions src/main/js/misc/ticker/ticker.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {Disposable} from '../../model/disposable';
import {Emitter, EventTypeMap} from '../emitter';

/**
Expand All @@ -13,7 +14,6 @@ export interface TickerEvents extends EventTypeMap {
* @hidden
*/
export interface Ticker {
readonly disposable: Disposable;
readonly emitter: Emitter<TickerEvents>;

dispose(): void;
}

0 comments on commit 234bd5f

Please sign in to comment.