Skip to content

Commit e2578a5

Browse files
author
Ciro S. Costa
committed
Adds time delta subtration to cut
1 parent 206feaa commit e2578a5

File tree

3 files changed

+87
-33
lines changed

3 files changed

+87
-33
lines changed

editor/cut.go

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package editor
22

33
import (
4+
"math"
5+
46
"github.com/cirocosta/asciinema-edit/cast"
57
"github.com/pkg/errors"
68
)
@@ -64,6 +66,14 @@ func Cut(c *cast.Cast, from, to float64) (err error) {
6466
return
6567
}
6668

69+
if toIdx+1 < len(c.EventStream) {
70+
delta := c.EventStream[toIdx+1].Time - c.EventStream[fromIdx].Time
71+
for _, remainingElem := range c.EventStream[toIdx+1:] {
72+
remainingElem.Time -= delta
73+
remainingElem.Time = math.Round(remainingElem.Time*1000) / 1000
74+
}
75+
}
76+
6777
c.EventStream = append(
6878
c.EventStream[:fromIdx],
6979
c.EventStream[toIdx+1:]...)

editor/cut_test.go

+66-33
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,6 @@ import (
88
"github.com/cirocosta/asciinema-edit/editor"
99
)
1010

11-
var (
12-
event1 = &cast.Event{
13-
Time: 1,
14-
Data: "event1",
15-
}
16-
event1_2 = &cast.Event{
17-
Time: 1.2,
18-
Data: "event1_2",
19-
}
20-
event1_6 = &cast.Event{
21-
Time: 1.6,
22-
Data: "event1_6",
23-
}
24-
event2 = &cast.Event{
25-
Time: 2,
26-
Data: "event2",
27-
}
28-
)
29-
3011
var _ = Describe("Cut", func() {
3112
Context("with nil cast", func() {
3213
It("fails", func() {
@@ -48,12 +29,30 @@ var _ = Describe("Cut", func() {
4829

4930
Context("with non-empty event stream", func() {
5031
var (
51-
err error
52-
data *cast.Cast
53-
initialNumberOfEvents int
32+
err error
33+
data *cast.Cast
34+
initialNumberOfEvents int
35+
event1, event1_2, event1_6, event2 *cast.Event
5436
)
5537

5638
BeforeEach(func() {
39+
event1 = &cast.Event{
40+
Time: 1,
41+
Data: "event1",
42+
}
43+
event1_2 = &cast.Event{
44+
Time: 1.2,
45+
Data: "event1_2",
46+
}
47+
event1_6 = &cast.Event{
48+
Time: 1.6,
49+
Data: "event1_6",
50+
}
51+
event2 = &cast.Event{
52+
Time: 2,
53+
Data: "event2",
54+
}
55+
5756
data = &cast.Cast{
5857
EventStream: []*cast.Event{
5958
event1,
@@ -71,19 +70,52 @@ var _ = Describe("Cut", func() {
7170
Expect(err).ToNot(Succeed())
7271
})
7372

74-
It("cuts single frame if `from` == `to`", func() {
75-
err = editor.Cut(data, 1.2, 1.2)
76-
Expect(err).To(Succeed())
77-
78-
Expect(data.EventStream).To(ContainElement(event1))
79-
Expect(data.EventStream).ToNot(ContainElement(event1_2))
80-
Expect(data.EventStream).To(ContainElement(event1_6))
81-
Expect(data.EventStream).To(ContainElement(event2))
73+
Context("cutting a single frame when `from` == `to`", func() {
74+
JustBeforeEach(func() {
75+
err = editor.Cut(data, 1.2, 1.2)
76+
Expect(err).To(Succeed())
77+
})
78+
79+
It("removes the frame", func() {
80+
Expect(data.EventStream).To(ContainElement(event1))
81+
Expect(data.EventStream).ToNot(ContainElement(event1_2))
82+
Expect(data.EventStream).To(ContainElement(event1_6))
83+
Expect(data.EventStream).To(ContainElement(event2))
84+
85+
Expect(len(data.EventStream)).
86+
To(Equal(initialNumberOfEvents - 1))
87+
})
88+
89+
It("adjusts the remaining time stamps", func() {
90+
Expect(event1.Time).To(Equal(float64(1)))
91+
Expect(event1_6.Time).To(Equal(float64(1.2)))
92+
Expect(event2.Time).To(Equal(float64(1.6)))
93+
})
94+
})
8295

83-
Expect(len(data.EventStream)).To(Equal(initialNumberOfEvents - 1))
96+
Context("cutting range without bounds included", func() {
97+
JustBeforeEach(func() {
98+
err = editor.Cut(data, 1.2, 1.6)
99+
Expect(err).To(Succeed())
100+
})
101+
102+
It("removes the frame", func() {
103+
Expect(data.EventStream).To(ContainElement(event1))
104+
Expect(data.EventStream).ToNot(ContainElement(event1_2))
105+
Expect(data.EventStream).ToNot(ContainElement(event1_6))
106+
Expect(data.EventStream).To(ContainElement(event2))
107+
108+
Expect(len(data.EventStream)).
109+
To(Equal(initialNumberOfEvents - 2))
110+
})
111+
112+
It("adjusts the remaining time stamps", func() {
113+
Expect(event1.Time).To(Equal(float64(1)))
114+
Expect(event2.Time).To(Equal(float64(1.2)))
115+
})
84116
})
85117

86-
It("cuts frames in range", func() {
118+
It("cuts frames in range containing last element", func() {
87119
err = editor.Cut(data, 1.2, 2)
88120
Expect(err).To(Succeed())
89121

@@ -92,7 +124,8 @@ var _ = Describe("Cut", func() {
92124
Expect(data.EventStream).ToNot(ContainElement(event1_6))
93125
Expect(data.EventStream).ToNot(ContainElement(event2))
94126

95-
Expect(len(data.EventStream)).To(Equal(initialNumberOfEvents - 3))
127+
Expect(len(data.EventStream)).
128+
To(Equal(initialNumberOfEvents - 3))
96129
})
97130
})
98131
})

editor/quantize.go

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package editor
2+
3+
// Quantize constraints a set of inputs that lie in a range to a single
4+
// value that corresponds to the lower bound of such range.
5+
//
6+
// 1. capture all delays
7+
// 2. for each delay, check if the delay fits in the quantization
8+
// range.
9+
// 3. if it fits, reduce the delay to the maximum allowed (floor of
10+
// the quantization range).
11+
// 4. adjust the rest of the event stream.

0 commit comments

Comments
 (0)