Exemplo n.º 1
0
        public void SaveFileFormat()
        {
            if (FileFormat != null && FileFormat.CanSave)
            {
                if (FileDataStream != null)
                {
                    Console.WriteLine($"Updating FileDataStream " + (FileDataStream is FileStream));
                    if (FileDataStream is FileStream)
                    {
                        FileDataStream.Close();
                    }

                    var mem = new System.IO.MemoryStream();
                    FileFormat.Save(mem);
                    FileDataStream = mem;
                    //Reload file data
                    FileFormat.Load(FileDataStream);
                }
                else
                {
                    var mem = new System.IO.MemoryStream();
                    FileFormat.Save(mem);
                    FileData = STLibraryCompression.CompressFile(mem.ToArray(), FileFormat);
                }
            }
        }
        /// <summary>
        /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName">
        /// </summary>
        /// <param name="IFileFormat">The format instance of the file being saved</param>
        /// <param name="FileName">The name of the file</param>
        /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param>
        /// <param name="EnableDialog">Toggle for showing compression dialog</param>
        /// <returns></returns>
        public static void SaveFileFormat(IFileFormat FileFormat, string FileName, bool EnableDialog = true, string DetailsLog = "")
        {
            //These always get created on loading a file,however not on creating a new file
            if (FileFormat.IFileInfo == null)
            {
                throw new System.NotImplementedException("Make sure to impliment a IFileInfo instance if a format is being created!");
            }

            Cursor.Current      = Cursors.WaitCursor;
            FileFormat.FilePath = FileName;

            byte[] data = FileFormat.Save();
            FileFormat.IFileInfo.DecompressedSize = (uint)data.Length;

            data = CompressFileFormat(data,
                                      FileFormat.IFileInfo.FileIsCompressed,
                                      FileFormat.IFileInfo.Alignment,
                                      FileFormat.IFileInfo.CompressionType,
                                      FileName,
                                      EnableDialog);

            FileFormat.IFileInfo.CompressedSize = (uint)data.Length;

            File.WriteAllBytes(FileName, data);

            DetailsLog += "\n" + SatisfyFileTables(FileFormat, FileName, data,
                                                   FileFormat.IFileInfo.DecompressedSize,
                                                   FileFormat.IFileInfo.CompressedSize,
                                                   FileFormat.IFileInfo.FileIsCompressed);

            MessageBox.Show($"File has been saved to {FileName}", "Save Notification");

            //   STSaveLogDialog.Show($"File has been saved to {FileName}", "Save Notification", DetailsLog);
            Cursor.Current = Cursors.Default;
        }
Exemplo n.º 3
0
        public byte[] Save()
        {
            Console.WriteLine("Saving sarc");

            sarcData.Files.Clear();
            foreach (TreeNode node in Collect(Nodes))
            {
                if (node is SarcEntry)
                {
                    Console.WriteLine("Saving " + node);
                    SaveFileEntryData((SarcEntry)node);
                }
                else if (node is IFileFormat && node != this)
                {
                    IFileFormat fileFormat = (IFileFormat)node;
                    if (fileFormat != null && ((IFileFormat)node).CanSave)
                    {
                        sarcData.Files.Add(SetSarcPath(node, this),
                                           STLibraryCompression.CompressFile(fileFormat.Save(), fileFormat));
                    }
                    else
                    {
                        sarcData.Files.Add(SetSarcPath(node, this),
                                           STLibraryCompression.CompressFile(OpenedFiles[node.FullPath], fileFormat));
                    }
                }
            }

            Tuple <int, byte[]> sarc = SARCExt.SARC.PackN(sarcData);

            IFileInfo.Alignment = sarc.Item1;
            return(sarc.Item2);
        }
Exemplo n.º 4
0
        public byte[] Save()
        {
            beaFile.FileList.Clear();
            beaFile.FileDictionary.Clear();

            foreach (TreeNode node in Collect(Nodes))
            {
                if (node is TreeNodeFile && node != this)
                {
                    IFileFormat fileFormat = (IFileFormat)node;
                    if (fileFormat != null && fileFormat.CanSave)
                    {
                        byte[] uncomrompressedData = new byte[0];

                        //Save any active files in the editor if supported
                        if (fileFormat.CanSave)
                        {
                            uncomrompressedData = fileFormat.Save();
                        }

                        //Create a new asset entry
                        ASST asset = new ASST();
                        asset.unk              = 2;
                        asset.unk2             = 2;
                        asset.UncompressedSize = uncomrompressedData.LongLength;

                        if (fileFormat.IFileInfo.FileIsCompressed)
                        {
                            asset.FileData = STLibraryCompression.ZSTD.Compress(uncomrompressedData);
                        }
                        else
                        {
                            asset.FileData = uncomrompressedData;
                        }

                        asset.FileName = fileFormat.FilePath;
                        beaFile.FileList.Add(fileFormat.FilePath, asset);
                        beaFile.FileDictionary.Add(fileFormat.FilePath);
                    }
                }
                else if (node is FileEntry)
                {
                    ASST asset = new ASST();
                    asset.unk      = ((FileEntry)node).unk1;
                    asset.unk2     = ((FileEntry)node).unk2;
                    asset.FileName = ((FileEntry)node).FullName;
                    asset.FileData = ((FileEntry)node).data;
                    byte[] uncomp = GetASSTData((FileEntry)node);
                    asset.UncompressedSize = uncomp.Length;
                    beaFile.FileList.Add(asset.FileName, asset);
                    beaFile.FileDictionary.Add(asset.FileName);
                }
            }

            MemoryStream mem = new MemoryStream();

            beaFile.Save(mem);
            return(mem.ToArray());
        }
Exemplo n.º 5
0
 public bool Save()
 {
     if (mFileName == null || mBuffer == null || mFormat == null)
     {
         return(false);
     }
     mFormat.Save(mFileName, mBuffer);
     return(true);
 }
Exemplo n.º 6
0
        /// <summary>
        /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName">
        /// </summary>
        /// <param name="IFileFormat">The format instance of the file being saved</param>
        /// <param name="FileName">The name of the file</param>
        /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param>
        /// <param name="EnableDialog">Toggle for showing compression dialog</param>
        /// <returns></returns>
        public static void SaveFileFormat(IFileFormat FileFormat, string FileName, bool EnableDialog = true)
        {
            Cursor.Current = Cursors.WaitCursor;

            FileFormat.FilePath = FileName;

            SaveFileFormat(FileFormat.Save(), FileFormat.IFileInfo.FileIsCompressed, FileFormat.IFileInfo.Alignment,
                           FileFormat.IFileInfo.CompressionType, FileName, EnableDialog);
        }
Exemplo n.º 7
0
 public void SaveFileFormat()
 {
     if (FileFormat != null && FileFormat.CanSave)
     {
         var mem = new System.IO.MemoryStream();
         FileFormat.Save(mem);
         FileData = CompressData(new MemoryStream(mem.ToArray()));
         //FileFormat.Load(FileData);
     }
 }
Exemplo n.º 8
0
 public static void SaveFileFormat(ArchiveFileInfo archiveFile, IFileFormat fileFormat)
 {
     if (fileFormat != null && fileFormat.CanSave)
     {
         if (archiveFile.FileDataStream != null)
         {
             var mem = new System.IO.MemoryStream();
             fileFormat.Save(mem);
             archiveFile.FileDataStream = mem;
             //Reload file data
             fileFormat.Load(archiveFile.FileDataStream);
         }
         else
         {
             var mem = new System.IO.MemoryStream();
             fileFormat.Save(mem);
             archiveFile.FileData = STLibraryCompression.CompressFile(mem.ToArray(), fileFormat);
         }
     }
 }
Exemplo n.º 9
0
 public void SaveFileFormat()
 {
     if (FileFormat != null && FileFormat.CanSave)
     {
         if (FileDataStream != null)
         {
             var mem = new System.IO.MemoryStream();
             FileFormat.Save(mem);
             FileDataStream = mem;
             //Reload file data
             FileFormat.Load(FileDataStream);
         }
         else
         {
             var mem = new System.IO.MemoryStream();
             FileFormat.Save(mem);
             FileData = STLibraryCompression.CompressFile(mem.ToArray(), FileFormat);
         }
     }
 }
Exemplo n.º 10
0
        private void SaveFileEntryData(FileEntry entry)
        {
            IFileFormat file = entry.FileHandle;

            if (beaFile.FileList.ContainsKey(entry.FullName))
            {
                if (file.CanSave)
                {
                    SetASST(file.Save(), entry.FullName);
                }
            }
        }
Exemplo n.º 11
0
        public void SaveFile(IFileFormat format, string FileName)
        {
            byte[] data      = format.Save();
            int    Alignment = 0;

            if (format.IFileInfo != null)
            {
                Alignment = format.IFileInfo.Alignment;
            }

            SaveCompressFile(data, FileName, Alignment);
        }
Exemplo n.º 12
0
            private void FormClosing(object sender, EventArgs args, IFileFormat fileFormat)
            {
                if (((Form)sender).DialogResult != DialogResult.OK)
                {
                    return;
                }

                if (fileFormat.CanSave)
                {
                    Data = fileFormat.Save();
                    UpdateHexView();
                }
            }
Exemplo n.º 13
0
        /// <summary>
        /// Saves the <see cref="IFileFormat"/> into the given stream.
        /// </summary>
        /// <param name="fileFormat"></param>
        /// <param name="stream"></param>
        /// <returns></returns>
        public static Stream SaveFileFormat(IFileFormat fileFormat)
        {
            //   SaveLog log = new SaveLog();

            MemoryStream mem = new MemoryStream();

            fileFormat.Save(mem);

            if (fileFormat.FileInfo.Compression != null)
            {
                return(CompressFile(mem, fileFormat));
            }

            return(mem);
        }
Exemplo n.º 14
0
            public void Write(FileWriter writer)
            {
                if (FileHandler != null && FileHandler.CanSave)
                {
                    data = FileHandler.Save();
                }

                CompressedData = Compress(data, CompressionType);

                writer.Write((ushort)unkown);
                writer.Write((ushort)CompressionType);
                writer.Write(data.Length);
                writer.Write(CompressedData.Length);
                writer.Write(0);
                DataOffset = writer.Position;
                writer.Write(0L);
            }
Exemplo n.º 15
0
        /// <summary>
        /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName">
        /// </summary>
        /// <param name="IFileFormat">The format instance of the file being saved</param>
        /// <param name="FileName">The name of the file</param>
        /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param>
        /// <param name="EnableDialog">Toggle for showing compression dialog</param>
        /// <returns></returns>
        public static void SaveFileFormat(IFileFormat FileFormat, string FileName, int Alignment = 0, bool EnableDialog = true)
        {
            Cursor.Current = Cursors.WaitCursor;

            byte[] data = FileFormat.Save();
            if (EnableDialog && FileFormat.FileIsCompressed)
            {
                DialogResult save = MessageBox.Show($"Compress file with {FileFormat.CompressionType}?", "File Save", MessageBoxButtons.YesNo);

                if (save == DialogResult.Yes)
                {
                    switch (FileFormat.CompressionType)
                    {
                    case CompressionType.Yaz0:
                        data = EveryFileExplorer.YAZ0.Compress(data, Runtime.Yaz0CompressionLevel, (uint)Alignment);
                        break;

                    case CompressionType.Zstb:
                        data = STLibraryCompression.ZSTD.Compress(data);
                        break;

                    case CompressionType.Lz4:
                        data = STLibraryCompression.Type_LZ4.Compress(data);
                        break;

                    case CompressionType.Lz4f:
                        data = STLibraryCompression.Type_LZ4.Compress(data);
                        break;

                    case CompressionType.Gzip:
                        data = STLibraryCompression.GZIP.Compress(data);
                        break;

                    default:
                        MessageBox.Show($"Compression Type {FileFormat.CompressionType} not supported!!");
                        break;
                    }
                }
            }
            File.WriteAllBytes(FileName, data);
            Cursor.Current = Cursors.Default;
            MessageBox.Show($"File has been saved to {FileName}");
        }
Exemplo n.º 16
0
            private void OpenFormDialog(IFileFormat fileFormat)
            {
                UserControl form = GetEditorForm(fileFormat);

                form.Text = (((IFileFormat)fileFormat).FileName);

                var parentForm = LibraryGUI.Instance.GetActiveForm();

                GenericEditorForm editorForm = new GenericEditorForm(true, form);

                editorForm.FormClosing += (sender, e) => FormClosing(sender, e, fileFormat);
                if (editorForm.ShowDialog() == DialogResult.OK)
                {
                    if (fileFormat.CanSave)
                    {
                        Data = fileFormat.Save();
                        UpdateHexView();
                    }
                }
            }
Exemplo n.º 17
0
            private void OpenFormDialog(IFileFormat fileFormat)
            {
                Type objectType = fileFormat.GetType();

                foreach (var inter in objectType.GetInterfaces())
                {
                    if (inter.IsGenericType && inter.GetGenericTypeDefinition() == typeof(IEditor <>))
                    {
                        System.Reflection.MethodInfo method = objectType.GetMethod("OpenForm");
                        var form = (STForm)method.Invoke(fileFormat, new object[0]);
                        form.Text = (((IFileFormat)fileFormat).FileName);
                        if (form.ShowDialog() == DialogResult.OK)
                        {
                            if (fileFormat.CanSave)
                            {
                                Data = fileFormat.Save();
                                UpdateHexView();
                            }
                        }
                    }
                }
            }
Exemplo n.º 18
0
        private void OpenFormDialog(IFileFormat fileFormat)
        {
            UserControl form = GetEditorForm(fileFormat);

            form.Text = (((IFileFormat)fileFormat).FileName);

            var parentForm = LibraryGUI.GetActiveForm();

            GenericEditorForm editorForm = new GenericEditorForm(true, form);

            editorForm.FormClosing += (sender, e) => FormClosing(sender, e, fileFormat);
            if (editorForm.ShowDialog() == DialogResult.OK)
            {
                if (fileFormat.CanSave)
                {
                    var mem = new System.IO.MemoryStream();
                    fileFormat.Save(mem);
                    ArchiveFileInfo.FileData = mem.ToArray();
                    UpdateEditor();
                }
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName">
        /// </summary>
        /// <param name="IFileFormat">The format instance of the file being saved</param>
        /// <param name="FileName">The name of the file</param>
        /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param>
        /// <param name="EnableDialog">Toggle for showing compression dialog</param>
        /// <returns></returns>
        public static void SaveFileFormat(IFileFormat FileFormat, string FileName, bool EnableDialog = true, string DetailsLog = "")
        {
            //These always get created on loading a file,however not on creating a new file
            if (FileFormat.IFileInfo == null)
            {
                throw new System.NotImplementedException("Make sure to impliment a IFileInfo instance if a format is being created!");
            }

            Cursor.Current      = Cursors.WaitCursor;
            FileFormat.FilePath = FileName;

            if (FileFormat.IFileInfo.FileIsCompressed || FileFormat.IFileInfo.InArchive)
            {
                //Todo find more optmial way to handle memory with files in archives
                //Also make compression require streams
                var mem = new System.IO.MemoryStream();
                FileFormat.Save(mem);

                byte[] data = mem.ToArray();
                FileFormat.IFileInfo.DecompressedSize = (uint)data.Length;

                data = CompressFileFormat(data,
                                          FileFormat.IFileInfo.FileIsCompressed,
                                          FileFormat.IFileInfo.Alignment,
                                          FileFormat.IFileInfo.CompressionType,
                                          FileName,
                                          EnableDialog);

                FileFormat.IFileInfo.CompressedSize = (uint)data.Length;

                File.WriteAllBytes(FileName, data);

                DetailsLog += "\n" + SatisfyFileTables(FileFormat, FileName, data,
                                                       FileFormat.IFileInfo.DecompressedSize,
                                                       FileFormat.IFileInfo.CompressedSize,
                                                       FileFormat.IFileInfo.FileIsCompressed);
            }
            else
            {
                //Check if a stream is active and the file is beinng saved to the same opened file
                if (FileFormat is ISaveOpenedFileStream && FileFormat.FilePath == FileName && File.Exists(FileName))
                {
                    string savedPath = Path.GetDirectoryName(FileName);
                    string tempPath  = Path.Combine(savedPath, "tempST.bin");

                    //Save a temporary file first to not disturb the opened file
                    using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                    {
                        FileFormat.Save(fileStream);

                        //After saving is done remove the existing file
                        File.Delete(FileName);

                        //Now move and rename our temp file to the new file path
                        File.Move(tempPath, FileName);
                    }
                }
                else
                {
                    using (var fileStream = new FileStream(FileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                    {
                        FileFormat.Save(fileStream);
                    }
                }
            }

            MessageBox.Show($"File has been saved to {FileName}", "Save Notification");

            //   STSaveLogDialog.Show($"File has been saved to {FileName}", "Save Notification", DetailsLog);
            Cursor.Current = Cursors.Default;
        }
Exemplo n.º 20
0
        /// <summary>
        /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName">
        /// </summary>
        /// <param name="IFileFormat">The format instance of the file being saved</param>
        /// <param name="FileName">The name of the file</param>
        /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param>
        /// <param name="EnableDialog">Toggle for showing compression dialog</param>
        /// <returns></returns>
        public static void SaveFileFormat(IFileFormat FileFormat, string FileName, bool EnableDialog = true, string DetailsLog = "")
        {
            //These always get created on loading a file,however not on creating a new file
            if (FileFormat.IFileInfo == null)
                throw new System.NotImplementedException("Make sure to impliment a IFileInfo instance if a format is being created!");

            Cursor.Current = Cursors.WaitCursor;
            FileFormat.FilePath = FileName;

            string compressionLog = "";
            if (FileFormat.IFileInfo.FileIsCompressed || FileFormat.IFileInfo.InArchive
                || Path.GetExtension(FileName) == ".szs" || Path.GetExtension(FileName) == ".sbfres")
            {
                //Todo find more optmial way to handle memory with files in archives
                //Also make compression require streams
                var mem = new System.IO.MemoryStream();
                FileFormat.Save(mem);
                mem =  new System.IO.MemoryStream(mem.ToArray());

                FileFormat.IFileInfo.DecompressedSize = (uint)mem.Length;

                var finalStream = CompressFileFormat(
                    FileFormat.IFileInfo.FileCompression,
                    mem,
                    FileFormat.IFileInfo.FileIsCompressed,
                    FileFormat.IFileInfo.Alignment,
                    FileName,
                    EnableDialog);

                compressionLog = finalStream.Item2;
                Stream compressionStream = finalStream.Item1;

                FileFormat.IFileInfo.CompressedSize = (uint)compressionStream.Length;
                compressionStream.ExportToFile(FileName);

                DetailsLog += "\n" + SatisfyFileTables(FileFormat, FileName, compressionStream,
                                    FileFormat.IFileInfo.DecompressedSize,
                                    FileFormat.IFileInfo.CompressedSize,
                                    FileFormat.IFileInfo.FileIsCompressed);

                compressionStream.Flush();
                compressionStream.Close();
            }
            else
            {
                //Check if a stream is active and the file is beinng saved to the same opened file
                if (FileFormat is ISaveOpenedFileStream && FileFormat.FilePath == FileName && File.Exists(FileName))
                {
                    string savedPath = Path.GetDirectoryName(FileName);
                    string tempPath = Path.Combine(savedPath, "tempST.bin");

                    //Save a temporary file first to not disturb the opened file
                    using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                    {
                        FileFormat.Save(fileStream);
                        FileFormat.Unload();

                        //After saving is done remove the existing file
                        File.Delete(FileName);

                        //Now move and rename our temp file to the new file path
                        File.Move(tempPath, FileName);

                        FileFormat.Load(File.OpenRead(FileName));

                        var activeForm = LibraryGUI.GetActiveForm();
                        if (activeForm != null && activeForm is ObjectEditor)
                            ((ObjectEditor)activeForm).ReloadArchiveFile(FileFormat);
                    }
                }
                else
                {
                    using (var fileStream = new FileStream(FileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                    {
                        FileFormat.Save(fileStream);
                    }
                }
            }

            if (compressionLog != string.Empty)
                MessageBox.Show($"File has been saved to {FileName}. Compressed time: {compressionLog}", "Save Notification");
            else
                MessageBox.Show($"File has been saved to {FileName}", "Save Notification");

             //   STSaveLogDialog.Show($"File has been saved to {FileName}", "Save Notification", DetailsLog);
            Cursor.Current = Cursors.Default;
        }
Exemplo n.º 21
0
        /// <summary>
        /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName">
        /// </summary>
        /// <param name="IFileFormat">The format instance of the file being saved</param>
        /// <param name="FileName">The name of the file</param>
        /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param>
        /// <returns></returns>
        public static SaveLog SaveFileFormat(IFileFormat fileFormat, string fileName)
        {
            SaveLog   log       = new SaveLog();
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();

            fileFormat.FileInfo.FilePath = fileName;

            if (fileFormat.FileInfo.KeepOpen && File.Exists(fileName))
            {
                string savedPath = Path.GetDirectoryName(fileName);
                string tempPath  = Path.Combine(savedPath, "tempST.bin");

                //Save a temporary file first to not disturb the opened file
                using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    fileFormat.Save(fileStream);
                    if (fileFormat.FileInfo.Compression != null)
                    {
                        // Stream comp = CompressFile(File.OpenRead(tempPath), fileFormat);
                        //fileStream.CopyTo(comp);
                    }

                    if (fileFormat is IDisposable)
                    {
                        ((IDisposable)fileFormat).Dispose();
                    }

                    //After saving is done remove the existing file
                    File.Delete(fileName);

                    //Now move and rename our temp file to the new file path
                    File.Move(tempPath, fileName);

                    fileFormat.Load(File.OpenRead(fileName));
                }
            }
            else if (fileFormat.FileInfo.Compression != null)
            {
                MemoryStream mem = new MemoryStream();
                fileFormat.Save(mem);
                mem = new MemoryStream(mem.ToArray());
                var finalStream = CompressFile(mem, fileFormat);
                // File.WriteAllBytes(fileName, finalStream.ToArray());

                using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) {
                    finalStream.CopyTo(fileStream);
                }
            }
            else
            {
                using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) {
                    fileFormat.Save(fileStream);
                }
            }

            stopWatch.Stop();
            TimeSpan ts = stopWatch.Elapsed;

            log.SaveTime = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Minutes, ts.Seconds, ts.Milliseconds);

            return(log);
        }