diff --git a/blueprints/api.py b/blueprints/api.py
index b71335d..a5e7852 100644
--- a/blueprints/api.py
+++ b/blueprints/api.py
@@ -453,7 +453,7 @@ def api_new_note() -> _Response:
source = None
summary = None
- place_tags = []
+ location = None
# Basic Micropub (https://www.w3.org/TR/micropub/) "create" support
is_micropub = False
@@ -472,15 +472,11 @@ def api_new_note() -> _Response:
location = _user_api_arg("location", default="")
if location.startswith("geo:"):
slat, slng, *_ = location[4:].split(",")
- place_tags.append(
- {
- "type": ap.ActivityType.PLACE.value,
- "url": "",
- "name": "",
- "latitude": float(slat),
- "longitude": float(slng),
- }
- )
+ location = {
+ "type": ap.ActivityType.PLACE.value,
+ "latitude": float(slat),
+ "longitude": float(slng),
+ }
# Handle JSON microformats2 data
if _user_api_arg("type", default=None):
@@ -513,20 +509,17 @@ def api_new_note() -> _Response:
if summary is None:
summary = _user_api_arg("summary", default="")
- if not place_tags:
+ if not location:
if _user_api_arg("location_lat", default=None):
lat = float(_user_api_arg("location_lat"))
lng = float(_user_api_arg("location_lng"))
loc_name = _user_api_arg("location_name", default="")
- place_tags.append(
- {
- "type": ap.ActivityType.PLACE.value,
- "url": "",
- "name": loc_name,
- "latitude": lat,
- "longitude": lng,
- }
- )
+ location = {
+ "type": ap.ActivityType.PLACE.value,
+ "name": loc_name,
+ "latitude": lat,
+ "longitude": lng,
+ }
# All the following fields are specific to the API (i.e. not Micropub related)
_reply, reply = None, None
@@ -542,7 +535,7 @@ def api_new_note() -> _Response:
content, tags = parse_markdown(source)
# Check for custom emojis
- tags = tags + emojis.tags(content) + place_tags
+ tags = tags + emojis.tags(content)
to: List[str] = []
cc: List[str] = []
@@ -582,6 +575,9 @@ def api_new_note() -> _Response:
context=context,
)
+ if location:
+ raw_note["location"] = location
+
if request.files:
for f in request.files.keys():
if not request.files[f].filename:
diff --git a/core/migrations.py b/core/migrations.py
index 29e9758..3f57c46 100644
--- a/core/migrations.py
+++ b/core/migrations.py
@@ -361,3 +361,18 @@ class _20191020_ManuallyApprovesFollowerSupportMigrationn(Migration):
},
{"$set": {"meta.follow_status": "accepted"}},
)
+
+
+class _20191106_PlaceTagToLocation(Migration):
+ def migrate(self) -> None:
+ for data in find_activities({"activity.object.tag.type": "Place"}):
+ for tag in data["activity"]["object"]["tag"]:
+ if tag["type"] == "Place":
+ break
+ DB.activities.update_one(
+ {"_id": data["_id"]},
+ {
+ "$pull": {"activity.object.tag": {"type": "Place"}},
+ "$set": {"activity.object.location": tag},
+ },
+ )
diff --git a/utils/template_filters.py b/utils/template_filters.py
index f3c225b..3e7f20f 100644
--- a/utils/template_filters.py
+++ b/utils/template_filters.py
@@ -254,31 +254,30 @@ def get_actor(url):
@filters.app_template_filter()
def has_place(note):
- for tag in note.get("tag", []):
- if tag.get("type") == "Place":
- return True
+ if note.get("location") and note["location"].get("type") == "Place":
+ return True
return False
@filters.app_template_filter()
def get_place(note):
- for tag in note.get("tag", []):
- if tag.get("type") == "Place":
- lat = tag["latitude"]
- lng = tag["longitude"]
- out = ""
- if tag.get("name"):
- out += f"{tag['name']} "
+ if note.get("location") and note["location"].get("type") == "Place":
+ tag = note["location"]
+ lat = tag["latitude"]
+ lng = tag["longitude"]
+ out = ""
+ if tag.get("name"):
+ out += f"{tag['name']} "
- out += (
- ''
- f''
- f''
- f'{lat},{lng}'
- ""
- )
+ out += (
+ ''
+ f''
+ f''
+ f'{lat},{lng}'
+ ""
+ )
- return out
+ return out
return ""