Status FBIDBServiceHandler::ls()

in idb_companion/Server/FBIDBServiceHandler.mm [818:852]


Status FBIDBServiceHandler::ls(grpc::ServerContext *context, const idb::LsRequest *request, idb::LsResponse *response)
{@autoreleasepool{
  NSError *error = nil;
  if (request->paths_size() > 0) {
    NSArray<NSString *> *inputPaths = extract_string_array(request->paths());
    NSDictionary<NSString *, NSArray<NSString *> *> *pathsToPaths = [[_commandExecutor list_paths:inputPaths containerType:file_container(request->container())] block:&error];
    if (error) {
      return Status(grpc::StatusCode::INTERNAL, error.localizedDescription.UTF8String);
    }

    for (NSString *containerPath in pathsToPaths.allKeys) {
      NSArray<NSString *> *paths = pathsToPaths[containerPath];
      idb::FileListing *listing = response->add_listings();
      idb::FileInfo *parent = listing->mutable_parent();
      parent->set_path(containerPath.UTF8String);
      for (NSString *path in paths) {
        idb::FileInfo *info = listing->add_files();
        info->set_path(path.UTF8String);
      }
    }
  } else {
    // Back-compat with single paths
    NSArray<NSString *> *paths = [[_commandExecutor list_path:nsstring_from_c_string(request->path()) containerType:file_container(request->container())] block:&error];
    if (error) {
      return Status(grpc::StatusCode::INTERNAL, error.localizedDescription.UTF8String);
    }

    for (NSString *path in paths) {
      idb::FileInfo *info = response->add_files();
      info->set_path(path.UTF8String);
    }
  }

  return Status::OK;
}}