protected void SetupPlaylistsWithSongs(int playlistCount, int songCount) { BeatSaberQuestomConfig config = null; using (var fp = GetProvider()) { var q = GetQaeConfig(fp); using (QuestomAssetsEngine qae = new QuestomAssetsEngine(q)) { config = qae.GetCurrentConfig(); for (int p = 0; p < playlistCount; p++) { var playlist = new BeatSaberPlaylist() { PlaylistID = string.Format(PlaylistIDFormat, p), PlaylistName = string.Format(PlaylistNameFormat, p) }; for (int i = 0; i < songCount; i++) { var song = new BeatSaberSong() { SongID = string.Format(SongIDFormat, p, i), CustomSongPath = MakeTestSongDir() }; playlist.SongList.Add(song); } config.Playlists.Add(playlist); } qae.UpdateConfig(config); qae.Save(); } } }
public void DoesNotDuplicateSong() { SetupPlaylistsWithSongs(2, 2); BeatSaberQuestomConfig oldConfig = null; using (var apk = new ApkAssetsFileProvider(_apkFile, FileCacheMode.Memory, false)) { QuestomAssetsEngine qae = new QuestomAssetsEngine(apk, "assets/bin/Data/", false); oldConfig = qae.GetCurrentConfig(false); var config = CopyIDs(oldConfig); var song = new BeatSaberSong() { SongID = config.Playlists[0].SongList[0].SongID, CustomSongFolder = TEST_SONG_FOLDER }; oldConfig.Playlists[0].SongList.Add(song); qae.UpdateConfig(config); } using (var apk = new ApkAssetsFileProvider(_apkFile, FileCacheMode.Memory, true)) { QuestomAssetsEngine qae = new QuestomAssetsEngine(apk, "assets/bin/Data/", true); var testConfig = qae.GetCurrentConfig(false); Assert.AreEqual(2, testConfig.Playlists[0].SongList.Count()); Assert.AreEqual(2, testConfig.Playlists[1].SongList.Count()); } Assert.Pass(); }
public void DoesNotDuplicateSong() { SetupPlaylistsWithSongs(2, 2); BeatSaberQuestomConfig oldConfig = null; using (var fp = GetProvider()) { var q = GetQaeConfig(fp); using (QuestomAssetsEngine qae = new QuestomAssetsEngine(q)) { oldConfig = qae.GetCurrentConfig(); var config = CopyIDs(oldConfig); var song = new BeatSaberSong() { SongID = config.Playlists[0].SongList[0].SongID, CustomSongPath = MakeTestSongDir() }; oldConfig.Playlists[0].SongList.Add(song); qae.UpdateConfig(config); } } using (var fp = GetProvider()) { var q = GetQaeConfig(fp); using (QuestomAssetsEngine qae = new QuestomAssetsEngine(q)) { var testConfig = qae.GetCurrentConfig(); Assert.AreEqual(2, testConfig.Playlists[0].SongList.Count()); Assert.AreEqual(2, testConfig.Playlists[1].SongList.Count()); } } Assert.Pass(); }
public void LoadsConfigImages() { SetupPlaylistsWithSongs(1, 1); BeatSaberQuestomConfig config = null; using (var fp = GetProvider()) { var q = GetQaeConfig(fp); using (QuestomAssetsEngine qae = new QuestomAssetsEngine(q)) { config = qae.GetCurrentConfig(); Assert.IsNotNull(config, "Didn't load current config"); // Assert.IsNotNull(config.Playlists[0].CoverArtBytes); // Assert.IsNotNull(config.Playlists[0].SongList[0].CoverArtBytes); //todo: //Assert.AreEqual(1024, config.Playlists[0].CoverArt.Width); //Assert.AreEqual(1024, config.Playlists[0].CoverArt.Height); //Assert.AreEqual(256, config.Playlists[0].SongList[0].CoverArt.Width); //Assert.AreEqual(256, config.Playlists[0].SongList[0].CoverArt.Height); } } Assert.Pass(); }
public void MovesSongToNewPlaylist() { SetupPlaylistsWithSongs(2, 2); BeatSaberQuestomConfig oldConfig = null; QuestomAssetsEngine qae = new QuestomAssetsEngine(_apkFile); oldConfig = qae.GetCurrentConfig(false); var config = CopyIDs(oldConfig); var song = config.Playlists[0].SongList[0]; config.Playlists[1].SongList.Add(song); config.Playlists[0].SongList.Remove(song); qae.UpdateConfig(config); qae = new QuestomAssetsEngine(_apkFile, true); var testConfig = qae.GetCurrentConfig(false); Assert.AreEqual(2, testConfig.Playlists.Count); Assert.AreEqual(1, testConfig.Playlists[0].SongList.Count()); Assert.AreEqual(3, testConfig.Playlists[1].SongList.Count()); Assert.AreEqual(string.Format(SongIDFormat, 0, 1), testConfig.Playlists[0].SongList[0].SongID); Assert.AreEqual(string.Format(SongIDFormat, 1, 0), testConfig.Playlists[1].SongList[0].SongID); Assert.AreEqual(string.Format(SongIDFormat, 1, 1), testConfig.Playlists[1].SongList[1].SongID); Assert.AreEqual(string.Format(SongIDFormat, 0, 0), testConfig.Playlists[1].SongList[2].SongID); Assert.AreEqual(oldConfig.Playlists[0].PlaylistName, testConfig.Playlists[0].PlaylistName); Assert.AreEqual(oldConfig.Playlists[1].PlaylistName, testConfig.Playlists[1].PlaylistName); Assert.Pass(); }
private void SetupPlaylistsWithSongs(int playlistCount, int songCount) { BeatSaberQuestomConfig config = null; using (var apk = new ApkAssetsFileProvider(_apkFile, FileCacheMode.Memory)) { QuestomAssetsEngine qae = new QuestomAssetsEngine(apk, "assets/bin/Data/"); config = qae.GetCurrentConfig(); for (int p = 0; p < playlistCount; p++) { var playlist = new BeatSaberPlaylist() { PlaylistID = string.Format(PlaylistIDFormat, p), PlaylistName = string.Format(PlaylistNameFormat, p), CoverArtBytes = File.ReadAllBytes(COVER_ART_FILE) }; for (int i = 0; i < songCount; i++) { var song = new BeatSaberSong() { SongID = string.Format(SongIDFormat, p, i), CustomSongFolder = TEST_SONG_FOLDER }; playlist.SongList.Add(song); } config.Playlists.Add(playlist); } qae.UpdateConfig(config); } }
private void SetupPlaylistsWithSongs(int playlistCount, int songCount) { BeatSaberQuestomConfig config = null; QuestomAssetsEngine qae = new QuestomAssetsEngine(_apkFile); config = qae.GetCurrentConfig(); for (int p = 0; p < playlistCount; p++) { var playlist = new BeatSaberPlaylist() { PlaylistID = string.Format(PlaylistIDFormat, p), PlaylistName = string.Format(PlaylistNameFormat, p), CoverArt = new System.Drawing.Bitmap(COVER_ART_FILE) }; for (int i = 0; i < songCount; i++) { var song = new BeatSaberSong() { SongID = string.Format(SongIDFormat, p, i), CustomSongFolder = TEST_SONG_FOLDER }; playlist.SongList.Add(song); } config.Playlists.Add(playlist); } qae.UpdateConfig(config); }
public void DoesNotDuplicateSong() { SetupPlaylistsWithSongs(2, 2); BeatSaberQuestomConfig oldConfig = null; QuestomAssetsEngine qae = new QuestomAssetsEngine(_apkFile); oldConfig = qae.GetCurrentConfig(false); var config = CopyIDs(oldConfig); var song = new BeatSaberSong() { SongID = config.Playlists[0].SongList[0].SongID, CustomSongFolder = TEST_SONG_FOLDER }; oldConfig.Playlists[0].SongList.Add(song); qae.UpdateConfig(config); qae = new QuestomAssetsEngine(_apkFile, true); var testConfig = qae.GetCurrentConfig(false); Assert.AreEqual(2, testConfig.Playlists[0].SongList.Count()); Assert.AreEqual(2, testConfig.Playlists[1].SongList.Count()); Assert.Pass(); }
public void MovesSongToNewPlaylist() { SetupPlaylistsWithSongs(2, 2); BeatSaberQuestomConfig oldConfig = null; using (var apk = new ApkAssetsFileProvider(_apkFile, FileCacheMode.Memory, false)) { QuestomAssetsEngine qae = new QuestomAssetsEngine(apk, "assets/bin/Data/", false); oldConfig = qae.GetCurrentConfig(false); var config = CopyIDs(oldConfig); var song = config.Playlists[0].SongList[0]; config.Playlists[1].SongList.Add(song); config.Playlists[0].SongList.Remove(song); qae.UpdateConfig(config); } using (var apk = new ApkAssetsFileProvider(_apkFile, FileCacheMode.Memory, true)) { QuestomAssetsEngine qae = new QuestomAssetsEngine(apk, "assets/bin/Data/", true); var testConfig = qae.GetCurrentConfig(false); Assert.AreEqual(2, testConfig.Playlists.Count); Assert.AreEqual(1, testConfig.Playlists[0].SongList.Count()); Assert.AreEqual(3, testConfig.Playlists[1].SongList.Count()); Assert.AreEqual(string.Format(SongIDFormat, 0, 1), testConfig.Playlists[0].SongList[0].SongID); Assert.AreEqual(string.Format(SongIDFormat, 1, 0), testConfig.Playlists[1].SongList[0].SongID); Assert.AreEqual(string.Format(SongIDFormat, 1, 1), testConfig.Playlists[1].SongList[1].SongID); Assert.AreEqual(string.Format(SongIDFormat, 0, 0), testConfig.Playlists[1].SongList[2].SongID); Assert.AreEqual(oldConfig.Playlists[0].PlaylistName, testConfig.Playlists[0].PlaylistName); Assert.AreEqual(oldConfig.Playlists[1].PlaylistName, testConfig.Playlists[1].PlaylistName); } Assert.Pass(); }
public void LoadsConfig() { BeatSaberQuestomConfig config = null; QuestomAssetsEngine qae = new QuestomAssetsEngine(_apkFile, true); config = qae.GetCurrentConfig(false); Assert.IsNotNull(config, "Didn't load current config"); Assert.Pass(); }
public void LoadsConfig() { BeatSaberQuestomConfig config = null; using (var apk = new ApkAssetsFileProvider(_apkFile, FileCacheMode.Memory, true)) { QuestomAssetsEngine qae = new QuestomAssetsEngine(apk, "assets/bin/Data/", true); config = qae.GetCurrentConfig(false); } Assert.IsNotNull(config, "Didn't load current config"); Assert.Pass(); }
public void LoadsConfig() { BeatSaberQuestomConfig config = null; using (var fp = GetProvider()) { var q = GetQaeConfig(fp); using (QuestomAssetsEngine qae = new QuestomAssetsEngine(q)) { config = qae.GetCurrentConfig(); } } Assert.IsNotNull(config, "Didn't load current config"); Assert.Pass(); }
public void LoadsConfigImages() { SetupPlaylistsWithSongs(1, 1); BeatSaberQuestomConfig config = null; QuestomAssetsEngine qae = new QuestomAssetsEngine(_apkFile, true); config = qae.GetCurrentConfig(); Assert.IsNotNull(config, "Didn't load current config"); Assert.IsNotNull(config.Playlists[0].CoverArt); Assert.IsNotNull(config.Playlists[0].SongList[0].CoverArt); Assert.AreEqual(1024, config.Playlists[0].CoverArt.Width); Assert.AreEqual(1024, config.Playlists[0].CoverArt.Height); Assert.AreEqual(256, config.Playlists[0].SongList[0].CoverArt.Width); Assert.AreEqual(256, config.Playlists[0].SongList[0].CoverArt.Height); Assert.Pass(); }
private BeatSaberQuestomConfig CopyIDs(BeatSaberQuestomConfig config) { var newConfig = new BeatSaberQuestomConfig(); foreach (var p in config.Playlists) { var playlist = new BeatSaberPlaylist() { PlaylistID = p.PlaylistID }; foreach (var s in p.SongList) { var song = new BeatSaberSong() { SongID = s.SongID }; playlist.SongList.Add(song); } newConfig.Playlists.Add(playlist); } return(newConfig); }
public void MovesSongToNewPlaylist() { SetupPlaylistsWithSongs(2, 2); BeatSaberQuestomConfig oldConfig = null; using (var fp = GetProvider()) { var q = GetQaeConfig(fp); using (QuestomAssetsEngine qae = new QuestomAssetsEngine(q)) { oldConfig = qae.GetCurrentConfig(); var config = CopyIDs(oldConfig); var song = config.Playlists[0].SongList[0]; config.Playlists[1].SongList.Add(song); config.Playlists[0].SongList.Remove(song); qae.UpdateConfig(config); qae.Save(); } } using (var fp = GetProvider()) { var q = GetQaeConfig(fp); using (QuestomAssetsEngine qae = new QuestomAssetsEngine(q)) { var testConfig = qae.GetCurrentConfig(); Assert.AreEqual(2, testConfig.Playlists.Count); Assert.AreEqual(1, testConfig.Playlists[0].SongList.Count()); Assert.AreEqual(3, testConfig.Playlists[1].SongList.Count()); Assert.AreEqual(string.Format(SongIDFormat, 0, 1), testConfig.Playlists[0].SongList[0].SongID); Assert.AreEqual(string.Format(SongIDFormat, 1, 0), testConfig.Playlists[1].SongList[0].SongID); Assert.AreEqual(string.Format(SongIDFormat, 1, 1), testConfig.Playlists[1].SongList[1].SongID); Assert.AreEqual(string.Format(SongIDFormat, 0, 0), testConfig.Playlists[1].SongList[2].SongID); Assert.AreEqual(oldConfig.Playlists[0].PlaylistName, testConfig.Playlists[0].PlaylistName); Assert.AreEqual(oldConfig.Playlists[1].PlaylistName, testConfig.Playlists[1].PlaylistName); } } Assert.Pass(); }
public void LoadsConfigImages() { SetupPlaylistsWithSongs(1, 1); BeatSaberQuestomConfig config = null; using (var apk = new ApkAssetsFileProvider(_apkFile, FileCacheMode.Memory, true)) { QuestomAssetsEngine qae = new QuestomAssetsEngine(apk, "assets/bin/Data/", true); config = qae.GetCurrentConfig(); Assert.IsNotNull(config, "Didn't load current config"); Assert.IsNotNull(config.Playlists[0].CoverArtBytes); Assert.IsNotNull(config.Playlists[0].SongList[0].CoverArtBytes); //todo: //Assert.AreEqual(1024, config.Playlists[0].CoverArt.Width); //Assert.AreEqual(1024, config.Playlists[0].CoverArt.Height); //Assert.AreEqual(256, config.Playlists[0].SongList[0].CoverArt.Width); //Assert.AreEqual(256, config.Playlists[0].SongList[0].CoverArt.Height); } Assert.Pass(); }
static int UpdateConfig(UpdateConfig args) { QuestomAssets.Log.SetLogSink(new ConsoleSink()); try { Log.LogMsg($"Opening APK at '{args.ApkFile}'"); QuestomAssetsEngine q = new QuestomAssetsEngine(args.ApkFile); if (!args.NoPatch) { Log.LogMsg($"Applying patches..."); if (!q.ApplyPatchSettingsFile()) { Log.LogErr("Failed to apply patches. Cannot continue."); return(-1); } Log.LogMsg("Patches complete"); } else { Log.LogMsg("Skipping patches."); } BeatSaberQuestomConfig config = null; TextReader inReader = null; string from = string.IsNullOrWhiteSpace(args.InputFile) ? "stdin" : args.InputFile; Log.LogMsg($"Reading configuration from {from}..."); try { if (string.IsNullOrWhiteSpace(args.InputFile)) { inReader = Console.In; } else { inReader = new StreamReader(args.InputFile); } using (var jReader = new JsonTextReader(inReader)) config = new JsonSerializer().Deserialize <BeatSaberQuestomConfig>(jReader); } finally { if (inReader != null) { inReader.Dispose(); inReader = null; } } Log.LogMsg($"Config parsed"); Log.LogMsg("Applying new configuration..."); q.UpdateConfig(config); Log.LogMsg("Configuration updated"); Log.LogMsg("Signing APK..."); q.SignAPK(); Log.LogMsg("APK signed."); return(0); } catch (Exception ex) { Log.LogErr("Something went horribly wrong", ex); return(-1); } }