mirror of
https://github.com/whyour/qinglong.git
synced 2025-06-02 06:56:08 +08:00
新建订阅支持粘贴导入
This commit is contained in:
parent
953cf4795a
commit
29caa4b770
|
@ -117,7 +117,7 @@ ql extra
|
||||||
# 添加单个脚本文件
|
# 添加单个脚本文件
|
||||||
ql raw <file_url>
|
ql raw <file_url>
|
||||||
# 添加单个仓库的指定脚本
|
# 添加单个仓库的指定脚本
|
||||||
ql repo <repo_url> <whitelist> <blacklist> <dependence> <branch>
|
ql repo <repo_url> <whitelist> <blacklist> <dependence> <branch> <extensions>
|
||||||
# 删除旧日志
|
# 删除旧日志
|
||||||
ql rmlog <days>
|
ql rmlog <days>
|
||||||
# 启动tg-bot
|
# 启动tg-bot
|
||||||
|
@ -147,6 +147,7 @@ task <file_path> desi <env_name> <account_number>
|
||||||
* blacklist: 拉取仓库时的黑名单,即就是需要拉取的脚本的路径不包含的字符串
|
* blacklist: 拉取仓库时的黑名单,即就是需要拉取的脚本的路径不包含的字符串
|
||||||
* dependence: 拉取仓库需要的依赖文件,会直接从仓库拷贝到scripts下的仓库目录,不受黑名单影响
|
* dependence: 拉取仓库需要的依赖文件,会直接从仓库拷贝到scripts下的仓库目录,不受黑名单影响
|
||||||
* branch: 拉取仓库的分支
|
* branch: 拉取仓库的分支
|
||||||
|
* extensions: 拉取仓库的文件后缀
|
||||||
* days: 需要保留的日志的天数
|
* days: 需要保留的日志的天数
|
||||||
* file_path: 任务执行时的文件路径
|
* file_path: 任务执行时的文件路径
|
||||||
* env_name: 任务执行时需要并发或者指定时的环境变量名称
|
* env_name: 任务执行时需要并发或者指定时的环境变量名称
|
||||||
|
|
|
@ -232,7 +232,7 @@ usage() {
|
||||||
echo -e "1. $cmd_update update # 更新并重启青龙"
|
echo -e "1. $cmd_update update # 更新并重启青龙"
|
||||||
echo -e "2. $cmd_update extra # 运行自定义脚本"
|
echo -e "2. $cmd_update extra # 运行自定义脚本"
|
||||||
echo -e "3. $cmd_update raw <fileurl> # 更新单个脚本文件"
|
echo -e "3. $cmd_update raw <fileurl> # 更新单个脚本文件"
|
||||||
echo -e "4. $cmd_update repo <repourl> <path> <blacklist> <dependence> <branch> # 更新单个仓库的脚本"
|
echo -e "4. $cmd_update repo <repourl> <path> <blacklist> <dependence> <branch> <extensions> # 更新单个仓库的脚本"
|
||||||
echo -e "5. $cmd_update rmlog <days> # 删除旧日志"
|
echo -e "5. $cmd_update rmlog <days> # 删除旧日志"
|
||||||
echo -e "6. $cmd_update bot # 启动tg-bot"
|
echo -e "6. $cmd_update bot # 启动tg-bot"
|
||||||
echo -e "7. $cmd_update check # 检测青龙环境并修复"
|
echo -e "7. $cmd_update check # 检测青龙环境并修复"
|
||||||
|
|
|
@ -50,6 +50,7 @@ const CronModal = ({
|
||||||
visible={visible}
|
visible={visible}
|
||||||
forceRender
|
forceRender
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
form
|
form
|
||||||
.validateFields()
|
.validateFields()
|
||||||
|
@ -168,6 +169,7 @@ const CronLabelModal = ({
|
||||||
visible={visible}
|
visible={visible}
|
||||||
footer={buttons}
|
footer={buttons}
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
forceRender
|
forceRender
|
||||||
onCancel={() => handleCancel(false)}
|
onCancel={() => handleCancel(false)}
|
||||||
confirmLoading={loading}
|
confirmLoading={loading}
|
||||||
|
|
|
@ -72,6 +72,7 @@ const DependenceModal = ({
|
||||||
visible={visible}
|
visible={visible}
|
||||||
forceRender
|
forceRender
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
form
|
form
|
||||||
.validateFields()
|
.validateFields()
|
||||||
|
|
1
src/pages/env/editNameModal.tsx
vendored
1
src/pages/env/editNameModal.tsx
vendored
|
@ -42,6 +42,7 @@ const EditNameModal = ({
|
||||||
visible={visible}
|
visible={visible}
|
||||||
forceRender
|
forceRender
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
form
|
form
|
||||||
.validateFields()
|
.validateFields()
|
||||||
|
|
1
src/pages/env/modal.tsx
vendored
1
src/pages/env/modal.tsx
vendored
|
@ -62,6 +62,7 @@ const EnvModal = ({
|
||||||
visible={visible}
|
visible={visible}
|
||||||
forceRender
|
forceRender
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
form
|
form
|
||||||
.validateFields()
|
.validateFields()
|
||||||
|
|
|
@ -57,6 +57,7 @@ const EditScriptNameModal = ({
|
||||||
visible={visible}
|
visible={visible}
|
||||||
forceRender
|
forceRender
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
form
|
form
|
||||||
.validateFields()
|
.validateFields()
|
||||||
|
|
|
@ -44,6 +44,7 @@ const SaveModal = ({
|
||||||
visible={visible}
|
visible={visible}
|
||||||
forceRender
|
forceRender
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
form
|
form
|
||||||
.validateFields()
|
.validateFields()
|
||||||
|
|
|
@ -44,6 +44,7 @@ const AppModal = ({
|
||||||
visible={visible}
|
visible={visible}
|
||||||
forceRender
|
forceRender
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
form
|
form
|
||||||
.validateFields()
|
.validateFields()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useCallback, useEffect, useState } from 'react';
|
||||||
import { Modal, message, InputNumber, Form, Radio, Select, Input } from 'antd';
|
import { Modal, message, InputNumber, Form, Radio, Select, Input } from 'antd';
|
||||||
import { request } from '@/utils/http';
|
import { request } from '@/utils/http';
|
||||||
import config from '@/utils/config';
|
import config from '@/utils/config';
|
||||||
|
@ -183,6 +183,44 @@ const SubscriptionModal = ({
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onPaste = useCallback((e: any) => {
|
||||||
|
const text = e.clipboardData.getData('text');
|
||||||
|
if (!subscription && text.includes('ql ')) {
|
||||||
|
const [
|
||||||
|
,
|
||||||
|
type,
|
||||||
|
url,
|
||||||
|
whitelist,
|
||||||
|
blacklist,
|
||||||
|
dependences,
|
||||||
|
branch,
|
||||||
|
extensions,
|
||||||
|
] = text.split(' ').map((x) => x.trim());
|
||||||
|
form.setFieldsValue({
|
||||||
|
type:
|
||||||
|
type === 'raw'
|
||||||
|
? 'file'
|
||||||
|
: url.startsWith('http')
|
||||||
|
? 'public-repo'
|
||||||
|
: 'private-repo',
|
||||||
|
url,
|
||||||
|
whitelist,
|
||||||
|
blacklist,
|
||||||
|
dependences,
|
||||||
|
branch,
|
||||||
|
extensions,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (visible) {
|
||||||
|
window.addEventListener('paste', onPaste);
|
||||||
|
} else {
|
||||||
|
window.removeEventListener('paste', onPaste);
|
||||||
|
}
|
||||||
|
}, [visible]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
form.setFieldsValue(subscription || {});
|
form.setFieldsValue(subscription || {});
|
||||||
setType((subscription && subscription.type) || 'public-repo');
|
setType((subscription && subscription.type) || 'public-repo');
|
||||||
|
@ -193,12 +231,39 @@ const SubscriptionModal = ({
|
||||||
}
|
}
|
||||||
}, [subscription, visible]);
|
}, [subscription, visible]);
|
||||||
|
|
||||||
|
const isFirefox = navigator.userAgent.includes('Firefox');
|
||||||
|
const isSafari =
|
||||||
|
navigator.userAgent.includes('Safari') &&
|
||||||
|
!navigator.userAgent.includes('Chrome');
|
||||||
|
const isQQBrowser = navigator.userAgent.includes('QQBrowser');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
title={subscription ? '编辑订阅' : '新建订阅'}
|
title={
|
||||||
|
subscription ? (
|
||||||
|
'编辑订阅'
|
||||||
|
) : (
|
||||||
|
<span>
|
||||||
|
新建订阅
|
||||||
|
<small
|
||||||
|
style={{
|
||||||
|
color: '#999',
|
||||||
|
fontWeight: 400,
|
||||||
|
fontSize: isFirefox ? 9 : 12,
|
||||||
|
marginLeft: 2,
|
||||||
|
zoom: isSafari ? 0.66 : 0.8,
|
||||||
|
letterSpacing: isQQBrowser ? -2 : 0,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
拷贝repo/raw命令,粘贴导入
|
||||||
|
</small>
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
}
|
||||||
visible={visible}
|
visible={visible}
|
||||||
forceRender
|
forceRender
|
||||||
centered
|
centered
|
||||||
|
maskClosable={false}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
form
|
form
|
||||||
.validateFields()
|
.validateFields()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user