diff --git a/cmd/list/list.go b/cmd/list/list.go index 7958563..583bcae 100644 --- a/cmd/list/list.go +++ b/cmd/list/list.go @@ -73,16 +73,18 @@ func runner(cmd *cobra.Command, args []string) error { // Sort plans by category and price sort.Slice(catalog.Plans, func(i, j int) bool { - if catalog.Plans[i].Blobs.Commercial.Range != catalog.Plans[j].Blobs.Commercial.Range { + planCategoryI := catalog.Plans[i].GetCategory() + planCategoryJ := catalog.Plans[j].GetCategory() + if planCategoryI != planCategoryJ { // Group plans by category first - a := pkgcategory.GetDisplayName(catalog.Plans[i].Blobs.Commercial.Range) + a := pkgcategory.GetDisplayName(planCategoryI) if a == "" { - a = catalog.Plans[i].Blobs.Commercial.Range + a = planCategoryI } - b := pkgcategory.GetDisplayName(catalog.Plans[j].Blobs.Commercial.Range) + b := pkgcategory.GetDisplayName(planCategoryJ) if b == "" { - b = catalog.Plans[j].Blobs.Commercial.Range + b = planCategoryJ } return a < b @@ -100,8 +102,10 @@ func runner(cmd *cobra.Command, args []string) error { continue } + planCategory := plan.GetCategory() + // Filter plans by category - if category != "" && category != plan.Blobs.Commercial.Range { + if category != "" && category != planCategory { continue } @@ -127,9 +131,9 @@ func runner(cmd *cobra.Command, args []string) error { nothingAvailable = false } - categoryDisplay := pkgcategory.GetDisplayName(plan.Blobs.Commercial.Range) + categoryDisplay := pkgcategory.GetDisplayName(planCategory) if categoryDisplay == "" { - categoryDisplay = plan.Blobs.Commercial.Range + categoryDisplay = planCategory } // Display plan diff --git a/pkg/category/category.go b/pkg/category/category.go index 3587e1a..7b78c71 100644 --- a/pkg/category/category.go +++ b/pkg/category/category.go @@ -3,16 +3,17 @@ package category var ( // Categories is a list of known plan categories, including an empty string for uncategorized plans Categories = []category{ - {"kimsufi", "Kimsufi"}, - {"soyoustart", "So you Start"}, - {"rise", "Rise"}, - {"", "uncategorized"}, + {"kimsufi", "Kimsufi", "sk"}, + {"soyoustart", "So you Start", "sys"}, + {"rise", "Rise", "rise"}, + {"", "uncategorized", ""}, } ) type category struct { Name string DisplayName string + ShortCode string } func GetDisplayName(name string) string { diff --git a/pkg/kimsufi/catalog/plan_methods.go b/pkg/kimsufi/catalog/plan_methods.go index 81f1ad1..627468a 100644 --- a/pkg/kimsufi/catalog/plan_methods.go +++ b/pkg/kimsufi/catalog/plan_methods.go @@ -3,6 +3,9 @@ package catalog import ( "math" "slices" + "strings" + + pkgcategory "github.com/TheoBrigitte/kimsufi-notifier/pkg/category" ) const ( @@ -42,6 +45,22 @@ func (p *Plan) GetAddon(name string) *PlanAddonFamily { return nil } +func (p *Plan) GetCategory() string { + if p.Blobs.Commercial.Range != "" { + return p.Blobs.Commercial.Range + } + + if len(p.PlanCode) > 2 { + for _, category := range pkgcategory.Categories { + if category.ShortCode != "" && strings.HasPrefix(p.PlanCode[2:], category.ShortCode) { + return category.Name + } + } + } + + return "" +} + // GetConfiguration returns the first configuration that matches the provided name. func (p Plan) GetConfiguration(name string) *PlanConfiguration { for _, config := range p.Configurations {