100 lignes
2,2 Kio
Go
100 lignes
2,2 Kio
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
|
|
}
|