From 7a9b8377bb7a2026617882a6fa919400f0928998 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 29 Mar 2016 11:46:54 +0200 Subject: [PATCH] split recent files and folders in picker --- src/vs/platform/workspace/common/workspace.ts | 3 +- src/vs/workbench/electron-browser/actions.ts | 19 ++++++++-- src/vs/workbench/electron-main/window.ts | 3 +- src/vs/workbench/electron-main/windows.ts | 37 +++++++++++++------ 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/vs/platform/workspace/common/workspace.ts b/src/vs/platform/workspace/common/workspace.ts index 1e2b1da25e2..b503c8da657 100644 --- a/src/vs/platform/workspace/common/workspace.ts +++ b/src/vs/platform/workspace/common/workspace.ts @@ -132,7 +132,8 @@ export interface IEnvironment { extensionDevelopmentPath: string; extensionTestsPath: string; - recentPaths: string[]; + recentFiles: string[]; + recentFolders: string[]; enableTelemetry: boolean; diff --git a/src/vs/workbench/electron-browser/actions.ts b/src/vs/workbench/electron-browser/actions.ts index 39f5f981c7a..565fbc87a9c 100644 --- a/src/vs/workbench/electron-browser/actions.ts +++ b/src/vs/workbench/electron-browser/actions.ts @@ -396,17 +396,30 @@ export class OpenRecentAction extends Action { } public run(): TPromise { - 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 diff --git a/src/vs/workbench/electron-main/window.ts b/src/vs/workbench/electron-main/window.ts index d5802b03f55..d3f37154c7a 100644 --- a/src/vs/workbench/electron-main/window.ts +++ b/src/vs/workbench/electron-main/window.ts @@ -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[]; diff --git a/src/vs/workbench/electron-main/windows.ts b/src/vs/workbench/electron-main/windows.ts index 21fc4742a42..299036e466a 100644 --- a/src/vs/workbench/electron-main/windows.ts +++ b/src/vs/workbench/electron-main/windows.ts @@ -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(WindowsManager.openedPathsListStorageKey); - if (!openedPathsList) { - openedPathsList = { folders: [], files: [] }; + let storedRecents = storage.getItem(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 { -- GitLab