fix #743 支持Rclone

This commit is contained in:
jxxghp
2023-10-11 12:16:41 +08:00
parent 5778e86260
commit 0e35cec6e2
7 changed files with 61 additions and 5 deletions

View File

@ -31,6 +31,7 @@ RUN apt-get update -y \
dumb-init \ dumb-init \
jq \ jq \
haproxy \ haproxy \
rclone \
&& \ && \
if [ "$(uname -m)" = "x86_64" ]; \ if [ "$(uname -m)" = "x86_64" ]; \
then ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1; \ then ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1; \

View File

@ -74,7 +74,7 @@ MoviePilot需要配套下载器和媒体服务器配合使用。
- **SCRAP_SOURCE** 刮削元数据及图片使用的数据源,`themoviedb`/`douban`,默认`themoviedb` - **SCRAP_SOURCE** 刮削元数据及图片使用的数据源,`themoviedb`/`douban`,默认`themoviedb`
- **SCRAP_FOLLOW_TMDB** 新增已入库媒体是否跟随TMDB信息变化`true`/`false`,默认`true` - **SCRAP_FOLLOW_TMDB** 新增已入库媒体是否跟随TMDB信息变化`true`/`false`,默认`true`
--- ---
- **TRANSFER_TYPE $\color{red}{*}$ ** 整理转移方式,支持`link`/`copy`/`move`/`softlink` **注意:在`link`和`softlink`转移方式下,转移后的文件会继承源文件的权限掩码,不受`UMASK`影响** - **TRANSFER_TYPE $\color{red}{*}$ ** 整理转移方式,支持`link`/`copy`/`move`/`softlink`/`rclone_copy`/`rclone_move` **注意:在`link`和`softlink`转移方式下,转移后的文件会继承源文件的权限掩码,不受`UMASK`影响rclone需要自行映射rclone配置目录到容器中或在容器内完成rclone配置节点名称必须为`MP`**
- **LIBRARY_PATH $\color{red}{*}$ ** 媒体库目录,多个目录使用`,`分隔 - **LIBRARY_PATH $\color{red}{*}$ ** 媒体库目录,多个目录使用`,`分隔
- **LIBRARY_MOVIE_NAME** 电影媒体库目录名称(不是完整路径),默认`电影` - **LIBRARY_MOVIE_NAME** 电影媒体库目录名称(不是完整路径),默认`电影`
- **LIBRARY_TV_NAME** 电视剧媒体库目录称(不是完整路径),默认`电视剧` - **LIBRARY_TV_NAME** 电视剧媒体库目录称(不是完整路径),默认`电视剧`

View File

@ -80,6 +80,12 @@ class FileTransferModule(_ModuleBase):
elif transfer_type == 'move': elif transfer_type == 'move':
# 移动 # 移动
retcode, retmsg = SystemUtils.move(file_item, target_file) retcode, retmsg = SystemUtils.move(file_item, target_file)
elif transfer_type == 'rclone_move':
# Rclone 移动
retcode, retmsg = SystemUtils.rclone_move(file_item, target_file)
elif transfer_type == 'rclone_copy':
# Rclone 复制
retcode, retmsg = SystemUtils.rclone_copy(file_item, target_file)
else: else:
# 复制 # 复制
retcode, retmsg = SystemUtils.copy(file_item, target_file) retcode, retmsg = SystemUtils.copy(file_item, target_file)

View File

@ -619,9 +619,9 @@ class DirMonitor(_PluginBase):
'rows': 5, 'rows': 5,
'placeholder': '每一行一个目录,支持三种配置方式:\n' 'placeholder': '每一行一个目录,支持三种配置方式:\n'
'监控目录\n' '监控目录\n'
'监控目录#转移方式move|copy|link|softlink\n' '监控目录#转移方式move|copy|link|softlink|rclone_copy|rclone_move\n'
'监控目录:转移目的目录(需同时在媒体库目录中配置该目的目录)\n' '监控目录:转移目的目录(需同时在媒体库目录中配置该目的目录)\n'
'监控目录:转移目的目录#转移方式move|copy|link|softlink' '监控目录:转移目的目录#转移方式move|copy|link|softlink|rclone_copy|rclone_move'
} }
} }
] ]

View File

@ -56,7 +56,7 @@ class TransferHistory(BaseModel):
src: Optional[str] = None src: Optional[str] = None
# 目的目录 # 目的目录
dest: Optional[str] = None dest: Optional[str] = None
# 转移模式link/copy/move/softlink # 转移模式
mode: Optional[str] = None mode: Optional[str] = None
# 类型:电影、电视剧 # 类型:电影、电视剧
type: Optional[str] = None type: Optional[str] = None

View File

@ -3,6 +3,7 @@ import os
import platform import platform
import re import re
import shutil import shutil
import subprocess
import sys import sys
from pathlib import Path from pathlib import Path
from typing import List, Union, Tuple from typing import List, Union, Tuple
@ -118,6 +119,54 @@ class SystemUtils:
print(str(err)) print(str(err))
return -1, str(err) return -1, str(err)
@staticmethod
def rclone_move(src: Path, dest: Path):
"""
Rclone移动
"""
try:
retcode = subprocess.run(
[
'rclone', 'moveto',
str(src),
f'MP:{dest}'
],
startupinfo=SystemUtils.__get_hidden_shell()
).returncode
return retcode, ""
except Exception as err:
print(str(err))
return -1, str(err)
@staticmethod
def rclone_copy(src: Path, dest: Path):
"""
Rclone复制
"""
try:
retcode = subprocess.run(
[
'rclone', 'copyto',
str(src),
f'MP:{dest}'
],
startupinfo=SystemUtils.__get_hidden_shell()
).returncode
return retcode, ""
except Exception as err:
print(str(err))
return -1, str(err)
@staticmethod
def __get_hidden_shell():
if SystemUtils.is_windows():
st = subprocess.STARTUPINFO()
st.dwFlags = subprocess.STARTF_USESHOWWINDOW
st.wShowWindow = subprocess.SW_HIDE
return st
else:
return None
@staticmethod @staticmethod
def list_files(directory: Path, extensions: list, min_filesize: int = 0) -> List[Path]: def list_files(directory: Path, extensions: list, min_filesize: int = 0) -> List[Path]:
""" """

View File

@ -39,7 +39,7 @@ SCRAP_SOURCE=themoviedb
#################################### ####################################
# 媒体库 # # 媒体库 #
#################################### ####################################
# 【*】转移方式 link/copy/move/softlink # 【*】转移方式 link/copy/move/softlink/rclone_copy/rclone_move
TRANSFER_TYPE=copy TRANSFER_TYPE=copy
# 【*】媒体库目录,多个目录使用,分隔 # 【*】媒体库目录,多个目录使用,分隔
LIBRARY_PATH= LIBRARY_PATH=