Пример #1
0
        /// <summary>
        /// Gets all metadata
        /// Iterates recursively through all metadata
        /// </summary>
        /// <remarks>
        /// Intented for debug only!!!
        /// </remarks>
        public static List <(string metadataPath, object value)> GetListOfMetadataForDebug(this BitmapMetadata metadata)
        {
            var listOfAllMetadata = new List <(string metadataPath, object value)>();

            try
            {
                GetMetadataRecursively(metadata, string.Empty);
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch (Exception ex)
#pragma warning restore CA1031 // Do not catch general exception types
            {
                Debug.WriteLine($"Exception while trying to iterate recursively over metadata. We were able to read {listOfAllMetadata.Count} metadata entries.");
                Debug.WriteLine(ex);
            }

            return(listOfAllMetadata);

            void GetMetadataRecursively(BitmapMetadata metadata, string query)
            {
                if (metadata == null)
                {
                    return;
                }

                foreach (string relativeQuery in metadata)
                {
                    string absolutePath = query + relativeQuery;

                    object metadataQueryReader = null;

                    try
                    {
                        metadataQueryReader = metadata.GetQuerySafe(relativeQuery);
                        listOfAllMetadata.Add((absolutePath, metadataQueryReader));
                    }
#pragma warning disable CA1031 // Do not catch general exception types
                    catch (Exception ex)
#pragma warning restore CA1031 // Do not catch general exception types
                    {
                        listOfAllMetadata.Add((absolutePath, $"######## INVALID METADATA: {ex.Message}"));
                        Debug.WriteLine(ex);
                    }

                    if (metadataQueryReader is BitmapMetadata innerMetadata)
                    {
                        GetMetadataRecursively(innerMetadata, absolutePath);
                    }
                }
            }
        }
Пример #2
0
        public static void CopyMetadataPropertyTo(this BitmapMetadata source, BitmapMetadata target, string query)
        {
            if (source == null || target == null || string.IsNullOrWhiteSpace(query))
            {
                return;
            }

            try
            {
                var value = source.GetQuerySafe(query);

                if (value == null)
                {
                    return;
                }

                target.SetQuery(query, value);
            }
            catch (InvalidOperationException)
            {
                // InvalidOperationException is thrown if metadata object is in readonly state.
                return;
            }
        }