commit
85f614f414
@ -1,7 +1,7 @@
|
||||
FROM node:lts-buster-slim
|
||||
WORKDIR /app
|
||||
COPY ./openRenamerBackend /app
|
||||
RUN chmod 777 -R /app
|
||||
RUN chmod 777 -R /app && npm install -g pnpm typescript --registry https://registry.npmmirror.com
|
||||
ENV PORT 80
|
||||
CMD ["bash", "start.sh"]
|
||||
|
||||
|
2
build.sh
2
build.sh
@ -13,4 +13,4 @@ rm -rf openRenamerBackend/node_modules
|
||||
#docker build -t fleyx/open-renamer:$0 --push .
|
||||
# 多平台打包并推送
|
||||
docker buildx build -t fleyx/open-renamer:$1 --platform linux/amd64,linux/arm64 --push .
|
||||
docker buildx build -t fleyx/open-renamer:latset --platform linux/amd64,linux/arm64 --push .
|
||||
docker buildx build -t fleyx/open-renamer:latest --platform linux/amd64,linux/arm64 --push .
|
||||
|
@ -1,6 +1,7 @@
|
||||
import RuleInterface from "./RuleInterface";
|
||||
import FileObj from "../../vo/FileObj";
|
||||
import path from 'path';
|
||||
import {getSeason} from "../../../util/MediaUtil";
|
||||
|
||||
|
||||
let pattern = new RegExp(/s(eason)?(\d+)/);
|
||||
@ -35,14 +36,12 @@ export default class InsertRule implements RuleInterface {
|
||||
deal(file: FileObj): void {
|
||||
//识别到的内容
|
||||
let getStr = null;
|
||||
let patternRes = path.basename(file.path).replace(/[ ]+/, "").toLocaleLowerCase().match(pattern);
|
||||
let season = getSeason(path.basename(file.path));
|
||||
if (this.type === 'season') {
|
||||
if (patternRes && patternRes[2]) {
|
||||
getStr = patternRes[2];
|
||||
}
|
||||
getStr = season;
|
||||
} else if (this.type === 'name') {
|
||||
let originName = null;
|
||||
if (patternRes && patternRes[2]) {
|
||||
if (season && season.length > 0) {
|
||||
//说明是剧集,取父文件夹的父文件夹名称
|
||||
originName = path.basename(path.resolve(file.path, '..'));
|
||||
} else {
|
||||
|
@ -1,9 +1,9 @@
|
||||
import RuleInterface from "./RuleInterface";
|
||||
import FileObj from "../../vo/FileObj";
|
||||
import path from 'path';
|
||||
import {getSeason} from "../../../util/MediaUtil";
|
||||
|
||||
|
||||
let pattern = new RegExp(/s(eason)?(\d+)/);
|
||||
export default class InsertRule implements RuleInterface {
|
||||
|
||||
/**
|
||||
@ -60,10 +60,7 @@ export default class InsertRule implements RuleInterface {
|
||||
let season = '';
|
||||
|
||||
if (this.autoSeason) {
|
||||
let patternRes = path.basename(file.path).replace(/[ ]+/, "").toLocaleLowerCase().match(pattern);
|
||||
if (patternRes && patternRes[2]) {
|
||||
season = patternRes[2];
|
||||
}
|
||||
season = getSeason(path.basename(file.path));
|
||||
}
|
||||
switch (this.type) {
|
||||
case "front":
|
||||
|
@ -1 +1 @@
|
||||
INSERT INTO application_rule (createdDate, updatedDate, name, comment, content, defaults) VALUES (1669648328180, 1678279879110, '推荐剧集模板', '此模板为系统创建12121212', '[{"type":"delete","message":"删除:全部删除","data":{"type":"deleteAll","start":{"type":"location","value":"1"},"end":{"type":"location","value":"1"},"ignorePostfix":true},"checked":false},{"type":"auto","message":"自动识别:\"剧名/电影名识别\";","data":{"type":"name","frontAdd":"","endAdd":"","eNumWidth":2},"checked":false},{"type":"auto","message":"自动识别:\"季号识别\";前缀添加:.s","data":{"type":"season","frontAdd":".s","endAdd":"","eNumWidth":2},"checked":false},{"type":"auto","message":"自动识别:\"集数识别\";集数宽度:3;前缀添加:e","data":{"type":"eNum","frontAdd":"e","endAdd":"","eNumWidth":3},"checked":false},{"type":"auto","message":"自动识别:\"分辨率识别\";前缀添加:.","data":{"type":"resolution","frontAdd":".","endAdd":"","eNumWidth":2},"checked":false}]', 0);
|
||||
INSERT INTO application_rule (createdDate, updatedDate, name, comment, content ) VALUES (1669648328180, 1678279879110, '推荐剧集模板', '此模板为系统创建12121212', '[{"type":"delete","message":"删除:全部删除","data":{"type":"deleteAll","start":{"type":"location","value":"1"},"end":{"type":"location","value":"1"},"ignorePostfix":true},"checked":false},{"type":"auto","message":"自动识别:\"剧名/电影名识别\";","data":{"type":"name","frontAdd":"","endAdd":"","eNumWidth":2},"checked":false},{"type":"auto","message":"自动识别:\"季号识别\";前缀添加:.s","data":{"type":"season","frontAdd":".s","endAdd":"","eNumWidth":2},"checked":false},{"type":"auto","message":"自动识别:\"集数识别\";集数宽度:3;前缀添加:e","data":{"type":"eNum","frontAdd":"e","endAdd":"","eNumWidth":3},"checked":false},{"type":"auto","message":"自动识别:\"分辨率识别\";前缀添加:.","data":{"type":"resolution","frontAdd":".","endAdd":"","eNumWidth":2},"checked":false}]');
|
||||
|
@ -1 +1 @@
|
||||
npm install -g pnpm typescript --registry https://registry.npmmirror.com && pnpm install --registry https://registry.npmmirror.com && tsc && node dist/index.js
|
||||
pnpm install --registry https://registry.npmmirror.com && tsc && node dist/index.js
|
||||
|
@ -1,3 +1,4 @@
|
||||
const path = require("path")
|
||||
const videoSet = new Set(["flv", 'avi', 'wmv', 'dat', 'vob', 'mpg', 'mpeg', 'mp4', '3gp', '3g2', 'mkv', 'rm', 'rmvb', 'mov', 'qt', 'ogg', 'ogv', 'oga', 'mod']);
|
||||
|
||||
/**
|
||||
@ -34,3 +35,23 @@ export function isNfo(str: string) {
|
||||
}
|
||||
return "nfo" == str;
|
||||
}
|
||||
|
||||
let pattern1 = new RegExp(/s(eason)?\.?(\d+)/);
|
||||
let pattern2 = new RegExp(/(\d+)/);
|
||||
|
||||
/**
|
||||
* 识别季号
|
||||
* @param str
|
||||
*/
|
||||
export function getSeason(name: string) {
|
||||
name = name.replace(/[ ]+/, "").toLocaleLowerCase();
|
||||
let patternRes = name.match(pattern1);
|
||||
if (patternRes && patternRes[2]) {
|
||||
return patternRes[2];
|
||||
}
|
||||
patternRes = name.match(pattern2);
|
||||
if (patternRes && patternRes[1]) {
|
||||
return patternRes[1];
|
||||
}
|
||||
return "";
|
||||
}
|
@ -40,19 +40,19 @@ export default {
|
||||
name: "Home",
|
||||
data() {
|
||||
return {
|
||||
version: 1.3,
|
||||
version: 1.4,
|
||||
latestVersion: null,
|
||||
activeIndex: location.pathname,
|
||||
};
|
||||
},
|
||||
async beforeCreate() {
|
||||
window.token = localStorage.getItem("token");
|
||||
window.isWindows = await httpUtil.get("/file/isWindows");
|
||||
},
|
||||
async created() {
|
||||
//获取最新版本
|
||||
let config = await httpUtil.get("https://s3.fleyx.com/picbed/openRenamer/config.json");
|
||||
this.latestVersion = config.version;
|
||||
window.token = localStorage.getItem("token");
|
||||
window.isWindows = await httpUtil.get("/file/isWindows");
|
||||
console.log(this.$route);
|
||||
console.log(this.activeIndex);
|
||||
},
|
||||
async mounted() {
|
||||
console.log(this.$route);
|
||||
|
@ -22,7 +22,7 @@
|
||||
</el-tag>
|
||||
</div>
|
||||
<div style="margin-top: 5px">
|
||||
<el-button type="primary" size="small" @click="selectAllFiles">反选</el-button>
|
||||
<el-button type="primary" size="small" @click="selectAllFiles">{{ allChecked ? "不选" : "全选" }}</el-button>
|
||||
<el-tooltip effect="dark" content="一键选中所有的非视频、字幕文件和小于5MB的视频文件" placement="bottom">
|
||||
<el-button type="success" size="small" @click="choseAdFile">一键选择</el-button>
|
||||
</el-tooltip>
|
||||
@ -120,7 +120,11 @@ export default {
|
||||
showNameEditDialog: false //显示编辑文件弹窗
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
computed: {
|
||||
allChecked() {
|
||||
return this.fileList.length > 0 && this.fileList.filter(item => item.checked).length === this.fileList.length;
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.savePathList = await HttpUtil.get("/file/path");
|
||||
window.isWindows = await HttpUtil.get("/file/isWindows");
|
||||
@ -214,9 +218,9 @@ export default {
|
||||
this.showNameEditDialog = false;
|
||||
await this.showResult();
|
||||
},
|
||||
//反选
|
||||
selectAllFiles() {
|
||||
this.fileList.forEach((item) => (item.checked = !item.checked));
|
||||
let checked = !this.allChecked;
|
||||
this.fileList.forEach((item) => (item.checked = checked));
|
||||
},
|
||||
//检查规则和文件
|
||||
checkRuleAndFile() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user