Adds direct messages UI
This commit is contained in:
parent
4fcdbe5299
commit
943d97c0bc
|
@ -0,0 +1,37 @@
|
||||||
|
{% extends 'layout.html' %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="block">
|
||||||
|
<h1 class="title">Direct Messages</h1>
|
||||||
|
|
||||||
|
{% if not activities %}
|
||||||
|
<p>You have no messages right now.</p>
|
||||||
|
{% endif %}
|
||||||
|
{% for activity in activities %}
|
||||||
|
<div class="block">
|
||||||
|
{% include 'snippets/status.html' with status=activity %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<nav class="pagination" role="navigation" aria-label="pagination">
|
||||||
|
{% if prev %}
|
||||||
|
<p class="pagination-previous">
|
||||||
|
<a href="{{ prev }}">
|
||||||
|
<span class="icon icon-arrow-left"></span>
|
||||||
|
Previous
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if next %}
|
||||||
|
<p class="pagination-next">
|
||||||
|
<a href="{{ next }}">
|
||||||
|
Next
|
||||||
|
<span class="icon icon-arrow-right"></span>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -68,6 +68,9 @@
|
||||||
{% include 'snippets/username.html' with user=request.user %}
|
{% include 'snippets/username.html' with user=request.user %}
|
||||||
</p></div>
|
</p></div>
|
||||||
<div class="navbar-dropdown">
|
<div class="navbar-dropdown">
|
||||||
|
<a href="/direct-messages" class="navbar-item">
|
||||||
|
Direct messages
|
||||||
|
</a>
|
||||||
<a href="/user/{{request.user.localname}}" class="navbar-item">
|
<a href="/user/{{request.user.localname}}" class="navbar-item">
|
||||||
Profile
|
Profile
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -53,7 +53,8 @@ urlpatterns = [
|
||||||
|
|
||||||
path('', views.home),
|
path('', views.home),
|
||||||
re_path(r'^(?P<tab>home|local|federated)/?$', views.home_tab),
|
re_path(r'^(?P<tab>home|local|federated)/?$', views.home_tab),
|
||||||
re_path(r'^notifications/?', views.notifications_page),
|
re_path(r'^notifications/?$', views.notifications_page),
|
||||||
|
re_path(r'^direct-messages/?$', views.direct_messages_page),
|
||||||
re_path(r'^import/?$', views.import_page),
|
re_path(r'^import/?$', views.import_page),
|
||||||
re_path(r'^import-status/(\d+)/?$', views.import_status),
|
re_path(r'^import-status/(\d+)/?$', views.import_status),
|
||||||
re_path(r'^user-edit/?$', views.edit_profile_page),
|
re_path(r'^user-edit/?$', views.edit_profile_page),
|
||||||
|
|
|
@ -113,11 +113,36 @@ def get_suggested_books(user, max_books=5):
|
||||||
return suggested_books
|
return suggested_books
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@require_GET
|
||||||
|
def direct_messages_page(request, page=1):
|
||||||
|
''' like a feed but for dms only '''
|
||||||
|
activities = get_activity_feed(request.user, 'direct')
|
||||||
|
paginated = Paginator(activities, PAGE_LENGTH)
|
||||||
|
activity_page = paginated.page(page)
|
||||||
|
|
||||||
|
prev_page = next_page = None
|
||||||
|
if activity_page.has_next():
|
||||||
|
next_page = '/direct-message/?page=%d#feed' % \
|
||||||
|
activity_page.next_page_number()
|
||||||
|
if activity_page.has_previous():
|
||||||
|
prev_page = '/direct-messages/?page=%d#feed' % \
|
||||||
|
activity_page.previous_page_number()
|
||||||
|
data = {
|
||||||
|
'title': 'Direct Messages',
|
||||||
|
'user': request.user,
|
||||||
|
'activities': activity_page.object_list,
|
||||||
|
'next': next_page,
|
||||||
|
'prev': prev_page,
|
||||||
|
}
|
||||||
|
return TemplateResponse(request, 'direct_messages.html', data)
|
||||||
|
|
||||||
|
|
||||||
def get_activity_feed(user, filter_level, model=models.Status):
|
def get_activity_feed(user, filter_level, model=models.Status):
|
||||||
''' get a filtered queryset of statuses '''
|
''' get a filtered queryset of statuses '''
|
||||||
# status updates for your follow network
|
|
||||||
if user.is_anonymous:
|
if user.is_anonymous:
|
||||||
user = None
|
user = None
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
following = models.User.objects.filter(
|
following = models.User.objects.filter(
|
||||||
Q(followers=user) | Q(id=user.id)
|
Q(followers=user) | Q(id=user.id)
|
||||||
|
@ -135,6 +160,16 @@ def get_activity_feed(user, filter_level, model=models.Status):
|
||||||
'-published_date'
|
'-published_date'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if filter_level == 'direct':
|
||||||
|
return activities.filter(
|
||||||
|
Q(user=user) | Q(mention_users=user),
|
||||||
|
privacy='direct'
|
||||||
|
)
|
||||||
|
|
||||||
|
# never show DMs in the regular feed
|
||||||
|
activities = activities.filter(~Q(privacy='direct'))
|
||||||
|
|
||||||
|
|
||||||
if hasattr(activities, 'select_subclasses'):
|
if hasattr(activities, 'select_subclasses'):
|
||||||
activities = activities.select_subclasses()
|
activities = activities.select_subclasses()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue