feat(project): 初始化项目结构和配置
- 添加.gitignore和.flaskenv环境配置文件 - 创建Flask应用基础架构,包括models、services、utils模块 - 配置数据库模型User和Setting,集成SQLAlchemy和Alembic迁移 - 添加前端Vue项目结构,包含Element Plus组件库 - 配置前后端API路由和蓝prints模块 - 实现书籍下载服务BookService功能模块 - 添加代码规范配置.editorconfig、.oxfmtrc.json、.oxlintrc.json - 配置VSCode推荐插件和前端构建工具链 - 实现文件服务FileService和相关业务逻辑
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import os
|
||||
from typing import List, Optional
|
||||
|
||||
from app.services import FolderService
|
||||
from app.utils import windows_sort_unicode
|
||||
from app.constants import IGNORE_DIRS, SEPARATORS, SPECIAL_PREFIXES, SPECIAL_DIRS
|
||||
|
||||
|
||||
class FileService:
|
||||
def __init__(self, paths: List[str]):
|
||||
self.paths = paths
|
||||
self.result_list: list[str] = []
|
||||
|
||||
def perform_rename(self, entry: os.DirEntry[str], new_name: str) -> Optional[str]:
|
||||
if new_name == entry.name:
|
||||
return None
|
||||
|
||||
new_path = os.path.join(os.path.dirname(entry.path), new_name)
|
||||
os.rename(entry.path, new_path)
|
||||
self.result_list.insert(0, new_path)
|
||||
# return new_path
|
||||
|
||||
def process_folder_name(self, entry: os.DirEntry[str]) -> Optional[str]:
|
||||
if not any(sep in entry.name for sep in SEPARATORS):
|
||||
return None
|
||||
|
||||
# 替换所有分隔符为+
|
||||
new_name = entry.name
|
||||
for sep in SEPARATORS:
|
||||
new_name = new_name.replace(sep, "+")
|
||||
|
||||
# 分割并排序各部分
|
||||
parts = new_name.split("+")
|
||||
sorted_parts = windows_sort_unicode(parts)
|
||||
new_name = "+".join(sorted_parts)
|
||||
|
||||
if new_name == entry.name:
|
||||
return None
|
||||
|
||||
return self.perform_rename(entry, new_name)
|
||||
|
||||
def process_file_name(self, entry: os.DirEntry[str]) -> Optional[str]:
|
||||
parent_dir = os.path.basename(os.path.dirname(entry.path))
|
||||
name, ext = os.path.splitext(entry.name)
|
||||
ext = ext.lower()
|
||||
name = name.upper()
|
||||
|
||||
# 排除特殊文件夹,仅处理大小写问题
|
||||
if parent_dir in SPECIAL_DIRS:
|
||||
return self.perform_rename(entry, f"{name}{ext}")
|
||||
|
||||
name = name.replace("-", "")
|
||||
|
||||
# 处理特殊前缀
|
||||
for prefix in SPECIAL_PREFIXES:
|
||||
if name.startswith(prefix):
|
||||
return self.perform_rename(entry, f"{prefix}-{name[len(prefix):]}{ext}")
|
||||
|
||||
# 在字母和数字之间添加连字符
|
||||
new_name = []
|
||||
for i, char in enumerate(name):
|
||||
if i > 0 and not name[i - 1].isnumeric() and char.isnumeric():
|
||||
new_name.append(f"-{char}")
|
||||
else:
|
||||
new_name.append(char)
|
||||
|
||||
if ''.join(new_name[-2:]) == "4K":
|
||||
new_name.insert(-2, "-")
|
||||
|
||||
return self.perform_rename(entry, f"{''.join(new_name)}{ext}")
|
||||
|
||||
def rename(self) -> List[str]:
|
||||
FolderService(paths=self.paths, ignore_dirs=IGNORE_DIRS, folder_callback=self.process_folder_name,
|
||||
file_callback=self.process_file_name).process_folder()
|
||||
return self.result_list
|
||||
Reference in New Issue
Block a user