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();
                }
            }
        }
示例#2
0
        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();
        }
示例#5
0
        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();
        }
示例#6
0
        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);
            }
        }
示例#7
0
        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);
        }
示例#8
0
        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();
        }
示例#9
0
        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();
        }
示例#10
0
        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();
        }
示例#11
0
        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();
        }
示例#13
0
        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();
        }
示例#14
0
        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();
        }
示例#16
0
        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();
        }
示例#17
0
        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);
            }
        }