/// <summary> /// Applies changes to a files /// </summary> /// <returns></returns> public IEnumerable <Exception> ApplyPendingChanges() { // don't want to introduce another class hierarchy so simply using exception var errors = new List <Exception>(); foreach (var entry in _entries.Where(model => model.IsDirty)) { var file = new FileInfo(entry.FullName); // check various error conditions if (!file.Exists) { errors.Add(new FileNotFoundException("", entry.FullName)); continue; } var isReadOnly = file.IsReadOnly; try { if (isReadOnly) { if (UpdateReadonlyFiles) { file.IsReadOnly = false; } else { errors.Add(new Exception(String.Format("File is readonly: {0}", entry.FullName))); continue; } } using (var upd = new SegmentInfoUpdater()) { upd.Open(file); upd.Title = entry.Title; upd.Write(); } if (isReadOnly) { file.IsReadOnly = true; } } catch (Exception e) { errors.Add(e); } } return(errors); }
public void ReusesPriorFiller() { var stream = new MemoryStream(); var writer = new EbmlWriter(stream); writer.Write(VInt.MakeId(122), 321); using (var segment = writer.StartMasterElement(MatroskaDtd.Segment.Identifier)) { segment.Write(StandardDtd.Void.Identifier, new byte[1000]); using (var segmentInfo = segment.StartMasterElement(MatroskaDtd.Segment.Info.Identifier)) { segmentInfo.WriteUtf(MatroskaDtd.Segment.Info.Title.Identifier, "Test data"); } // write some dummy data segment.Write(VInt.MakeId(123), 123); // marker } stream.Position = 0; // act var infoReader = new SegmentInfoUpdater(); infoReader.Open(stream); infoReader.Title = new string('a', 500); infoReader.Write(); // verify the stream is correct stream.Position = 0; var reader = new EbmlReader(stream); reader.ReadNext(); Assert.AreEqual(122, reader.ElementId.Value, "start marker"); Assert.AreEqual(321, reader.ReadInt()); reader.ReadNext(); Assert.AreEqual(MatroskaDtd.Segment.Identifier, reader.ElementId); reader.EnterContainer(); reader.ReadNext(); Assert.AreEqual(MatroskaDtd.Segment.Info.Identifier, reader.ElementId); Assert.Greater(reader.ElementSize, 500); reader.ReadNext(); Assert.AreEqual(StandardDtd.Void.Identifier, reader.ElementId); reader.ReadNext(); Assert.AreEqual(123, reader.ElementId.Value, "end data marker"); Assert.AreEqual(123, reader.ReadInt()); }
public void SimpleUseCase() { var file = new FileInfo(@"Z:\!\t.mkv"); var segmentInfo = new SegmentInfoUpdater(); segmentInfo.Open(file); Debug.Print("Duration: {0}", segmentInfo.Duration); Debug.Print("MuxingApp: {0}", segmentInfo.MuxingApp); Debug.Print("WritingApp: {0}", segmentInfo.WritingApp); Debug.Print("Title: {0}", segmentInfo.Title); segmentInfo.Title = "s4e16 The Cohabitation Formulation"; segmentInfo.WritingApp = "NEbml.Viewer 0.1"; segmentInfo.Write(); segmentInfo.Close(); }
public void SegmentInfoReaderSimpleUseCase() { var file = new FileInfo(SampleFilePath); using (var fileStream = file.Open(FileMode.Open, FileAccess.ReadWrite)) using (var segmentInfo = new SegmentInfoUpdater()) { segmentInfo.Open(fileStream); Debug.Print("Duration: {0}", segmentInfo.Duration); Debug.Print("MuxingApp: {0}", segmentInfo.MuxingApp); Debug.Print("WritingApp: {0}", segmentInfo.WritingApp); Debug.Print("Title: {0}", segmentInfo.Title); segmentInfo.Title = "s4e16 The Cohabitation Formulation"; segmentInfo.WritingApp = "NEbml.Viewer 0.1"; segmentInfo.Write(); } }