fix file transfer
This commit is contained in:
parent
fd3ecacbb2
commit
8dd11bb53d
@ -8,10 +8,11 @@ ENV LANG="C.UTF-8" \
|
|||||||
WORKDIR="/MoviePilot" \
|
WORKDIR="/MoviePilot" \
|
||||||
CONFIG_DIR="/config" \
|
CONFIG_DIR="/config" \
|
||||||
API_TOKEN="moviepilot" \
|
API_TOKEN="moviepilot" \
|
||||||
LIBRARY_PATH="" \
|
|
||||||
DOWNLOAD_PATH="/downloads" \
|
|
||||||
SUPERUSER="admin" \
|
SUPERUSER="admin" \
|
||||||
SUPERUSER_PASSWORD="password" \
|
SUPERUSER_PASSWORD="password" \
|
||||||
|
LIBRARY_PATH="" \
|
||||||
|
DOWNLOAD_PATH="/downloads" \
|
||||||
|
TORRENT_TAG="MOVIEPILOT" \
|
||||||
SEARCH_SOURCE="themoviedb" \
|
SEARCH_SOURCE="themoviedb" \
|
||||||
SCRAP_SOURCE="themoviedb" \
|
SCRAP_SOURCE="themoviedb" \
|
||||||
INDEXER_SITES="" \
|
INDEXER_SITES="" \
|
||||||
|
@ -6,6 +6,7 @@ from app.chain import ChainBase
|
|||||||
from app.chain.cookiecloud import CookieCloudChain
|
from app.chain.cookiecloud import CookieCloudChain
|
||||||
from app.chain.douban_sync import DoubanSyncChain
|
from app.chain.douban_sync import DoubanSyncChain
|
||||||
from app.chain.subscribe import SubscribeChain
|
from app.chain.subscribe import SubscribeChain
|
||||||
|
from app.chain.transfer import TransferChain
|
||||||
from app.core import eventmanager, PluginManager, EventManager
|
from app.core import eventmanager, PluginManager, EventManager
|
||||||
from app.core.event_manager import Event as ManagerEvent
|
from app.core.event_manager import Event as ManagerEvent
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
@ -44,6 +45,11 @@ class Command(metaclass=Singleton):
|
|||||||
"data": {
|
"data": {
|
||||||
'state': 'R',
|
'state': 'R',
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"/transfer": {
|
||||||
|
"func": TransferChain().process,
|
||||||
|
"description": "下载文件整理",
|
||||||
|
"data": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ class Settings(BaseSettings):
|
|||||||
# Transmission密码
|
# Transmission密码
|
||||||
TR_PASSWORD: str = None
|
TR_PASSWORD: str = None
|
||||||
# 种子标签
|
# 种子标签
|
||||||
TORRENT_TAG: str = "MP"
|
TORRENT_TAG: str = "MOVIEPILOT"
|
||||||
# 下载保存目录,容器内映射路径需要一致
|
# 下载保存目录,容器内映射路径需要一致
|
||||||
DOWNLOAD_PATH: str = "/downloads"
|
DOWNLOAD_PATH: str = "/downloads"
|
||||||
# 媒体服务器 emby/jellyfin/plex
|
# 媒体服务器 emby/jellyfin/plex
|
||||||
|
@ -9,6 +9,7 @@ from qbittorrentapi.client import Client
|
|||||||
from app.core import settings
|
from app.core import settings
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.utils.singleton import Singleton
|
from app.utils.singleton import Singleton
|
||||||
|
from app.utils.string import StringUtils
|
||||||
|
|
||||||
|
|
||||||
class Qbittorrent(metaclass=Singleton):
|
class Qbittorrent(metaclass=Singleton):
|
||||||
@ -21,10 +22,7 @@ class Qbittorrent(metaclass=Singleton):
|
|||||||
qbc: Client = None
|
qbc: Client = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
host = settings.QB_HOST
|
self._host, self._port = StringUtils.get_domain_address(settings.QB_HOST)
|
||||||
if host and host.find(":") != -1:
|
|
||||||
self._host = settings.QB_HOST.split(":")[0]
|
|
||||||
self._port = settings.QB_HOST.split(":")[1]
|
|
||||||
self._username = settings.QB_USER
|
self._username = settings.QB_USER
|
||||||
self._password = settings.QB_PASSWORD
|
self._password = settings.QB_PASSWORD
|
||||||
if self._host and self._port and self._username and self._password:
|
if self._host and self._port and self._username and self._password:
|
||||||
|
@ -33,13 +33,13 @@ class Telegram(metaclass=Singleton):
|
|||||||
|
|
||||||
@_bot.message_handler(func=lambda message: True)
|
@_bot.message_handler(func=lambda message: True)
|
||||||
def echo_all(message):
|
def echo_all(message):
|
||||||
RequestUtils(timeout=10).post_res(self._ds_url, json=message.json)
|
RequestUtils(timeout=5).post_res(self._ds_url, json=message.json)
|
||||||
|
|
||||||
def run_polling():
|
def run_polling():
|
||||||
"""
|
"""
|
||||||
定义线程函数来运行 infinity_polling
|
定义线程函数来运行 infinity_polling
|
||||||
"""
|
"""
|
||||||
_bot.infinity_polling()
|
_bot.infinity_polling(long_polling_timeout=5)
|
||||||
|
|
||||||
# 启动线程来运行 infinity_polling
|
# 启动线程来运行 infinity_polling
|
||||||
self._polling_thread = threading.Thread(target=run_polling)
|
self._polling_thread = threading.Thread(target=run_polling)
|
||||||
|
@ -7,6 +7,7 @@ from transmission_rpc import Client, Torrent, File
|
|||||||
from app.core import settings
|
from app.core import settings
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.utils.singleton import Singleton
|
from app.utils.singleton import Singleton
|
||||||
|
from app.utils.string import StringUtils
|
||||||
|
|
||||||
|
|
||||||
class Transmission(metaclass=Singleton):
|
class Transmission(metaclass=Singleton):
|
||||||
@ -25,10 +26,7 @@ class Transmission(metaclass=Singleton):
|
|||||||
"error", "errorString", "doneDate", "queuePosition", "activityDate", "trackers"]
|
"error", "errorString", "doneDate", "queuePosition", "activityDate", "trackers"]
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
host = settings.TR_HOST
|
self._host, self._port = StringUtils.get_domain_address(settings.QB_HOST)
|
||||||
if host and host.find(":") != -1:
|
|
||||||
self._host = settings.TR_HOST.split(":")[0]
|
|
||||||
self._port = settings.TR_HOST.split(":")[1]
|
|
||||||
self._username = settings.TR_USER
|
self._username = settings.TR_USER
|
||||||
self._password = settings.TR_PASSWORD
|
self._password = settings.TR_PASSWORD
|
||||||
if self._host and self._port and self._username and self._password:
|
if self._host and self._port and self._username and self._password:
|
||||||
|
@ -530,3 +530,24 @@ class StringUtils:
|
|||||||
parses = re.sub(r"([_*\[\]()~`>#+\-=|.!{}])", r"\\\1", content)
|
parses = re.sub(r"([_*\[\]()~`>#+\-=|.!{}])", r"\\\1", content)
|
||||||
reparse = re.sub(r"\\\\([_*\[\]()~`>#+\-=|.!{}])", r"\1", parses)
|
reparse = re.sub(r"\\\\([_*\[\]()~`>#+\-=|.!{}])", r"\1", parses)
|
||||||
return reparse
|
return reparse
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_domain_address(address: str) -> Tuple[Optional[str], Optional[int]]:
|
||||||
|
"""
|
||||||
|
从地址中获取域名和端口号
|
||||||
|
"""
|
||||||
|
if not address.startswith("http"):
|
||||||
|
address = "http://" + address
|
||||||
|
parts = address.split(":")
|
||||||
|
if len(parts) > 3:
|
||||||
|
# 处理不希望包含多个冒号的情况(除了协议后的冒号)
|
||||||
|
return None, None
|
||||||
|
domain = ":".join(parts[:-1])
|
||||||
|
# 检查是否包含端口号
|
||||||
|
try:
|
||||||
|
port = int(parts[-1])
|
||||||
|
except ValueError:
|
||||||
|
# 端口号不是整数,返回 None 表示无效
|
||||||
|
return None, None
|
||||||
|
return domain, port
|
||||||
|
|
||||||
|
@ -11,17 +11,17 @@ if __name__ == '__main__':
|
|||||||
suite = unittest.TestSuite()
|
suite = unittest.TestSuite()
|
||||||
|
|
||||||
# 测试过滤器
|
# 测试过滤器
|
||||||
suite.addTest(FilterTest('test_filter'))
|
# suite.addTest(FilterTest('test_filter'))
|
||||||
# 测试名称识别
|
# 测试名称识别
|
||||||
suite.addTest(MetaInfoTest('test_metainfo'))
|
# suite.addTest(MetaInfoTest('test_metainfo'))
|
||||||
# 测试媒体识别
|
# 测试媒体识别
|
||||||
# suite.addTest(RecognizeTest('test_recognize'))
|
# suite.addTest(RecognizeTest('test_recognize'))
|
||||||
# 测试CookieCloud同步
|
# 测试CookieCloud同步
|
||||||
# suite.addTest(CookieCloudTest('test_cookiecloud'))
|
# suite.addTest(CookieCloudTest('test_cookiecloud'))
|
||||||
# 测试文件转移
|
# 测试文件转移
|
||||||
# suite.addTest(TransferTest('test_transfer'))
|
suite.addTest(TransferTest('test_transfer'))
|
||||||
# 测试豆瓣同步
|
# 测试豆瓣同步
|
||||||
suite.addTest(DoubanSyncTest('test_doubansync'))
|
# suite.addTest(DoubanSyncTest('test_doubansync'))
|
||||||
|
|
||||||
# 运行测试
|
# 运行测试
|
||||||
runner = unittest.TextTestRunner()
|
runner = unittest.TextTestRunner()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user