add overwriting mode for import
This commit is contained in:
parent
32f360183f
commit
731d2efcb9
3 changed files with 31 additions and 8 deletions
|
@ -47,16 +47,19 @@ class DoubanImporter:
|
|||
failed = []
|
||||
user = None
|
||||
visibility = 0
|
||||
mode = 0
|
||||
file = None
|
||||
|
||||
def __init__(self, user, visibility):
|
||||
def __init__(self, user, visibility, mode):
|
||||
self.user = user
|
||||
self.visibility = visibility
|
||||
self.mode = mode
|
||||
|
||||
def update_user_import_status(self, status):
|
||||
self.user.preference.import_status["douban_pending"] = status
|
||||
self.user.preference.import_status["douban_file"] = self.file
|
||||
self.user.preference.import_status["douban_visibility"] = self.visibility
|
||||
self.user.preference.import_status["douban_mode"] = self.mode
|
||||
self.user.preference.import_status["douban_total"] = self.total
|
||||
self.user.preference.import_status["douban_processed"] = self.processed
|
||||
self.user.preference.import_status["douban_skipped"] = self.skipped
|
||||
|
@ -220,7 +223,7 @@ class DoubanImporter:
|
|||
print(f"{self.user} | match/fetch {url} failed")
|
||||
return
|
||||
mark = Mark(self.user, item)
|
||||
if (
|
||||
if self.mode == 1 and (
|
||||
mark.shelf_type == shelf_type
|
||||
or mark.shelf_type == ShelfType.COMPLETE
|
||||
or (
|
||||
|
@ -319,7 +322,10 @@ class DoubanImporter:
|
|||
if not item:
|
||||
print(f"{prefix} match/fetch {url} failed")
|
||||
return
|
||||
if Review.objects.filter(owner=self.user, item=item).exists():
|
||||
if (
|
||||
self.mode == 1
|
||||
and Review.objects.filter(owner=self.user, item=item).exists()
|
||||
):
|
||||
return 2
|
||||
content = re.sub(
|
||||
r'<span style="font-weight: bold;">([^<]+)</span>', r"<b>\1</b>", content
|
||||
|
|
|
@ -147,7 +147,11 @@ def import_goodreads(request):
|
|||
@login_required
|
||||
def import_douban(request):
|
||||
if request.method == "POST":
|
||||
importer = DoubanImporter(request.user, request.POST.get("visibility"))
|
||||
importer = DoubanImporter(
|
||||
request.user,
|
||||
int(request.POST.get("visibility")),
|
||||
int(request.POST.get("import_mode")),
|
||||
)
|
||||
if importer.import_from_file(request.FILES["file"]):
|
||||
messages.add_message(request, messages.INFO, _("文件上传成功,等待后台导入。"))
|
||||
else:
|
||||
|
|
|
@ -42,14 +42,27 @@
|
|||
<div class="import-panel__body">
|
||||
<form action="{% url 'users:import_douban' %}" method="POST" enctype="multipart/form-data" >
|
||||
{% csrf_token %}
|
||||
<div>
|
||||
请在豆伴(豆坟)导出时勾选「书影音游剧」和「评论」。正向变化(想读->在读->已读)的标记会更新,其它已经存在的标记和评论不会被覆盖。
|
||||
</div>
|
||||
<div class="import-panel__checkbox">
|
||||
<p>从<a href="https://doufen.org" target="_blank">豆伴(豆坟)</a>备份导出的.xlsx文件:
|
||||
<p>
|
||||
<div>
|
||||
请在豆伴(豆坟)导出时勾选「书影音游剧」和「评论」。
|
||||
</div>
|
||||
从<a href="https://doufen.org" target="_blank">豆伴(豆坟)</a>备份导出的.xlsx文件:
|
||||
<input type="file" name="file" id="excel" required accept=".xlsx">
|
||||
</p>
|
||||
<p>
|
||||
导入方式:
|
||||
<br>
|
||||
<label for="import_mode_0">
|
||||
<input id="import_mode_0" type="radio" name="import_mode" value="0" checked>自动合并:仅更新正向变化(未标->想读->在读->已读)标记,不更新其它标记和现有评论(推荐)
|
||||
</label>
|
||||
<br>
|
||||
<label for="import_mode_1">
|
||||
<input id="import_mode_1" type="radio" name="import_mode" value="1">强制覆盖:覆盖已存在的标记和评论,导入文件中未涉及的条目标记和评论不会被改动。
|
||||
</label>
|
||||
</p>
|
||||
<p>可见性:
|
||||
<br>
|
||||
<label for="id_visibility_0"><input type="radio" name="visibility" value="0" required="" id="id_visibility_0" checked>
|
||||
公开</label>
|
||||
<label for="id_visibility_1"><input type="radio" name="visibility" value="1" required="" id="id_visibility_1">
|
||||
|
|
Loading…
Add table
Reference in a new issue