Skip to content

Commit

Permalink
* converting string fields that may contain 0x00 to utf8 bytes: #48
Browse files Browse the repository at this point in the history
…`8.1.2.` @ `CrawlerDbContext..OnModelCreating()`

@ crawler

* converting string fields that may contain `0x00` to utf8 bytes: #48 `8.1.2.` @ `ImagePipelineDbContext.OnModelCreating()`
* now will convert point with invalid coordinate to null: #48 `10.3.1.` @ `MetadataConsumer.ExifGpsTagValuesParser.ParseGpsCoordinateOrNull()`
@ imagePipeline
@ c#
  • Loading branch information
n0099 committed May 2, 2024
1 parent cc7c9bc commit d6f8bba
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 3 deletions.
2 changes: 2 additions & 0 deletions c#/crawler/src/Db/CrawlerDbContext.cs
Expand Up @@ -97,6 +97,8 @@ protected override void OnModelCreating(ModelBuilder b)
user.SplittingHasKey<SplitIpGeolocation>("ipGeolocation", e => new {e.Uid, e.TakenAt});
user.SplittingHasKey<SplitPortraitUpdatedAt>("portraitUpdatedAt", e => new {e.Uid, e.TakenAt});
user.SplittingHasKey<SplitDisplayName>("displayName", e => new {e.Uid, e.TakenAt});
b.Entity<SplitDisplayName>().Property(e => e.DisplayName).HasConversion<byte[]>();
b.Entity<User>().Property(e => e.DisplayName).HasConversion<byte[]>();

b.Entity<AuthorExpGradeRevision>().ToTable("tbmcr_authorExpGrade")
.HasKey(e => new {e.Fid, e.Uid, e.DiscoveredAt});
Expand Down
6 changes: 4 additions & 2 deletions c#/imagePipeline/src/Consumer/MetadataConsumer.cs
Expand Up @@ -236,8 +236,10 @@ private static class ExifGpsTagValuesParser
$"Unexpected \"{longitudeRef}\", expecting \"E\" or \"W\".")
};

return NetTopologySuite.NtsGeometryServices.Instance.CreateGeometryFactory()
.CreatePoint(new Coordinate(ConvertDmsToDd(longitudeDms), ConvertDmsToDd(latitudeDms)));
var coordinate = new Coordinate(ConvertDmsToDd(longitudeDms), ConvertDmsToDd(latitudeDms));
return coordinate.IsValid
? NetTopologySuite.NtsGeometryServices.Instance.CreateGeometryFactory().CreatePoint(coordinate)
: null;
}

private static double ConvertDmsToDd(IReadOnlyList<double> dms)
Expand Down
6 changes: 5 additions & 1 deletion c#/imagePipeline/src/Db/ImagePipelineDbContext.cs
Expand Up @@ -34,6 +34,7 @@ protected override void OnModelCreating(ModelBuilder b)
new {e.ImageId, e.FrameIndex, e.CenterPointX, e.CenterPointY, e.Width, e.Height, e.RotationDegrees, e.Recognizer});
b.Entity<ImageQrCode>().ToTable("tbmi_qrCode").HasKey(e =>
new {e.ImageId, e.FrameIndex, e.Point1X, e.Point1Y, e.Point2X, e.Point2Y, e.Point3X, e.Point3Y, e.Point4X, e.Point4Y});
b.Entity<ImageQrCode>().Property(e => e.Text).HasConversion<byte[]>();
b.Entity<ImageMetadata>().ToTable("tbmi_metadata");
b.Entity<ImageFailed>().ToTable("tbmi_failed");
b.Entity<ForumScript>().ToTable("tbmi_forum_script").HasKey(e => new {e.Fid, e.Script});
Expand All @@ -45,13 +46,16 @@ protected override void OnModelCreating(ModelBuilder b)
b.Entity<ImageMetadata>().HasOne(keySelector).WithOne().HasForeignKey<TRelatedEntity>(e => e.ImageId);
b.Entity<TRelatedEntity>().ToTable($"tbmi_metadata_{tableNameSuffix}");
}
SplitImageMetadata(e => e.DownloadedByteSize, "downloadedByteSize");
SplitImageMetadata(e => e.EmbeddedExif, "embedded_exif");
b.Entity<Exif>().HasMany(e => e.TagNames).WithOne().HasForeignKey(e => e.ImageId);
b.Entity<Exif>().Property(e => e.UserComment).HasConversion<byte[]>();
b.Entity<Exif>().Property(e => e.XpAuthor).HasConversion<byte[]>();
b.Entity<Exif.TagName>().ToTable("tbmi_metadata_embedded_exif_tagName").HasKey(e => new {e.ImageId, e.Name});

SplitImageMetadata(e => e.EmbeddedIcc, "embedded_icc");
SplitImageMetadata(e => e.EmbeddedIptc, "embedded_iptc");
SplitImageMetadata(e => e.EmbeddedXmp, "embedded_xmp");
SplitImageMetadata(e => e.DownloadedByteSize, "downloadedByteSize");
SplitImageMetadata(e => e.JpgMetadata, "jpg");
SplitImageMetadata(e => e.PngMetadata, "png");
SplitImageMetadata(e => e.GifMetadata, "gif");
Expand Down

0 comments on commit d6f8bba

Please sign in to comment.