11// Copyright (c) Microsoft Corporation.
22// Licensed under the MIT License.
33
4+ import { URLSearchParams } from "url" ;
45import * as vscode from "vscode" ;
56import { initializeApi } from "./api" ;
67import { initializeGitApi } from "./git" ;
78import { registerLiveShareModule } from "./liveShare" ;
89import { registerPlayerModule } from "./player" ;
910import { registerRecorderModule } from "./recorder" ;
10- import { promptForTour , startDefaultTour } from "./store/actions" ;
11+ import { store } from "./store" ;
12+ import {
13+ promptForTour ,
14+ startCodeTour ,
15+ startDefaultTour
16+ } from "./store/actions" ;
1117import { discoverTours as _discoverTours } from "./store/provider" ;
1218
1319/**
@@ -21,16 +27,45 @@ function discoverTours(): Promise<void> {
2127}
2228
2329class URIHandler implements vscode . UriHandler {
24-
2530 private _didStartDefaultTour = false ;
26- get didStartDefaultTour ( ) : boolean { return this . _didStartDefaultTour ; }
31+ get didStartDefaultTour ( ) : boolean {
32+ return this . _didStartDefaultTour ;
33+ }
2734
2835 async handleUri ( uri : vscode . Uri ) : Promise < void > {
29- if ( uri . path === ' /startDefaultTour' ) {
36+ if ( uri . path === " /startDefaultTour" ) {
3037 this . _didStartDefaultTour = true ;
3138
3239 await discoverTours ( ) ;
33- startDefaultTour ( ) ;
40+
41+ let tourPath : string | null | undefined , stepNumber ;
42+ if ( uri . query ) {
43+ const origin = vscode . Uri . parse ( uri . query ) ;
44+ if ( origin . query ) {
45+ const params = new URLSearchParams ( origin . query ) ;
46+ tourPath = params . get ( "tour" ) ;
47+
48+ const step = params . get ( "step" ) ;
49+ if ( step ) {
50+ stepNumber = Number ( step ) ;
51+ }
52+ }
53+ }
54+
55+ if ( tourPath ) {
56+ if ( ! tourPath . endsWith ( ".tour" ) ) {
57+ tourPath = `${ tourPath } .tour` ;
58+ }
59+
60+ const tour = store . tours . find ( tour =>
61+ tour . id . endsWith ( tourPath as string )
62+ ) ;
63+ if ( tour ) {
64+ startCodeTour ( tour , stepNumber ) ;
65+ }
66+ } else {
67+ startDefaultTour ( undefined , undefined , stepNumber ) ;
68+ }
3469 }
3570
3671 return ;
0 commit comments