99 lines
2.1 KiB
Go

package main
import (
"fmt"
"time"
"github.com/akyoto/color"
"github.com/animenotifier/notify.moe/arn"
"github.com/animenotifier/mal"
)
var malDB = arn.Node.Namespace("mal").RegisterTypes((*mal.Anime)(nil))
var companies = map[string]*arn.Company{}
var now = time.Now()
func main() {
defer arn.Node.Close()
color.Yellow("Importing companies")
for company := range arn.StreamCompanies() {
malID := company.GetMapping("myanimelist/producer")
if malID == "" {
continue
}
companies[malID] = company
}
for anime := range arn.StreamAnime() {
malID := anime.GetMapping("myanimelist/anime")
if malID == "" {
continue
}
importCompanies(anime, malID)
}
color.Green("Finished importing %d companies", len(companies))
}
func importCompanies(anime *arn.Anime, malID string) {
obj, err := malDB.Get("Anime", malID)
if err != nil {
fmt.Printf("%s: %s (invalid MAL ID)\n", color.YellowString(anime.ID), color.RedString(malID))
return
}
malAnime := obj.(*mal.Anime)
for _, producer := range malAnime.Studios {
importByName(anime, "studio", producer)
}
for _, producer := range malAnime.Producers {
importByName(anime, "producer", producer)
}
for _, producer := range malAnime.Licensors {
importByName(anime, "licensor", producer)
}
}
func importByName(anime *arn.Anime, companyType string, producer *mal.Producer) {
company, exists := companies[producer.ID]
// If we encounter a company that has not been added yet, save the new company
if !exists {
fmt.Println("Adding new company:", producer.Name)
// Subtract one second every time we create a new company
// so that they don't all end up with the same creation date.
now = now.Add(-time.Second)
// Create new company
company = arn.NewCompany()
company.Name.English = producer.Name
company.Created = now.UTC().Format(time.RFC3339)
company.SetMapping("myanimelist/producer", producer.ID)
company.Save()
// Add company to the global ID map
companies[producer.ID] = company
}
switch companyType {
case "studio":
anime.AddStudio(company.ID)
case "producer":
anime.AddProducer(company.ID)
case "licensor":
anime.AddLicensor(company.ID)
}
anime.Save()
}