mirror of
https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
synced 2025-10-28 16:45:32 +00:00
revised page sorting
This commit is contained in:
@@ -1,11 +1,6 @@
|
||||
package viewmodels
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/Theodor-Springmann-Stiftung/kgpz_web/helpers/logging"
|
||||
"github.com/Theodor-Springmann-Stiftung/kgpz_web/providers/xmlprovider"
|
||||
)
|
||||
|
||||
@@ -19,83 +14,3 @@ type PieceViewModel struct {
|
||||
func NewPieceView(p xmlprovider.Piece) (PieceViewModel, error) {
|
||||
return PieceViewModel{Piece: p}, nil
|
||||
}
|
||||
|
||||
type PieceListViewModel struct {
|
||||
IssuePieces []PieceViewModel
|
||||
AdditionalPieces []PieceViewModel
|
||||
}
|
||||
|
||||
func PieceListViewModelForIssue(lib *xmlprovider.Library, y string, No string) (*PieceListViewModel, error) {
|
||||
p := PieceListViewModel{}
|
||||
err := p.piecesForIsssue(y, No, lib)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &p, nil
|
||||
}
|
||||
|
||||
func (plvm *PieceListViewModel) piecesForIsssue(y string, No string, lib *xmlprovider.Library) error {
|
||||
lookfor := y + "-" + No + "-"
|
||||
noi, err := strconv.Atoi(No)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
lib.Pieces.Items.Range(func(key, value interface{}) bool {
|
||||
k := key.(string)
|
||||
if strings.HasPrefix(k, lookfor) {
|
||||
a := value.(xmlprovider.Piece)
|
||||
p, err := NewPieceView(a)
|
||||
if err != nil {
|
||||
logging.ObjErr(&a, err)
|
||||
return true
|
||||
}
|
||||
|
||||
if strings.HasPrefix(k, lookfor+"b-") {
|
||||
for _, i := range p.AdditionalRef {
|
||||
if i.Datum == y && i.Nr == noi {
|
||||
p.Von = i.Von
|
||||
p.Bis = i.Bis
|
||||
}
|
||||
}
|
||||
plvm.AdditionalPieces = append(plvm.AdditionalPieces, p)
|
||||
} else {
|
||||
for _, i := range p.IssueRefs {
|
||||
if i.Datum == y && i.Nr == noi {
|
||||
p.Von = i.Von
|
||||
p.Bis = i.Bis
|
||||
}
|
||||
}
|
||||
plvm.IssuePieces = append(plvm.IssuePieces, p)
|
||||
}
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (plvm *PieceListViewModel) Sort(y string, no int) {
|
||||
SortPiecesByPage(&plvm.IssuePieces, y, no)
|
||||
SortPiecesByPage(&plvm.AdditionalPieces, y, no)
|
||||
}
|
||||
|
||||
func SortPiecesByPage(pieces *[]PieceViewModel, y string, no int) {
|
||||
slices.SortFunc(*pieces, func(i, j PieceViewModel) int {
|
||||
if i.Von == j.Von {
|
||||
if i.Bis >= 0 {
|
||||
return 1
|
||||
} else if j.Bis >= 0 {
|
||||
return -1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
if i.Von > j.Von {
|
||||
return 1
|
||||
}
|
||||
|
||||
return -1
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,18 +1,25 @@
|
||||
package viewmodels
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/Theodor-Springmann-Stiftung/kgpz_web/functions"
|
||||
"github.com/Theodor-Springmann-Stiftung/kgpz_web/helpers/logging"
|
||||
"github.com/Theodor-Springmann-Stiftung/kgpz_web/providers/xmlprovider"
|
||||
)
|
||||
|
||||
type SingleIssueViewModel struct {
|
||||
IssueViewModel
|
||||
No int
|
||||
Year string
|
||||
Pieces PieceListViewModel
|
||||
Next IssueViewModel
|
||||
Prev IssueViewModel
|
||||
No int
|
||||
Year string
|
||||
Pieces map[int][]PieceViewModel
|
||||
Pages []int
|
||||
AdditionalPieces map[int][]PieceViewModel
|
||||
AdditionalPages []int
|
||||
Next IssueViewModel
|
||||
Prev IssueViewModel
|
||||
}
|
||||
|
||||
func NewSingleIssueView(y string, No string, lib *xmlprovider.Library) (*SingleIssueViewModel, error) {
|
||||
@@ -21,7 +28,6 @@ func NewSingleIssueView(y string, No string, lib *xmlprovider.Library) (*SingleI
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pl, err := PieceListViewModelForIssue(lib, y, No)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -31,9 +37,66 @@ func NewSingleIssueView(y string, No string, lib *xmlprovider.Library) (*SingleI
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sivm := SingleIssueViewModel{IssueViewModel: *ivm, No: no, Year: y, Pieces: *pl}
|
||||
sivm := SingleIssueViewModel{IssueViewModel: *ivm, No: no, Year: y}
|
||||
|
||||
sivm.Pieces.Sort(y, no)
|
||||
if err := sivm.PiecesForIsssue(lib); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
slices.Sort(sivm.Pages)
|
||||
slices.Sort(sivm.AdditionalPages)
|
||||
|
||||
return &sivm, nil
|
||||
}
|
||||
|
||||
func (issue *SingleIssueViewModel) PiecesForIsssue(lib *xmlprovider.Library) error {
|
||||
nostr := strconv.Itoa(issue.No)
|
||||
lookfor := issue.Year + "-" + nostr + "-"
|
||||
n := issue.No
|
||||
y := issue.Year
|
||||
|
||||
adp := make(map[int][]PieceViewModel)
|
||||
ip := make(map[int][]PieceViewModel)
|
||||
|
||||
lib.Pieces.Items.Range(func(key, value interface{}) bool {
|
||||
k := key.(string)
|
||||
if strings.HasPrefix(k, lookfor) {
|
||||
a := value.(xmlprovider.Piece)
|
||||
p, err := NewPieceView(a)
|
||||
if err != nil {
|
||||
logging.ObjErr(&a, err)
|
||||
return true
|
||||
}
|
||||
|
||||
if strings.HasPrefix(k, lookfor+"b-") {
|
||||
for _, i := range p.AdditionalRef {
|
||||
// INFO: Here we find the page number the piece has in THIS issue, same below
|
||||
if i.Datum == y && i.Nr == n {
|
||||
p.Von = i.Von
|
||||
p.Bis = i.Bis
|
||||
}
|
||||
}
|
||||
|
||||
functions.MapArrayInsert(adp, p.Von, p)
|
||||
} else {
|
||||
for _, i := range p.IssueRefs {
|
||||
if i.Datum == y && i.Nr == n {
|
||||
p.Von = i.Von
|
||||
p.Bis = i.Bis
|
||||
}
|
||||
}
|
||||
|
||||
functions.MapArrayInsert(ip, p.Von, p)
|
||||
}
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
issue.Pieces = ip
|
||||
issue.Pages = functions.Keys(ip)
|
||||
|
||||
issue.AdditionalPieces = adp
|
||||
issue.AdditionalPages = functions.Keys(adp)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user