Albirew/nyaa-pantsu
Albirew
/
nyaa-pantsu
Archivé
1
0
Bifurcation 0
Ce dépôt a été archivé le 2022-05-07. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
nyaa-pantsu/utils/categories/categories.go

101 lignes
2.2 KiB
Go

package categories
import (
"sort"
"github.com/NyaaPantsu/nyaa/config"
)
// Category is a struct defining a category
type Category struct {
ID string
Name string
}
// Categories is a struct defining an array of categories
type Categories []Category
var categories Categories
// Index variable
var Index map[string]int
// InitCategories init the categories and index variables. Exported for tests
func InitCategories() {
var cats map[string]string
if config.IsSukebei() {
cats = config.Get().Torrents.SukebeiCategories
} else {
cats = config.Get().Torrents.CleanCategories
}
// Sorting categories alphabetically
var index []string
ids := make(map[string]string)
Index = make(map[string]int, len(cats))
for id, name := range cats {
index = append(index, name)
ids[name] = id
}
sort.Strings(index)
// Creating index of categories
for k, name := range index {
categories = append(categories, Category{ids[name], name})
Index[ids[name]] = k
}
}
// All : function to get all categories depending on the actual website from config/categories.go
func All() Categories {
if len(categories) == 0 {
InitCategories()
}
return categories
}
// Get : function to get a category by the key in the index array
func Get(key int) Category {
if len(categories) == 0 {
InitCategories()
}
return All()[key]
}
// GetByID : function to get a category by the id of the category from the database
func GetByID(id string) (Category, bool) {
if len(categories) == 0 {
InitCategories()
}
if key, ok := Index[id]; ok {
return All()[key], true
}
return Category{"", ""}, false
}
// Exists : Check if a category exist in config
func (cats Categories) Exists(id string) bool {
for _, cat := range cats {
if cat.ID == id {
return true
}
}
return false
}
// Exists : Check if a category exist in config
func Exists(category string) bool {
return All().Exists(category)
}
// GetSelect : Format categories in map ordered alphabetically
func GetSelect(keepParent bool, keepChild bool) Categories {
var catSelect Categories
for _, v := range All() {
if (keepParent && keepChild) || (len(v.ID) > 2 && !keepParent) || (len(v.ID) <= 2 && !keepChild) {
catSelect = append(catSelect, v)
}
}
return catSelect
}