|  | // Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | import 'dart:convert'; | 
|  | import 'dart:io'; | 
|  |  | 
|  | import 'package:dtd/dtd.dart'; | 
|  | import 'package:path/path.dart' as path; | 
|  |  | 
|  | /// IMPORTANT: the `dtdUrl` below should point to a Dart Tooling Daemon instance | 
|  | /// that has been started with the --unrestricted flag: | 
|  | /// ```sh | 
|  | /// > dart tooling-daemon | 
|  | /// The Dart Tooling Daemon is listening on ws://127.0.0.1:62925/cKB5QFiAUNMzSzlb | 
|  | /// > dart run dtd_file_system_service_example.dart ws://127.0.0.1:62925/cKB5QFiAUNMzSzlb /path/to/a/test/directory | 
|  | /// ``` | 
|  | void main(List<String> args) async { | 
|  | final dtdUrl = args[0]; // pass the url as a param to the example | 
|  |  | 
|  | // The directory to run in is passed as the 2nd argument to this example. | 
|  | final workingDirectory = Directory.fromUri(Uri.parse(args[1])); | 
|  |  | 
|  | final dtdSecret = args.length >= 3 ? args[2] : null; | 
|  |  | 
|  | // Create the client that will be talking to the FileSystem service. | 
|  | final client = await DartToolingDaemon.connect( | 
|  | Uri.parse(dtdUrl), | 
|  | ); | 
|  |  | 
|  | if (dtdSecret != null) { | 
|  | // If the dtd secret is passed as an argument, then set our example | 
|  | // directory as the ide workspace roots. This will ensure that there is | 
|  | // permission for the client to perform actions on that directory. | 
|  | await client.setIDEWorkspaceRoots(dtdSecret, [workingDirectory.uri]); | 
|  | } | 
|  |  | 
|  | try { | 
|  | final testFile = Uri.file(path.join(workingDirectory.path, 'a.txt')); | 
|  |  | 
|  | // Writing a file from a DTD client. | 
|  | await client.writeFileAsString( | 
|  | testFile, | 
|  | 'Here are some file contents to write.', | 
|  | ); | 
|  |  | 
|  | // Reading a file from a DTD client. | 
|  | final fileContents = await client.readFileAsString(testFile); | 
|  |  | 
|  | print(jsonEncode({'step': 'read', 'response': fileContents.toJson()})); | 
|  |  | 
|  | // Listing directories from a DTD client. | 
|  | final listFilesResponse = await client.listDirectoryContents( | 
|  | workingDirectory.uri, | 
|  | ); | 
|  |  | 
|  | print( | 
|  | jsonEncode( | 
|  | {'step': 'listDirectories', 'response': listFilesResponse.toJson()}, | 
|  | ), | 
|  | ); | 
|  | } finally { | 
|  | await client.close(); | 
|  | } | 
|  | } |