public Task SetMetaData(string fileName, IEnumerable <MetaDataItem> metaDataItems, Func <MetaDataItem, bool> predicate) { var box = this.GetXtraBox(); var tags = metaDataItems.Where( metaDataItem => XtraTag.CanExport(metaDataItem) ).Select( metaDataItem => XtraTag.FromMetaDataItem(metaDataItem) ).ToArray(); if (box == null) { this.AddTags(tags); } else if (tags.Any()) { this.UpdateTags(box, tags); } else { this.RemoveXtraBox(); } #if NET40 return(TaskEx.FromResult(false)); #else return(Task.CompletedTask); #endif }
protected virtual void OnFormat(BinaryWriter writer, XtraTag tag) { var frameLength = default(int); var nameLength = default(int); var name = tag.Name; var count = tag.Parts.Length; var contentLength = default(int); contentLength = tag.Parts.Sum(part => 4 + 2 + part.Content.Length); nameLength = name.Length; frameLength = 4 + 4 + nameLength + 4 + contentLength; WriteInt32(writer, frameLength); WriteInt32(writer, nameLength); WriteString(writer, name); WriteInt32(writer, count); foreach (var part in tag.Parts) { var flag = default(short); var content = part.Content; var elementLength = 4 + 2 + content.Length; switch (part.Type) { case XtraTagType.Unicode: flag = XtraBox.UNICODE; break; case XtraTagType.UInt64: flag = XtraBox.UINT64; break; case XtraTagType.Date: flag = XtraBox.DATE; break; case XtraTagType.Guid: flag = XtraBox.GUID; break; case XtraTagType.Variant: flag = XtraBox.VARIANT; break; default: throw new NotImplementedException(); } WriteInt32(writer, elementLength); WriteInt16(writer, flag); writer.Write(content); } }
public Task <IEnumerable <MetaDataItem> > GetMetaData(string fileName) { var box = this.GetXtraBox(); var metaDatas = new List <MetaDataItem>(); if (box != null && box.Data != null) { var parser = new XtraBoxParser(box.Data.Data); var metaDataItems = parser.Tags.Where( tag => XtraTag.CanImport(tag) ).Select( tag => tag.ToMetaDataItem() ).ToArray(); metaDatas.AddRange(metaDataItems); } #if NET40 return(TaskEx.FromResult <IEnumerable <MetaDataItem> >(metaDatas)); #else return(Task.FromResult <IEnumerable <MetaDataItem> >(metaDatas)); #endif }