@nger/fk-upload 1.0.201 → 1.0.204
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{templates → controllers}/code.d.ts +0 -0
- package/dist/{templates → controllers}/code.js +2 -1
- package/dist/controllers/relogin.d.ts +8 -0
- package/dist/controllers/relogin.js +42 -0
- package/dist/{templates → controllers}/verify.d.ts +0 -0
- package/dist/{templates → controllers}/verify.js +0 -0
- package/dist/entities/check-task.d.ts +13 -0
- package/dist/entities/check-task.js +221 -0
- package/dist/entities/download-task.d.ts +23 -0
- package/dist/entities/download-task.js +445 -0
- package/dist/entities/effect-task.d.ts +12 -0
- package/dist/entities/effect-task.js +207 -0
- package/dist/entities/fk-account.d.ts +16 -0
- package/dist/entities/fk-account.js +295 -0
- package/dist/entities/fk-jiqun.d.ts +5 -0
- package/dist/entities/fk-jiqun.js +56 -0
- package/dist/entities/upload-task.d.ts +15 -0
- package/dist/entities/upload-task.js +333 -0
- package/dist/entities/w7-account.d.ts +11 -0
- package/dist/entities/w7-account.js +126 -0
- package/dist/entities/w7.d.ts +10 -0
- package/dist/entities/w7.js +107 -0
- package/dist/entities/w7_chat_topic.d.ts +9 -0
- package/dist/entities/w7_chat_topic.js +58 -0
- package/dist/entities/w7_uni_account.d.ts +4 -0
- package/dist/entities/w7_uni_account.js +23 -0
- package/dist/fk-upload.module.d.ts +5 -0
- package/dist/fk-upload.module.js +76 -43
- package/dist/main.d.ts +1 -0
- package/dist/main.js +18 -29
- package/dist/services/check.service.d.ts +6 -0
- package/dist/services/check.service.js +32 -0
- package/dist/services/client.service.d.ts +6 -0
- package/dist/services/client.service.js +29 -0
- package/dist/services/download.service.d.ts +15 -0
- package/dist/services/download.service.js +139 -0
- package/dist/services/effect.service.d.ts +7 -0
- package/dist/services/effect.service.js +34 -0
- package/dist/services/fk.service.d.ts +24 -0
- package/dist/services/fk.service.js +323 -0
- package/dist/services/login.service.d.ts +17 -0
- package/dist/services/login.service.js +95 -0
- package/dist/services/upload.service.d.ts +13 -0
- package/dist/services/upload.service.js +100 -0
- package/dist/tasks/actions.d.ts +28 -0
- package/dist/tasks/actions.js +12 -0
- package/dist/{templates/tasks/schedule-task.d.ts → tasks/check-task.d.ts} +3 -5
- package/dist/tasks/check-task.js +205 -0
- package/dist/tasks/download-continue-task.d.ts +9 -0
- package/dist/tasks/download-continue-task.js +127 -0
- package/dist/{templates/tasks → tasks}/download-task.d.ts +0 -1
- package/dist/tasks/download-task.js +128 -0
- package/dist/{templates/tasks → tasks}/effect-task.d.ts +1 -1
- package/dist/tasks/effect-task.js +111 -0
- package/dist/{templates/tasks → tasks}/providers.d.ts +0 -0
- package/dist/{templates/tasks → tasks}/providers.js +11 -5
- package/dist/tasks/upload-continue-task.d.ts +8 -0
- package/dist/tasks/upload-continue-task.js +114 -0
- package/dist/{templates/tasks → tasks}/upload-task.d.ts +0 -0
- package/dist/tasks/upload-task.js +114 -0
- package/package.json +18 -14
- package/pnpm-lock.yaml +36 -1435
- package/dist/electon.d.ts +0 -3
- package/dist/electon.js +0 -80
- package/dist/entities/fk-download-task.entity.d.ts +0 -18
- package/dist/entities/fk-download-task.entity.js +0 -142
- package/dist/entities/fk-login-cookie.entity.d.ts +0 -7
- package/dist/entities/fk-login-cookie.entity.js +0 -46
- package/dist/entities/fk-login.entity.d.ts +0 -12
- package/dist/entities/fk-login.entity.js +0 -80
- package/dist/entities/index.d.ts +0 -3
- package/dist/entities/index.js +0 -6
- package/dist/login.controller.d.ts +0 -14
- package/dist/login.controller.js +0 -197
- package/dist/mq-runner.d.ts +0 -5
- package/dist/mq-runner.js +0 -19
- package/dist/static/task-manage.d.ts +0 -6
- package/dist/static/task-manage.js +0 -34
- package/dist/templates/add-fk-login.d.ts +0 -12
- package/dist/templates/add-fk-login.js +0 -93
- package/dist/templates/add-task.d.ts +0 -13
- package/dist/templates/add-task.js +0 -78
- package/dist/templates/check-upload.d.ts +0 -38
- package/dist/templates/check-upload.js +0 -195
- package/dist/templates/component.d.ts +0 -10
- package/dist/templates/component.js +0 -39
- package/dist/templates/error.d.ts +0 -4
- package/dist/templates/error.js +0 -27
- package/dist/templates/help.d.ts +0 -7
- package/dist/templates/help.js +0 -52
- package/dist/templates/player.d.ts +0 -4
- package/dist/templates/player.js +0 -23
- package/dist/templates/setting.d.ts +0 -13
- package/dist/templates/setting.js +0 -65
- package/dist/templates/task-manage.d.ts +0 -21
- package/dist/templates/task-manage.js +0 -314
- package/dist/templates/tasks/actions.d.ts +0 -44
- package/dist/templates/tasks/actions.js +0 -9
- package/dist/templates/tasks/check-task.d.ts +0 -8
- package/dist/templates/tasks/check-task.js +0 -89
- package/dist/templates/tasks/download-task.js +0 -130
- package/dist/templates/tasks/effect-task.js +0 -76
- package/dist/templates/tasks/fk.service.d.ts +0 -28
- package/dist/templates/tasks/fk.service.js +0 -254
- package/dist/templates/tasks/schedule-task.js +0 -94
- package/dist/templates/tasks/task.service.d.ts +0 -11
- package/dist/templates/tasks/task.service.js +0 -114
- package/dist/templates/tasks/upload-task.js +0 -97
- package/dist/templates/tasks/yasuo-task.d.ts +0 -0
- package/dist/templates/tasks/yasuo-task.js +0 -0
- package/dist/templates/upload-task.d.ts +0 -9
- package/dist/templates/upload-task.js +0 -141
- package/dist/templates/upload.d.ts +0 -16
- package/dist/templates/upload.js +0 -232
- package/dist/urlSafeBase64Decode.d.ts +0 -3
- package/dist/urlSafeBase64Decode.js +0 -32
- package/electron/.env +0 -32
- package/electron/package.json +0 -31
- package/electron/pnpm-lock.yaml +0 -2878
- package/fk-upload-pc/.vscode/extensions.json +0 -3
- package/fk-upload-pc/README.md +0 -16
- package/fk-upload-pc/index.html +0 -13
- package/fk-upload-pc/package.json +0 -19
- package/fk-upload-pc/pnpm-lock.yaml +0 -489
- package/fk-upload-pc/public/favicon.ico +0 -0
- package/fk-upload-pc/tsconfig.json +0 -18
- package/fk-upload-pc/tsconfig.node.json +0 -8
- package/fk-upload-pc/vite.config.ts +0 -7
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UploadService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const upload_task_1 = require("./../entities/upload-task");
|
|
6
|
+
const core_1 = require("@nger/core");
|
|
7
|
+
const typeorm_1 = require("@nger/typeorm");
|
|
8
|
+
const rabbitmq_1 = require("@nger/rabbitmq");
|
|
9
|
+
const actions_1 = require("../tasks/actions");
|
|
10
|
+
let UploadService = class UploadService {
|
|
11
|
+
injector;
|
|
12
|
+
db;
|
|
13
|
+
constructor(injector, db) {
|
|
14
|
+
this.injector = injector;
|
|
15
|
+
this.db = db;
|
|
16
|
+
}
|
|
17
|
+
async startUpload(id) {
|
|
18
|
+
const download = await this.db.manager.findOneOrFail(upload_task_1.FkUploadTask, { where: { id } });
|
|
19
|
+
if (download.status === '1') {
|
|
20
|
+
// no start
|
|
21
|
+
await this.db.manager.update(upload_task_1.FkUploadTask, id, { status: `2` });
|
|
22
|
+
await this.start(id);
|
|
23
|
+
}
|
|
24
|
+
else if (download.status === '2') {
|
|
25
|
+
// wait
|
|
26
|
+
await this.start(id);
|
|
27
|
+
}
|
|
28
|
+
else if (download.status === '3') {
|
|
29
|
+
// uploading
|
|
30
|
+
await this.db.manager.update(upload_task_1.FkUploadTask, id, { status: `5` });
|
|
31
|
+
await this.continue(id);
|
|
32
|
+
}
|
|
33
|
+
else if (download.status === '4') {
|
|
34
|
+
// stop
|
|
35
|
+
await this.db.manager.update(upload_task_1.FkUploadTask, id, { status: `5` });
|
|
36
|
+
await this.continue(id);
|
|
37
|
+
}
|
|
38
|
+
else if (download.status === '5') {
|
|
39
|
+
// wait continue
|
|
40
|
+
await this.continue(id);
|
|
41
|
+
}
|
|
42
|
+
else if (download.status === '6') {
|
|
43
|
+
// error
|
|
44
|
+
await this.db.manager.update(upload_task_1.FkUploadTask, id, { status: `5` });
|
|
45
|
+
await this.continue(id);
|
|
46
|
+
}
|
|
47
|
+
else if (download.status === '7') {
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
await this.continue(id);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async start(id) {
|
|
54
|
+
const db = this.injector.get(typeorm_1.Db);
|
|
55
|
+
const upload = await db.manager.findOneOrFail(upload_task_1.FkUploadTask, {
|
|
56
|
+
where: { id }
|
|
57
|
+
});
|
|
58
|
+
const taskManager = this.injector.get(rabbitmq_1.TaskManager);
|
|
59
|
+
const t = new rabbitmq_1.TaskEntity();
|
|
60
|
+
t.topic = actions_1.UPLOAD_ACTION;
|
|
61
|
+
t.data = { id: upload.id };
|
|
62
|
+
await taskManager.send(t);
|
|
63
|
+
}
|
|
64
|
+
async starts(ids) {
|
|
65
|
+
return Promise.all(ids.map(id => this.startUpload(id)));
|
|
66
|
+
}
|
|
67
|
+
async continue(id) {
|
|
68
|
+
const db = this.injector.get(typeorm_1.Db);
|
|
69
|
+
const upload = await db.manager.findOneOrFail(upload_task_1.FkUploadTask, {
|
|
70
|
+
where: { id }
|
|
71
|
+
});
|
|
72
|
+
const taskManager = this.injector.get(rabbitmq_1.TaskManager);
|
|
73
|
+
const t = new rabbitmq_1.TaskEntity();
|
|
74
|
+
t.topic = actions_1.UPLOAD_CONTINUE_ACTION;
|
|
75
|
+
t.data = { id: upload.id };
|
|
76
|
+
await taskManager.send(t);
|
|
77
|
+
}
|
|
78
|
+
async stop(id) {
|
|
79
|
+
const db = this.injector.get(typeorm_1.Db);
|
|
80
|
+
const upload = await db.manager.findOneOrFail(upload_task_1.FkUploadTask, {
|
|
81
|
+
where: { id }
|
|
82
|
+
});
|
|
83
|
+
if (upload.status === '7') { }
|
|
84
|
+
else if (upload.status === '1') {
|
|
85
|
+
}
|
|
86
|
+
else if (upload.status === '2') {
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
await db.manager.update(upload_task_1.FkUploadTask, id, { status: '4' });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async stops(ids) {
|
|
93
|
+
return Promise.all((ids || []).map(id => this.stop(id)));
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
UploadService = tslib_1.__decorate([
|
|
97
|
+
(0, core_1.Injectable)(),
|
|
98
|
+
tslib_1.__metadata("design:paramtypes", [core_1.Injector, typeorm_1.Db])
|
|
99
|
+
], UploadService);
|
|
100
|
+
exports.UploadService = UploadService;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { StringToken } from "@nger/core";
|
|
2
|
+
export interface IDownloadTask {
|
|
3
|
+
id: number;
|
|
4
|
+
}
|
|
5
|
+
export declare const DOWNLOAD_ACTION: StringToken<IDownloadTask>;
|
|
6
|
+
export declare const DOWNLOAD_CONTINUE_ACTION: StringToken<IDownloadTask>;
|
|
7
|
+
export interface IScheduleTask {
|
|
8
|
+
name: string;
|
|
9
|
+
rule: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const SCHEDULE_ACTION: StringToken<IScheduleTask>;
|
|
12
|
+
export interface IUploadTask {
|
|
13
|
+
id: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const UPLOAD_ACTION: StringToken<IUploadTask>;
|
|
16
|
+
export declare const UPLOAD_CONTINUE_ACTION: StringToken<IUploadTask>;
|
|
17
|
+
export declare const YASUO_ACTION: StringToken<IUploadTask>;
|
|
18
|
+
export interface IEffectTask {
|
|
19
|
+
id: number;
|
|
20
|
+
}
|
|
21
|
+
export declare const EFFECT_ACTION: StringToken<IEffectTask>;
|
|
22
|
+
export interface ICheckTask {
|
|
23
|
+
id: number;
|
|
24
|
+
to: string;
|
|
25
|
+
from: string;
|
|
26
|
+
}
|
|
27
|
+
export declare const CHECK_ACTION: StringToken<ICheckTask>;
|
|
28
|
+
export declare const CHECK_CONTINUE_ACTION: StringToken<ICheckTask>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CHECK_CONTINUE_ACTION = exports.CHECK_ACTION = exports.EFFECT_ACTION = exports.YASUO_ACTION = exports.UPLOAD_CONTINUE_ACTION = exports.UPLOAD_ACTION = exports.SCHEDULE_ACTION = exports.DOWNLOAD_CONTINUE_ACTION = exports.DOWNLOAD_ACTION = void 0;
|
|
4
|
+
exports.DOWNLOAD_ACTION = `@nger/fk-upload/download-task`;
|
|
5
|
+
exports.DOWNLOAD_CONTINUE_ACTION = `@nger/fk-upload/download-continue-task`;
|
|
6
|
+
exports.SCHEDULE_ACTION = `@nger/fk-upload/schedule-task`;
|
|
7
|
+
exports.UPLOAD_ACTION = `@nger/fk-upload/upload-task`;
|
|
8
|
+
exports.UPLOAD_CONTINUE_ACTION = `@nger/fk-upload/upload-continue-task`;
|
|
9
|
+
exports.YASUO_ACTION = `@nger/fk-upload/yasuo-task`;
|
|
10
|
+
exports.EFFECT_ACTION = `@nger/fk-upload/effect-task`;
|
|
11
|
+
exports.CHECK_ACTION = `@nger/fk-upload/check-task`;
|
|
12
|
+
exports.CHECK_CONTINUE_ACTION = `@nger/fk-upload/check-continue-task`;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { Task } from "@nger/rabbitmq";
|
|
2
1
|
import { Injector, Next } from "@nger/core";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
6
|
-
export declare class ScheduleTask extends Task {
|
|
2
|
+
import { Task } from "@nger/rabbitmq";
|
|
3
|
+
export declare class CheckTask extends Task {
|
|
7
4
|
constructor();
|
|
5
|
+
ids: Set<any>;
|
|
8
6
|
handle(injector: Injector, next?: Next): Promise<void>;
|
|
9
7
|
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CheckTask = void 0;
|
|
4
|
+
const effect_service_1 = require("./../services/effect.service");
|
|
5
|
+
const effect_task_1 = require("./../entities/effect-task");
|
|
6
|
+
const typeorm_1 = require("@nger/typeorm");
|
|
7
|
+
const rabbitmq_1 = require("@nger/rabbitmq");
|
|
8
|
+
const actions_1 = require("./actions");
|
|
9
|
+
const check_task_1 = require("../entities/check-task");
|
|
10
|
+
const schedule_1 = require("@nger/schedule");
|
|
11
|
+
const typeorm_2 = require("typeorm");
|
|
12
|
+
const w7_chat_topic_1 = require("../entities/w7_chat_topic");
|
|
13
|
+
const w7_uni_account_1 = require("../entities/w7_uni_account");
|
|
14
|
+
const download_task_1 = require("../entities/download-task");
|
|
15
|
+
const upload_task_1 = require("../entities/upload-task");
|
|
16
|
+
const date_fns_1 = require("date-fns");
|
|
17
|
+
const download_service_1 = require("../services/download.service");
|
|
18
|
+
const upload_service_1 = require("../services/upload.service");
|
|
19
|
+
class CheckTask extends rabbitmq_1.Task {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(actions_1.CHECK_ACTION);
|
|
22
|
+
this.count = 10;
|
|
23
|
+
}
|
|
24
|
+
ids = new Set();
|
|
25
|
+
async handle(injector, next) {
|
|
26
|
+
const db = injector.get(typeorm_1.Db);
|
|
27
|
+
const task = injector.get(rabbitmq_1.DATA);
|
|
28
|
+
const complete = injector.get(rabbitmq_1.COMPLETE);
|
|
29
|
+
const fail = injector.get(rabbitmq_1.FAIL);
|
|
30
|
+
const { id, from, to } = task;
|
|
31
|
+
const check = await db.manager.findOne(check_task_1.FkCheckTask, { where: { id: task.id }, relations: ['w7Account', 'w7Account.fkAccount', 'w7Account.w7'] });
|
|
32
|
+
if (!check) {
|
|
33
|
+
complete();
|
|
34
|
+
return next && next();
|
|
35
|
+
}
|
|
36
|
+
console.log({ from, to, id, status: check.status });
|
|
37
|
+
const manager = injector.get(rabbitmq_1.TaskManager);
|
|
38
|
+
if (this.ids.has(id)) {
|
|
39
|
+
complete();
|
|
40
|
+
return next && next();
|
|
41
|
+
}
|
|
42
|
+
if (check.status === '1') {
|
|
43
|
+
let job;
|
|
44
|
+
console.log(`work start ------- \n\n\n`);
|
|
45
|
+
this.ids.add(task.id);
|
|
46
|
+
const finish = async (reson) => {
|
|
47
|
+
this.ids.delete(check.id);
|
|
48
|
+
await db.manager.update(check_task_1.FkCheckTask, check.id, { status: `1`, desc: reson });
|
|
49
|
+
complete();
|
|
50
|
+
schedule.cancelJob(check.title);
|
|
51
|
+
};
|
|
52
|
+
const create = async () => {
|
|
53
|
+
const item = new rabbitmq_1.TaskEntity();
|
|
54
|
+
item.topic = actions_1.CHECK_ACTION;
|
|
55
|
+
item.data = task;
|
|
56
|
+
await manager.send(item);
|
|
57
|
+
};
|
|
58
|
+
await db.manager.update(check_task_1.FkCheckTask, check.id, { status: `3`, desc: `` });
|
|
59
|
+
const schedule = injector.get(schedule_1.ScheduleService);
|
|
60
|
+
const type = check.type;
|
|
61
|
+
const w7Account = check.w7Account;
|
|
62
|
+
if (!w7Account) {
|
|
63
|
+
await finish(`绑定错误`);
|
|
64
|
+
return next && next();
|
|
65
|
+
}
|
|
66
|
+
const w7 = w7Account.w7;
|
|
67
|
+
if (!w7) {
|
|
68
|
+
await finish(`绑定错误`);
|
|
69
|
+
return next && next();
|
|
70
|
+
}
|
|
71
|
+
const fkAccount = w7Account.fkAccount;
|
|
72
|
+
if (!fkAccount) {
|
|
73
|
+
await finish(`绑定错误`);
|
|
74
|
+
complete();
|
|
75
|
+
return next && next();
|
|
76
|
+
}
|
|
77
|
+
const ds = new typeorm_2.DataSource({
|
|
78
|
+
type: 'mysql',
|
|
79
|
+
host: w7.host,
|
|
80
|
+
port: w7.port,
|
|
81
|
+
password: w7.password,
|
|
82
|
+
database: w7.database,
|
|
83
|
+
username: w7.username,
|
|
84
|
+
synchronize: false,
|
|
85
|
+
entities: [
|
|
86
|
+
w7_chat_topic_1.W7ChatTopicEntity,
|
|
87
|
+
w7_uni_account_1.W7UniAccount
|
|
88
|
+
]
|
|
89
|
+
});
|
|
90
|
+
await ds.initialize();
|
|
91
|
+
const w7UniAccount = await ds.manager.findOne(w7_uni_account_1.W7UniAccount, { where: { name: w7Account.username } });
|
|
92
|
+
if (!w7UniAccount) {
|
|
93
|
+
await finish(`绑定错误`);
|
|
94
|
+
return next && next();
|
|
95
|
+
}
|
|
96
|
+
const uniacid = w7UniAccount.uniacid;
|
|
97
|
+
const id = check.id;
|
|
98
|
+
const count = check.count;
|
|
99
|
+
async function run(time) {
|
|
100
|
+
console.log(time);
|
|
101
|
+
const runtimeCheck = await db.manager.findOne(check_task_1.FkCheckTask, { where: { id } });
|
|
102
|
+
if (!runtimeCheck) {
|
|
103
|
+
await finish(``);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (runtimeCheck.status !== `3`) {
|
|
107
|
+
await finish(`人为关闭`);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (type === 'create_download') {
|
|
111
|
+
const now = new Date().getTime() - 1000 * 60 * 60 * 24 * 8;
|
|
112
|
+
(0, date_fns_1.format)(now, 'yyyy');
|
|
113
|
+
const _from = (0, date_fns_1.format)(now, 'yyyy-MM-dd HH:mm:ss');
|
|
114
|
+
const nowTime = Math.floor(now / 1000);
|
|
115
|
+
const downloads = await db.manager.find(download_task_1.FkDownloadTask, { where: { createDate: (0, typeorm_2.MoreThan)(_from) } });
|
|
116
|
+
console.log(downloads.length);
|
|
117
|
+
const ids = downloads.map(it => it.topicId).filter(it => !!it);
|
|
118
|
+
const where = { uniacid, createTime: (0, typeorm_2.MoreThan)(nowTime) };
|
|
119
|
+
if (ids.length > 0) {
|
|
120
|
+
where.id = (0, typeorm_2.Not)((0, typeorm_2.In)(ids));
|
|
121
|
+
}
|
|
122
|
+
const topics = await ds.manager.find(w7_chat_topic_1.W7ChatTopicEntity, { where });
|
|
123
|
+
topics.filter(it => it.thirdUrl && it.thirdUrl.length > 0 && it.thirdUrl.endsWith('.mp4') && it.topicStyle === 6)
|
|
124
|
+
.map(async (topic) => {
|
|
125
|
+
const downloadTask = new download_task_1.FkDownloadTask();
|
|
126
|
+
downloadTask.topicId = topic.id;
|
|
127
|
+
downloadTask.url = topic.thirdUrl;
|
|
128
|
+
downloadTask.w7AccountId = w7Account.id;
|
|
129
|
+
await db.manager.save(download_task_1.FkDownloadTask, downloadTask);
|
|
130
|
+
});
|
|
131
|
+
// start download
|
|
132
|
+
const one = await db.manager.findOne(download_task_1.FkDownloadTask, { where: { status: `1` } });
|
|
133
|
+
if (one) {
|
|
134
|
+
const downloadService = injector.get(download_service_1.DownloadService);
|
|
135
|
+
await downloadService.startDownload(one.id);
|
|
136
|
+
}
|
|
137
|
+
await db.manager.update(check_task_1.FkCheckTask, id, { count: count + 1 });
|
|
138
|
+
await finish(`执行完成`);
|
|
139
|
+
await create();
|
|
140
|
+
}
|
|
141
|
+
else if (type === 'create_upload') {
|
|
142
|
+
// create upload
|
|
143
|
+
const list = await db.manager.find(download_task_1.FkDownloadTask, { where: { status: '7', isUpload: false } });
|
|
144
|
+
list.map(async (download) => {
|
|
145
|
+
const uploadTask = new upload_task_1.FkUploadTask();
|
|
146
|
+
uploadTask.downloadTaskId = download.id;
|
|
147
|
+
db.tryRun(async (runner) => {
|
|
148
|
+
await runner.manager.save(upload_task_1.FkUploadTask, uploadTask);
|
|
149
|
+
await runner.manager.update(download_task_1.FkDownloadTask, download.id, { isUpload: true });
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
// start upload
|
|
153
|
+
const waitUploads = await db.manager.find(upload_task_1.FkUploadTask, { where: { status: '1' } });
|
|
154
|
+
const uploadService = injector.get(upload_service_1.UploadService);
|
|
155
|
+
if (waitUploads.length > 0) {
|
|
156
|
+
await uploadService.starts(waitUploads.map(it => it.id));
|
|
157
|
+
}
|
|
158
|
+
// downloadService.startDownload()
|
|
159
|
+
await db.manager.update(check_task_1.FkCheckTask, id, { count: count + 1 });
|
|
160
|
+
await finish(`执行完成`);
|
|
161
|
+
await create();
|
|
162
|
+
}
|
|
163
|
+
else if (type === 'create_effect') {
|
|
164
|
+
const list = await db.manager.find(upload_task_1.FkUploadTask, { where: { status: '7', isEffect: false } });
|
|
165
|
+
list.map(async (upload) => {
|
|
166
|
+
db.tryRun(async (runner) => {
|
|
167
|
+
const effectTask = new effect_task_1.FkEffectTask();
|
|
168
|
+
effectTask.uploadId = upload.id;
|
|
169
|
+
await runner.manager.save(effect_task_1.FkEffectTask, effectTask);
|
|
170
|
+
await runner.manager.update(upload_task_1.FkUploadTask, upload.id, { isEffect: true });
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
// start effect
|
|
174
|
+
const waitEffects = await db.manager.find(effect_task_1.FkEffectTask, { where: { status: '1' } });
|
|
175
|
+
const effectService = injector.get(effect_service_1.EffectService);
|
|
176
|
+
if (waitEffects.length > 0) {
|
|
177
|
+
await effectService.starts(waitEffects.map(it => it.id));
|
|
178
|
+
}
|
|
179
|
+
await db.manager.update(check_task_1.FkCheckTask, id, { count: count + 1 });
|
|
180
|
+
await finish(`执行完成`);
|
|
181
|
+
await create();
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
await finish(`未知任务`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
job = schedule.scheduleJob(check.title, check.time, async (time) => {
|
|
188
|
+
run(time);
|
|
189
|
+
/***
|
|
190
|
+
const manager = injector.get(TaskManager)
|
|
191
|
+
const i = new TaskEntity()
|
|
192
|
+
i.data = task;
|
|
193
|
+
i.topic = CHECK_ACTION;
|
|
194
|
+
await manager.send(i)
|
|
195
|
+
*/
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
await db.manager.update(check_task_1.FkCheckTask, task.id, { status: `1` });
|
|
200
|
+
complete();
|
|
201
|
+
return next && next();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.CheckTask = CheckTask;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DownloadContinueTask = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const rabbitmq_1 = require("@nger/rabbitmq");
|
|
6
|
+
const core_1 = require("@nger/core");
|
|
7
|
+
const actions_1 = require("./actions");
|
|
8
|
+
const request_1 = require("request");
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const md5_file_1 = tslib_1.__importDefault(require("md5-file"));
|
|
11
|
+
const typeorm_1 = require("@nger/typeorm");
|
|
12
|
+
const rxjs_1 = require("rxjs");
|
|
13
|
+
const operators_1 = require("rxjs/operators");
|
|
14
|
+
const download_task_1 = require("../entities/download-task");
|
|
15
|
+
const client_service_1 = require("../services/client.service");
|
|
16
|
+
const fk_account_1 = require("../entities/fk-account");
|
|
17
|
+
/**
|
|
18
|
+
* upload and task
|
|
19
|
+
*/
|
|
20
|
+
class DownloadContinueTask extends rabbitmq_1.Task {
|
|
21
|
+
constructor() {
|
|
22
|
+
super(actions_1.DOWNLOAD_CONTINUE_ACTION);
|
|
23
|
+
this.count = 1;
|
|
24
|
+
}
|
|
25
|
+
async handle(injector, next) {
|
|
26
|
+
const db = injector.get(typeorm_1.Db);
|
|
27
|
+
const task = injector.get(rabbitmq_1.DATA);
|
|
28
|
+
const complete = injector.get(rabbitmq_1.COMPLETE);
|
|
29
|
+
const fail = injector.get(rabbitmq_1.FAIL);
|
|
30
|
+
const download = await db.manager.findOne(download_task_1.FkDownloadTask, {
|
|
31
|
+
where: { id: task.id }, relations: [
|
|
32
|
+
'jiqun',
|
|
33
|
+
'w7Account',
|
|
34
|
+
`w7Account.fkAccount`
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
if (!download || (download && download.status !== `5`)) {
|
|
38
|
+
await complete();
|
|
39
|
+
return next && next();
|
|
40
|
+
}
|
|
41
|
+
if (!download.filename) {
|
|
42
|
+
await db.manager.update(download_task_1.FkDownloadTask, download.id, { status: `1`, desc: `文件名为空` });
|
|
43
|
+
await complete();
|
|
44
|
+
return next && next();
|
|
45
|
+
}
|
|
46
|
+
const client = injector.get(client_service_1.ClientService);
|
|
47
|
+
const clientId = client.createClientId();
|
|
48
|
+
if (download.jiqun && download.jiqun.clientId !== clientId) {
|
|
49
|
+
await fail();
|
|
50
|
+
return next && next();
|
|
51
|
+
}
|
|
52
|
+
const filePath = download.path;
|
|
53
|
+
await db.manager.update(download_task_1.FkDownloadTask, download.id, { status: '3', desc: '' });
|
|
54
|
+
const writeStream = (0, fs_1.createWriteStream)(filePath);
|
|
55
|
+
const url = download.url.startsWith('http') ? download.url : `https://${download.url}`;
|
|
56
|
+
const req = (0, request_1.get)(url, {
|
|
57
|
+
headers: {
|
|
58
|
+
'Content-Type': 'application/octet-stream'
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
let total = 0;
|
|
62
|
+
let length = 0;
|
|
63
|
+
const sub = new rxjs_1.Subject();
|
|
64
|
+
sub.pipe((0, operators_1.throttleTime)(400), (0, operators_1.switchMap)(async (size) => {
|
|
65
|
+
console.log(`download continue--${size}`);
|
|
66
|
+
const download = await db.manager.findOne(download_task_1.FkDownloadTask, { where: { id: task.id } });
|
|
67
|
+
if (!download || download.status !== '3') {
|
|
68
|
+
sub.error(new Error(`人为中断`));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
return db.manager.update(download_task_1.FkDownloadTask, download.id, { size: total, downloadSize: size });
|
|
72
|
+
})).subscribe({
|
|
73
|
+
next: () => { },
|
|
74
|
+
complete: async () => {
|
|
75
|
+
const fileMd5 = await (0, md5_file_1.default)(filePath);
|
|
76
|
+
await db.manager.update(download_task_1.FkDownloadTask, download.id, { md5: fileMd5, status: `7` });
|
|
77
|
+
await complete();
|
|
78
|
+
},
|
|
79
|
+
error: async (err) => {
|
|
80
|
+
req.abort();
|
|
81
|
+
await db.manager.update(download_task_1.FkDownloadTask, download.id, { isBigFile: true, status: '6', desc: err.message });
|
|
82
|
+
await fail();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
// get split size
|
|
86
|
+
const _defer = (0, core_1.defer)();
|
|
87
|
+
req.on('data', async (buf) => {
|
|
88
|
+
length += buf.length;
|
|
89
|
+
writeStream.write(buf, (err) => {
|
|
90
|
+
if (err) {
|
|
91
|
+
sub.error(err);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (total === length) {
|
|
95
|
+
_defer.resolve();
|
|
96
|
+
}
|
|
97
|
+
sub.next(length);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
req.on('end', async () => {
|
|
101
|
+
await _defer;
|
|
102
|
+
sub.complete();
|
|
103
|
+
});
|
|
104
|
+
req.on('error', async (err) => {
|
|
105
|
+
sub.error(err);
|
|
106
|
+
});
|
|
107
|
+
req.on('response', async (resp) => {
|
|
108
|
+
const headers = resp.headers;
|
|
109
|
+
total = Number(headers["content-length"]);
|
|
110
|
+
if (total > 1024 * 1024 * 1024) {
|
|
111
|
+
sub.error(new Error(`文件超出1G`));
|
|
112
|
+
await _defer;
|
|
113
|
+
sub.complete();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const useSize = download.w7Account.fkAccount.usedSize + total;
|
|
117
|
+
await db.manager.update(fk_account_1.FkAccount, download.w7Account.fkAccount.id, { usedSize: useSize });
|
|
118
|
+
if (download.w7Account.fkAccount.totalSize <= useSize + 1024) {
|
|
119
|
+
await db.manager.update(fk_account_1.FkAccount, download.w7Account.fkAccount.id, { warning: `2` });
|
|
120
|
+
req.abort();
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
if (next)
|
|
124
|
+
await next();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.DownloadContinueTask = DownloadContinueTask;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DownloadTask = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fk_account_1 = require("./../entities/fk-account");
|
|
6
|
+
const rabbitmq_1 = require("@nger/rabbitmq");
|
|
7
|
+
const core_1 = require("@nger/core");
|
|
8
|
+
const actions_1 = require("./actions");
|
|
9
|
+
const request_1 = require("request");
|
|
10
|
+
const fs_1 = require("fs");
|
|
11
|
+
const md5_file_1 = tslib_1.__importDefault(require("md5-file"));
|
|
12
|
+
const typeorm_1 = require("@nger/typeorm");
|
|
13
|
+
const rxjs_1 = require("rxjs");
|
|
14
|
+
const operators_1 = require("rxjs/operators");
|
|
15
|
+
const path_1 = require("path");
|
|
16
|
+
const download_task_1 = require("../entities/download-task");
|
|
17
|
+
const download_service_1 = require("../services/download.service");
|
|
18
|
+
const client_service_1 = require("../services/client.service");
|
|
19
|
+
const fk_jiqun_1 = require("../entities/fk-jiqun");
|
|
20
|
+
/**
|
|
21
|
+
* upload and task
|
|
22
|
+
*/
|
|
23
|
+
class DownloadTask extends rabbitmq_1.Task {
|
|
24
|
+
constructor() {
|
|
25
|
+
super(actions_1.DOWNLOAD_ACTION);
|
|
26
|
+
this.count = 1;
|
|
27
|
+
}
|
|
28
|
+
async handle(injector, next) {
|
|
29
|
+
const db = injector.get(typeorm_1.Db);
|
|
30
|
+
const task = injector.get(rabbitmq_1.DATA);
|
|
31
|
+
const complete = injector.get(rabbitmq_1.COMPLETE);
|
|
32
|
+
const fail = injector.get(rabbitmq_1.FAIL);
|
|
33
|
+
const download = await db.manager.findOne(download_task_1.FkDownloadTask, {
|
|
34
|
+
where: { id: task.id }, relations: [
|
|
35
|
+
'w7Account',
|
|
36
|
+
`w7Account.fkAccount`
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
if (!download || (download && download.status !== `2`)) {
|
|
40
|
+
await complete();
|
|
41
|
+
return next && next();
|
|
42
|
+
}
|
|
43
|
+
process.on('exit', async (code) => {
|
|
44
|
+
await db.manager.update(download_task_1.FkDownloadTask, task.id, { status: '6', desc: `异常退出:${code}` });
|
|
45
|
+
fail();
|
|
46
|
+
});
|
|
47
|
+
const downloadService = injector.get(download_service_1.DownloadService);
|
|
48
|
+
const dir = downloadService.createDir();
|
|
49
|
+
const filename = downloadService.createFilename(download.url);
|
|
50
|
+
const filePath = (0, path_1.join)(dir, filename);
|
|
51
|
+
const client = injector.get(client_service_1.ClientService);
|
|
52
|
+
const clientId = client.createClientId();
|
|
53
|
+
const jiqun = await db.manager.findOne(fk_jiqun_1.FkJiQun, { where: { clientId } });
|
|
54
|
+
await db.manager.update(download_task_1.FkDownloadTask, download.id, { status: '3', desc: '', path: filePath, filename, jiqunId: jiqun.id });
|
|
55
|
+
const writeStream = (0, fs_1.createWriteStream)(filePath);
|
|
56
|
+
const url = download.url.startsWith('http') ? download.url : `https://${download.url}`;
|
|
57
|
+
const req = (0, request_1.get)(url, {
|
|
58
|
+
headers: {
|
|
59
|
+
'Content-Type': 'application/octet-stream'
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
let total = 0;
|
|
63
|
+
let length = 0;
|
|
64
|
+
const sub = new rxjs_1.Subject();
|
|
65
|
+
sub.pipe((0, operators_1.throttleTime)(1000), (0, operators_1.switchMap)(async (size) => {
|
|
66
|
+
console.log(`download--${size}`);
|
|
67
|
+
const download = await db.manager.findOne(download_task_1.FkDownloadTask, { where: { id: task.id } });
|
|
68
|
+
if (!download || download.status !== '3') {
|
|
69
|
+
sub.error(new Error(`人为中断`));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
return db.manager.update(download_task_1.FkDownloadTask, download.id, { size: total, downloadSize: size });
|
|
73
|
+
})).subscribe({
|
|
74
|
+
next: () => { },
|
|
75
|
+
complete: async () => {
|
|
76
|
+
const fileMd5 = await (0, md5_file_1.default)(filePath);
|
|
77
|
+
await db.manager.update(download_task_1.FkDownloadTask, download.id, { downloadSize: total, md5: fileMd5, status: `7` });
|
|
78
|
+
await complete();
|
|
79
|
+
},
|
|
80
|
+
error: async (err) => {
|
|
81
|
+
req.abort();
|
|
82
|
+
await db.manager.update(download_task_1.FkDownloadTask, download.id, { status: '6', desc: err.message });
|
|
83
|
+
await fail();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// get split size
|
|
87
|
+
const _defer = (0, core_1.defer)();
|
|
88
|
+
req.on('data', async (buf) => {
|
|
89
|
+
length += buf.length;
|
|
90
|
+
writeStream.write(buf, (err) => {
|
|
91
|
+
if (err) {
|
|
92
|
+
sub.error(err);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (total === length) {
|
|
96
|
+
_defer.resolve();
|
|
97
|
+
}
|
|
98
|
+
sub.next(length);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
req.on('end', async () => {
|
|
102
|
+
await _defer;
|
|
103
|
+
sub.complete();
|
|
104
|
+
});
|
|
105
|
+
req.on('error', async (err) => {
|
|
106
|
+
sub.error(err);
|
|
107
|
+
});
|
|
108
|
+
req.on('response', async (resp) => {
|
|
109
|
+
const headers = resp.headers;
|
|
110
|
+
total = Number(headers["content-length"]);
|
|
111
|
+
if (total > 1024 * 1024 * 1024) {
|
|
112
|
+
sub.error(new Error(`文件超出1G`));
|
|
113
|
+
await _defer;
|
|
114
|
+
await db.manager.update(download_task_1.FkDownloadTask, download.id, { isBigFile: true, desc: '文件超出1G', status: `6` });
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const useSize = download.w7Account.fkAccount.usedSize + total;
|
|
118
|
+
await db.manager.update(fk_account_1.FkAccount, download.w7Account.fkAccount.id, { usedSize: useSize });
|
|
119
|
+
if (download.w7Account.fkAccount.totalSize <= useSize + 1024) {
|
|
120
|
+
await db.manager.update(fk_account_1.FkAccount, download.w7Account.fkAccount.id, { warning: `2` });
|
|
121
|
+
req.abort();
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
if (next)
|
|
125
|
+
await next();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.DownloadTask = DownloadTask;
|