public BeatSaberQuestomConfig GetCurrentConfig(bool suppressImages = false) { using (var apkFileProvider = new ApkAssetsFileProvider(_apkFilename, ApkAssetsFileProvider.FileCacheMode.Memory, true)) { var manager = new AssetsManager(apkFileProvider, BSConst.GetAssetTypeMap(), false); manager.GetAssetsFile("globalgamemanagers"); var file11 = manager.GetAssetsFile(BSConst.KnownFiles.File11); var basicSaberModel = file11.FindAsset <GameObject>(x => x.Object.Name == "BasicSaberModel"); var basicSaber = file11.FindAsset <GameObject>(x => x.Object.Name == "BasicSaber"); var config = GetConfig(manager, suppressImages); //clear out any of the internal refs that were used so the GC can clean things up foreach (var p in config.Playlists) { p.CoverArtSprite = null; p.LevelPackObject = null; foreach (var song in p.SongList) { song.LevelData = null; song.SourceOgg = null; } } config.Saber = new SaberModel() { SaberID = GetCurrentSaberID(manager) }; return(config); } }
/// <summary> /// Create a new instance of the class and open the apk file /// </summary> public QuestomAssetsEngine(QaeConfig config) { _config = config; _assetsLoadOrder = GetAssetsLoadOrderFile(); if (_assetsLoadOrder == null) { _assetsLoadOrder = new List <string>() { "globalgamemanagers", "globalgamemanagers.assets", "sharedassets1.assets", "231368cb9c1d5dd43988f2a85226e7d7", "sharedassets11.assets", "sharedassets18.assets", "sharedassets20.assets" }; } _manager = new AssetsManager(_config.FileProvider, _config.AssetsPath, BSConst.GetAssetTypeMap()); }
public void UpdateConfig(BeatSaberQuestomConfig config) { //todo: basic validation of the config if (_readOnly) { throw new InvalidOperationException("Cannot update in read only mode."); } using (var apkFileProvider = new ApkAssetsFileProvider(_apkFilename, ApkAssetsFileProvider.FileCacheMode.Memory, false)) { var manager = new AssetsManager(apkFileProvider, BSConst.GetAssetTypeMap(), false); manager.GetAssetsFile("globalgamemanagers"); //get existing playlists and their songs //compare with new ones //generate a diff //etc. UpdateColorConfig(manager, config.Colors); UpdateTextConfig(manager, config.TextChanges); if (!UpdateSaberConfig(manager, config.Saber)) { Log.LogErr("Saber failed to update. Aborting all changes."); } if (config.Playlists != null) { UpdateMusicConfig(manager, config, apkFileProvider); } else { Log.LogMsg("Playlists is null, song configuration will not be changed."); } Log.LogMsg("Serializing all assets..."); manager.WriteAllOpenAssets(); apkFileProvider.Save(); } }
private void BtnLoad_Click(object sender, EventArgs e) { ContextMenu cm = new ContextMenu(new MenuItem[] { new MenuItem("APK", (s, e2) => { OpenFileDialog ofd = new OpenFileDialog() { CheckFileExists = true, Title = "Open Bundle File", Multiselect = false }; if (ofd.ShowDialog() == DialogResult.Cancel) { return; } CloseStuff(); try { _fileProvider = new ApkAssetsFileProvider(ofd.FileName, FileCacheMode.Memory, false); _manager = new AssetsManager(_fileProvider, BSConst.KnownFiles.AssetsRootPath, BSConst.GetAssetTypeMap()); if (_fileProvider.FindFiles("globalgamemanagers").Count > 0) { _manager.GetAssetsFile("globalgamemanagers.assets"); } if (_fileProvider.FindFiles("globalgamemanagers.assets*").Count > 0) { _manager.GetAssetsFile("globalgamemanagers.assets"); } _manager.FindAndLoadAllAssets(); FillAssetsFiles(); this.Text = "Assets Explorer - " + Path.GetFileName(ofd.FileName); } catch (Exception ex) { Log.LogErr("Couldn't load APK!", ex); MessageBox.Show("Failed to load!"); if (_fileProvider != null) { _fileProvider.Dispose(); _fileProvider = null; } return; } }), new MenuItem("Folder", (s, e2) => { FolderBrowserDialog fbd = new FolderBrowserDialog() { ShowNewFolderButton = false, Description = "Select Assets Root Folder" }; if (fbd.ShowDialog() == DialogResult.Cancel) { return; } CloseStuff(); try { _fileProvider = new FolderFileProvider(fbd.SelectedPath, false); _manager = new AssetsManager(_fileProvider, "", BSConst.GetAssetTypeMap()); if (_fileProvider.FindFiles("globalgamemanagers").Count > 0) { _manager.GetAssetsFile("globalgamemanagers.assets"); } if (_fileProvider.FindFiles("globalgamemanagers.assets*").Count > 0) { _manager.GetAssetsFile("globalgamemanagers.assets"); } _manager.FindAndLoadAllAssets(); FillAssetsFiles(); this.Text = "Assets Explorer - " + Path.GetFileName(fbd.SelectedPath); } catch (Exception ex) { Log.LogErr("Couldn't load APK!", ex); MessageBox.Show("Failed to load!"); if (_fileProvider != null) { _fileProvider.Dispose(); _fileProvider = null; } return; } }), new MenuItem("Bundle", (s, e2) => { OpenFileDialog ofd = new OpenFileDialog() { CheckFileExists = true, Title = "Open Bundle File", Multiselect = false }; if (ofd.ShowDialog() == DialogResult.Cancel) { return; } CloseStuff(); try { _fileProvider = new BundleFileProvider(ofd.FileName, true); _manager = new AssetsManager(_fileProvider, "", BSConst.GetAssetTypeMap()); _manager.FindAndLoadAllAssets(); FillAssetsFiles(); this.Text = "Assets Explorer - " + Path.GetFileName(ofd.FileName); } catch (Exception ex) { Log.LogErr("Couldn't load bundle!", ex); MessageBox.Show("Failed to load!"); if (_fileProvider != null) { _fileProvider.Dispose(); _fileProvider = null; } return; } }) }); cm.Show(btnLoad, new Point(0, btnLoad.Height)); return; }