/// <summary> /// Adds GPS destination location URL metadata item to the <see cref="IGalleryObject.MetadataItems" /> /// collection of <paramref name="galleryObject" />. If the gallery object's metadata does not contain GPS data or the /// visibility of the GPS map link is turned off, no action is taken. /// </summary> /// <param name="galleryObject">The gallery object.</param> /// <param name="metadataDisplaySettings">The metadata display settings.</param> /// <remarks>The metadata item is added with <see cref="IGalleryObjectMetadataItem.HasChanges" /> = <c>false</c> to prevent it /// from getting persisted to the database. This allows the hyperlink to be regenerated from the template, thus incorporating the /// most recent template and other media object properties (such as title). Because the item is linked to the media object, it is /// automatically included in the cache of media objects. /// This function is identical to <see cref="AddGpsLocationWithMapLink" /> except it uses the primary (not destination) GPS settings.</remarks> private static void AddGpsDestLocationWithMapLink(IGalleryObject galleryObject, IMetadataDefinitionCollection metadataDisplaySettings) { if (!metadataDisplaySettings.Find(FormattedMetadataItemName.GpsDestLocationWithMapLink).IsVisible) { return; // The map link is disabled, so there is nothing to do. } IGalleryObjectMetadataItemCollection metadata = galleryObject.MetadataItems; IGalleryObjectMetadataItem gpsLocation; if (metadata.TryGetMetadataItem(FormattedMetadataItemName.GpsDestLocation, out gpsLocation) && (!metadata.Contains(FormattedMetadataItemName.GpsDestLocationWithMapLink))) { // We have a GPS location but have not yet created the URL'd version. Do so now and add it to the collection. IGalleryObjectMetadataItem latitude; IGalleryObjectMetadataItem longitude; bool foundLatitude = metadata.TryGetMetadataItem(FormattedMetadataItemName.GpsDestLatitude, out latitude); bool foundLongitude = metadata.TryGetMetadataItem(FormattedMetadataItemName.GpsDestLongitude, out longitude); if (foundLatitude && foundLongitude) { string url = GetGpsMapUrl(galleryObject, latitude.Value, longitude.Value, gpsLocation.Value); if (!String.IsNullOrEmpty(url)) { // Add to meta collection. Specify false for HasChanges to prevent it from getting persisted back to the database. galleryObject.MetadataItems.AddNew(int.MinValue, FormattedMetadataItemName.GpsDestLocationWithMapLink, Resources.GalleryServerPro.Metadata_GpsDestLocationWithMapLink, url, false); } } } }
private void AddExifMetadata(IGalleryObjectMetadataItemCollection metadataItems) { foreach (FormattedMetadataItemName metadataItemName in Enum.GetValues(typeof(FormattedMetadataItemName))) { IGalleryObjectMetadataItem mdi = null; switch (metadataItemName) { case FormattedMetadataItemName.Author: mdi = GetStringMetadataItem(RawMetadataItemName.Artist, FormattedMetadataItemName.Author, Resources.Metadata_Author); break; case FormattedMetadataItemName.CameraModel: mdi = GetStringMetadataItem(RawMetadataItemName.EquipModel, FormattedMetadataItemName.CameraModel, Resources.Metadata_CameraModel); break; case FormattedMetadataItemName.ColorRepresentation: mdi = GetColorRepresentationMetadataItem(); break; case FormattedMetadataItemName.Comment: mdi = GetStringMetadataItem(RawMetadataItemName.ExifUserComment, FormattedMetadataItemName.Comment, Resources.Metadata_Comment); break; case FormattedMetadataItemName.Copyright: mdi = GetStringMetadataItem(RawMetadataItemName.Copyright, FormattedMetadataItemName.Copyright, Resources.Metadata_Copyright); break; case FormattedMetadataItemName.DatePictureTaken: mdi = GetDatePictureTakenMetadataItem(); break; case FormattedMetadataItemName.Description: mdi = GetStringMetadataItem(RawMetadataItemName.ImageDescription, FormattedMetadataItemName.Description, Resources.Metadata_Description); break; case FormattedMetadataItemName.Dimensions: mdi = GetDimensionsMetadataItem(); break; case FormattedMetadataItemName.EquipmentManufacturer: mdi = GetStringMetadataItem(RawMetadataItemName.EquipMake, FormattedMetadataItemName.EquipmentManufacturer, Resources.Metadata_EquipmentManufacturer); break; case FormattedMetadataItemName.ExposureCompensation: mdi = GetExposureCompensationMetadataItem(); break; case FormattedMetadataItemName.ExposureProgram: mdi = GetExposureProgramMetadataItem(); break; case FormattedMetadataItemName.ExposureTime: mdi = GetExposureTimeMetadataItem(); break; case FormattedMetadataItemName.FlashMode: mdi = GetFlashModeMetadataItem(); break; case FormattedMetadataItemName.FNumber: mdi = GetFNumberMetadataItem(); break; case FormattedMetadataItemName.FocalLength: mdi = GetFocalLengthMetadataItem(); break; case FormattedMetadataItemName.Height: mdi = GetHeightMetadataItem(); break; case FormattedMetadataItemName.HorizontalResolution: mdi = GetXResolutionMetadataItem(); break; case FormattedMetadataItemName.IsoSpeed: mdi = GetStringMetadataItem(RawMetadataItemName.ExifISOSpeed, FormattedMetadataItemName.IsoSpeed, Resources.Metadata_IsoSpeed); break; case FormattedMetadataItemName.Keywords: break; // No way to access keywords through Exif, so just skip this one case FormattedMetadataItemName.LensAperture: mdi = GetApertureMetadataItem(); break; case FormattedMetadataItemName.LightSource: mdi = GetLightSourceMetadataItem(); break; case FormattedMetadataItemName.MeteringMode: mdi = GetMeteringModeMetadataItem(); break; case FormattedMetadataItemName.Rating: break; // No way to access rating through Exif, so just skip this one case FormattedMetadataItemName.Subject: break; // No way to access rating through Exif, so just skip this one case FormattedMetadataItemName.SubjectDistance: mdi = GetStringMetadataItem(RawMetadataItemName.ExifSubjectDist, FormattedMetadataItemName.SubjectDistance, Resources.Metadata_SubjectDistance, String.Concat("{0} ", Resources.Metadata_SubjectDistance_Units)); break; case FormattedMetadataItemName.Title: mdi = GetStringMetadataItem(RawMetadataItemName.ImageTitle, FormattedMetadataItemName.Title, Resources.Metadata_Title); break; case FormattedMetadataItemName.VerticalResolution: mdi = GetYResolutionMetadataItem(); break; case FormattedMetadataItemName.Width: mdi = GetWidthMetadataItem(); break; default: throw new System.ComponentModel.InvalidEnumArgumentException(string.Format(CultureInfo.CurrentCulture, "The FormattedMetadataItemName enumeration value {0} is not being processed in MediaObjectMetadataExtractor.AddExifMetadata().", metadataItemName.ToString())); } if ((mdi != null) && (!metadataItems.Contains(mdi))) { metadataItems.Add(mdi); } } }
//private void OutputToDebugWindow() //{ // foreach (RawMetadataItemName metadataItemName in Enum.GetValues(typeof(RawMetadataItemName))) // { // MetadataItem rawMdi; // if (RawMetadata.TryGetValue(metadataItemName, out rawMdi)) // { // string rawValue = rawMdi.Value.ToString().Trim().TrimEnd(new char[] {'\0'}); // string msg = String.Format(CultureInfo.CurrentCulture, "{0}: {1} (ID {2}, {3}, {4})", metadataItemName, rawValue, rawMdi.PropertyItem.Id, rawMdi.ExtractedValueType, rawMdi.PropertyTagType); // System.Diagnostics.Trace.WriteLine(msg); // } // } //} private void AddExifMetadata(IGalleryObjectMetadataItemCollection metadataItems) { //OutputToDebugWindow(); foreach (FormattedMetadataItemName metadataItemName in Enum.GetValues(typeof(FormattedMetadataItemName))) { IGalleryObjectMetadataItem mdi = null; switch (metadataItemName) { case FormattedMetadataItemName.Author: mdi = GetStringMetadataItem(RawMetadataItemName.Artist, FormattedMetadataItemName.Author, Resources.Metadata_Author); break; case FormattedMetadataItemName.CameraModel: mdi = GetStringMetadataItem(RawMetadataItemName.EquipModel, FormattedMetadataItemName.CameraModel, Resources.Metadata_CameraModel); break; case FormattedMetadataItemName.ColorRepresentation: mdi = GetColorRepresentationMetadataItem(); break; case FormattedMetadataItemName.Comment: mdi = GetStringMetadataItem(RawMetadataItemName.ExifUserComment, FormattedMetadataItemName.Comment, Resources.Metadata_Comment); break; case FormattedMetadataItemName.Copyright: mdi = GetStringMetadataItem(RawMetadataItemName.Copyright, FormattedMetadataItemName.Copyright, Resources.Metadata_Copyright); break; case FormattedMetadataItemName.DatePictureTaken: mdi = GetDatePictureTakenMetadataItem(); break; case FormattedMetadataItemName.Description: mdi = GetStringMetadataItem(RawMetadataItemName.ImageDescription, FormattedMetadataItemName.Description, Resources.Metadata_Description); break; case FormattedMetadataItemName.Dimensions: mdi = GetDimensionsMetadataItem(); break; case FormattedMetadataItemName.EquipmentManufacturer: mdi = GetStringMetadataItem(RawMetadataItemName.EquipMake, FormattedMetadataItemName.EquipmentManufacturer, Resources.Metadata_EquipmentManufacturer); break; case FormattedMetadataItemName.ExposureCompensation: mdi = GetExposureCompensationMetadataItem(); break; case FormattedMetadataItemName.ExposureProgram: mdi = GetExposureProgramMetadataItem(); break; case FormattedMetadataItemName.ExposureTime: mdi = GetExposureTimeMetadataItem(); break; case FormattedMetadataItemName.FlashMode: mdi = GetFlashModeMetadataItem(); break; case FormattedMetadataItemName.FNumber: mdi = GetFNumberMetadataItem(); break; case FormattedMetadataItemName.FocalLength: mdi = GetFocalLengthMetadataItem(); break; case FormattedMetadataItemName.Height: mdi = GetHeightMetadataItem(); break; case FormattedMetadataItemName.HorizontalResolution: mdi = GetXResolutionMetadataItem(); break; case FormattedMetadataItemName.IsoSpeed: mdi = GetStringMetadataItem(RawMetadataItemName.ExifISOSpeed, FormattedMetadataItemName.IsoSpeed, Resources.Metadata_IsoSpeed); break; case FormattedMetadataItemName.Keywords: break; // No way to access keywords through Exif, so just skip this one case FormattedMetadataItemName.LensAperture: mdi = GetApertureMetadataItem(); break; case FormattedMetadataItemName.LightSource: mdi = GetLightSourceMetadataItem(); break; case FormattedMetadataItemName.MeteringMode: mdi = GetMeteringModeMetadataItem(); break; case FormattedMetadataItemName.Rating: break; // No way to access rating through Exif, so just skip this one case FormattedMetadataItemName.Subject: break; // No way to access rating through Exif, so just skip this one case FormattedMetadataItemName.SubjectDistance: mdi = GetSubjectDistanceMetadataItem(); break; case FormattedMetadataItemName.Title: mdi = GetStringMetadataItem(RawMetadataItemName.ImageTitle, FormattedMetadataItemName.Title, Resources.Metadata_Title); break; case FormattedMetadataItemName.VerticalResolution: mdi = GetYResolutionMetadataItem(); break; case FormattedMetadataItemName.Width: mdi = GetWidthMetadataItem(); break; } if ((mdi != null) && (!metadataItems.Contains(mdi))) { metadataItems.Add(mdi); } } }
private static void AddMetadataItem(IGalleryObjectMetadataItemCollection metadataItems, GalleryObjectMetadataItem metadataItem) { if ((metadataItem != null) && (!metadataItems.Contains(metadataItem))) { metadataItems.Add(metadataItem); } }