marks by who i follows
This commit is contained in:
parent
565048cd09
commit
e83eb2f883
17 changed files with 61 additions and 79 deletions
|
@ -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 %}
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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, _("仅关注者")),
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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 '艺术家:' %}
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue