Improve comments parsing
As part of #108 - dillo_post now becomes post, and the title of a post, or the parsed content of a comment are displayed.
This commit is contained in:
parent
defa5abd18
commit
d424febfeb
@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from html.parser import HTMLParser
|
||||
|
||||
from flask import request, current_app
|
||||
from pillar.api.utils import gravatar
|
||||
@ -7,6 +8,15 @@ from pillar.auth import current_user
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CommentHTMLParser(HTMLParser):
|
||||
def __init__(self):
|
||||
HTMLParser.__init__(self)
|
||||
self.data = []
|
||||
|
||||
def handle_data(self, data):
|
||||
self.data.append(data)
|
||||
|
||||
|
||||
def notification_parse(notification):
|
||||
activities_collection = current_app.data.driver.db['activities']
|
||||
activities_subscriptions_collection = \
|
||||
@ -30,9 +40,14 @@ def notification_parse(notification):
|
||||
object_type = 'comment'
|
||||
object_name = ''
|
||||
object_id = activity['object']
|
||||
context_object_type = node['parent']['node_type']
|
||||
|
||||
# If node_type is 'dillo_post', just call it 'post'
|
||||
node_type = 'post' if context_object_type.endswith('_post') else \
|
||||
context_object_type
|
||||
|
||||
if node['parent']['user'] == current_user.user_id:
|
||||
owner = "your {0}".format(node['parent']['node_type'])
|
||||
owner = f"your {node_type}"
|
||||
else:
|
||||
parent_comment_user = users_collection.find_one(
|
||||
{'_id': node['parent']['user']})
|
||||
@ -40,10 +55,22 @@ def notification_parse(notification):
|
||||
user_name = 'their'
|
||||
else:
|
||||
user_name = "{0}'s".format(parent_comment_user['username'])
|
||||
owner = "{0} {1}".format(user_name, node['parent']['node_type'])
|
||||
|
||||
context_object_type = node['parent']['node_type']
|
||||
context_object_name = owner
|
||||
owner = f"{user_name} {node_type}"
|
||||
|
||||
context_object_name = f"{node['parent']['name'][:15]}..."
|
||||
if context_object_type == 'comment':
|
||||
# Parse the comment content, which might be HTML and extract
|
||||
# some text from it.
|
||||
parser = CommentHTMLParser()
|
||||
# Trim the comment content to 50 chars, the parser will handle it
|
||||
parser.feed(node['parent']['properties']['content'][:50])
|
||||
try:
|
||||
comment_content = parser.data[0]
|
||||
except KeyError:
|
||||
comment_content = '...'
|
||||
# Trim the parsed text down to 15 charss
|
||||
context_object_name = f"{comment_content[:15]}..."
|
||||
context_object_id = activity['context_object']
|
||||
if activity['verb'] == 'replied':
|
||||
action = 'replied to'
|
||||
@ -52,6 +79,8 @@ def notification_parse(notification):
|
||||
else:
|
||||
action = activity['verb']
|
||||
|
||||
action = f'{action} {owner}'
|
||||
|
||||
lookup = {
|
||||
'user': current_user.user_id,
|
||||
'context_object_type': 'node',
|
||||
|
Loading…
x
Reference in New Issue
Block a user