Added delete-unused-characters patch

This commit is contained in:
Eduard Urbach 2018-04-11 12:05:02 +02:00
parent 3cf7523d13
commit d2de04246c
3 changed files with 119 additions and 68 deletions

View File

@ -0,0 +1,59 @@
package main
import (
"fmt"
"time"
"github.com/animenotifier/arn"
"github.com/fatih/color"
)
func main() {
color.Yellow("Deleting unused characters")
defer color.Green("Finished")
defer arn.Node.Close()
used := map[string]bool{}
// Check quotes
for quote := range arn.StreamQuotes() {
used[quote.CharacterID] = true
}
// Check log
for entry := range arn.StreamEditLogEntries() {
if entry.ObjectType != "Character" {
continue
}
used[entry.ObjectID] = true
}
// Check anime characters
for list := range arn.StreamAnimeCharacters() {
for _, animeCharacter := range list.Items {
used[animeCharacter.CharacterID] = true
}
}
characters := []*arn.Character{}
// Delete unused characters
for character := range arn.StreamCharacters() {
if used[character.ID] {
characters = append(characters, character)
} else {
fmt.Println("Deleting", character.ID, character)
}
}
arn.DB.Clear("Character")
for _, character := range characters {
character.Save()
}
fmt.Println(len(used), len(characters))
time.Sleep(2 * time.Second)
}

View File

@ -1,85 +1,69 @@
package main package main
import (
"fmt"
"sort"
"strconv"
"github.com/animenotifier/arn"
"github.com/fatih/color"
)
func main() { func main() {
color.Yellow("Generating character IDs") // color.Yellow("Generating character IDs")
defer color.Green("Finished") // defer color.Green("Finished")
defer arn.Node.Close() // defer arn.Node.Close()
allCharacters := arn.FilterCharacters(func(character *arn.Character) bool { // sort.Slice(allCharacters, func(i, j int) bool {
return len(character.ID) < len("hw5heOmiR") // aID, _ := strconv.Atoi(allCharacters[i].ID)
}) // bID, _ := strconv.Atoi(allCharacters[j].ID)
sort.Slice(allCharacters, func(i, j int) bool { // return aID < bID
aID, _ := strconv.Atoi(allCharacters[i].ID) // })
bID, _ := strconv.Atoi(allCharacters[j].ID)
return aID < bID // // Create map of old IDs to new IDs
}) // idMap := map[string]string{}
// Create map of old IDs to new IDs // for counter, character := range allCharacters {
idMap := map[string]string{} // newID := arn.GenerateID("Character")
// fmt.Printf("[%d / %d] Old [%s] New [%s] %s\n", counter+1, len(allCharacters), color.YellowString(character.ID), color.GreenString(newID), character)
// arn.DB.Delete("Character", character.ID)
// idMap[character.ID] = newID
// character.ID = newID
// character.Save()
// }
for counter, character := range allCharacters { // // Update quotes
newID := arn.GenerateID("Character") // for quote := range arn.StreamQuotes() {
// newID, exists := idMap[quote.CharacterID]
if character.GetMapping("myanimelist/character") == "" { // if exists {
fmt.Printf("[%d / %d] Old [%s] New [%s] %s\n", counter+1, len(allCharacters), color.YellowString(character.ID), color.GreenString(newID), character) // quote.CharacterID = newID
} // quote.Save()
// }
// }
idMap[character.ID] = newID // // Update log
character.ID = newID // for entry := range arn.StreamEditLogEntries() {
character.Save() // if entry.ObjectType != "Character" {
} // continue
// }
// Update quotes // newID, exists := idMap[entry.ObjectID]
for quote := range arn.StreamQuotes() {
newID, exists := idMap[quote.CharacterID]
if exists { // if exists {
quote.CharacterID = newID // entry.ObjectID = newID
quote.Save() // entry.Save()
} // }
} // }
// Update log // // Update anime characters
for entry := range arn.StreamEditLogEntries() { // for list := range arn.StreamAnimeCharacters() {
if entry.ObjectType != "Character" { // modified := false
continue
}
newID, exists := idMap[entry.ObjectID] // for _, animeCharacter := range list.Items {
// newID, exists := idMap[animeCharacter.CharacterID]
if exists { // if exists {
entry.ObjectID = newID // animeCharacter.CharacterID = newID
entry.Save() // modified = true
} // }
} // }
// Update anime characters // if modified {
for list := range arn.StreamAnimeCharacters() { // list.Save()
modified := false // }
// }
for _, animeCharacter := range list.Items {
newID, exists := idMap[animeCharacter.CharacterID]
if exists {
animeCharacter.CharacterID = newID
modified = true
}
}
if modified {
list.Save()
}
}
} }

View File

@ -188,7 +188,15 @@ var routeTests = map[string][]string{
}, },
"/character/:id": []string{ "/character/:id": []string{
"/character/6556", "/character/dfrNQrmmg-",
},
"/kitsu/character/:id": []string{
"/kitsu/character/6556",
},
"/mal/character/:id": []string{
"/mal/character/498",
}, },
"/compare/animelist/:nick-1/:nick-2": []string{ "/compare/animelist/:nick-1/:nick-2": []string{