1
0
mirror of synced 2025-02-13 08:52:32 +01:00

[chuni] Added truncation to long Title and Artist Name values on import (#178)

I noticed the importer failing to import music 523 (Niji-iro no Flügel) from an omni pack due to the artist name being crazy long.

To address this, I added truncation to max column value length for both the Title and Artist Name values. Considered doing this for the other 3 string fields as well but I can't imagine those ever being problematic.

Import now succeeds with a warning generated about the truncation occurring

Reviewed-on: https://gitea.tendokyu.moe/Hay1tsme/artemis/pulls/178
Co-authored-by: daydensteve <daydensteve@gmail.com>
Co-committed-by: daydensteve <daydensteve@gmail.com>
This commit is contained in:
daydensteve 2024-09-25 15:21:30 +00:00 committed by Hay1tsme
parent b04840f3dd
commit ed5e7dc561

View File

@ -7,6 +7,7 @@ from PIL import Image
from core.config import CoreConfig from core.config import CoreConfig
from titles.chuni.database import ChuniData from titles.chuni.database import ChuniData
from titles.chuni.const import ChuniConstants from titles.chuni.const import ChuniConstants
from titles.chuni.schema.static import music as MusicTable
class ChuniReader(BaseReader): class ChuniReader(BaseReader):
@ -144,6 +145,9 @@ class ChuniReader(BaseReader):
self.logger.warning(f"Failed to insert event {id}") self.logger.warning(f"Failed to insert event {id}")
async def read_music(self, music_dir: str, we_diff: str = "4") -> None: async def read_music(self, music_dir: str, we_diff: str = "4") -> None:
max_title_len = MusicTable.columns["title"].type.length
max_artist_len = MusicTable.columns["artist"].type.length
for root, dirs, files in walk(music_dir): for root, dirs, files in walk(music_dir):
for dir in dirs: for dir in dirs:
if path.exists(f"{root}/{dir}/Music.xml"): if path.exists(f"{root}/{dir}/Music.xml"):
@ -154,9 +158,15 @@ class ChuniReader(BaseReader):
for name in xml_root.findall("name"): for name in xml_root.findall("name"):
song_id = name.find("id").text song_id = name.find("id").text
title = name.find("str").text title = name.find("str").text
if len(title) > max_title_len:
self.logger.warning(f"Truncating music {song_id} song title")
title = title[:max_title_len]
for artistName in xml_root.findall("artistName"): for artistName in xml_root.findall("artistName"):
artist = artistName.find("str").text artist = artistName.find("str").text
if len(artist) > max_artist_len:
self.logger.warning(f"Truncating music {song_id} artist name")
artist = artist[:max_artist_len]
for genreNames in xml_root.findall("genreNames"): for genreNames in xml_root.findall("genreNames"):
for list_ in genreNames.findall("list"): for list_ in genreNames.findall("list"):