Skip to content

Commit 06ce782

Browse files
committed
Refined page loading
Refactored RefreshPages -> RefreshSpreads Only call RefreshSpreads when the model.spreadIndex is moved outside the bounds of buffered pages
1 parent ee58881 commit 06ce782

File tree

2 files changed

+34
-18
lines changed

2 files changed

+34
-18
lines changed

cmd/cbxv/messagehandlers.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
3232
if m.SpreadIndex < len(m.Spreads)-1 {
3333
m.SpreadIndex++
3434
m.PageIndex = m.Spreads[m.SpreadIndex].VersoPage()
35-
m.RefreshPages()
35+
if !m.SpreadLoaded(m.SpreadIndex) {
36+
m.RefreshSpreads()
37+
}
3638
} else {
3739
handlers.List["nextFile"]("")
3840
}
@@ -42,7 +44,9 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
4244
if m.SpreadIndex > 0 {
4345
m.SpreadIndex--
4446
m.PageIndex = m.Spreads[m.SpreadIndex].VersoPage()
45-
m.RefreshPages()
47+
if !m.SpreadLoaded(m.SpreadIndex) {
48+
m.RefreshSpreads()
49+
}
4650
} else {
4751
handlers.List["previousFile"]("")
4852
}
@@ -51,13 +55,13 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
5155
handlers.List["firstPage"] = func(data string) {
5256
m.SpreadIndex = 0
5357
m.PageIndex = m.Spreads[m.SpreadIndex].VersoPage()
54-
m.RefreshPages()
58+
m.RefreshSpreads()
5559
}
5660

5761
handlers.List["lastPage"] = func(data string) {
5862
m.SpreadIndex = (len(m.Spreads) - 1)
5963
m.PageIndex = m.Spreads[m.SpreadIndex].VersoPage()
60-
m.RefreshPages()
64+
m.RefreshSpreads()
6165
}
6266

6367
handlers.List["lastBookmark"] = func(data string) {
@@ -68,7 +72,7 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
6872
m.SpreadIndex = m.PageToSpread(bkmk.PageIndex)
6973
m.PageIndex = bkmk.PageIndex
7074
}
71-
m.RefreshPages()
75+
m.RefreshSpreads()
7276
}
7377
}
7478

@@ -89,22 +93,22 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
8993
m.LayoutMode = model.ONE_PAGE
9094
m.NewSpreads()
9195
m.SpreadIndex = m.PageToSpread(m.PageIndex)
92-
m.RefreshPages()
96+
m.RefreshSpreads()
9397
}
9498

9599
handlers.List["setLayoutModeTwoPage"] = func(data string) {
96100
m.LayoutMode = model.TWO_PAGE
97101
m.NewSpreads()
98102
m.SpreadIndex = m.PageToSpread(m.PageIndex)
99-
m.RefreshPages()
103+
m.RefreshSpreads()
100104
}
101105

102106
handlers.List["setLayoutModeLongStrip"] = func(data string) {
103107
m.LayoutMode = model.LONG_STRIP
104108
m.NewSpreads()
105109
m.SpreadIndex = 0
106110
m.PageIndex = m.Spreads[m.SpreadIndex].VersoPage()
107-
m.RefreshPages()
111+
m.RefreshSpreads()
108112
}
109113

110114
handlers.List["toggleDirection"] = func(data string) {
@@ -223,7 +227,7 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
223227
} else {
224228
p.Span = model.SINGLE
225229
}
226-
m.RefreshPages()
230+
m.RefreshSpreads()
227231
m.NewSpreads()
228232
m.StoreLayout()
229233
m.SpreadIndex = m.PageToSpread(pi)
@@ -241,7 +245,7 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
241245
p.Hidden = true
242246

243247
// Recalculate layout
244-
m.RefreshPages()
248+
m.RefreshSpreads()
245249
m.NewSpreads()
246250
m.StoreLayout()
247251

@@ -273,7 +277,7 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
273277
// Recalculate layout
274278
p := &m.Pages[i]
275279
p.Hidden = false
276-
m.RefreshPages()
280+
m.RefreshSpreads()
277281
m.NewSpreads()
278282
m.StoreLayout()
279283

@@ -283,7 +287,7 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
283287
}
284288

285289
handlers.List["loadAllPages"] = func(data string) {
286-
m.RefreshPages()
290+
m.RefreshSpreads()
287291
m.NewSpreads()
288292
}
289293

internal/model/model.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -490,8 +490,22 @@ func (m *Model) CloseCbxFile() {
490490
debug.FreeOSMemory()
491491
}
492492

493-
// Walk the layout and load/unload pages as needed
494-
func (m *Model) RefreshPages() {
493+
// Test if a given spread is fully loaded
494+
func (m *Model) SpreadLoaded(spreadIndex int) bool {
495+
m.printLoaded()
496+
497+
spread := m.Spreads[spreadIndex]
498+
for i := range spread.Pages {
499+
if !spread.Pages[i].Loaded {
500+
return false
501+
}
502+
}
503+
return true
504+
}
505+
506+
// Iterate over spreads and load/unload pages as needed
507+
// based on the current spread index
508+
func (m *Model) RefreshSpreads() {
495509
if m.LayoutMode != LONG_STRIP {
496510
start := int(math.Max(0, float64(m.SpreadIndex-(MAX_LOAD/2)+1)))
497511
end := int(math.Min(float64(m.SpreadIndex+(MAX_LOAD/2)-1), float64(len(m.Spreads)-1)))
@@ -516,9 +530,7 @@ func (m *Model) RefreshPages() {
516530
}
517531
}
518532

519-
if util.DEBUG {
520-
m.printLoaded()
521-
}
533+
m.printLoaded()
522534
} else {
523535
// load all pages
524536
for i := range m.Pages {
@@ -678,6 +690,6 @@ func (m *Model) printLoaded() {
678690
}
679691
}
680692
}
681-
fmt.Printf("%s\n", buf)
693+
util.Log("%s\n", buf)
682694
}
683695

0 commit comments

Comments
 (0)