protected void OnBtnStop(object sender, EventArgs e) { lblProgress.Text = "Aborting..."; btnStop.Enabled = false; sidecarClass.Abort(); }
public static int Invoke(bool debug, bool verbose, uint blockSize, string encodingName, string imagePath, bool tape) { MainClass.PrintCopyright(); if (debug) { AaruConsole.DebugWriteLineEvent += System.Console.Error.WriteLine; } if (verbose) { AaruConsole.VerboseWriteLineEvent += System.Console.WriteLine; } Statistics.AddCommand("create-sidecar"); AaruConsole.DebugWriteLine("Create sidecar command", "--block-size={0}", blockSize); AaruConsole.DebugWriteLine("Create sidecar command", "--debug={0}", debug); AaruConsole.DebugWriteLine("Create sidecar command", "--encoding={0}", encodingName); AaruConsole.DebugWriteLine("Create sidecar command", "--input={0}", imagePath); AaruConsole.DebugWriteLine("Create sidecar command", "--tape={0}", tape); AaruConsole.DebugWriteLine("Create sidecar command", "--verbose={0}", verbose); Encoding encodingClass = null; if (encodingName != null) { try { encodingClass = Claunia.Encoding.Encoding.GetEncoding(encodingName); if (verbose) { AaruConsole.VerboseWriteLine("Using encoding for {0}.", encodingClass.EncodingName); } } catch (ArgumentException) { AaruConsole.ErrorWriteLine("Specified encoding is not supported."); return((int)ErrorNumber.EncodingUnknown); } } if (File.Exists(imagePath)) { if (tape) { AaruConsole.ErrorWriteLine("You cannot use --tape option when input is a file."); return((int)ErrorNumber.ExpectedDirectory); } var filtersList = new FiltersList(); IFilter inputFilter = filtersList.GetFilter(imagePath); if (inputFilter == null) { AaruConsole.ErrorWriteLine("Cannot open specified file."); return((int)ErrorNumber.CannotOpenFile); } try { IMediaImage imageFormat = ImageFormat.Detect(inputFilter); if (imageFormat == null) { AaruConsole.WriteLine("Image format not identified, not proceeding with analysis."); return((int)ErrorNumber.UnrecognizedFormat); } if (verbose) { AaruConsole.VerboseWriteLine("Image format identified by {0} ({1}).", imageFormat.Name, imageFormat.Id); } else { AaruConsole.WriteLine("Image format identified by {0}.", imageFormat.Name); } try { if (!imageFormat.Open(inputFilter)) { AaruConsole.WriteLine("Unable to open image format"); AaruConsole.WriteLine("No error given"); return((int)ErrorNumber.CannotOpenFormat); } AaruConsole.DebugWriteLine("Analyze command", "Correctly opened image file."); } catch (Exception ex) { AaruConsole.ErrorWriteLine("Unable to open image format"); AaruConsole.ErrorWriteLine("Error: {0}", ex.Message); return((int)ErrorNumber.CannotOpenFormat); } Statistics.AddMediaFormat(imageFormat.Format); Statistics.AddFilter(inputFilter.Name); var sidecarClass = new Sidecar(imageFormat, imagePath, inputFilter.Id, encodingClass); sidecarClass.InitProgressEvent += Progress.InitProgress; sidecarClass.UpdateProgressEvent += Progress.UpdateProgress; sidecarClass.EndProgressEvent += Progress.EndProgress; sidecarClass.InitProgressEvent2 += Progress.InitProgress2; sidecarClass.UpdateProgressEvent2 += Progress.UpdateProgress2; sidecarClass.EndProgressEvent2 += Progress.EndProgress2; sidecarClass.UpdateStatusEvent += Progress.UpdateStatus; System.Console.CancelKeyPress += (sender, e) => { e.Cancel = true; sidecarClass.Abort(); }; CICMMetadataType sidecar = sidecarClass.Create(); AaruConsole.WriteLine("Writing metadata sidecar"); var xmlFs = new FileStream(Path.Combine(Path.GetDirectoryName(imagePath) ?? throw new InvalidOperationException(), Path.GetFileNameWithoutExtension(imagePath) + ".cicm.xml"), FileMode.CreateNew); var xmlSer = new XmlSerializer(typeof(CICMMetadataType)); xmlSer.Serialize(xmlFs, sidecar); xmlFs.Close(); } catch (Exception ex) { AaruConsole.ErrorWriteLine($"Error reading file: {ex.Message}"); AaruConsole.DebugWriteLine("Analyze command", ex.StackTrace); return((int)ErrorNumber.UnexpectedException); } } else if (Directory.Exists(imagePath)) { if (!tape) { AaruConsole.ErrorWriteLine("Cannot create a sidecar from a directory."); return((int)ErrorNumber.ExpectedFile); } string[] contents = Directory.GetFiles(imagePath, "*", SearchOption.TopDirectoryOnly); List <string> files = contents.Where(file => new FileInfo(file).Length % blockSize == 0).ToList(); files.Sort(StringComparer.CurrentCultureIgnoreCase); var sidecarClass = new Sidecar(); sidecarClass.InitProgressEvent += Progress.InitProgress; sidecarClass.UpdateProgressEvent += Progress.UpdateProgress; sidecarClass.EndProgressEvent += Progress.EndProgress; sidecarClass.InitProgressEvent2 += Progress.InitProgress2; sidecarClass.UpdateProgressEvent2 += Progress.UpdateProgress2; sidecarClass.EndProgressEvent2 += Progress.EndProgress2; sidecarClass.UpdateStatusEvent += Progress.UpdateStatus; CICMMetadataType sidecar = sidecarClass.BlockTape(Path.GetFileName(imagePath), files, blockSize); AaruConsole.WriteLine("Writing metadata sidecar"); var xmlFs = new FileStream(Path.Combine(Path.GetDirectoryName(imagePath) ?? throw new InvalidOperationException(), Path.GetFileNameWithoutExtension(imagePath) + ".cicm.xml"), FileMode.CreateNew); var xmlSer = new XmlSerializer(typeof(CICMMetadataType)); xmlSer.Serialize(xmlFs, sidecar); xmlFs.Close(); } else { AaruConsole.ErrorWriteLine("The specified input file cannot be found."); } return((int)ErrorNumber.NoError); }
public void Abort() { _aborted = true; _sidecarClass?.Abort(); }