get method

Future<PlexApiResponse> get(
  1. String url, {
  2. Map<String, dynamic>? query,
  3. Map<String, String>? headers,
})

Implementation

Future<PlexApiResponse> get(String url, {Map<String, dynamic>? query, Map<String, String>? headers}) async {
  if (await isNetworkAvailable() == false) {
    return _noNetwork;
  }

  if (query != null && query.isNotEmpty) {
    url += "?";
    query.forEach((key, value) {
      url += "$key=$value&";
    });
    url = url.substring(0, url.length - 1);
  }

  var currentHeaders = <String, String>{};

  if (addHeaders != null) {
    var constHeaders = await addHeaders!.call();
    currentHeaders.addAll(constHeaders);
  }

  if (headers != null) {
    currentHeaders.addAll(headers);
  }

  if (!currentHeaders.containsKey("Content-Type")) {
    currentHeaders["Content-Type"] = "application/json";
  }

  try {
    var startTime = DateTime.now();
    var uri = Uri.parse(_isValidUrl(url) ? url : _apiUrl() + url);
    if (kDebugMode) print("Started: ${uri.toString()}");

    var data = await http.get(uri, headers: currentHeaders).timeout(Duration(seconds: 120), onTimeout: () {
      print("Timeout");
      return http.Response('Error', 408);
    });
    var diffInMillis = DateTime.now().difference(startTime).inMilliseconds;
    if (kDebugMode) print("Completed: ${data.statusCode}: ${uri.toString()} in ${diffInMillis}ms");
    if (data.statusCode == 200) {
      return PlexSuccess(data.body);
    } else {
      if (data.body.isEmpty) {
        return PlexError(data.statusCode, data.reasonPhrase ?? data.body);
      }
      return PlexError(data.statusCode, data.body);
    }
  } catch (e) {
    if (e is SocketException) {
      return _connectionFailed;
    }
    if (kDebugMode) print("Error: ${e.toString()}");
    return PlexError(400, e.toString());
  }
}