Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }