Skip to content

Commit a636c34

Browse files
committed
Save snapshots in segmented format
1 parent aea5881 commit a636c34

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

lib/asciinema/ecto/type/snapshot.ex

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ defmodule Asciinema.Ecto.Type.Snapshot do
1212
snapshot =
1313
value
1414
|> Jason.decode!()
15-
|> Snapshot.new()
15+
|> Snapshot.new(:segments)
1616

1717
{:ok, snapshot}
1818
end
1919

2020
def dump(%Snapshot{} = value) do
2121
value
22+
|> Snapshot.regroup(:cells)
23+
|> Snapshot.regroup(:segments, split_specials: false)
2224
|> Snapshot.unwrap()
2325
|> Jason.encode()
2426
end

lib/asciinema/recordings/snapshot.ex

+10-7
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,11 @@ defmodule Asciinema.Recordings.Snapshot do
6666

6767
defp invert_colors(attrs), do: attrs
6868

69-
def regroup(%__MODULE__{mode: mode} = snapshot, mode), do: snapshot
69+
def regroup(snapshot, mode, opts \\ [])
7070

71-
def regroup(%__MODULE__{lines: lines}, :cells) do
71+
def regroup(%__MODULE__{mode: mode} = snapshot, mode, _opts), do: snapshot
72+
73+
def regroup(%__MODULE__{lines: lines}, :cells, _opts) do
7274
lines =
7375
Enum.map(lines, fn line ->
7476
Enum.flat_map(line, &split_segment/1)
@@ -77,8 +79,9 @@ defmodule Asciinema.Recordings.Snapshot do
7779
%__MODULE__{lines: lines, mode: :cells}
7880
end
7981

80-
def regroup(%__MODULE__{lines: lines}, :segments) do
81-
lines = Enum.map(lines, &group_line_segments/1)
82+
def regroup(%__MODULE__{lines: lines}, :segments, opts) do
83+
split_specials = Keyword.get(opts, :split_specials, true)
84+
lines = Enum.map(lines, &group_line_segments(&1, split_specials))
8285

8386
%__MODULE__{lines: lines, mode: :segments}
8487
end
@@ -91,13 +94,13 @@ defmodule Asciinema.Recordings.Snapshot do
9194
|> Enum.map(&{&1, attrs, char_width})
9295
end
9396

94-
defp group_line_segments([]), do: []
97+
defp group_line_segments([], _split_specials), do: []
9598

96-
defp group_line_segments(cells) do
99+
defp group_line_segments(cells, split_specials) do
97100
{segments, last_segment} =
98101
Enum.reduce(cells, {[], nil}, fn {cur_char, cur_attrs, cur_char_width} = current,
99102
{segments, prev} ->
100-
if cur_char_width > 1 || special_char(cur_char) do
103+
if split_specials && (cur_char_width > 1 || special_char(cur_char)) do
101104
{[current, prev | segments], nil}
102105
else
103106
case prev do

0 commit comments

Comments
 (0)