SpotifyException.fromPlatformException constructor

SpotifyException.fromPlatformException(
  1. PlatformException e
)

Factory mapping a PlatformException by its code and message into the appropriate domain exception subtype.

Implementation

factory SpotifyException.fromPlatformException(PlatformException e) {
  final codeLower = e.code.toLowerCase();
  final msg = (e.message != null && e.message!.isNotEmpty)
      ? e.message!
      : e.code;

  if (codeLower.contains('notinstalled') ||
      codeLower.contains('not_installed') ||
      codeLower.contains('spotifynotinstalled')) {
    return SpotifyNotInstalledException(
      msg,
      code: e.code,
      details: e.details,
      cause: e,
    );
  }

  if (codeLower.contains('auth') || codeLower.contains('token')) {
    return SpotifyAuthenticationException(
      msg,
      code: e.code,
      details: e.details,
      cause: e,
    );
  }

  if (codeLower.contains('connecting') ||
      codeLower.contains('connection') ||
      codeLower.contains('appremotenull') ||
      codeLower.contains('pendingoperation') ||
      codeLower.contains('not ready')) {
    return SpotifyConnectionException(
      msg,
      code: e.code,
      details: e.details,
      cause: e,
    );
  }

  if (codeLower.contains('library') || codeLower.contains('capabilities')) {
    return SpotifyLibraryException(
      msg,
      code: e.code,
      details: e.details,
      cause: e,
    );
  }

  if (codeLower.contains('image')) {
    return SpotifyImageException(
      msg,
      code: e.code,
      details: e.details,
      cause: e,
    );
  }

  if (codeLower.contains('play') ||
      codeLower.contains('pause') ||
      codeLower.contains('resume') ||
      codeLower.contains('skip') ||
      codeLower.contains('seek') ||
      codeLower.contains('shuffle') ||
      codeLower.contains('repeat') ||
      codeLower.contains('queue')) {
    return SpotifyPlaybackException(
      msg,
      code: e.code,
      details: e.details,
      cause: e,
    );
  }

  if (codeLower.contains('unimplemented')) {
    return SpotifyUnimplementedException(
      msg,
      code: e.code,
      details: e.details,
      cause: e,
    );
  }

  return SpotifyGeneralException(
    msg,
    code: e.code,
    details: e.details,
    cause: e,
  );
}