提交 7a9b8377 编写于 作者: B Benjamin Pasero

split recent files and folders in picker

上级 1525065f
......@@ -132,7 +132,8 @@ export interface IEnvironment {
extensionDevelopmentPath: string;
extensionTestsPath: string;
recentPaths: string[];
recentFiles: string[];
recentFolders: string[];
enableTelemetry: boolean;
......
......@@ -396,17 +396,30 @@ export class OpenRecentAction extends Action {
}
public run(): TPromise<boolean> {
let picks = this.contextService.getConfiguration().env.recentPaths.map(p => {
const recentFolders = this.contextService.getConfiguration().env.recentFolders;
const recentFiles = this.contextService.getConfiguration().env.recentFiles;
let folderPicks = recentFolders.map((p, index) => {
return {
label: paths.basename(p),
description: paths.dirname(p),
path: p,
separator: index === 0 ? { label: nls.localize('folders', "folders") } : void 0
};
});
let filePicks = recentFiles.map((p, index) => {
return {
label: paths.basename(p),
description: paths.dirname(p),
path: p
path: p,
separator: index === 0 ? { label: nls.localize('files', "files"), border: true } : void 0
};
});
const hasWorkspace = !!this.contextService.getWorkspace();
return this.quickOpenService.pick(picks, {
return this.quickOpenService.pick(folderPicks.concat(...filePicks), {
autoFocus: { autoFocusFirstEntry: !hasWorkspace, autoFocusSecondEntry: hasWorkspace },
placeHolder: nls.localize('openRecentPlaceHolder', "Select a path to open"),
matchOnDescription: true
......
......@@ -103,7 +103,8 @@ export interface IWindowConfiguration extends env.ICommandLineArguments {
commitHash: string;
updateFeedUrl: string;
updateChannel: string;
recentPaths: string[];
recentFiles: string[];
recentFolders: string[];
workspacePath?: string;
filesToOpen?: IPath[];
filesToCreate?: IPath[];
......
......@@ -686,40 +686,55 @@ export class WindowsManager {
configuration.licenseUrl = env.product.licenseUrl;
configuration.updateFeedUrl = UpdateManager.feedUrl;
configuration.updateChannel = UpdateManager.channel;
configuration.recentPaths = this.getRecentlyOpenedPaths(workspacePath, filesToOpen);
configuration.aiConfig = env.product.aiConfig;
configuration.sendASmile = env.product.sendASmile;
configuration.enableTelemetry = env.product.enableTelemetry;
configuration.userEnv = userEnv;
const recents = this.getRecentlyOpenedPaths(workspacePath, filesToOpen);
configuration.recentFiles = recents.files;
configuration.recentFolders = recents.folders;
return configuration;
}
private getRecentlyOpenedPaths(workspacePath?: string, filesToOpen?: window.IPath[]): string[] {
private getRecentlyOpenedPaths(workspacePath?: string, filesToOpen?: window.IPath[]): IOpenedPathsList {
let files: string[];
let folders: string[];
// Get from storage
let openedPathsList = storage.getItem<IOpenedPathsList>(WindowsManager.openedPathsListStorageKey);
if (!openedPathsList) {
openedPathsList = { folders: [], files: [] };
let storedRecents = storage.getItem<IOpenedPathsList>(WindowsManager.openedPathsListStorageKey);
if (storedRecents) {
files = storedRecents.files || [];
folders = storedRecents.folders || [];
} else {
files = [];
folders = [];
}
let recentPaths = openedPathsList.folders.concat(openedPathsList.files);
// Add currently files to open to the beginning if any
if (filesToOpen) {
recentPaths.unshift(...filesToOpen.map(f => f.filePath));
files.unshift(...filesToOpen.map(f => f.filePath));
}
// Add current workspace path to beginning if set
if (workspacePath) {
recentPaths.unshift(workspacePath);
folders.unshift(workspacePath);
}
// Clear those dupes
recentPaths = arrays.distinct(recentPaths);
files = arrays.distinct(files);
folders = arrays.distinct(folders);
if (platform.isMacintosh && files.length > 0) {
files = files.filter(f => folders.indexOf(f) < 0); // TODO@Ben migration (remove in the future)
}
// Make sure it is bounded
return recentPaths.slice(0, 20 /* max 10 files, 10 folders */);
files = files.slice(0, 10);
folders = folders.slice(0, 10);
return { files, folders };
}
private toIPath(anyPath: string, ignoreFileNotFound?: boolean, gotoLineMode?: boolean): window.IPath {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册