@@ -534,23 +534,46 @@ func (m *Model) RefreshPages() {
534534 }
535535}
536536
537- // page index to spread index
537+ // Returns 0 if spreads are nil or
538+ // page can't be found
539+ // Otherwise it guesses
540+ // fixme: Don't like it, but there's no point in telling a user about any of it
541+ // because errors detected here are almost certainly the result of a
542+ // programming error elsewhere in the program
538543func (m * Model ) PageToSpread (n int ) int {
539544 if m .Spreads == nil {
545+ util .Log ("p2s: spreads nil %d\n " , n )
540546 return 0
541- } else if n > len (m .Spreads )- 1 {
547+ }
548+
549+ if n < 0 {
550+ util .Log ("p2s: page out of range %d\n " , n )
551+ return 0
552+ }
553+
554+ var pagesNil bool
555+ if m .Pages == nil {
556+ pagesNil = true
557+ util .Log ("p2s: pages nil %d\n " , n )
558+ }
559+
560+ if ! pagesNil && n > len (m .Pages ) - 1 {
561+ max := len (m .Pages ) - 1
562+ util .Log ("p2s: page out of range max: %d, n:%d\n " , max , n )
542563 return len (m .Spreads ) - 1
543- } else if m . LayoutMode == TWO_PAGE {
544- for i := range m . Spreads {
545- spread := m .Spreads [ i ]
546- for j := range spread . PageIdxs {
547- if n == spread .PageIdxs [ j ] {
548- return i
549- }
564+ }
565+
566+ for i := range m .Spreads {
567+ spread := m . Spreads [ i ]
568+ for j := range spread .PageIdxs {
569+ if n == spread . PageIdxs [ j ] {
570+ return i
550571 }
551572 }
552573 }
553- return - 1
574+
575+ util .Log ("p2s: page not found %d\n " , n )
576+ return 0
554577}
555578
556579func (m * Model ) loadBookmarks () {
@@ -622,7 +645,7 @@ func (m *Model) sendOpenFileResMsg(code ResultCode, description string) {
622645 r := Result {code , description }
623646 buf , err := json .Marshal (r )
624647 if err != nil {
625- d = fmt .Sprintf ("{\" code\" :%d,\" result\" :%s }" , r .Code , r .Description )
648+ d = fmt .Sprintf ("{\" code\" :%d,\" result\" :\" %s \" }" , r .Code , r .Description )
626649 } else {
627650 d = string (buf )
628651 }
0 commit comments