code: async def source(dev: Device, scheme):
      
      if scheme is None:
          schemes = await dev.get_schemes()
          schemes = [scheme.scheme for scheme in schemes]  # noqa: T484
      else:
          schemes = [scheme]
  
      for schema in schemes:
          try:
              sources = await dev.get_source_list(schema)
          except SongpalException as ex:
              click.echo("Unable to get sources for %s" % schema)
              continue
          for src in sources:
              click.echo(src)
              if src.isBrowsable:
                  try:
                      count = await dev.get_content_count(src.source)
                      if count.count > 0:
                          click.echo("  %s" % count)
                          for content in await dev.get_contents(src.source):
                              click.echo("   %s\n\t%s" % (content.title, content.uri))
                      else:
                          click.echo("  No content to list.")
                  except SongpalException as ex:
                      click.echo("  %s" % ex)
docs: List available sources.
  
      If no `scheme` is given, will list sources for all sc hemes.