private Task <SaveThemeResults> SaveTheme_Execute(string path, bool start) { var viewModel = ViewModel; var busyPickingFile = MainResources.Busy_PickingFile; var busySavingTheme = MainResources.Busy_SavingTheme; var task = new Task <SaveThemeResults>(() => { BusyText = busyPickingFile; var result = new SaveThemeResults { Saved = false, Path = path }; if (string.IsNullOrEmpty(result.Path)) { var svfl = new SaveFileDialog { Filter = "3DS Theme File|*.bin", FileName = "body_lz" }; var dlg = svfl.ShowDialog(); if (dlg.HasValue && !dlg.Value) { return(result); } result.Path = svfl.FileName; } BusyText = busySavingTheme; using (var decBuffer = new MemoryStream()) using (var comBuffer = new MemoryStream()) { try { viewModel.Save(decBuffer); decBuffer.Position = 0; LZ11.Compress(decBuffer, decBuffer.Length, comBuffer, true); comBuffer.Position = 0; using (var fs = File.Open(result.Path, FileMode.Create)) comBuffer.CopyTo(fs); result.Saved = true; } catch { // Ignore } } return(result); }, TaskCreationOptions.LongRunning); if (start) { task.Start(); } return(task); }
private void SaveTheme_PostExecute(SaveThemeResults result) { if (result.Saved) { ThemePath = result.Path; var themeDir = Path.GetDirectoryName(result.Path); var bmp = RenderPreview(PreviewKind.Both); PngBitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); var previewPath = Path.Combine(themeDir, "preview.png"); using (Stream stream = File.Create(previewPath)) encoder.Save(stream); var infoPath = Path.Combine(themeDir, "info.smdh"); using (var stream = File.Create(infoPath)) ViewModel.Info.Save(stream); MessageBox.Show(MainResources.Message_ThemeSaved, WINDOW_TITLE, MessageBoxButton.OK, MessageBoxImage.Information); if (ViewModel.Flags.BackgroundMusic) { if (!File.Exists(Path.Combine(themeDir, BGM_FILE_NAME))) { MessageBox.Show(MainResources.Message_NoBackgroundMusicOnSave, WINDOW_TITLE, MessageBoxButton.OK, MessageBoxImage.Warning); } } } IsBusy = false; }
private void SaveTheme_PostExecute(SaveThemeResults result) { if (result.Saved) { ThemePath = result.Path; var themeDir = Path.GetDirectoryName(result.Path); var bmp = RenderPreview(PreviewKind.Both); PngBitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); var path = Path.Combine(themeDir, "preview.png"); using (Stream stream = File.Create(path)) encoder.Save(stream); MessageBox.Show(MainResources.Error_ThemeSaved, WINDOW_TITLE, MessageBoxButton.OK, MessageBoxImage.Information); if (ViewModel.Flags.BackgroundMusic) { if (!File.Exists(Path.Combine(themeDir, BGM_FILE_NAME))) { MessageBox.Show(MainResources.Error_NoBackgroundMusicOnSave, WINDOW_TITLE, MessageBoxButton.OK, MessageBoxImage.Warning); } } } IsBusy = false; }
private Task<SaveThemeResults> SaveTheme_Execute(string path) { var viewModel = ViewModel; var busyPickingFile = MainResources.Busy_PickingFile; var busySavingTheme = MainResources.Busy_SavingTheme; var task = new Task<SaveThemeResults>(() => { BusyText = busyPickingFile; var result = new SaveThemeResults { Saved = false, Path = path }; if (string.IsNullOrEmpty(result.Path)) { var svfl = new SaveFileDialog { Filter = "3DS Theme File|body_LZ.bin", FileName = "body_lz" }; var dlg = svfl.ShowDialog(); if (dlg.HasValue && !dlg.Value) return result; result.Path = svfl.FileName; } BusyText = busySavingTheme; using (var decBuffer = new MemoryStream()) using (var comBuffer = new MemoryStream()) { try { viewModel.Save(decBuffer); decBuffer.Position = 0; LZ11.Compress(decBuffer, decBuffer.Length, comBuffer, true); comBuffer.Position = 0; using (var fs = File.Open(result.Path, FileMode.Create)) comBuffer.CopyTo(fs); result.Saved = true; } catch { // Ignore } } return result; }, TaskCreationOptions.LongRunning); task.Start(); return task; }