43ef50b404
* Update to 1.78.1 No changes needed in the patches other than moving some lines around and updating the CSP hash as usual. The flake had to be updated as it was using Node 16.16 and 16.17 is required at minimum now. Also python seems to install python2 which is marked as deprecated so explicitly install python3. * Update to 1.78.2 Patches applied without any conflicts. * Update commit environment variable This was causing the commit not to be set. It broke display languages since that has a hard dependency on the commit for directory names. Possibly broke other things.
184 lines
12 KiB
Diff
184 lines
12 KiB
Diff
Add option to disable file downloads via CLI
|
|
|
|
This patch adds support for a new CLI flag called `--disable-file-downloads`
|
|
which allows a user to remove the "Download..." option that shows up when you
|
|
right-click files in Code. The default value for this is `false`.
|
|
|
|
To test this, start code-server with `--disable-file-downloads`, open editor,
|
|
right-click on a file (not a folder) and you should **not** see the
|
|
"Download..." option.
|
|
|
|
Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
@@ -260,6 +260,11 @@ export interface IWorkbenchConstructionO
|
|
*/
|
|
readonly userDataPath?: string
|
|
|
|
+ /**
|
|
+ * Whether the "Download..." option is enabled for files.
|
|
+ */
|
|
+ readonly isEnabledFileDownloads?: boolean
|
|
+
|
|
//#endregion
|
|
|
|
//#region Profile options
|
|
Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
@@ -32,6 +32,11 @@ export interface IBrowserWorkbenchEnviro
|
|
* Options used to configure the workbench.
|
|
*/
|
|
readonly options?: IWorkbenchConstructionOptions;
|
|
+
|
|
+ /**
|
|
+ * Enable downloading files via menu actions.
|
|
+ */
|
|
+ readonly isEnabledFileDownloads?: boolean;
|
|
}
|
|
|
|
export class BrowserWorkbenchEnvironmentService implements IBrowserWorkbenchEnvironmentService {
|
|
@@ -101,6 +106,13 @@ export class BrowserWorkbenchEnvironment
|
|
return this.options.userDataPath;
|
|
}
|
|
|
|
+ get isEnabledFileDownloads(): boolean {
|
|
+ if (typeof this.options.isEnabledFileDownloads === "undefined") {
|
|
+ throw new Error('isEnabledFileDownloads was not provided to the browser');
|
|
+ }
|
|
+ return this.options.isEnabledFileDownloads;
|
|
+ }
|
|
+
|
|
@memoize
|
|
get argvResource(): URI { return joinPath(this.userRoamingDataHome, 'argv.json'); }
|
|
|
|
Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
@@ -14,6 +14,7 @@ export const serverOptions: OptionDescri
|
|
/* ----- code-server ----- */
|
|
'disable-update-check': { type: 'boolean' },
|
|
'auth': { type: 'string' },
|
|
+ 'disable-file-downloads': { type: 'boolean' },
|
|
|
|
/* ----- server setup ----- */
|
|
|
|
@@ -94,6 +95,7 @@ export interface ServerParsedArgs {
|
|
/* ----- code-server ----- */
|
|
'disable-update-check'?: boolean;
|
|
'auth'?: string
|
|
+ 'disable-file-downloads'?: boolean;
|
|
|
|
/* ----- server setup ----- */
|
|
|
|
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
@@ -325,6 +325,7 @@ export class WebClientServer {
|
|
remoteAuthority,
|
|
webviewEndpoint: vscodeBase + this._staticRoute + '/out/vs/workbench/contrib/webview/browser/pre',
|
|
userDataPath: this._environmentService.userDataPath,
|
|
+ isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'],
|
|
_wrapWebWorkerExtHostInIframe,
|
|
developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, logLevel: this._logService.getLevel() },
|
|
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
|
Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
|
@@ -7,12 +7,11 @@ import { Event } from 'vs/base/common/ev
|
|
import { Disposable } from 'vs/base/common/lifecycle';
|
|
import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from 'vs/platform/contextkey/common/contextkey';
|
|
import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from 'vs/platform/contextkey/common/contextkeys';
|
|
-import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, MultipleEditorGroupsContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, EditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext } from 'vs/workbench/common/contextkeys';
|
|
+import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, MultipleEditorGroupsContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, EditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, IsEnabledFileDownloads } from 'vs/workbench/common/contextkeys';
|
|
import { TEXT_DIFF_EDITOR_ID, EditorInputCapabilities, SIDE_BY_SIDE_EDITOR_ID, DEFAULT_EDITOR_ASSOCIATION } from 'vs/workbench/common/editor';
|
|
import { trackFocus, addDisposableListener, EventType } from 'vs/base/browser/dom';
|
|
import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
|
-import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
|
import { WorkbenchState, IWorkspaceContextService, isTemporaryWorkspace } from 'vs/platform/workspace/common/workspace';
|
|
import { IWorkbenchLayoutService, Parts, positionToString } from 'vs/workbench/services/layout/browser/layoutService';
|
|
@@ -25,6 +24,7 @@ import { IPaneCompositePartService } fro
|
|
import { Schemas } from 'vs/base/common/network';
|
|
import { WebFileSystemAccess } from 'vs/platform/files/browser/webFileSystemAccess';
|
|
import { IProductService } from 'vs/platform/product/common/productService';
|
|
+import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService';
|
|
|
|
export class WorkbenchContextKeysHandler extends Disposable {
|
|
private inputFocusedContext: IContextKey<boolean>;
|
|
@@ -77,7 +77,7 @@ export class WorkbenchContextKeysHandler
|
|
@IContextKeyService private readonly contextKeyService: IContextKeyService,
|
|
@IWorkspaceContextService private readonly contextService: IWorkspaceContextService,
|
|
@IConfigurationService private readonly configurationService: IConfigurationService,
|
|
- @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService,
|
|
+ @IBrowserWorkbenchEnvironmentService private readonly environmentService: IBrowserWorkbenchEnvironmentService,
|
|
@IProductService private readonly productService: IProductService,
|
|
@IEditorService private readonly editorService: IEditorService,
|
|
@IEditorResolverService private readonly editorResolverService: IEditorResolverService,
|
|
@@ -205,6 +205,9 @@ export class WorkbenchContextKeysHandler
|
|
this.auxiliaryBarVisibleContext = AuxiliaryBarVisibleContext.bindTo(this.contextKeyService);
|
|
this.auxiliaryBarVisibleContext.set(this.layoutService.isVisible(Parts.AUXILIARYBAR_PART));
|
|
|
|
+ // code-server
|
|
+ IsEnabledFileDownloads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileDownloads ?? true)
|
|
+
|
|
this.registerListeners();
|
|
}
|
|
|
|
Index: code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
|
|
@@ -20,7 +20,7 @@ import { CLOSE_SAVED_EDITORS_COMMAND_ID,
|
|
import { AutoSaveAfterShortDelayContext } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService';
|
|
import { WorkbenchListDoubleSelection } from 'vs/platform/list/browser/listService';
|
|
import { Schemas } from 'vs/base/common/network';
|
|
-import { DirtyWorkingCopiesContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, WorkbenchStateContext, WorkspaceFolderCountContext, SidebarFocusContext, ActiveEditorCanRevertContext, ActiveEditorContext, ResourceContextKey, ActiveEditorAvailableEditorIdsContext } from 'vs/workbench/common/contextkeys';
|
|
+import { DirtyWorkingCopiesContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, WorkbenchStateContext, WorkspaceFolderCountContext, SidebarFocusContext, ActiveEditorCanRevertContext, ActiveEditorContext, ResourceContextKey, ActiveEditorAvailableEditorIdsContext, IsEnabledFileDownloads } from 'vs/workbench/common/contextkeys';
|
|
import { IsWebContext } from 'vs/platform/contextkey/common/contextkeys';
|
|
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
|
import { ThemeIcon } from 'vs/base/common/themables';
|
|
@@ -485,13 +485,16 @@ MenuRegistry.appendMenuItem(MenuId.Explo
|
|
id: DOWNLOAD_COMMAND_ID,
|
|
title: DOWNLOAD_LABEL
|
|
},
|
|
- when: ContextKeyExpr.or(
|
|
- // native: for any remote resource
|
|
- ContextKeyExpr.and(IsWebContext.toNegated(), ResourceContextKey.Scheme.notEqualsTo(Schemas.file)),
|
|
- // web: for any files
|
|
- ContextKeyExpr.and(IsWebContext, ExplorerFolderContext.toNegated(), ExplorerRootContext.toNegated()),
|
|
- // web: for any folders if file system API support is provided
|
|
- ContextKeyExpr.and(IsWebContext, HasWebFileSystemAccess)
|
|
+ when: ContextKeyExpr.and(
|
|
+ IsEnabledFileDownloads,
|
|
+ ContextKeyExpr.or(
|
|
+ // native: for any remote resource
|
|
+ ContextKeyExpr.and(IsWebContext.toNegated(), ResourceContextKey.Scheme.notEqualsTo(Schemas.file)),
|
|
+ // web: for any files
|
|
+ ContextKeyExpr.and(IsWebContext, ExplorerFolderContext.toNegated(), ExplorerRootContext.toNegated()),
|
|
+ // web: for any folders if file system API support is provided
|
|
+ ContextKeyExpr.and(IsWebContext, HasWebFileSystemAccess)
|
|
+ )
|
|
)
|
|
}));
|
|
|
|
Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts
|
|
@@ -35,6 +35,8 @@ export const HasWebFileSystemAccess = ne
|
|
|
|
export const EmbedderIdentifierContext = new RawContextKey<string | undefined>('embedderIdentifier', undefined, localize('embedderIdentifier', 'The identifier of the embedder according to the product service, if one is defined'));
|
|
|
|
+export const IsEnabledFileDownloads = new RawContextKey<boolean>('isEnabledFileDownloads', true, true);
|
|
+
|
|
//#endregion
|
|
|
|
|