fix potential export 500; save shared links
This commit is contained in:
parent
d97c9704d0
commit
356efaf5ce
15 changed files with 84 additions and 298 deletions
|
@ -157,31 +157,7 @@
|
|||
<h5 class="entity-marks__title">{% trans '这本书的标记' %}</h5>
|
||||
<a href="{% url 'books:retrieve_mark_list' book.id %}" class="entity-marks__more-link">{% trans '全部标记' %}</a>
|
||||
<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 %}
|
||||
<li class="entity-marks__mark">
|
||||
<a href="{% url 'users:home' others_mark.owner.mastodon_username %}" class="entity-marks__owner-link">{{ others_mark.owner.username }}</a>
|
||||
<span>{{ others_mark.get_status_display }}</span>
|
||||
{% if others_mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star" data-rating-score="{{ others_mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
{% if others_mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z"/></svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ others_mark.created_time }}</span>
|
||||
{% if others_mark.book != book %}
|
||||
<span class="entity-marks__mark-time source-label"><a class="entity-marks__mark-time" href="{% url 'books:retrieve' others_mark.book.id %}">{{ others_mark.book.get_source_site_display }}</a></span>
|
||||
{% endif %}
|
||||
{% if others_mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ others_mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<div>{% trans '暂无标记' %}</div>
|
||||
{% endif %}
|
||||
{% include "partial/mark_list.html" with mark_list=mark_list current_item=book %}
|
||||
</div>
|
||||
<div class="entity-reviews">
|
||||
<h5 class="entity-reviews__title">{% trans '这本书的评论' %}</h5>
|
||||
|
|
|
@ -33,42 +33,7 @@
|
|||
<h5 class="entity-marks__title entity-marks__title--stand-alone">
|
||||
<a href="{% url 'books:retrieve' book.id %}">{{ book.title }}</a>{% trans ' 的标记' %}
|
||||
</h5>
|
||||
<ul class="entity-marks__mark-list">
|
||||
|
||||
{% for mark in marks %}
|
||||
|
||||
<li class="entity-marks__mark entity-marks__mark--wider">
|
||||
<a href="{% url 'users:home' mark.owner.mastodon_username %}"
|
||||
class="entity-marks__owner-link">{{ mark.owner.username }}</a>
|
||||
<span>{{ mark.get_status_display }}</span>
|
||||
{% if mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star"
|
||||
data-rating-score="{{ mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
{% if mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
||||
|
||||
<path
|
||||
d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z" />
|
||||
</svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ mark.created_time }}</span>
|
||||
{% if mark.book != book %}
|
||||
<span class="entity-marks__mark-time source-label"><a class="entity-marks__mark-time" href="{% url 'books:retrieve' mark.book.id %}">{{ mark.book.get_source_site_display }}</a></span>
|
||||
{% endif %}
|
||||
|
||||
{% if mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
|
||||
{% empty %}
|
||||
<div>
|
||||
{% trans '无结果' %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
{% include "partial/mark_list.html" with mark_list=marks current_item=book %}
|
||||
</div>
|
||||
<div class="pagination">
|
||||
|
||||
|
|
|
@ -278,6 +278,7 @@ class Mark(UserOwnedEntity):
|
|||
status = models.CharField(choices=MarkStatusEnum.choices, max_length=20)
|
||||
rating = models.PositiveSmallIntegerField(blank=True, null=True)
|
||||
text = models.CharField(max_length=5000, blank=True, default='')
|
||||
shared_link = models.CharField(max_length=5000, blank=True, default='')
|
||||
|
||||
def __str__(self):
|
||||
return f"Mark({self.id} {self.owner} {self.status.upper()})"
|
||||
|
@ -307,6 +308,7 @@ class Mark(UserOwnedEntity):
|
|||
class Review(UserOwnedEntity):
|
||||
title = models.CharField(max_length=120)
|
||||
content = MarkdownxField()
|
||||
shared_link = models.CharField(max_length=5000, blank=True, default='')
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
|
37
common/templates/partial/mark_list.html
Normal file
37
common/templates/partial/mark_list.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
{% load i18n %}
|
||||
|
||||
<ul class="entity-marks__mark-list">
|
||||
{% for others_mark in mark_list %}
|
||||
<li class="entity-marks__mark">
|
||||
<a href="{% url 'users:home' others_mark.owner.mastodon_username %}" class="entity-marks__owner-link">{{ others_mark.owner.username }}</a>
|
||||
|
||||
<span>{{ others_mark.get_status_display }}</span>
|
||||
|
||||
{% if others_mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star" data-rating-score="{{ others_mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
|
||||
{% if others_mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z"/></svg></span>
|
||||
{% endif %}
|
||||
|
||||
{% if others_mark.shared_link %}
|
||||
<a href="{{ others_mark.shared_link }}" target="_blank"><span class="entity-marks__mark-time">{{ others_mark.created_time }}</span></a>
|
||||
{% else %}
|
||||
<span class="entity-marks__mark-time">{{ others_mark.created_time }}</span>
|
||||
{% endif %}
|
||||
|
||||
{% if current_item and others_mark.item != current_item %}
|
||||
<span class="entity-marks__mark-time source-label"><a class="entity-marks__mark-time" href="{% url 'books:retrieve' others_mark.book.id %}">{{ others_mark.book.get_source_site_display }}</a></span>
|
||||
{% endif %}
|
||||
|
||||
{% if others_mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ others_mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% empty %}
|
||||
|
||||
<div> {% trans '暂无标记' %} </div>
|
||||
|
||||
{% endfor %}
|
||||
</ul>
|
|
@ -184,28 +184,7 @@
|
|||
<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 %}
|
||||
<li class="entity-marks__mark">
|
||||
<a href="{% url 'users:home' others_mark.owner.mastodon_username %}" class="entity-marks__owner-link">{{ others_mark.owner.username }}</a>
|
||||
<span>{{ others_mark.get_status_display }}</span>
|
||||
{% if others_mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star" data-rating-score="{{ others_mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
{% if others_mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z"/></svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ others_mark.created_time }}</span>
|
||||
{% if others_mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ others_mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<div>{% trans '暂无标记' %}</div>
|
||||
{% endif %}
|
||||
{% include "partial/mark_list.html" with mark_list=mark_list current_item=game %}
|
||||
</div>
|
||||
<div class="entity-reviews">
|
||||
<h5 class="entity-reviews__title">{% trans '这个游戏的评论' %}</h5>
|
||||
|
|
|
@ -35,37 +35,7 @@
|
|||
<h5 class="entity-marks__title entity-marks__title--stand-alone">
|
||||
<a href="{% url 'games:retrieve' game.id %}">{{ game.title }}</a>{% trans ' 的标记' %}
|
||||
</h5>
|
||||
<ul class="entity-marks__mark-list">
|
||||
|
||||
{% for mark in marks %}
|
||||
|
||||
<li class="entity-marks__mark entity-marks__mark--wider">
|
||||
<a href="{% url 'users:home' mark.owner.mastodon_username %}"
|
||||
class="entity-marks__owner-link">{{ mark.owner.username }}</a>
|
||||
<span>{{ mark.get_status_display }}</span>
|
||||
{% if mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star"
|
||||
data-rating-score="{{ mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
{% if mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
||||
<path
|
||||
d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z" />
|
||||
</svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ mark.created_time }}</span>
|
||||
{% if mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
|
||||
{% empty %}
|
||||
<div>
|
||||
{% trans '无结果' %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
{% include "partial/mark_list.html" with mark_list=marks current_item=game %}
|
||||
</div>
|
||||
<div class="pagination">
|
||||
|
||||
|
|
|
@ -96,11 +96,14 @@ def post_toot(site, content, visibility, token, local_only=False):
|
|||
}
|
||||
if local_only:
|
||||
payload['local_only'] = True
|
||||
response = post(url, headers=headers, data=payload)
|
||||
if response.status_code == 201:
|
||||
response.status_code = 200
|
||||
if response.status_code != 200:
|
||||
logger.error(f"Error {url} {response.status_code}")
|
||||
try:
|
||||
response = post(url, headers=headers, data=payload)
|
||||
if response.status_code == 201:
|
||||
response.status_code = 200
|
||||
if response.status_code != 200:
|
||||
logger.error(f"Error {url} {response.status_code}")
|
||||
except Exception:
|
||||
response = None
|
||||
return response
|
||||
|
||||
|
||||
|
@ -390,10 +393,17 @@ def share_mark(mark):
|
|||
else:
|
||||
visibility = TootVisibilityEnum.UNLISTED
|
||||
tags = '\n' + user.preference.mastodon_append_tag.replace('[category]', str(mark.item.verbose_category_name)) if user.preference.mastodon_append_tag else ''
|
||||
stars = rating_to_emoji(mark.rating,MastodonApplication.objects.get(domain_name=user.mastodon_site).star_mode)
|
||||
stars = rating_to_emoji(mark.rating, MastodonApplication.objects.get(domain_name=user.mastodon_site).star_mode)
|
||||
content = f"{mark.translated_status}《{mark.item.title}》{stars}\n{mark.item.url}\n{mark.text}{tags}"
|
||||
response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token)
|
||||
return response.status_code == 200
|
||||
if response and response.status_code == 200:
|
||||
j = response.json()
|
||||
if 'url' in j:
|
||||
mark.shared_link = j['url']
|
||||
mark.save(update_fields=['shared_link'])
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def share_review(review):
|
||||
|
@ -409,4 +419,11 @@ def share_review(review):
|
|||
tags = '\n' + user.preference.mastodon_append_tag.replace('[category]', str(review.item.verbose_category_name)) if user.preference.mastodon_append_tag else ''
|
||||
content = f"发布了关于《{review.item.title}》的评论\n{review.url}\n{review.title}{tags}"
|
||||
response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token)
|
||||
return response.status_code == 200
|
||||
if response and response.status_code == 200:
|
||||
j = response.json()
|
||||
if 'url' in j:
|
||||
review.shared_link = j['url']
|
||||
review.save(update_fields=['shared_link'])
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
|
|
@ -255,32 +255,7 @@
|
|||
<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 %}
|
||||
<li class="entity-marks__mark">
|
||||
<a href="{% url 'users:home' others_mark.owner.mastodon_username %}" class="entity-marks__owner-link">{{ others_mark.owner.username }}</a>
|
||||
<span>{{ others_mark.get_status_display }}</span>
|
||||
{% if others_mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star" data-rating-score="{{ others_mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
{% if others_mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z"/></svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ others_mark.created_time }}</span>
|
||||
{% if others_mark.movie != movie %}
|
||||
<span class="entity-marks__mark-time source-label"><a class="entity-marks__mark-time" href="{% url 'movies:retrieve' others_mark.movie.id %}">{{ others_mark.movie.get_source_site_display }}</a></span>
|
||||
{% endif %}
|
||||
|
||||
{% if others_mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ others_mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<div>{% trans '暂无标记' %}</div>
|
||||
{% endif %}
|
||||
{% include "partial/mark_list.html" with mark_list=mark_list current_item=movie %}
|
||||
</div>
|
||||
<div class="entity-reviews">
|
||||
{% if movie.is_series %}
|
||||
|
|
|
@ -35,42 +35,7 @@
|
|||
<h5 class="entity-marks__title entity-marks__title--stand-alone">
|
||||
<a href="{% url 'movies:retrieve' movie.id %}">{{ movie.title }}</a>{% trans ' 的标记' %}
|
||||
</h5>
|
||||
<ul class="entity-marks__mark-list">
|
||||
|
||||
{% for mark in marks %}
|
||||
|
||||
<li class="entity-marks__mark entity-marks__mark--wider">
|
||||
<a href="{% url 'users:home' mark.owner.mastodon_username %}"
|
||||
class="entity-marks__owner-link">{{ mark.owner.username }}</a>
|
||||
<span>{{ mark.get_status_display }}</span>
|
||||
{% if mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star"
|
||||
data-rating-score="{{ mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
{% if mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
||||
<path
|
||||
d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z" />
|
||||
</svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ mark.created_time }}</span>
|
||||
<span class="entity-marks__mark-time">{{ mark.created_time }}</span>
|
||||
{% if mark.movie != movie %}
|
||||
<span class="entity-marks__mark-time source-label"><a class="entity-marks__mark-time" href="{% url 'movies:retrieve' mark.movie.id %}">{{ mark.movie.get_source_site_display }}</a></span>
|
||||
{% endif %}
|
||||
|
||||
{% if mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
|
||||
{% empty %}
|
||||
<div>
|
||||
{% trans '无结果' %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
{% include "partial/mark_list.html" with mark_list=marks current_item=movie %}
|
||||
</div>
|
||||
<div class="pagination">
|
||||
|
||||
|
|
|
@ -220,28 +220,7 @@
|
|||
<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 %}
|
||||
<li class="entity-marks__mark">
|
||||
<a href="{% url 'users:home' others_mark.owner.mastodon_username %}" class="entity-marks__owner-link">{{ others_mark.owner.username }}</a>
|
||||
<span>{{ others_mark.get_status_display }}</span>
|
||||
{% if others_mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star" data-rating-score="{{ others_mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
{% if others_mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z"/></svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ others_mark.created_time }}</span>
|
||||
{% if others_mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ others_mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<div>{% trans '暂无标记' %}</div>
|
||||
{% endif %}
|
||||
{% include "partial/mark_list.html" with mark_list=mark_list current_item=album %}
|
||||
</div>
|
||||
<div class="entity-reviews">
|
||||
<h5 class="entity-reviews__title">{% trans '这部作品的评论' %}</h5>
|
||||
|
|
|
@ -35,38 +35,7 @@
|
|||
<h5 class="entity-marks__title entity-marks__title--stand-alone">
|
||||
<a href="{% url 'music:retrieve_album' album.id %}">{{ album.title }}</a>{% trans '的标记' %}
|
||||
</h5>
|
||||
<ul class="entity-marks__mark-list">
|
||||
|
||||
{% for mark in marks %}
|
||||
|
||||
<li class="entity-marks__mark entity-marks__mark--wider">
|
||||
<a href="{% url 'users:home' mark.owner.mastodon_username %}"
|
||||
class="entity-marks__owner-link">{{ mark.owner.username }}</a>
|
||||
<span>{{ mark.get_status_display }}</span>
|
||||
{% if mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star"
|
||||
data-rating-score="{{ mark.rating | floatformat:" 0" }}"></span>
|
||||
{% endif %}
|
||||
{% if mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 20 20">
|
||||
<path
|
||||
d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z" />
|
||||
</svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ mark.created_time }}</span>
|
||||
{% if mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
|
||||
{% empty %}
|
||||
<div>
|
||||
{% trans '无结果' %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
{% include "partial/mark_list.html" with mark_list=marks current_item=album %}
|
||||
</div>
|
||||
<div class="pagination">
|
||||
|
||||
|
|
|
@ -166,28 +166,7 @@
|
|||
<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 %}
|
||||
<li class="entity-marks__mark">
|
||||
<a href="{% url 'users:home' others_mark.owner.mastodon_username %}" class="entity-marks__owner-link">{{ others_mark.owner.username }}</a>
|
||||
<span>{{ others_mark.get_status_display }}</span>
|
||||
{% if others_mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star" data-rating-score="{{ others_mark.rating | floatformat:"0" }}"></span>
|
||||
{% endif %}
|
||||
{% if others_mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z"/></svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ others_mark.created_time }}</span>
|
||||
{% if others_mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ others_mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<div>{% trans '暂无标记' %}</div>
|
||||
{% endif %}
|
||||
{% include "partial/mark_list.html" with mark_list=mark_list current_item=song %}
|
||||
</div>
|
||||
<div class="entity-reviews">
|
||||
<h5 class="entity-reviews__title">{% trans '这部作品的评论' %}</h5>
|
||||
|
|
|
@ -35,38 +35,7 @@
|
|||
<h5 class="entity-marks__title entity-marks__title--stand-alone">
|
||||
<a href="{% url 'music:retrieve_song' song.id %}">{{ song.title }}</a>{% trans '的标记' %}
|
||||
</h5>
|
||||
<ul class="entity-marks__mark-list">
|
||||
|
||||
{% for mark in marks %}
|
||||
|
||||
<li class="entity-marks__mark entity-marks__mark--wider">
|
||||
<a href="{% url 'users:home' mark.owner.mastodon_username %}"
|
||||
class="entity-marks__owner-link">{{ mark.owner.username }}</a>
|
||||
<span>{{ mark.get_status_display }}</span>
|
||||
{% if mark.rating %}
|
||||
<span class="entity-marks__rating-star rating-star"
|
||||
data-rating-score="{{ mark.rating | floatformat:" 0" }}"></span>
|
||||
{% endif %}
|
||||
{% if mark.visibility > 0 %}
|
||||
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 20 20">
|
||||
<path
|
||||
d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z" />
|
||||
</svg></span>
|
||||
{% endif %}
|
||||
<span class="entity-marks__mark-time">{{ mark.created_time }}</span>
|
||||
{% if mark.text %}
|
||||
<p class="entity-marks__mark-content">{{ mark.text }}</p>
|
||||
{% endif %}
|
||||
</li>
|
||||
|
||||
{% empty %}
|
||||
<div>
|
||||
{% trans '无结果' %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
{% include "partial/mark_list.html" with mark_list=marks current_item=song %}
|
||||
</div>
|
||||
<div class="pagination">
|
||||
|
||||
|
|
|
@ -82,10 +82,14 @@ def export_marks(request):
|
|||
messages.add_message(request, messages.INFO, _('导出已开始。'))
|
||||
return redirect(reverse("users:data"))
|
||||
else:
|
||||
with open(request.user.preference.export_status['marks_file'], 'rb') as fh:
|
||||
response = HttpResponse(fh.read(), content_type="application/vnd.ms-excel")
|
||||
response['Content-Disposition'] = 'attachment;filename="marks.xlsx"'
|
||||
return response
|
||||
try:
|
||||
with open(request.user.preference.export_status['marks_file'], 'rb') as fh:
|
||||
response = HttpResponse(fh.read(), content_type="application/vnd.ms-excel")
|
||||
response['Content-Disposition'] = 'attachment;filename="marks.xlsx"'
|
||||
return response
|
||||
except Exception:
|
||||
messages.add_message(request, messages.ERROR, _('导出文件已过期,请重新导出'))
|
||||
return redirect(reverse("users:data"))
|
||||
|
||||
|
||||
@login_required
|
||||
|
|
|
@ -44,7 +44,7 @@ def refresh_mastodon_data_task(user, token=None):
|
|||
|
||||
def export_marks_task(user):
|
||||
user.preference.export_status['marks_pending'] = True
|
||||
user.preference.save()
|
||||
user.preference.save(update_fields=['export_status'])
|
||||
filename = GenerateDateUUIDMediaFilePath(None, 'f.xlsx', settings.MEDIA_ROOT + settings.EXPORT_FILE_PATH_ROOT)
|
||||
if not os.path.exists(os.path.dirname(filename)):
|
||||
os.makedirs(os.path.dirname(filename))
|
||||
|
@ -126,4 +126,4 @@ def export_marks_task(user):
|
|||
user.preference.export_status['marks_pending'] = False
|
||||
user.preference.export_status['marks_file'] = filename
|
||||
user.preference.export_status['marks_date'] = datetime.now().strftime("%Y-%m-%d %H:%M")
|
||||
user.preference.save()
|
||||
user.preference.save(update_fields=['export_status'])
|
||||
|
|
Loading…
Add table
Reference in a new issue