From 52a0680bfa92f803cb60a76edcbfa78687d48655 Mon Sep 17 00:00:00 2001 From: 0aubsq <0aubsq@gmail.com> Date: Mon, 20 Jun 2022 07:18:47 +0200 Subject: [PATCH] Fix song names with invalid characters on online lounge and limit the new filename length to avoid failed downloads due to path_max exceeded --- TJAPlayer3/Stages/01.StartUp/TextureLoader.cs | 2 ++ TJAPlayer3/Stages/11.Heya/CStageHeya.cs | 2 ++ .../12.OnlineLounge/CStageOnlineLounge.cs | 18 +++++++++++++++--- Test/System/SimpleStyle/Graphics/Loading.png | Bin 0 -> 11094 bytes 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 Test/System/SimpleStyle/Graphics/Loading.png diff --git a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs index fe7d0e3c..2d04c646 100644 --- a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs +++ b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs @@ -110,6 +110,7 @@ namespace TJAPlayer3 Menu_Title = TxC(@"Menu_Title.png"); Menu_Highlight = TxC(@"Menu_Highlight.png"); Enum_Song = TxC(@"Enum_Song.png"); + Loading = TxC(@"Loading.png"); Scanning_Loudness = TxC(@"Scanning_Loudness.png"); Overlay = TxC(@"Overlay.png"); Network_Connection = TxC(@"Network_Connection.png"); @@ -1646,6 +1647,7 @@ namespace TJAPlayer3 Menu_Title, Menu_Highlight, Enum_Song, + Loading, Scanning_Loudness, NamePlateBase, Overlay, diff --git a/TJAPlayer3/Stages/11.Heya/CStageHeya.cs b/TJAPlayer3/Stages/11.Heya/CStageHeya.cs index 70b2dfdb..a89e61a4 100644 --- a/TJAPlayer3/Stages/11.Heya/CStageHeya.cs +++ b/TJAPlayer3/Stages/11.Heya/CStageHeya.cs @@ -529,6 +529,8 @@ namespace TJAPlayer3 else if (iCurrentMenu == 1) { + //TJAPlayer3.Tx.Loading?.t2D描画(TJAPlayer3.app.Device, 18, 7); + // Reload character, a bit time expensive but with a O(N) memory complexity instead of O(N * M) TJAPlayer3.Tx.ReloadCharacter(TJAPlayer3.NamePlateConfig.data.Character[iPlayer], iCharacterCurrent, iPlayer); TJAPlayer3.NamePlateConfig.data.Character[iPlayer] = iCharacterCurrent; diff --git a/TJAPlayer3/Stages/12.OnlineLounge/CStageOnlineLounge.cs b/TJAPlayer3/Stages/12.OnlineLounge/CStageOnlineLounge.cs index a2c449be..68e7465f 100644 --- a/TJAPlayer3/Stages/12.OnlineLounge/CStageOnlineLounge.cs +++ b/TJAPlayer3/Stages/12.OnlineLounge/CStageOnlineLounge.cs @@ -456,7 +456,7 @@ namespace TJAPlayer3 if (this.cdnSongListIndex < apiMethods.FetchedSongsList.Length) { var song = apiMethods.FetchedSongsList[this.cdnSongListIndex - 1]; - var zipPath = $@"Cache\{song.Md5}.zip"; + //var zipPath = $@"Cache\{song.Md5}.zip"; var downloadLink = GetDownloadLink(song); if (CSongDict.tContainsSongUrl(downloadLink)) @@ -532,6 +532,16 @@ namespace TJAPlayer3 #region [Song Downloading] + public string ReplaceInvalidChars(string filename, string substitute = "_") + { + return string.Join(substitute, filename.Split(Path.GetInvalidFileNameChars())); + } + + public string TruncateString(string s, int length) + { + return s.Substring(0, Math.Min(length, s.Length)); + } + private string GetAssignedLanguageValue(Dictionary ens) { if (ens.ContainsKey(TJAPlayer3.ConfigIni.sLang)) @@ -551,8 +561,10 @@ namespace TJAPlayer3 // Create Cache folder if does not exist Directory.CreateDirectory($@"Cache\"); + var song = apiMethods.FetchedSongsList[this.cdnSongListIndex - 1]; - var zipPath = $@"Cache\{song.SongTitle}-{song.Md5}.zip"; + var zipName = ReplaceInvalidChars($@"{TruncateString(song.SongTitle, 16)}-{TruncateString(song.Md5, 10)}"); + var zipPath = $@"Cache\{zipName}.zip"; var downloadLink = GetDownloadLink(song); try @@ -633,7 +645,7 @@ namespace TJAPlayer3 } - var songPath = $@"{genredPath}{song.SongTitle}-{song.Md5}"; + var songPath = $@"{genredPath}{zipName}"; System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, songPath); diff --git a/Test/System/SimpleStyle/Graphics/Loading.png b/Test/System/SimpleStyle/Graphics/Loading.png new file mode 100644 index 0000000000000000000000000000000000000000..d10b1661c88603dc00743feac6b4774dc7d6caf5 GIT binary patch literal 11094 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 literal 0 HcmV?d00001