コード例 #1
0
        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
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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
        }