resolve method

Future<String?> resolve(
  1. String kref
)
inherited

Resolves a kref to a file location string, or null if it cannot be resolved.

Mirrors Python's client.resolve: parses any tag (?t=/?tag=) or timestamp (?time=) from the kref, calls the ResolveLocation RPC, and returns the resulting location. Any RPC failure is swallowed and surfaced as null.

Implementation

Future<String?> resolve(String kref) async {
  String? tag;
  String? time;

  final queryIndex = kref.indexOf('?');
  if (queryIndex >= 0) {
    final params = kref.substring(queryIndex + 1).split('&');
    for (final param in params) {
      if (param.startsWith('t=') || param.startsWith('tag=')) {
        tag = param.substring(param.indexOf('=') + 1);
      } else if (param.startsWith('time=')) {
        time = param.substring(param.indexOf('=') + 1);
      }
    }
  }

  try {
    final response = await resolveLocation(kref, tag: tag, time: time);
    return response.location;
  } catch (_) {
    return null;
  }
}