timeline.ts 2.6 KB
Newer Older
1 2 3 4 5
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

6
import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation';
7 8 9
import { Event } from 'vs/base/common/event';
import { IDisposable } from 'vs/base/common/lifecycle';
import { URI } from 'vs/base/common/uri';
10
import { Command } from 'vs/editor/common/modes';
11 12 13 14 15 16 17 18
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';

export function toKey(extension: ExtensionIdentifier | string, source: string) {
	return `${typeof extension === 'string' ? extension : ExtensionIdentifier.toKey(extension)}|${source}`;
}

export interface TimelineItem {
E
Eric Amodio 已提交
19
	timestamp: number;
20 21
	label: string;
	id?: string;
22 23 24
	icon?: URI,
	iconDark?: URI,
	themeIcon?: { id: string },
25 26
	description?: string;
	detail?: string;
27 28
	command?: Command;
	contextValue?: string;
29 30
}

31 32 33
export interface TimelineItemWithSource extends TimelineItem {
	source: string;
}
34

35 36 37 38 39
export interface TimelineChangeEvent {
	id: string;
	uri?: URI;
}

40
export interface TimelineProvider extends TimelineProviderDescriptor, IDisposable {
41
	onDidChange?: Event<TimelineChangeEvent>;
42

43
	provideTimeline(uri: URI, token: CancellationToken): Promise<TimelineItemWithSource[]>;
44 45
}

46
export interface TimelineProviderDescriptor {
47 48
	id: string;
	label: string;
49 50 51 52

	// selector: DocumentSelector;
}

53 54 55 56 57 58 59 60 61 62 63 64
export interface TimelineProvidersChangeEvent {
	readonly added?: string[];
	readonly removed?: string[];
}

export interface TimelineRequest {
	readonly items: Promise<TimelineItemWithSource[]>;
	readonly source: string;
	readonly tokenSource: CancellationTokenSource;
	readonly uri: URI;
}

65 66 67
export interface ITimelineService {
	readonly _serviceBrand: undefined;

68 69
	onDidChangeProviders: Event<TimelineProvidersChangeEvent>;
	onDidChangeTimeline: Event<TimelineChangeEvent>;
70

71
	registerTimelineProvider(provider: TimelineProvider): IDisposable;
72 73 74
	unregisterTimelineProvider(id: string): void;

	getSources(): string[];
75

E
Eric Amodio 已提交
76
	getTimeline(uri: URI, token: CancellationToken): Promise<TimelineItem[]>;
77 78

	getTimelineRequest(id: string, uri: URI, tokenSource: CancellationTokenSource): TimelineRequest | undefined;
79 80 81 82
}

const TIMELINE_SERVICE_ID = 'timeline';
export const ITimelineService = createDecorator<ITimelineService>(TIMELINE_SERVICE_ID);