Pixelfed places: a remote post's own place, shown and never federated again
A Note's `location` that is a Place with coordinates (Pixelfed sends
them as strings) is kept in the new Post.Place and shown as
Status.privapub.place {name, latitude, longitude, country}; an edit
replaces it. An Event's location stays its own `places`, and nothing
renders a place back out. Closes the INTEROP P2 Pixelfed location gap
and the ROADMAP long-tail item.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
1 parent
d9fb5c582f
commit
31d1d21d1e
13 files changed
+214
-14
No files matched your search
@@ -1,4 +1,4 @@
|
||||
using PrivaPub.Models.Post;
|
||||
using PrivaPub.Models.Post;
|
||||
|
||||
using System.Globalization;
|
||||
using System.Net;
|
||||
@@ -293,6 +293,31 @@ namespace PrivaPub.Federation.Objects
|
||||
};
|
||||
}
|
||||
|
||||
//a post's own place, as Pixelfed sends it: a Place with coordinates (numbers, or numbers as strings); an Event's
|
||||
//places are its own (Event)
|
||||
public static PostPlace NotePlace(JsonObject note)
|
||||
{
|
||||
if (Value(note, "type") == "Event")
|
||||
return default;
|
||||
var place = Objects(note["location"]).FirstOrDefault(l => Value(l, "type") == "Place");
|
||||
var latitude = Coordinate(place, "latitude");
|
||||
var longitude = Coordinate(place, "longitude");
|
||||
if (latitude is not (>= -90 and <= 90) || longitude is not (>= -180 and <= 180))
|
||||
return default;
|
||||
return new PostPlace
|
||||
{
|
||||
Name = Text(Value(place, "name"), 200),
|
||||
Latitude = Math.Round(latitude.Value, 4),
|
||||
Longitude = Math.Round(longitude.Value, 4),
|
||||
Country = Text(Value(place, "country"), 100)
|
||||
};
|
||||
}
|
||||
|
||||
static double? Coordinate(JsonObject node, string property) =>
|
||||
Double(node, property) ?? (double.TryParse(Value(node, property), NumberStyles.Float, CultureInfo.InvariantCulture, out var number) && double.IsFinite(number)
|
||||
? number
|
||||
: (double?)null);
|
||||
|
||||
static EventPlace Place(JsonObject location)
|
||||
{
|
||||
var type = Value(location, "type");
|
||||
|
||||
Reference in new issue
Block a user