Skip to main content

lib/mix/tasks/ttycast.find.ex

defmodule Mix.Tasks.Ttycast.Find do
  @moduledoc """
  Find text in visual recording snapshots.

      mix ttycast.find /tmp/demo.ttycast error
  """

  use Mix.Task

  @shortdoc "Search visual .ttycast snapshots"

  @impl true
  def run(argv) do
    {opts, args, invalid} = OptionParser.parse(argv, strict: [every_ms: :integer])

    if invalid != [] or length(args) != 2 do
      Mix.raise("usage: mix ttycast.find PATH TEXT [--every-ms MS]")
    end

    [path, text] = args

    path
    |> TTYCast.find(text, every_ms: Keyword.get(opts, :every_ms, 250))
    |> Enum.each(fn match ->
      Mix.shell().info("#{match.time_ms}ms #{match.match}")
    end)
  end
end