support case insensitive and normalized file and folder names.

This commit is contained in:
2023-07-19 13:46:23 +09:00
parent 0f12549ec3
commit b569c20b6e
5 changed files with 14 additions and 11 deletions

View File

@ -1,6 +1,7 @@
import dataclasses
import os
from argparse import Namespace, _SubParsersAction
from unicodedata import normalize
from pydantic import parse_obj_as
@ -49,12 +50,10 @@ class MvCommand(BaseCommand):
if d_sub_folder is not None:
raise IllegalArgumentException(f"Cannot overwrite non-folder `{d_basename}` with folder `{d_path}`.")
file_api = FileApi(connection)
if s_parent_folder.id != d_parent_folder.id:
file_api.move(s_file, d_parent_folder.id)
if d_basename != s_basename:
d_file_dict = dataclasses.asdict(s_file) | {"name": d_basename}
if s_parent_folder.id != d_parent_folder.id or d_basename != s_basename:
d_file_dict = dataclasses.asdict(s_file) | {"name": normalize("NFC", d_basename)}
d_file = parse_obj_as(File, d_file_dict)
file_api.update(d_file, None)
file_api.move(d_file, d_parent_folder.id)
else:
s_folder = s_parent_folder.find_sub_folder(s_basename)
if s_folder is None:
@ -71,6 +70,6 @@ class MvCommand(BaseCommand):
if s_parent_folder.id != d_parent_folder.id:
folder_api.move(s_folder, d_parent_folder.id)
if s_basename != d_basename:
d_folder_dict = dataclasses.asdict(s_folder) | {"name": d_basename}
d_folder_dict = dataclasses.asdict(s_folder) | {"name": normalize("NFC", d_basename)}
d_folder = parse_obj_as(FolderSimple, d_folder_dict)
folder_api.update(d_folder)