Support AP Update actor
This commit is contained in:
@@ -29,8 +29,13 @@ from config import DB
|
||||
from config import EXTRA_INBOXES
|
||||
from config import ID
|
||||
from config import ME
|
||||
from config import MEDIA_CACHE
|
||||
from config import USER_AGENT
|
||||
from core.db import update_many_activities
|
||||
from core.meta import Box
|
||||
from core.meta import MetaKey
|
||||
from core.meta import flag
|
||||
from core.meta import upsert
|
||||
from core.tasks import Tasks
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -648,3 +653,37 @@ def activity_from_doc(raw_doc: Dict[str, Any], embed: bool = False) -> Dict[str,
|
||||
if embed:
|
||||
return remove_context(activity)
|
||||
return activity
|
||||
|
||||
|
||||
def _cache_actor_icon(actor: ap.BaseActivity) -> None:
|
||||
if actor.icon:
|
||||
if isinstance(actor.icon, dict) and "url" in actor.icon:
|
||||
MEDIA_CACHE.cache_actor_icon(actor.icon["url"])
|
||||
else:
|
||||
logger.warning(f"failed to parse icon {actor.icon} for {actor!r}")
|
||||
|
||||
|
||||
def update_cached_actor(actor: ap.BaseActivity) -> None:
|
||||
_cache_actor_icon(actor)
|
||||
actor_hash = _actor_hash(actor)
|
||||
update_many_activities(
|
||||
{
|
||||
**flag(MetaKey.ACTOR_ID, actor.id),
|
||||
**flag(MetaKey.ACTOR_HASH, {"$ne": actor_hash}),
|
||||
},
|
||||
upsert(
|
||||
{MetaKey.ACTOR: actor.to_dict(embed=True), MetaKey.ACTOR_HASH: actor_hash}
|
||||
),
|
||||
)
|
||||
update_many_activities(
|
||||
{
|
||||
**flag(MetaKey.OBJECT_ACTOR_ID, actor.id),
|
||||
**flag(MetaKey.OBJECT_ACTOR_HASH, {"$ne": actor_hash}),
|
||||
},
|
||||
upsert(
|
||||
{
|
||||
MetaKey.OBJECT_ACTOR: actor.to_dict(embed=True),
|
||||
MetaKey.OBJECT_ACTOR_HASH: actor_hash,
|
||||
}
|
||||
),
|
||||
)
|
||||
|
Reference in New Issue
Block a user