add overwriting mode for import

This commit is contained in:
Your Name 2023-01-09 20:36:12 -05:00
parent 32f360183f
commit 731d2efcb9
3 changed files with 31 additions and 8 deletions

View file

@ -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

View file

@ -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:

View file

@ -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">