1

I am working in the microsoft/azuredatastudio github repo, which is largely forked from vscode. I am trying to extend our command line processing to handle the window reuse parameter such that if we pass a server connection along with -r that we will open the specified connection. Our current command line processing service is loaded by src\vs\workbench\electron-browser\workbench.ts in Workbench.initServices.

Is there any platform-provided service that is visible to both electron-main and workbench\electron-browser that I could modify or leverage to be informed of the app being reused with new command line arguments?

I've found that the LaunchService defined in src\vs\code\electron-main\launch.ts appears to be responsible for capturing the arguments and opening or reusing the window, but it's not clear how I would marshal a notification from the LaunchService over to our services that are loaded by workbench.

2/12/2019 update: It looks like I need to add an equivalent of this function in src\vs\code\electron-main\windows.ts

    private doOpenFilesInExistingWindow(configuration: IOpenConfiguration, window: ICodeWindow, filesToOpen: IPath[], filesToCreate: IPath[], filesToDiff: IPath[], filesToWait: IPathsToWaitFor): ICodeWindow {
    window.focus(); // make sure window has focus

    window.ready().then(readyWindow => {
        const termProgram = configuration.userEnv ? configuration.userEnv['TERM_PROGRAM'] : void 0;
        readyWindow.send('vscode:openFiles', { filesToOpen, filesToCreate, filesToDiff, filesToWait, termProgram });
    });

    return window;
}

which has a new message like 'ads:openconnection' . Now to find out how to handle the message.

1 Answers1

0

I ended up using ipcRenderer service and adding an ipc call to the launch service in main.

    // {{SQL CARBON EDIT}}
    // give the first used window a chance to process the other command line arguments
    if (args['reuse-window'] && usedWindows.length > 0 && usedWindows[0])
    {
        let window = usedWindows[0];
        usedWindows[0].ready().then(() => window.send('ads:processCommandLine', args));
    }
    // {{SQL CARBON EDIT}}