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 ""