/// <summary> /// Saves all asms/hex docs and returns true if all of them were saved to disk /// </summary> /// <param name="objs">All objects to save</param> /// <returns></returns> public static bool SaveAssemblies(IEnumerable <IUndoObject> objs) { var objsAry = objs.ToArray(); if (objsAry.Length == 0) { return(true); } if (objsAry.Length == 1) { SaveOptionsVM options; var asm = objsAry[0] as LoadedAssembly; if (asm != null) { var optsData = new SaveModuleOptionsVM(asm); var optsWin = new SaveModuleOptionsDlg(); optsWin.Owner = MainWindow.Instance; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) { return(false); } options = optsData; } else { var doc = (AsmEdHexDocument)objsAry[0]; var optsData = new SaveHexOptionsVM(doc); var optsWin = new SaveHexOptionsDlg(); optsWin.Owner = MainWindow.Instance; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) { return(false); } options = optsData; } var data = new SaveMultiModuleVM(MainWindow.Instance.Dispatcher, options); var win = new SaveSingleModuleDlg(); win.Owner = MainWindow.Instance; win.DataContext = data; data.Save(); win.ShowDialog(); return(MarkAsSaved(data, objsAry)); } else { var data = new SaveMultiModuleVM(MainWindow.Instance.Dispatcher, objsAry); var win = new SaveMultiModuleDlg(); win.Owner = MainWindow.Instance; win.DataContext = data; win.ShowDialog(); return(MarkAsSaved(data, objsAry)); } }
public bool Save(IEnumerable <object> docs) { var objsAry = Distinct(docs).ToArray(); if (objsAry.Length == 0) { return(true); } if (objsAry.Length == 1) { SaveOptionsVM options; if (objsAry[0] is IDsDocument document) { var optsData = new SaveModuleOptionsVM(document); var optsWin = new SaveModuleOptionsDlg(); optsWin.Owner = appWindow.MainWindow; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) { return(false); } options = optsData; } else { var buffer = objsAry[0] as HexBuffer; Debug.Assert(!(buffer is null)); var optsData = new SaveHexOptionsVM(buffer); var optsWin = new SaveHexOptionsDlg(); optsWin.Owner = appWindow.MainWindow; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) { return(false); } options = optsData; } var data = new SaveMultiModuleVM(mmapDisabler.Value, Dispatcher.CurrentDispatcher, options); var win = new SaveSingleModuleDlg(); win.Owner = appWindow.MainWindow; win.DataContext = data; data.Save(); win.ShowDialog(); return(MarkAsSaved(data, objsAry)); } else { var data = new SaveMultiModuleVM(mmapDisabler.Value, Dispatcher.CurrentDispatcher, objsAry); var win = new SaveMultiModuleDlg(); win.Owner = appWindow.MainWindow; win.DataContext = data; win.ShowDialog(); return(MarkAsSaved(data, objsAry)); } }
/// <summary> /// Saves all asms/hex docs and returns true if all of them were saved to disk /// </summary> /// <param name="objs">All objects to save</param> /// <returns></returns> public static bool SaveAssemblies(IEnumerable<IUndoObject> objs) { var objsAry = objs.ToArray(); if (objsAry.Length == 0) return true; if (objsAry.Length == 1) { SaveOptionsVM options; var file = UndoCommandManager.Instance.TryGetDnSpyFile(objsAry[0]); if (file != null) { var optsData = new SaveModuleOptionsVM(file); var optsWin = new SaveModuleOptionsDlg(); optsWin.Owner = MainWindow.Instance; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) return false; options = optsData; } else { var doc = UndoCommandManager.Instance.TryGetAsmEdHexDocument(objsAry[0]); Debug.Assert(doc != null); var optsData = new SaveHexOptionsVM(doc); var optsWin = new SaveHexOptionsDlg(); optsWin.Owner = MainWindow.Instance; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) return false; options = optsData; } var data = new SaveMultiModuleVM(MainWindow.Instance.Dispatcher, options); var win = new SaveSingleModuleDlg(); win.Owner = MainWindow.Instance; win.DataContext = data; data.Save(); win.ShowDialog(); return MarkAsSaved(data, objsAry); } else { var data = new SaveMultiModuleVM(MainWindow.Instance.Dispatcher, objsAry); var win = new SaveMultiModuleDlg(); win.Owner = MainWindow.Instance; win.DataContext = data; win.ShowDialog(); return MarkAsSaved(data, objsAry); } }
/// <summary> /// Saves all asms/hex docs and returns true if all of them were saved to disk /// </summary> /// <param name="objs">All objects to save</param> /// <returns></returns> public static bool SaveAssemblies(IEnumerable<IUndoObject> objs) { var objsAry = objs.ToArray(); if (objsAry.Length == 0) return true; if (objsAry.Length == 1) { SaveOptionsVM options; var asm = objsAry[0] as LoadedAssembly; if (asm != null) { var optsData = new SaveModuleOptionsVM(asm); var optsWin = new SaveModuleOptionsDlg(); optsWin.Owner = MainWindow.Instance; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) return false; options = optsData; } else { var doc = (AsmEdHexDocument)objsAry[0]; var optsData = new SaveHexOptionsVM(doc); var optsWin = new SaveHexOptionsDlg(); optsWin.Owner = MainWindow.Instance; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) return false; options = optsData; } var data = new SaveMultiModuleVM(MainWindow.Instance.Dispatcher, options); var win = new SaveSingleModuleDlg(); win.Owner = MainWindow.Instance; win.DataContext = data; data.Save(); win.ShowDialog(); return MarkAsSaved(data, objsAry); } else { var data = new SaveMultiModuleVM(MainWindow.Instance.Dispatcher, objsAry); var win = new SaveMultiModuleDlg(); win.Owner = MainWindow.Instance; win.DataContext = data; win.ShowDialog(); return MarkAsSaved(data, objsAry); } }
void Save(SaveHexOptionsVM hex, ref byte[] buffer) { var progress = new HexFileProgress(GetSize(hex.Document.StartOffset, hex.Document.EndOffset)); fileProgress = progress; if (buffer == null) { buffer = new byte[64 * 1024]; } try { if (File.Exists(hex.FileName)) { File.Delete(hex.FileName); } using (var stream = File.OpenWrite(hex.FileName)) { ulong offs = hex.Document.StartOffset; ulong end = hex.Document.EndOffset; while (offs <= end) { ThrowIfCanceled(); ulong bytesLeft = GetSize(offs, end); int bytesToWrite = bytesLeft > (ulong)buffer.Length ? buffer.Length : (int)bytesLeft; hex.Document.Read(offs, buffer, 0, bytesToWrite); stream.Write(buffer, 0, bytesToWrite); progress.BytesWritten += (ulong)bytesToWrite; NotifyProgressUpdated(); ulong nextOffs = offs + (ulong)bytesToWrite; if (nextOffs < offs) { break; } offs = nextOffs; } } } catch { DeleteFile(hex.FileName); throw; } }
void Save(SaveHexOptionsVM hex, ref byte[] buffer) { var progress = new HexFileProgress(GetSize(hex.Buffer.Span.Start, hex.Buffer.Span.End)); fileProgress = progress; if (buffer == null) { buffer = new byte[64 * 1024]; } try { if (File.Exists(hex.FileName)) { File.Delete(hex.FileName); } using (var stream = File.OpenWrite(hex.FileName)) { var pos = hex.Buffer.Span.Start; var end = hex.Buffer.Span.End; while (pos < end) { ThrowIfCanceled(); ulong bytesLeft = GetSize(pos, end); int bytesToWrite = bytesLeft > (ulong)buffer.Length ? buffer.Length : (int)bytesLeft; hex.Buffer.ReadBytes(pos, buffer, 0, bytesToWrite); stream.Write(buffer, 0, bytesToWrite); progress.BytesWritten += (ulong)bytesToWrite; NotifyProgressUpdated(); pos = pos + (ulong)bytesToWrite; } } } catch { DeleteFile(hex.FileName); throw; } }
public SaveHexOptionsVM CopyTo(SaveHexOptionsVM other) { other.FileName = this.FileName; return(other); }
public SaveHexOptionsVM CopyTo(SaveHexOptionsVM other) { other.FileName = this.FileName; return other; }
public SaveHexOptionsVM CopyTo(SaveHexOptionsVM other) { other.FileName = FileName; other.OriginalFileName = OriginalFileName; return(other); }
void Save(SaveHexOptionsVM hex, ref byte[] buffer) { var progress = new HexFileProgress(GetSize(hex.Document.StartOffset, hex.Document.EndOffset)); fileProgress = progress; if (buffer == null) buffer = new byte[64 * 1024]; try { if (File.Exists(hex.FileName)) File.Delete(hex.FileName); using (var stream = File.OpenWrite(hex.FileName)) { ulong offs = hex.Document.StartOffset; ulong end = hex.Document.EndOffset; while (offs <= end) { ThrowIfCanceled(); ulong bytesLeft = GetSize(offs, end); int bytesToWrite = bytesLeft > (ulong)buffer.Length ? buffer.Length : (int)bytesLeft; hex.Document.Read(offs, buffer, 0, bytesToWrite); stream.Write(buffer, 0, bytesToWrite); progress.BytesWritten += (ulong)bytesToWrite; NotifyProgressUpdated(); ulong nextOffs = offs + (ulong)bytesToWrite; if (nextOffs < offs) break; offs = nextOffs; } } } catch { DeleteFile(hex.FileName); throw; } }
public bool Save(IEnumerable<object> docs) { var objsAry = Distinct(docs).ToArray(); if (objsAry.Length == 0) return true; if (objsAry.Length == 1) { SaveOptionsVM options; var document = objsAry[0] as IDsDocument; if (document != null) { var optsData = new SaveModuleOptionsVM(document); var optsWin = new SaveModuleOptionsDlg(); optsWin.Owner = appWindow.MainWindow; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) return false; options = optsData; } else { var buffer = objsAry[0] as HexBuffer; Debug.Assert(buffer != null); var optsData = new SaveHexOptionsVM(buffer); var optsWin = new SaveHexOptionsDlg(); optsWin.Owner = appWindow.MainWindow; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) return false; options = optsData; } var data = new SaveMultiModuleVM(mmapDisabler.Value, Dispatcher.CurrentDispatcher, options); var win = new SaveSingleModuleDlg(); win.Owner = appWindow.MainWindow; win.DataContext = data; data.Save(); win.ShowDialog(); return MarkAsSaved(data, objsAry); } else { var data = new SaveMultiModuleVM(mmapDisabler.Value, Dispatcher.CurrentDispatcher, objsAry); var win = new SaveMultiModuleDlg(); win.Owner = appWindow.MainWindow; win.DataContext = data; win.ShowDialog(); return MarkAsSaved(data, objsAry); } }
void Save(SaveHexOptionsVM hex, ref byte[] buffer) { var progress = new HexFileProgress(GetSize(hex.Buffer.Span.Start, hex.Buffer.Span.End)); fileProgress = progress; if (buffer == null) buffer = new byte[64 * 1024]; try { if (File.Exists(hex.FileName)) File.Delete(hex.FileName); using (var stream = File.OpenWrite(hex.FileName)) { var pos = hex.Buffer.Span.Start; var end = hex.Buffer.Span.End; while (pos < end) { ThrowIfCanceled(); ulong bytesLeft = GetSize(pos, end); int bytesToWrite = bytesLeft > (ulong)buffer.Length ? buffer.Length : (int)bytesLeft; hex.Buffer.ReadBytes(pos, buffer, 0, bytesToWrite); stream.Write(buffer, 0, bytesToWrite); progress.BytesWritten += (ulong)bytesToWrite; NotifyProgressUpdated(); pos = pos + (ulong)bytesToWrite; } } } catch { DeleteFile(hex.FileName); throw; } }
/// <summary> /// Saves all asms/hex docs and returns true if all of them were saved to disk /// </summary> /// <param name="objs">All objects to save</param> /// <returns></returns> public static bool SaveAssemblies(IEnumerable <IUndoObject> objs) { var objsAry = objs.ToArray(); if (objsAry.Length == 0) { return(true); } if (objsAry.Length == 1) { SaveOptionsVM options; var file = UndoCommandManager.Instance.TryGetDnSpyFile(objsAry[0]); if (file != null) { var optsData = new SaveModuleOptionsVM(file); var optsWin = new SaveModuleOptionsDlg(); optsWin.Owner = MainWindow.Instance; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) { return(false); } options = optsData; } else { var doc = UndoCommandManager.Instance.TryGetAsmEdHexDocument(objsAry[0]); Debug.Assert(doc != null); var optsData = new SaveHexOptionsVM(doc); var optsWin = new SaveHexOptionsDlg(); optsWin.Owner = MainWindow.Instance; optsWin.DataContext = optsData; var res = optsWin.ShowDialog(); if (res != true) { return(false); } options = optsData; } var data = new SaveMultiModuleVM(MainWindow.Instance.Dispatcher, options); var win = new SaveSingleModuleDlg(); win.Owner = MainWindow.Instance; win.DataContext = data; data.Save(); win.ShowDialog(); return(MarkAsSaved(data, objsAry)); } else { var data = new SaveMultiModuleVM(MainWindow.Instance.Dispatcher, objsAry); var win = new SaveMultiModuleDlg(); win.Owner = MainWindow.Instance; win.DataContext = data; win.ShowDialog(); return(MarkAsSaved(data, objsAry)); } }