Fix categories for imported songs

This commit is contained in:
LoveEevee 2020-04-27 18:47:55 +03:00
parent 962adb1dc7
commit 6d0d5e1632
2 changed files with 83 additions and 35 deletions

View File

@ -38,18 +38,22 @@
"oni": 3, "oni": 3,
"ura": 4 "ura": 4
} }
this.categoryAliases = {} this.categoryAliases = {}
assets.categories.forEach(cat => { assets.categories.forEach(cat => {
this.categoryAliases[cat.title.toLowerCase()] = cat.title this.categoryAliases[cat.title.toLowerCase()] = cat.id
if(cat.aliases != null){ if(cat.aliases){
cat.aliases.forEach(alias => { cat.aliases.forEach(alias => {
this.categoryAliases[alias.toLowerCase()] = cat.title this.categoryAliases[alias.toLowerCase()] = cat.id
}); })
} }
}); if(cat.title_lang){
for(var i in cat.title_lang){
this.categoryAliases[cat.title_lang[i].toLowerCase()] = cat.id
}
}
})
this.assetSelectors = { this.assetSelectors = {
"bg-pattern-1": ".pattern-bg", "bg-pattern-1": ".pattern-bg",
"bg_genre_0": "#song-select", "bg_genre_0": "#song-select",
@ -130,7 +134,11 @@
var equalsPos = line.indexOf("=") var equalsPos = line.indexOf("=")
if(equalsPos !== -1 && line.slice(0, equalsPos).trim() === "genrename"){ if(equalsPos !== -1 && line.slice(0, equalsPos).trim() === "genrename"){
var value = line.slice(equalsPos + 1).trim() var value = line.slice(equalsPos + 1).trim()
category = this.categoryAliases[value] || data[i].trim().slice(equalsPos + 1).trim() if(value.toLowerCase() in this.categoryAliases){
category = value
}else{
category = data[i].trim().slice(equalsPos + 1).trim()
}
break break
} }
} }
@ -140,12 +148,16 @@
var line = data[i].trim().toLowerCase() var line = data[i].trim().toLowerCase()
if(line.startsWith("#title:")){ if(line.startsWith("#title:")){
var value = line.slice(7).trim() var value = line.slice(7).trim()
if(value in this.categoryAliases){ if(value.toLowerCase() in this.categoryAliases){
category = this.categoryAliases[value] category = value
} }
}else if(line.startsWith("#genre:")){ }else if(line.startsWith("#genre:")){
var value = line.slice(7).trim() var value = line.slice(7).trim()
category = this.categoryAliases[value] || data[i].trim().slice(7).trim() if(value.toLowerCase() in this.categoryAliases){
category = value
}else{
category = data[i].trim().slice(7).trim()
}
break break
} }
} }
@ -169,7 +181,11 @@
var filesLoop = fileObj => { var filesLoop = fileObj => {
var tjaPath = fileObj.file.webkitRelativePath.toLowerCase().slice(0, fileObj.file.name.length * -1) var tjaPath = fileObj.file.webkitRelativePath.toLowerCase().slice(0, fileObj.file.name.length * -1)
if(tjaPath.startsWith(metaPath) && (!("categoryLevel" in fileObj) || fileObj.categoryLevel < level)){ if(tjaPath.startsWith(metaPath) && (!("categoryLevel" in fileObj) || fileObj.categoryLevel < level)){
fileObj.category = category if(category.toLowerCase() in this.categoryAliases){
fileObj.category_id = this.categoryAliases[category.toLowerCase()]
}else{
fileObj.category = category
}
fileObj.categoryLevel = level fileObj.categoryLevel = level
} }
} }
@ -189,6 +205,7 @@
var file = fileObj.file var file = fileObj.file
var index = fileObj.index var index = fileObj.index
var category = fileObj.category var category = fileObj.category
var category_id = fileObj.category_id
var reader = new FileReader() var reader = new FileReader()
var promise = pageEvents.load(reader).then(event => { var promise = pageEvents.load(reader).then(event => {
var data = event.target.result.replace(/\0/g, "").split("\n") var data = event.target.result.replace(/\0/g, "").split("\n")
@ -226,7 +243,11 @@
songObj.music = this.otherFiles[dir + meta.wave.toLowerCase()] || songObj.music songObj.music = this.otherFiles[dir + meta.wave.toLowerCase()] || songObj.music
} }
if(meta.genre){ if(meta.genre){
songObj.category = this.categoryAliases[meta.genre.toLowerCase()] || meta.genre if(meta.genre.toLowerCase() in this.categoryAliases){
songObj.category_id = this.categoryAliases[meta.genre.toLowerCase()]
}else{
songObj.category = meta.genre
}
} }
if(meta.taikowebskin){ if(meta.taikowebskin){
songObj.song_skin = this.getSkin(dir, meta.taikowebskin) songObj.song_skin = this.getSkin(dir, meta.taikowebskin)
@ -290,8 +311,15 @@
if(subtitleLangAdded){ if(subtitleLangAdded){
songObj.subtitle_lang = subtitleLang songObj.subtitle_lang = subtitleLang
} }
if(!songObj.category){ if(!songObj.category_id && !songObj.category){
songObj.category = category || this.getCategory(file, [songTitle || songObj.title, file.name.slice(0, file.name.lastIndexOf("."))]) if(!category && category_id === undefined){
songObj.category_id = this.getCategory(file, [songTitle || songObj.title, file.name.slice(0, file.name.lastIndexOf("."))])
}else if(category){
songObj.category = category
songObj.orginalCategory = category
}else{
songObj.category_id = category_id
}
} }
if(coursesAdded){ if(coursesAdded){
this.songs[index] = songObj this.songs[index] = songObj
@ -312,6 +340,7 @@
var file = fileObj.file var file = fileObj.file
var index = fileObj.index var index = fileObj.index
var category = fileObj.category var category = fileObj.category
var category_id = fileObj.category_id
var reader = new FileReader() var reader = new FileReader()
var promise = pageEvents.load(reader).then(event => { var promise = pageEvents.load(reader).then(event => {
var data = event.target.result.replace(/\0/g, "").split("\n") var data = event.target.result.replace(/\0/g, "").split("\n")
@ -352,7 +381,14 @@
songObj.title = filename songObj.title = filename
} }
this.songs[index] = songObj this.songs[index] = songObj
songObj.category = category || this.getCategory(file, [osu.metadata.TitleUnicode, osu.metadata.Title, file.name.slice(0, file.name.lastIndexOf("."))]) if(!category && category_id === undefined){
songObj.category_id = this.getCategory(file, [osu.metadata.TitleUnicode, osu.metadata.Title, file.name.slice(0, file.name.lastIndexOf("."))])
}else if(category){
songObj.category = category
songObj.orginalCategory = category
}else{
songObj.category_id = category_id
}
var hash = md5.base64(event.target.result).slice(0, -2) var hash = md5.base64(event.target.result).slice(0, -2)
songObj.hash = hash songObj.hash = hash
scoreStorage.songTitles[songObj.title] = hash scoreStorage.songTitles[songObj.title] = hash

View File

@ -56,40 +56,52 @@ class SongSelect{
outline: "#d36aa2" outline: "#d36aa2"
}, },
"default": { "default": {
sort: null,
background: "#ececec", background: "#ececec",
border: ["#fbfbfb", "#8b8b8b"], border: ["#fbfbfb", "#8b8b8b"],
outline: "#656565", outline: "#656565",
infoFill: "#656565" infoFill: "#656565"
} }
} }
for(let category of assets.categories){ var songSkinLength = Object.keys(this.songSkin).length
for(var i in assets.categories){
var category = assets.categories[i]
if(!this.songSkin[category.title] && category.songSkin){ if(!this.songSkin[category.title] && category.songSkin){
if(!category.songSkin.sort == null){ if(category.songSkin.sort === null){
category.songSkin.sort = Object.keys(this.songSkin).length + 1 category.songSkin.sort = songSkinLength + 1
} }
this.songSkin[category.title] = category.songSkin this.songSkin[category.title] = category.songSkin
} }
} }
this.songSkin["default"].sort = songSkinLength + 1
this.songSkin['default'].sort= Object.keys(this.songSkin).length + 1
this.font = strings.font this.font = strings.font
this.songs = [] this.songs = []
for(let song of assets.songs){ for(let song of assets.songs){
var title = this.getLocalTitle(song.title, song.title_lang) var title = this.getLocalTitle(song.title, song.title_lang)
var subtitle = this.getLocalTitle(title === song.title ? song.subtitle : "", song.subtitle_lang) var subtitle = this.getLocalTitle(title === song.title ? song.subtitle : "", song.subtitle_lang)
let category = assets.categories.find(cat=>cat.id == song.category_id) var skin = null
var categoryName = this.getLocalTitle(category.title, category.title_lang) var categoryName = ""
var originalCategory = ""
if(song.category_id !== null && song.category_id !== undefined){
var category = assets.categories.find(cat => cat.id === song.category_id)
var categoryName = this.getLocalTitle(category.title, category.title_lang)
var originalCategory = category.title
var skin = this.songSkin[category.title]
}else if(song.category){
var categoryName = song.category
var originalCategory = song.category
}
this.songs.push({ this.songs.push({
id: song.id, id: song.id,
title: title, title: title,
originalTitle: song.title, originalTitle: song.title,
subtitle: subtitle, subtitle: subtitle,
skin: song.category in this.songSkin ? this.songSkin[song.category] : this.songSkin.default, skin: skin || this.songSkin.default,
courses: song.courses, courses: song.courses,
originalCategory: song.category, originalCategory: originalCategory,
category: categoryName, category: categoryName,
category_id: song.category_id, category_id: song.category_id,
preview: song.preview || 0, preview: song.preview || 0,
@ -108,14 +120,14 @@ class SongSelect{
this.songs.sort((a, b) => { this.songs.sort((a, b) => {
var catA = a.originalCategory in this.songSkin ? this.songSkin[a.originalCategory] : this.songSkin.default var catA = a.originalCategory in this.songSkin ? this.songSkin[a.originalCategory] : this.songSkin.default
var catB = b.originalCategory in this.songSkin ? this.songSkin[b.originalCategory] : this.songSkin.default var catB = b.originalCategory in this.songSkin ? this.songSkin[b.originalCategory] : this.songSkin.default
if(catA.sort === catB.sort){ if(catA.sort !== catB.sort){
if(a.order === b.order){
return a.id > b.id ? 1 : -1
}else{
return a.order > b.order ? 1 : -1
}
}else{
return catA.sort > catB.sort ? 1 : -1 return catA.sort > catB.sort ? 1 : -1
}else if(a.originalCategory !== b.originalCategory){
return a.originalCategory > b.originalCategory ? 1 : -1
}else if(a.order !== b.order){
return a.order > b.order ? 1 : -1
}else{
return a.id > b.id ? 1 : -1
} }
}) })
this.songs.push({ this.songs.push({