From 6d0d5e1632b402282bed5baf81aba3ef4a88a11b Mon Sep 17 00:00:00 2001 From: LoveEevee Date: Mon, 27 Apr 2020 18:47:55 +0300 Subject: [PATCH] Fix categories for imported songs --- public/src/js/importsongs.js | 70 +++++++++++++++++++++++++++--------- public/src/js/songselect.js | 48 +++++++++++++++---------- 2 files changed, 83 insertions(+), 35 deletions(-) diff --git a/public/src/js/importsongs.js b/public/src/js/importsongs.js index c65549d..1687e0b 100644 --- a/public/src/js/importsongs.js +++ b/public/src/js/importsongs.js @@ -38,18 +38,22 @@ "oni": 3, "ura": 4 } - + this.categoryAliases = {} - assets.categories.forEach(cat => { - this.categoryAliases[cat.title.toLowerCase()] = cat.title - if(cat.aliases != null){ + this.categoryAliases[cat.title.toLowerCase()] = cat.id + if(cat.aliases){ 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 = { "bg-pattern-1": ".pattern-bg", "bg_genre_0": "#song-select", @@ -130,7 +134,11 @@ var equalsPos = line.indexOf("=") if(equalsPos !== -1 && line.slice(0, equalsPos).trim() === "genrename"){ 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 } } @@ -140,12 +148,16 @@ var line = data[i].trim().toLowerCase() if(line.startsWith("#title:")){ var value = line.slice(7).trim() - if(value in this.categoryAliases){ - category = this.categoryAliases[value] + if(value.toLowerCase() in this.categoryAliases){ + category = value } }else if(line.startsWith("#genre:")){ 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 } } @@ -169,7 +181,11 @@ var filesLoop = fileObj => { var tjaPath = fileObj.file.webkitRelativePath.toLowerCase().slice(0, fileObj.file.name.length * -1) 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 } } @@ -189,6 +205,7 @@ var file = fileObj.file var index = fileObj.index var category = fileObj.category + var category_id = fileObj.category_id var reader = new FileReader() var promise = pageEvents.load(reader).then(event => { var data = event.target.result.replace(/\0/g, "").split("\n") @@ -226,7 +243,11 @@ songObj.music = this.otherFiles[dir + meta.wave.toLowerCase()] || songObj.music } 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){ songObj.song_skin = this.getSkin(dir, meta.taikowebskin) @@ -290,8 +311,15 @@ if(subtitleLangAdded){ songObj.subtitle_lang = subtitleLang } - if(!songObj.category){ - songObj.category = category || this.getCategory(file, [songTitle || songObj.title, file.name.slice(0, file.name.lastIndexOf("."))]) + if(!songObj.category_id && !songObj.category){ + 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){ this.songs[index] = songObj @@ -312,6 +340,7 @@ var file = fileObj.file var index = fileObj.index var category = fileObj.category + var category_id = fileObj.category_id var reader = new FileReader() var promise = pageEvents.load(reader).then(event => { var data = event.target.result.replace(/\0/g, "").split("\n") @@ -352,7 +381,14 @@ songObj.title = filename } 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) songObj.hash = hash scoreStorage.songTitles[songObj.title] = hash diff --git a/public/src/js/songselect.js b/public/src/js/songselect.js index 69d35ae..2f95327 100644 --- a/public/src/js/songselect.js +++ b/public/src/js/songselect.js @@ -56,40 +56,52 @@ class SongSelect{ outline: "#d36aa2" }, "default": { + sort: null, background: "#ececec", border: ["#fbfbfb", "#8b8b8b"], outline: "#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(!category.songSkin.sort == null){ - category.songSkin.sort = Object.keys(this.songSkin).length + 1 + if(category.songSkin.sort === null){ + category.songSkin.sort = songSkinLength + 1 } this.songSkin[category.title] = category.songSkin } } - - this.songSkin['default'].sort= Object.keys(this.songSkin).length + 1 - + this.songSkin["default"].sort = songSkinLength + 1 + this.font = strings.font this.songs = [] for(let song of assets.songs){ var title = this.getLocalTitle(song.title, song.title_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 categoryName = this.getLocalTitle(category.title, category.title_lang) + var skin = null + 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({ id: song.id, title: title, originalTitle: song.title, subtitle: subtitle, - skin: song.category in this.songSkin ? this.songSkin[song.category] : this.songSkin.default, + skin: skin || this.songSkin.default, courses: song.courses, - originalCategory: song.category, + originalCategory: originalCategory, category: categoryName, category_id: song.category_id, preview: song.preview || 0, @@ -108,14 +120,14 @@ class SongSelect{ this.songs.sort((a, b) => { 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 - 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{ + if(catA.sort !== catB.sort){ 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({