fix #743 支持Rclone
This commit is contained in:
@ -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; \
|
||||||
|
@ -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:** 电视剧媒体库目录称(不是完整路径),默认`电视剧`
|
||||||
|
@ -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)
|
||||||
|
@ -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)'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -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
|
||||||
|
@ -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]:
|
||||||
"""
|
"""
|
||||||
|
@ -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=
|
||||||
|
Reference in New Issue
Block a user