diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 6409815a..ea133582 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -163,6 +163,7 @@ namespace Vocaluxe.Base [DefaultValue(EOffOn.TR_CONFIG_OFF)] public EOffOn ServerActive; [DefaultValue(EOffOn.TR_CONFIG_OFF)] public EOffOn ServerEncryption; [DefaultValue(3000)] public int ServerPort; + [DefaultValue(70)] public int SongCountCoverThreshold; } #pragma warning restore 649 // ReSharper restore UnassignedField.Global @@ -495,6 +496,8 @@ namespace Vocaluxe.Base return "Server Encryption On/Off: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn))); case "ServerPort": return "Server Port (default: 3000) [1..65535]"; + case "SongCountCoverThreshold": + return "Threshold of songs for that covers will not longer be included in get-all-songs-requests (e.g. song list) (default: 70) [-1..65535] -1 => always deliver covers"; case "Stretch": return "Stretch view to full window size: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn))); default: diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 138df11f..477713b6 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -624,11 +624,20 @@ namespace Vocaluxe.Base.Server return _GetSongInfo(song, true); } + + private static SSongInfo[] _SongInfoCache = null; public static SSongInfo[] GetAllSongs() { - List songs = CSongs.Songs; - return (from s in songs - select _GetSongInfo(s, false)).ToArray(); + bool sendCovers = CConfig.Config.Server.SongCountCoverThreshold == -1 || CConfig.Config.Server.SongCountCoverThreshold > CSongs.Songs.Count; + + if (_SongInfoCache == null) + { + List songs = CSongs.Songs; + _SongInfoCache = (from s in songs + select _GetSongInfo(s, sendCovers)).AsParallel().ToArray(); + } + + return _SongInfoCache; } public static string GetMp3Path(int songId) @@ -658,7 +667,17 @@ namespace Vocaluxe.Base.Server result.IsDuet = song.IsDuet; result.SongId = song.ID; if (includeCover) - result.Cover = new CBase64Image(_CreateDelayedImage(song.Folder + "\\" + song.CoverFileName)); + { + if (song.CoverFileName == "") + { + result.Cover = new CBase64Image(_CreateDelayedImage("Website\\img\\noCover.png")); + } + else + { + result.Cover = new CBase64Image(_CreateDelayedImage(song.Folder + "\\" + song.CoverFileName)); + } + } + } return result; } diff --git a/Vocaluxe/Website/js/main.js b/Vocaluxe/Website/js/main.js index 94df59ad..3b9f96da 100644 --- a/Vocaluxe/Website/js/main.js +++ b/Vocaluxe/Website/js/main.js @@ -897,9 +897,26 @@ } for (var id in allSongsCache) { - $('
  • '/*+' '*/ + '

    ' + allSongsCache[id].Artist + '

    ' + allSongsCache[id].Title + '

  • ') + var coverString = ""; + var currentCoverId = ""; + + if (allSongsCache[id].Cover !== null) { + if (allSongsCache[id].Cover.base64Data !== "") { + coverString = ''; + } + else if (allSongsCache[id].Cover.imageId !== "") { + currentCoverId = "songListCoverId_" + id; + coverString = ''; + } + } + + $('
  • ' + coverString + '

    ' + allSongsCache[id].Artist + '

    ' + allSongsCache[id].Title + '

  • ') .appendTo('#selectSongList') .click(handleSelectSongLineClick); + + if (currentCoverId !== "") { + imageLoader.delayedImageLoad($("#" + currentCoverId)[0], allSongsCache[id].Cover.imageId, "img/noCover.png"); + } } $('#selectSongList').listview('refresh');