marks by who i follows

This commit is contained in:
Your Name 2021-12-15 21:54:24 -05:00
parent 565048cd09
commit e83eb2f883
17 changed files with 61 additions and 79 deletions

View file

@ -151,6 +151,7 @@
{% if mark_list_more %}
<a href="{% url 'books:retrieve_mark_list' book.id %}" class="entity-marks__more-link">{% trans '更多' %}</a>
{% endif %}
<a href="{% url 'books:retrieve_mark_list' book.id 1 %}" class="entity-marks__more-link">关注的人的标记</a>
{% if mark_list %}
<ul class="entity-marks__mark-list">
{% for others_mark in mark_list %}

View file

@ -1,4 +1,4 @@
from django.urls import path
from django.urls import path, re_path
from .views import *
@ -9,7 +9,7 @@ urlpatterns = [
path('update/<int:id>/', update, name='update'),
path('delete/<int:id>/', delete, name='delete'),
path('mark/', create_update_mark, name='create_update_mark'),
path('<int:book_id>/mark/list/', retrieve_mark_list, name='retrieve_mark_list'),
re_path('(?P<book_id>[0-9]+)/mark/list/(?:(?P<following_only>\\d+))?', retrieve_mark_list, name='retrieve_mark_list'),
path('mark/delete/<int:id>/', delete_mark, name='delete_mark'),
path('<int:book_id>/review/create/', create_review, name='create_review'),
path('review/update/<int:id>/', update_review, name='update_review'),

View file

@ -185,10 +185,8 @@ def retrieve(request, id):
mark_list_more = None
review_list_more = None
else:
mark_list = BookMark.get_available(
book, request.user, request.session['oauth_token'])
review_list = BookReview.get_available(
book, request.user, request.session['oauth_token'])
mark_list = BookMark.get_available(book, request.user)
review_list = BookReview.get_available(book, request.user)
mark_list_more = True if len(mark_list) > MARK_NUMBER else False
mark_list = mark_list[:MARK_NUMBER]
for m in mark_list:
@ -334,11 +332,10 @@ def create_update_mark(request):
@mastodon_request_included
@login_required
def retrieve_mark_list(request, book_id):
def retrieve_mark_list(request, book_id, following_only=False):
if request.method == 'GET':
book = get_object_or_404(Book, pk=book_id)
queryset = BookMark.get_available(
book, request.user, request.session['oauth_token'])
queryset = BookMark.get_available(book, request.user, following_only=following_only)
paginator = Paginator(queryset, MARK_PER_PAGE)
page_number = request.GET.get('page', default=1)
marks = paginator.get_page(page_number)
@ -540,8 +537,7 @@ def retrieve_review(request, id):
def retrieve_review_list(request, book_id):
if request.method == 'GET':
book = get_object_or_404(Book, pk=book_id)
queryset = BookReview.get_available(
book, request.user, request.session['oauth_token'])
queryset = BookReview.get_available(book, request.user)
paginator = Paginator(queryset, REVIEW_PER_PAGE)
page_number = request.GET.get('page', default=1)
reviews = paginator.get_page(page_number)

View file

@ -17,7 +17,7 @@ class KeyValueInput(forms.Widget):
data = None
if context['widget']['value'] is not None:
data = json.loads(context['widget']['value'])
context['widget']['value'] = [ {p[0]: p[1]} for p in data.items()] if data else []
context['widget']['value'] = [{p[0]: p[1]} for p in data.items()] if data else []
return context
class Media:
@ -50,18 +50,18 @@ class JSONField(postgres.JSONField):
def to_python(self, value):
if not value:
return None
json = {}
j = {}
if isinstance(value, dict):
json = value
j = value
else:
pairs = eval(value)
pairs = json.loads('[' + value + ']')
if isinstance(pairs, dict):
json = pairs
j = pairs
else:
# list or tuple
for pair in pairs:
json = {**json, **pair}
return super().to_python(json)
j = {**j, **pair}
return super().to_python(j)
class RadioBooleanField(forms.ChoiceField):
@ -167,9 +167,7 @@ class HstoreField(forms.CharField):
# already in python types
if isinstance(value, list):
return value
pairs = eval(value)
if len(pairs) == 1:
pairs = (pairs,)
pairs = json.loads('[' + value + ']')
return pairs
@ -259,6 +257,7 @@ class MarkForm(forms.ModelForm):
label=_("短评"),
)
class ReviewForm(forms.ModelForm):
IS_PRIVATE_CHOICES = [
(True, _("仅关注者")),

View file

@ -171,11 +171,11 @@ class UserOwnedEntity(models.Model):
return True
@classmethod
def get_available(cls, entity, request_user, token):
def get_available(cls, entity, request_user, following_only=False):
# e.g. SongMark.get_available(song, request.user, request.session['oauth_token'])
query_kwargs = {entity.__class__.__name__.lower(): entity}
all_entities = cls.objects.filter(**query_kwargs).order_by("-edited_time") # get all marks for song
visible_entities = list(filter(lambda _entity: _entity.is_visible_to(request_user), all_entities))
visible_entities = list(filter(lambda _entity: _entity.is_visible_to(request_user) and (_entity.owner.mastodon_username in request_user.mastodon_following if following_only else True), all_entities))
return visible_entities
@classmethod

View file

@ -180,6 +180,7 @@
{% if mark_list_more %}
<a href="{% url 'games:retrieve_mark_list' game.id %}" class="entity-marks__more-link">{% trans '更多' %}</a>
{% endif %}
<a href="{% url 'games:retrieve_mark_list' game.id 1 %}" class="entity-marks__more-link">关注的人的标记</a>
{% if mark_list %}
<ul class="entity-marks__mark-list">
{% for others_mark in mark_list %}

View file

@ -1,4 +1,4 @@
from django.urls import path
from django.urls import path, re_path
from .views import *
@ -9,8 +9,7 @@ urlpatterns = [
path('update/<int:id>/', update, name='update'),
path('delete/<int:id>/', delete, name='delete'),
path('mark/', create_update_mark, name='create_update_mark'),
path('<int:game_id>/mark/list/',
retrieve_mark_list, name='retrieve_mark_list'),
re_path('(?P<game_id>[0-9]+)/mark/list/(?:(?P<following_only>\\d+))?', retrieve_mark_list, name='retrieve_mark_list'),
path('mark/delete/<int:id>/', delete_mark, name='delete_mark'),
path('<int:game_id>/review/create/', create_review, name='create_review'),
path('review/update/<int:id>/', update_review, name='update_review'),

View file

@ -187,10 +187,8 @@ def retrieve(request, id):
mark_list_more = None
review_list_more = None
else:
mark_list = GameMark.get_available(
game, request.user, request.session['oauth_token'])
review_list = GameReview.get_available(
game, request.user, request.session['oauth_token'])
mark_list = GameMark.get_available(game, request.user)
review_list = GameReview.get_available(game, request.user)
mark_list_more = True if len(mark_list) > MARK_NUMBER else False
mark_list = mark_list[:MARK_NUMBER]
for m in mark_list:
@ -337,11 +335,10 @@ def create_update_mark(request):
@mastodon_request_included
@login_required
def retrieve_mark_list(request, game_id):
def retrieve_mark_list(request, game_id, following_only=False):
if request.method == 'GET':
game = get_object_or_404(Game, pk=game_id)
queryset = GameMark.get_available(
game, request.user, request.session['oauth_token'])
queryset = GameMark.get_available(game, request.user, following_only=following_only)
paginator = Paginator(queryset, MARK_PER_PAGE)
page_number = request.GET.get('page', default=1)
marks = paginator.get_page(page_number)
@ -544,8 +541,7 @@ def retrieve_review(request, id):
def retrieve_review_list(request, game_id):
if request.method == 'GET':
game = get_object_or_404(Game, pk=game_id)
queryset = GameReview.get_available(
game, request.user, request.session['oauth_token'])
queryset = GameReview.get_available(game, request.user)
paginator = Paginator(queryset, REVIEW_PER_PAGE)
page_number = request.GET.get('page', default=1)
reviews = paginator.get_page(page_number)

View file

@ -251,6 +251,7 @@
{% if mark_list_more %}
<a href="{% url 'movies:retrieve_mark_list' movie.id %}" class="entity-marks__more-link">{% trans '更多' %}</a>
{% endif %}
<a href="{% url 'movies:retrieve_mark_list' movie.id 1 %}" class="entity-marks__more-link">关注的人的标记</a>
{% if mark_list %}
<ul class="entity-marks__mark-list">
{% for others_mark in mark_list %}

View file

@ -1,4 +1,4 @@
from django.urls import path
from django.urls import path, re_path
from .views import *
@ -9,7 +9,7 @@ urlpatterns = [
path('update/<int:id>/', update, name='update'),
path('delete/<int:id>/', delete, name='delete'),
path('mark/', create_update_mark, name='create_update_mark'),
path('<int:movie_id>/mark/list/', retrieve_mark_list, name='retrieve_mark_list'),
re_path('(?P<movie_id>[0-9]+)/mark/list/(?:(?P<following_only>\\d+))?', retrieve_mark_list, name='retrieve_mark_list'),
path('mark/delete/<int:id>/', delete_mark, name='delete_mark'),
path('<int:movie_id>/review/create/', create_review, name='create_review'),
path('review/update/<int:id>/', update_review, name='update_review'),

View file

@ -186,10 +186,8 @@ def retrieve(request, id):
mark_list_more = None
review_list_more = None
else:
mark_list = MovieMark.get_available(
movie, request.user, request.session['oauth_token'])
review_list = MovieReview.get_available(
movie, request.user, request.session['oauth_token'])
mark_list = MovieMark.get_available(movie, request.user)
review_list = MovieReview.get_available(movie, request.user)
mark_list_more = True if len(mark_list) > MARK_NUMBER else False
mark_list = mark_list[:MARK_NUMBER]
for m in mark_list:
@ -336,11 +334,10 @@ def create_update_mark(request):
@mastodon_request_included
@login_required
def retrieve_mark_list(request, movie_id):
def retrieve_mark_list(request, movie_id, following_only=False):
if request.method == 'GET':
movie = get_object_or_404(Movie, pk=movie_id)
queryset = MovieMark.get_available(
movie, request.user, request.session['oauth_token'])
queryset = MovieMark.get_available(movie, request.user, following_only=following_only)
paginator = Paginator(queryset, MARK_PER_PAGE)
page_number = request.GET.get('page', default=1)
marks = paginator.get_page(page_number)
@ -543,8 +540,7 @@ def retrieve_review(request, id):
def retrieve_review_list(request, movie_id):
if request.method == 'GET':
movie = get_object_or_404(Movie, pk=movie_id)
queryset = MovieReview.get_available(
movie, request.user, request.session['oauth_token'])
queryset = MovieReview.get_available(movie, request.user)
paginator = Paginator(queryset, REVIEW_PER_PAGE)
page_number = request.GET.get('page', default=1)
reviews = paginator.get_page(page_number)

View file

@ -215,6 +215,7 @@
{% if mark_list_more %}
<a href="{% url 'music:retrieve_album_mark_list' album.id %}" class="entity-marks__more-link">{% trans '更多' %}</a>
{% endif %}
<a href="{% url 'music:retrieve_album_mark_list' album.id 1 %}" class="entity-marks__more-link">关注的人的标记</a>
{% if mark_list %}
<ul class="entity-marks__mark-list">
{% for others_mark in mark_list %}

View file

@ -161,6 +161,7 @@
{% if mark_list_more %}
<a href="{% url 'music:retrieve_song_mark_list' song.id %}" class="entity-marks__more-link">{% trans '更多' %}</a>
{% endif %}
<a href="{% url 'music:retrieve_song_mark_list' song.id 1 %}" class="entity-marks__more-link">关注的人的标记</a>
{% if mark_list %}
<ul class="entity-marks__mark-list">
{% for others_mark in mark_list %}

View file

@ -6,6 +6,7 @@
{% load mastodon %}
{% load oauth_token %}
{% load truncate %}
{% load highlight %}
{% load thumb %}
<!DOCTYPE html>
<html lang="en">
@ -32,8 +33,7 @@
<div class="main-section-wrapper">
<div class="entity-marks">
<h5 class="entity-marks__title entity-marks__title--stand-alone">
<a href="{% url 'music:retrieve_song' song.id %}">{{ song.title }}</a>{% trans '
的标记' %}
<a href="{% url 'music:retrieve_song' song.id %}">{{ song.title }}</a>{% trans '的标记' %}
</h5>
<ul class="entity-marks__mark-list">
@ -110,8 +110,7 @@
{{ song.title }}
</a>
<a href="{{ song.source_url }}"><span
class="source-label source-label__{{ song.source_site }}">{{
song.get_source_site_display }}</span></a>
class="source-label source-label__{{ song.source_site }}">{{song.get_source_site_display }}</span></a>
</h5>
<div>{% if song.artist %}{% trans '艺术家:' %}

View file

@ -1,4 +1,4 @@
from django.urls import path
from django.urls import path, re_path
from .views import *
@ -16,8 +16,7 @@ urlpatterns = [
path('song/review/update/<int:id>/', update_song_review, name='update_song_review'),
path('song/review/delete/<int:id>/', delete_song_review, name='delete_song_review'),
path('song/review/<int:id>/', retrieve_song_review, name='retrieve_song_review'),
path('song/<int:song_id>/review/list/',
retrieve_song_review_list, name='retrieve_song_review_list'),
re_path('song/(?P<song_id>[0-9]+)/mark/list/(?:(?P<following_only>\\d+))?', retrieve_song_mark_list, name='retrieve_song_mark_list'),
# path('song/scrape/', scrape_song, name='scrape_song'),
path('song/click_to_scrape/', click_to_scrape_song, name='click_to_scrape_song'),
@ -26,8 +25,7 @@ urlpatterns = [
path('album/update/<int:id>/', update_album, name='update_album'),
path('album/delete/<int:id>/', delete_album, name='delete_album'),
path('album/mark/', create_update_album_mark, name='create_update_album_mark'),
path('album/<int:album_id>/mark/list/',
retrieve_album_mark_list, name='retrieve_album_mark_list'),
re_path('album/(?P<album_id>[0-9]+)/mark/list/(?:(?P<following_only>\\d+))?', retrieve_album_mark_list, name='retrieve_album_mark_list'),
path('album/mark/delete/<int:id>/', delete_album_mark, name='delete_album_mark'),
path('album/<int:album_id>/review/create/', create_album_review, name='create_album_review'),
path('album/review/update/<int:id>/', update_album_review, name='update_album_review'),

View file

@ -205,10 +205,8 @@ def retrieve_song(request, id):
mark_list_more = None
review_list_more = None
else:
mark_list = SongMark.get_available(
song, request.user, request.session['oauth_token'])
review_list = SongReview.get_available(
song, request.user, request.session['oauth_token'])
mark_list = SongMark.get_available(song, request.user)
review_list = SongReview.get_available(song, request.user)
mark_list_more = True if len(mark_list) > MARK_NUMBER else False
mark_list = mark_list[:MARK_NUMBER]
for m in mark_list:
@ -355,11 +353,10 @@ def create_update_song_mark(request):
@mastodon_request_included
@login_required
def retrieve_song_mark_list(request, song_id):
def retrieve_song_mark_list(request, song_id, following_only=False):
if request.method == 'GET':
song = get_object_or_404(Song, pk=song_id)
queryset = SongMark.get_available(
song, request.user, request.session['oauth_token'])
queryset = SongMark.get_available(song, request.user, following_only=following_only)
paginator = Paginator(queryset, MARK_PER_PAGE)
page_number = request.GET.get('page', default=1)
marks = paginator.get_page(page_number)
@ -562,8 +559,7 @@ def retrieve_song_review(request, id):
def retrieve_song_review_list(request, song_id):
if request.method == 'GET':
song = get_object_or_404(Song, pk=song_id)
queryset = SongReview.get_available(
song, request.user, request.session['oauth_token'])
queryset = SongReview.get_available(song, request.user)
paginator = Paginator(queryset, REVIEW_PER_PAGE)
page_number = request.GET.get('page', default=1)
reviews = paginator.get_page(page_number)
@ -776,10 +772,8 @@ def retrieve_album(request, id):
mark_list_more = None
review_list_more = None
else:
mark_list = AlbumMark.get_available(
album, request.user, request.session['oauth_token'])
review_list = AlbumReview.get_available(
album, request.user, request.session['oauth_token'])
mark_list = AlbumMark.get_available(album, request.user)
review_list = AlbumReview.get_available(album, request.user)
mark_list_more = True if len(mark_list) > MARK_NUMBER else False
mark_list = mark_list[:MARK_NUMBER]
for m in mark_list:
@ -926,11 +920,10 @@ def create_update_album_mark(request):
@mastodon_request_included
@login_required
def retrieve_album_mark_list(request, album_id):
def retrieve_album_mark_list(request, album_id, following_only=False):
if request.method == 'GET':
album = get_object_or_404(Album, pk=album_id)
queryset = AlbumMark.get_available(
album, request.user, request.session['oauth_token'])
queryset = AlbumMark.get_available(album, request.user, following_only=following_only)
paginator = Paginator(queryset, MARK_PER_PAGE)
page_number = request.GET.get('page', default=1)
marks = paginator.get_page(page_number)
@ -1133,8 +1126,7 @@ def retrieve_album_review(request, id):
def retrieve_album_review_list(request, album_id):
if request.method == 'GET':
album = get_object_or_404(Album, pk=album_id)
queryset = AlbumReview.get_available(
album, request.user, request.session['oauth_token'])
queryset = AlbumReview.get_available(album, request.user)
paginator = Paginator(queryset, REVIEW_PER_PAGE)
page_number = request.GET.get('page', default=1)
reviews = paginator.get_page(page_number)

View file

@ -29,6 +29,9 @@ from django.conf import settings
from urllib.parse import quote
import django_rq
from .export import *
from datetime import timedelta
from django.utils import timezone
import json
# Views
@ -773,10 +776,8 @@ def music_list(request, id, status):
@login_required
def set_layout(request):
if request.method == 'POST':
# json to python
raw_layout_data = request.POST.get('layout').replace('false', 'False').replace('true', 'True')
layout = eval(raw_layout_data)
request.user.preference.home_layout = eval(raw_layout_data)
layout = json.loads(request.POST.get('layout'))
request.user.preference.home_layout = layout
request.user.preference.save()
return redirect(reverse("common:home"))
else:
@ -852,8 +853,9 @@ def auth_login(request, user, token):
""" Decorates django ``login()``. Attach token to session."""
request.session['oauth_token'] = token
auth.login(request, user)
# refresh_mastodon_data_task(user, token)
django_rq.get_queue('mastodon').enqueue(refresh_mastodon_data_task, user, token)
if user.mastodon_last_refresh > timezone.now() - timedelta(hours=1):
# refresh_mastodon_data_task(user, token)
django_rq.get_queue('mastodon').enqueue(refresh_mastodon_data_task, user, token)
def auth_logout(request):