@nger/fk-upload 1.0.161 → 1.0.165
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/{tests/test.d.ts → electon.d.ts} +0 -0
- package/dist/electon.js +70 -0
- package/dist/templates/add-fk-login.js +1 -3
- package/dist/templates/add-task.d.ts +1 -1
- package/dist/templates/add-task.js +11 -5
- package/dist/templates/code.js +2 -1
- package/dist/templates/component.js +1 -1
- package/dist/templates/help.js +0 -1
- package/dist/templates/setting.d.ts +1 -3
- package/dist/templates/setting.js +2 -5
- package/dist/templates/task-manage.d.ts +5 -1
- package/dist/templates/task-manage.js +71 -34
- package/dist/templates/tasks/upload-task.js +11 -6
- package/electron/.env +32 -0
- package/electron/package.json +31 -0
- package/electron/pnpm-lock.yaml +2888 -0
- package/env.env +30 -0
- package/package.json +14 -5
- package/pnpm-lock.yaml +1847 -103
- package/dist/entities/fk-login-account.entity.d.ts +0 -6
- package/dist/entities/fk-login-account.entity.js +0 -47
- package/dist/fk-upload.controller.d.ts +0 -28
- package/dist/fk-upload.controller.js +0 -271
- package/dist/fk-v2.service.d.ts +0 -29
- package/dist/fk-v2.service.js +0 -152
- package/dist/fk.service.d.ts +0 -17
- package/dist/fk.service.js +0 -89
- package/dist/templates/account-manage.d.ts +0 -3
- package/dist/templates/account-manage.js +0 -27
- package/dist/templates/add-account.d.ts +0 -0
- package/dist/templates/add-account.js +0 -1
- package/dist/templates/create-download-task.d.ts +0 -0
- package/dist/templates/create-download-task.js +0 -1
- package/dist/templates/download-task.d.ts +0 -10
- package/dist/templates/download-task.js +0 -47
- package/dist/templates/login.service.d.ts +0 -2
- package/dist/templates/login.service.js +0 -16
- package/dist/templates/receive-shedule-task.d.ts +0 -14
- package/dist/templates/receive-shedule-task.js +0 -64
- package/dist/templates/relogin.d.ts +0 -5
- package/dist/templates/relogin.js +0 -25
- package/dist/templates/task-types.d.ts +0 -34
- package/dist/templates/task-types.js +0 -2
- package/dist/templates/task.service.d.ts +0 -0
- package/dist/templates/task.service.js +0 -407
- package/dist/templates/tasks/create-download-task.d.ts +0 -12
- package/dist/templates/tasks/create-download-task.js +0 -65
- package/dist/templates/tasks/index.d.ts +0 -0
- package/dist/templates/tasks/index.js +0 -1
- package/dist/templates/tasks/receive-shedule-task.d.ts +0 -16
- package/dist/templates/tasks/receive-shedule-task.js +0 -66
- package/dist/templates/upload.service.d.ts +0 -0
- package/dist/templates/upload.service.js +0 -1
- package/dist/tests/test.js +0 -101
File without changes
|
package/dist/electon.js
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.AppModule = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const electron_1 = require("electron");
|
6
|
+
const path_1 = require("path");
|
7
|
+
require("reflect-metadata");
|
8
|
+
require('dotenv').config({ path: (0, path_1.join)(__dirname, '../env.env') });
|
9
|
+
const core_1 = require("@nger/core");
|
10
|
+
const fk_upload_module_1 = require("./fk-upload.module");
|
11
|
+
const http_1 = require("@nger/http");
|
12
|
+
const typeorm_1 = require("@nger/typeorm");
|
13
|
+
const api_1 = require("@nger/api");
|
14
|
+
const utils_1 = require("@nger/utils");
|
15
|
+
const ws_1 = require("@nger/ws");
|
16
|
+
const redis_1 = require("@nger/redis");
|
17
|
+
const rabbitmq_1 = require("@nger/rabbitmq");
|
18
|
+
const schedule_1 = require("@nger/schedule");
|
19
|
+
const w7_1 = require("@nger/w7");
|
20
|
+
let AppModule = class AppModule {
|
21
|
+
};
|
22
|
+
AppModule = tslib_1.__decorate([
|
23
|
+
(0, core_1.Module)({
|
24
|
+
providers: [{
|
25
|
+
provide: core_1.APP_ROOT,
|
26
|
+
useValue: process.cwd()
|
27
|
+
}],
|
28
|
+
imports: [
|
29
|
+
w7_1.W7Module,
|
30
|
+
fk_upload_module_1.FkUploadModule,
|
31
|
+
http_1.HttpModule.forEnv(),
|
32
|
+
typeorm_1.TypeormModule.forEnv(),
|
33
|
+
ws_1.WsModule.forEnv(),
|
34
|
+
redis_1.RedisModule.forEnv(),
|
35
|
+
rabbitmq_1.RabbitMqModule.forEnv(),
|
36
|
+
api_1.ApiModule,
|
37
|
+
utils_1.UtilsModule,
|
38
|
+
schedule_1.ScheduleModule
|
39
|
+
],
|
40
|
+
controllers: []
|
41
|
+
})
|
42
|
+
], AppModule);
|
43
|
+
exports.AppModule = AppModule;
|
44
|
+
async function createWindow() {
|
45
|
+
const win = new electron_1.BrowserWindow({
|
46
|
+
width: 1024,
|
47
|
+
height: 768,
|
48
|
+
closable: true,
|
49
|
+
title: 'FkUpload'
|
50
|
+
});
|
51
|
+
const injector = await (0, core_1.platformCore)().bootstrap(AppModule);
|
52
|
+
injector.use([{
|
53
|
+
provide: electron_1.BrowserWindow,
|
54
|
+
useValue: win
|
55
|
+
}], 'root');
|
56
|
+
win.webContents.closeDevTools();
|
57
|
+
electron_1.Menu.setApplicationMenu(null);
|
58
|
+
setTimeout(() => {
|
59
|
+
win.loadURL('http://localhost:8081/@nger/fk-upload/help');
|
60
|
+
}, 400);
|
61
|
+
}
|
62
|
+
//
|
63
|
+
electron_1.app.whenReady().then(() => {
|
64
|
+
createWindow();
|
65
|
+
electron_1.app.on('activate', () => {
|
66
|
+
if (electron_1.BrowserWindow.getAllWindows().length === 0) {
|
67
|
+
createWindow();
|
68
|
+
}
|
69
|
+
});
|
70
|
+
});
|
@@ -47,7 +47,6 @@ let AddFkLoginController = class AddFkLoginController {
|
|
47
47
|
fkLogin = item;
|
48
48
|
}
|
49
49
|
return react_1.default.createElement(component_1.Nav, { active: 1 },
|
50
|
-
react_1.default.createElement("link", { href: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css", rel: "stylesheet" }),
|
51
50
|
react_1.default.createElement("form", { action: '', method: 'post', encType: 'application/x-www-form-urlencoded' },
|
52
51
|
react_1.default.createElement("div", { className: "form-group" },
|
53
52
|
react_1.default.createElement("label", { htmlFor: "username" }, "\u7528\u6237\u540D"),
|
@@ -60,8 +59,7 @@ let AddFkLoginController = class AddFkLoginController {
|
|
60
59
|
react_1.default.createElement("input", { id: "w7Username", name: "w7Username", onChange: e => { }, className: "form-control", type: "text", value: fkLogin.w7Username })),
|
61
60
|
react_1.default.createElement("div", { className: "for-group" },
|
62
61
|
react_1.default.createElement("button", { type: "submit", className: 'btn btn-primary' }, "\u6DFB\u52A0"),
|
63
|
-
react_1.default.createElement("button", { type: "reset", className: 'btn' }, "\u91CD\u7F6E")
|
64
|
-
react_1.default.createElement("a", { className: "btn btn-link", href: "/@nger/fk-upload/help" }, "\u9996\u9875"))));
|
62
|
+
react_1.default.createElement("button", { type: "reset", className: 'btn' }, "\u91CD\u7F6E"))));
|
65
63
|
}
|
66
64
|
};
|
67
65
|
tslib_1.__decorate([
|
@@ -23,7 +23,8 @@ let AddTaskController = class AddTaskController {
|
|
23
23
|
const { url, we7Username } = post;
|
24
24
|
const loginEntity = await this.db.manager.findOne(entities_1.FkLoginEntity, { where: { w7Username: we7Username } });
|
25
25
|
if (loginEntity) {
|
26
|
-
const
|
26
|
+
const topicId = Number(post.topicId);
|
27
|
+
const task = await this.taskService.createDownLoadTask(url, loginEntity.fkLoginId, topicId);
|
27
28
|
const download = task.data;
|
28
29
|
const fkdownloadTask = new entities_1.FkDownloadTaskEntity();
|
29
30
|
fkdownloadTask.filename = download.filename;
|
@@ -37,15 +38,19 @@ let AddTaskController = class AddTaskController {
|
|
37
38
|
ctx.redirect('/@nger/fk-upload/task-manage');
|
38
39
|
return;
|
39
40
|
}
|
40
|
-
addTask() {
|
41
|
+
addTask(query) {
|
42
|
+
const data = query || {};
|
41
43
|
return react_1.default.createElement(component_1.Nav, { active: 3 },
|
42
44
|
react_1.default.createElement("form", { action: "/@nger/fk-upload/add-task", method: "post" },
|
43
45
|
react_1.default.createElement("div", { className: "form-group" },
|
44
46
|
react_1.default.createElement("label", { htmlFor: "url" }, "\u8FDE\u63A5"),
|
45
|
-
react_1.default.createElement("input", { type: "text", name: "url", className: 'form-control', id: "url" })),
|
47
|
+
react_1.default.createElement("input", { type: "text", onChange: e => { }, name: "url", value: data.value, className: 'form-control', id: "url" })),
|
46
48
|
react_1.default.createElement("div", { className: "form-group" },
|
47
49
|
react_1.default.createElement("label", { htmlFor: "w7Username" }, "\u5FAE\u64CE\u8D26\u6237"),
|
48
|
-
react_1.default.createElement("input", { type: "text", name: "we7Username", className: 'form-control', id: "w7Username" })),
|
50
|
+
react_1.default.createElement("input", { type: "text", onChange: e => { }, name: "we7Username", value: data.username, className: 'form-control', id: "w7Username" })),
|
51
|
+
react_1.default.createElement("div", { className: "form-group" },
|
52
|
+
react_1.default.createElement("label", { htmlFor: "w7Username" }, "topicId"),
|
53
|
+
react_1.default.createElement("input", { type: "text", onChange: e => { }, name: "topicId", value: "{data.id}", className: 'form-control', id: "topicId" })),
|
49
54
|
react_1.default.createElement("div", { className: "form-group" },
|
50
55
|
react_1.default.createElement("button", { type: "submit", className: "btn btn-primary" }, "\u63D0\u4EA4"),
|
51
56
|
react_1.default.createElement("button", { type: "reset", className: "btn" }, "\u91CD\u7F6E"))));
|
@@ -61,8 +66,9 @@ tslib_1.__decorate([
|
|
61
66
|
], AddTaskController.prototype, "postAddTask", null);
|
62
67
|
tslib_1.__decorate([
|
63
68
|
(0, http_1.Get)('add-task'),
|
69
|
+
tslib_1.__param(0, (0, http_1.Query)()),
|
64
70
|
tslib_1.__metadata("design:type", Function),
|
65
|
-
tslib_1.__metadata("design:paramtypes", []),
|
71
|
+
tslib_1.__metadata("design:paramtypes", [Object]),
|
66
72
|
tslib_1.__metadata("design:returntype", void 0)
|
67
73
|
], AddTaskController.prototype, "addTask", null);
|
68
74
|
AddTaskController = tslib_1.__decorate([
|
package/dist/templates/code.js
CHANGED
@@ -21,7 +21,7 @@ function Nav(props) {
|
|
21
21
|
title: '设置'
|
22
22
|
}];
|
23
23
|
return react_1.default.createElement("div", null,
|
24
|
-
react_1.default.createElement("link", { href: "https://cdn.
|
24
|
+
react_1.default.createElement("link", { href: "https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.1/css/bootstrap.min.css", rel: "stylesheet" }),
|
25
25
|
react_1.default.createElement("nav", { className: "navbar navbar-expand-lg navbar-dark bg-primary" },
|
26
26
|
react_1.default.createElement("div", { className: "collapse navbar-collapse show" },
|
27
27
|
react_1.default.createElement("ul", { className: "navbar-nav mr-auto", style: { display: "flex", flexDirection: 'row' } },
|
package/dist/templates/help.js
CHANGED
@@ -16,7 +16,6 @@ let HelpController = class HelpController {
|
|
16
16
|
async help() {
|
17
17
|
const list = await this.db.manager.find(fk_login_entity_1.FkLoginEntity, { where: {} });
|
18
18
|
return react_1.default.createElement(component_1.Nav, { active: 0 },
|
19
|
-
react_1.default.createElement("link", { href: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css", rel: "stylesheet" }),
|
20
19
|
react_1.default.createElement("table", { className: 'table' },
|
21
20
|
react_1.default.createElement("thead", null,
|
22
21
|
react_1.default.createElement("tr", null,
|
@@ -1,15 +1,13 @@
|
|
1
1
|
/// <reference types="react" />
|
2
2
|
import { TaskService } from './tasks/task.service';
|
3
|
-
import { Client } from '@nger/redis';
|
4
3
|
import { Context } from 'koa';
|
5
4
|
import { TaskManager } from '@nger/rabbitmq';
|
6
5
|
import { Db } from '@nger/typeorm';
|
7
6
|
export declare class SettingController {
|
8
7
|
private task;
|
9
|
-
private redis;
|
10
8
|
private manager;
|
11
9
|
private db;
|
12
|
-
constructor(task: TaskService,
|
10
|
+
constructor(task: TaskService, manager: TaskManager, db: Db);
|
13
11
|
saveSetting(body: any, taskId: number, ctx: Context): Promise<void>;
|
14
12
|
setting(): Promise<JSX.Element>;
|
15
13
|
}
|
@@ -7,18 +7,15 @@ const http_1 = require("@nger/http");
|
|
7
7
|
const react_1 = tslib_1.__importDefault(require("react"));
|
8
8
|
const component_1 = require("./component");
|
9
9
|
const task_service_1 = require("./tasks/task.service");
|
10
|
-
const redis_1 = require("@nger/redis");
|
11
10
|
const actions_1 = require("./tasks/actions");
|
12
11
|
const rabbitmq_1 = require("@nger/rabbitmq");
|
13
12
|
const typeorm_1 = require("@nger/typeorm");
|
14
13
|
let SettingController = class SettingController {
|
15
14
|
task;
|
16
|
-
redis;
|
17
15
|
manager;
|
18
16
|
db;
|
19
|
-
constructor(task,
|
17
|
+
constructor(task, manager, db) {
|
20
18
|
this.task = task;
|
21
|
-
this.redis = redis;
|
22
19
|
this.manager = manager;
|
23
20
|
this.db = db;
|
24
21
|
}
|
@@ -63,6 +60,6 @@ tslib_1.__decorate([
|
|
63
60
|
], SettingController.prototype, "setting", null);
|
64
61
|
SettingController = tslib_1.__decorate([
|
65
62
|
(0, core_1.Controller)(`@nger/fk-upload`),
|
66
|
-
tslib_1.__metadata("design:paramtypes", [task_service_1.TaskService,
|
63
|
+
tslib_1.__metadata("design:paramtypes", [task_service_1.TaskService, rabbitmq_1.TaskManager, typeorm_1.Db])
|
67
64
|
], SettingController);
|
68
65
|
exports.SettingController = SettingController;
|
@@ -2,15 +2,19 @@
|
|
2
2
|
import { Config } from '@nger/core';
|
3
3
|
import { Db } from '@nger/typeorm';
|
4
4
|
import { Context } from 'koa';
|
5
|
+
import { BrowserWindow } from 'electron';
|
5
6
|
export declare class TaskManageController {
|
6
7
|
private db;
|
7
8
|
private config;
|
8
|
-
|
9
|
+
private win;
|
10
|
+
constructor(db: Db, config: Config, win: BrowserWindow);
|
9
11
|
toUrl(query: any): string;
|
10
12
|
createPages(total: number, query: any, page: number): {
|
11
13
|
index: number;
|
12
14
|
link: string;
|
15
|
+
cls: string;
|
13
16
|
}[];
|
14
17
|
taskManage(query: any): Promise<JSX.Element>;
|
18
|
+
downloadFile(url: string, back: string, ctx: Context): void;
|
15
19
|
staticTaskManage(ctx: Context): any;
|
16
20
|
}
|
@@ -24,12 +24,15 @@ function getStatusTitle(status) {
|
|
24
24
|
return 'unknow';
|
25
25
|
}
|
26
26
|
}
|
27
|
+
const electron_1 = require("electron");
|
27
28
|
let TaskManageController = class TaskManageController {
|
28
29
|
db;
|
29
30
|
config;
|
30
|
-
|
31
|
+
win;
|
32
|
+
constructor(db, config, win) {
|
31
33
|
this.db = db;
|
32
34
|
this.config = config;
|
35
|
+
this.win = win;
|
33
36
|
}
|
34
37
|
toUrl(query) {
|
35
38
|
return Object.keys(query).map(key => `${key}=${decodeURIComponent(query[key])}`).join('&');
|
@@ -45,13 +48,26 @@ let TaskManageController = class TaskManageController {
|
|
45
48
|
max += -min;
|
46
49
|
}
|
47
50
|
if (d > min && d < max) {
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
if (d === page) {
|
52
|
+
list.push({
|
53
|
+
index: d,
|
54
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({
|
55
|
+
...query,
|
56
|
+
page: d
|
57
|
+
})}`,
|
58
|
+
cls: `page-item active`
|
59
|
+
});
|
60
|
+
}
|
61
|
+
else {
|
62
|
+
list.push({
|
63
|
+
index: d,
|
64
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({
|
65
|
+
...query,
|
66
|
+
page: d
|
67
|
+
})}`,
|
68
|
+
cls: `page-item`
|
69
|
+
});
|
70
|
+
}
|
55
71
|
}
|
56
72
|
}
|
57
73
|
return list;
|
@@ -98,37 +114,37 @@ let TaskManageController = class TaskManageController {
|
|
98
114
|
const nextUrl = `/@nger/fk-upload/task-manage?${this.toUrl(next)}`;
|
99
115
|
const pages = this.createPages(totalPage, query, page);
|
100
116
|
const bigNav = [{
|
101
|
-
title: '
|
102
|
-
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, isBigFile: -1 })}`,
|
117
|
+
title: '不限',
|
118
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, isBigFile: -1, page: 1 })}`,
|
103
119
|
key: -1
|
104
120
|
}, {
|
105
|
-
title: '
|
106
|
-
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, isBigFile: 1 })}`,
|
121
|
+
title: '大于1G',
|
122
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, isBigFile: 1, page: 1 })}`,
|
107
123
|
key: 1
|
108
124
|
}, {
|
109
|
-
title: '
|
110
|
-
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, isBigFile: 0 })}`,
|
125
|
+
title: '小于1G',
|
126
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, isBigFile: 0, page: 1 })}`,
|
111
127
|
key: 0
|
112
128
|
}];
|
113
129
|
const navs = [{
|
114
|
-
title: '
|
115
|
-
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: -1 })}`,
|
130
|
+
title: '不限',
|
131
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: -1, page: 1 })}`,
|
116
132
|
key: -1
|
117
133
|
}, {
|
118
|
-
title: '
|
119
|
-
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: 0 })}`,
|
134
|
+
title: '待下载',
|
135
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: 0, page: 1 })}`,
|
120
136
|
key: 0
|
121
137
|
}, {
|
122
|
-
title: '
|
123
|
-
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: 1 })}`,
|
138
|
+
title: '待上传',
|
139
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: 1, page: 1 })}`,
|
124
140
|
key: 1
|
125
141
|
}, {
|
126
|
-
title: '
|
127
|
-
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: 2 })}`,
|
142
|
+
title: '待生效',
|
143
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: 2, page: 1 })}`,
|
128
144
|
key: 2
|
129
145
|
}, {
|
130
|
-
title: '
|
131
|
-
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: 3 })}`,
|
146
|
+
title: '已完成',
|
147
|
+
link: `/@nger/fk-upload/task-manage?${this.toUrl({ ...query, status: 3, page: 1 })}`,
|
132
148
|
key: 3
|
133
149
|
}];
|
134
150
|
return react_1.default.createElement(component_1.Nav, { active: 2 },
|
@@ -158,32 +174,44 @@ let TaskManageController = class TaskManageController {
|
|
158
174
|
react_1.default.createElement("tr", null,
|
159
175
|
react_1.default.createElement("td", { width: '180px' }, "\u6587\u4EF6\u540D"),
|
160
176
|
react_1.default.createElement("td", null, "\u72B6\u6001"),
|
161
|
-
react_1.default.createElement("td", null, "
|
162
|
-
react_1.default.createElement("td", null, "
|
163
|
-
react_1.default.createElement("td",
|
164
|
-
react_1.default.createElement("td", null, "operation"))),
|
177
|
+
react_1.default.createElement("td", null, "\u5927\u5C0F"),
|
178
|
+
react_1.default.createElement("td", null, "\u5927\u4E8E1G"),
|
179
|
+
react_1.default.createElement("td", null, "\u64CD\u4F5C"))),
|
165
180
|
react_1.default.createElement("tbody", null, tasks.map((task, key) => {
|
181
|
+
const uploadUrl = task.uploadUrl;
|
182
|
+
// https://29294142.s21v.faiusr.com/58/ABUIABA6GAAg3tiOlAYogPvErAY.mp4
|
183
|
+
// https://29294142.s21d.faiusrd.com/58/ABUIABA6GAAgzrCRlAYo_J_Aag.mp4
|
184
|
+
// https://29294142.s21d.faiusrd.com/0/ABUIABA6GAAg3tiOlAYogPvErAY.mp4?f=mAVUREPTVCTkBF%2BzQR2oy8h6lZw4.mp4&
|
185
|
+
// let downloadurl = uploadUrl.replace('s21v.faiusr/58', 's21d.faiusrd/0')
|
186
|
+
// downloadurl += `?f=${task.filename}&`
|
187
|
+
const url = `/@nger/fk-upload/download-file?url=${task.uploadUrl}&back=/@nger/fk-upload/task-manage?${this.toUrl(query)}`;
|
166
188
|
return react_1.default.createElement("tr", { key: key },
|
167
189
|
react_1.default.createElement("td", null, task.filename),
|
168
190
|
react_1.default.createElement("td", null, getStatusTitle(task.status)),
|
169
191
|
react_1.default.createElement("td", null,
|
170
192
|
Math.ceil(100 * task.totalSize / (1024 * 1024 * 1024)) / 100,
|
171
193
|
"G"),
|
172
|
-
react_1.default.createElement("td", null, task.isBigFile ? '
|
173
|
-
react_1.default.createElement("td",
|
174
|
-
react_1.default.createElement("
|
175
|
-
|
194
|
+
react_1.default.createElement("td", null, task.isBigFile ? '是' : '否'),
|
195
|
+
react_1.default.createElement("td", null,
|
196
|
+
react_1.default.createElement("input", { type: "hidden", id: task.filename + '-copy', onChange: () => { }, value: task.uploadUrl }),
|
197
|
+
react_1.default.createElement("a", { href: url }, "\u4E0B\u8F7D")));
|
176
198
|
}))),
|
177
199
|
react_1.default.createElement("nav", null,
|
178
200
|
react_1.default.createElement("ul", { className: "pagination" },
|
179
201
|
react_1.default.createElement("li", { className: "page-item" },
|
180
202
|
react_1.default.createElement("a", { className: "page-link", href: preUrl }, "Previous")),
|
181
|
-
pages.map(page => react_1.default.createElement("li", { className:
|
203
|
+
pages.map(page => react_1.default.createElement("li", { className: page.cls },
|
182
204
|
react_1.default.createElement("a", { className: "page-link", href: page.link }, page.index))),
|
183
205
|
react_1.default.createElement("li", { className: "page-item" },
|
184
206
|
react_1.default.createElement("a", { className: "page-link", href: nextUrl }, "Next")))),
|
185
207
|
react_1.default.createElement("script", { src: "/@nger/fk-upload/static/task-manage.js?t=" + new Date().getTime() }));
|
186
208
|
}
|
209
|
+
downloadFile(url, back, ctx) {
|
210
|
+
if (this.win) {
|
211
|
+
this.win.webContents.downloadURL(url);
|
212
|
+
}
|
213
|
+
ctx.redirect(back);
|
214
|
+
}
|
187
215
|
staticTaskManage(ctx) {
|
188
216
|
try {
|
189
217
|
ctx.type = 'js';
|
@@ -202,6 +230,15 @@ tslib_1.__decorate([
|
|
202
230
|
tslib_1.__metadata("design:paramtypes", [Object]),
|
203
231
|
tslib_1.__metadata("design:returntype", Promise)
|
204
232
|
], TaskManageController.prototype, "taskManage", null);
|
233
|
+
tslib_1.__decorate([
|
234
|
+
(0, http_1.Get)('download-file'),
|
235
|
+
tslib_1.__param(0, (0, http_1.Query)('url')),
|
236
|
+
tslib_1.__param(1, (0, http_1.Query)('back')),
|
237
|
+
tslib_1.__param(2, (0, core_1.Inject)(http_1.CONTEXT)),
|
238
|
+
tslib_1.__metadata("design:type", Function),
|
239
|
+
tslib_1.__metadata("design:paramtypes", [String, String, Object]),
|
240
|
+
tslib_1.__metadata("design:returntype", void 0)
|
241
|
+
], TaskManageController.prototype, "downloadFile", null);
|
205
242
|
tslib_1.__decorate([
|
206
243
|
(0, http_1.Get)('static/task-manage.js'),
|
207
244
|
tslib_1.__param(0, (0, core_1.Inject)(http_1.CONTEXT)),
|
@@ -211,6 +248,6 @@ tslib_1.__decorate([
|
|
211
248
|
], TaskManageController.prototype, "staticTaskManage", null);
|
212
249
|
TaskManageController = tslib_1.__decorate([
|
213
250
|
(0, core_1.Controller)(`@nger/fk-upload`),
|
214
|
-
tslib_1.__metadata("design:paramtypes", [typeorm_1.Db, core_1.Config])
|
251
|
+
tslib_1.__metadata("design:paramtypes", [typeorm_1.Db, core_1.Config, electron_1.BrowserWindow])
|
215
252
|
], TaskManageController);
|
216
253
|
exports.TaskManageController = TaskManageController;
|
@@ -25,11 +25,11 @@ class UploadTask extends rabbitmq_1.Task {
|
|
25
25
|
async handle(injector, next) {
|
26
26
|
const task = injector.get(rabbitmq_1.DATA);
|
27
27
|
const complete = injector.get(rabbitmq_1.COMPLETE);
|
28
|
-
const fail = injector.get(rabbitmq_1.FAIL);
|
29
28
|
const fk = injector.get(fk_service_1.FkService);
|
30
29
|
const taskService = injector.get(task_service_1.TaskService);
|
31
30
|
const manager = injector.get(rabbitmq_1.TaskManager);
|
32
31
|
const db = injector.get(typeorm_1.Db);
|
32
|
+
const fail = injector.get(rabbitmq_1.FAIL);
|
33
33
|
// check file size
|
34
34
|
const old = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: task.filename } });
|
35
35
|
// not exist
|
@@ -37,6 +37,9 @@ class UploadTask extends rabbitmq_1.Task {
|
|
37
37
|
await complete();
|
38
38
|
return next && next();
|
39
39
|
}
|
40
|
+
if (!(0, fs_1.existsSync)(task.path)) {
|
41
|
+
throw new Error(`file ${task.path} not found`);
|
42
|
+
}
|
40
43
|
// > 1G give up
|
41
44
|
if (task.total >= 1024 * 1024 * 1024) {
|
42
45
|
await complete();
|
@@ -45,11 +48,13 @@ class UploadTask extends rabbitmq_1.Task {
|
|
45
48
|
const cloudSize = await fk.getSize(old.url);
|
46
49
|
const localSize = fk.getLocalSize(old.path);
|
47
50
|
if (cloudSize != localSize) {
|
48
|
-
|
49
|
-
|
50
|
-
await manager.
|
51
|
-
await
|
52
|
-
|
51
|
+
// not my task
|
52
|
+
throw new Error(`not mine task`);
|
53
|
+
// await db.manager.update(FkDownloadTaskEntity, task.filename, { status: 0 })
|
54
|
+
// const download = await taskService.createDownLoadTask(old.url, old.loginId, old.topicId);
|
55
|
+
// await manager.send(download);
|
56
|
+
// await complete();
|
57
|
+
// return next && next();
|
53
58
|
}
|
54
59
|
console.log(`receive upload task`, { filename: task.filename, status: old.status });
|
55
60
|
if (old.status == 1) {
|
package/electron/.env
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
DB_TYPE=mysql
|
6
|
+
DB_HOST=sh-cdb-36cco5yk.sql.tencentcdb.com
|
7
|
+
DB_PORT=59440
|
8
|
+
DB_USERNAME=wx_jidujiaowang
|
9
|
+
DB_PASSWORD=S4Gx3ScmdYf23Gbb
|
10
|
+
DB_DATABASE=wx_jidujiaowang
|
11
|
+
DB_SYNCHRONIZE=true
|
12
|
+
|
13
|
+
REDIS_HOST=111.229.255.176
|
14
|
+
REDIS_PORT=6379
|
15
|
+
REDIS_PASS=123qwe
|
16
|
+
|
17
|
+
HTTP_HOST=0.0.0.0
|
18
|
+
HTTP_PORT=8081
|
19
|
+
|
20
|
+
WS_HOST=0.0.0.0
|
21
|
+
WS_PORT=8082
|
22
|
+
|
23
|
+
RABBITMQ_HOST=111.229.255.176
|
24
|
+
RABBITMQ_PORT=5672
|
25
|
+
RABBITMQ_USERNAME=imeepos
|
26
|
+
RABBITMQ_PASSWORD=123qwe
|
27
|
+
|
28
|
+
CLOUD_URL=http://localhost:8081
|
29
|
+
HOST_URL=http://111.229.255.176:8081
|
30
|
+
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
{
|
2
|
+
"name": "@nger/fk-upload-electron",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"description": "nger fk upload",
|
5
|
+
"main": "node_modules/@nger/fk-upload/dist/electon.js",
|
6
|
+
"scripts": {
|
7
|
+
"dist": "electron-builder --win --ia32",
|
8
|
+
"postinstall": "electron-builder install-app-deps"
|
9
|
+
},
|
10
|
+
"author": "imeepos",
|
11
|
+
"license": "ISC",
|
12
|
+
"dependencies": {
|
13
|
+
"@nger/core": "1.10.25",
|
14
|
+
"@nger/fk-upload": "^1.0.163",
|
15
|
+
"@nger/http": "^4.0.47",
|
16
|
+
"@nger/rabbitmq": "^1.0.27",
|
17
|
+
"@nger/redis": "^1.0.3",
|
18
|
+
"@nger/schedule": "^1.0.2",
|
19
|
+
"@nger/typeorm": "^1.0.9",
|
20
|
+
"@nger/utils": "^1.0.3",
|
21
|
+
"@nger/w7": "^1.0.5",
|
22
|
+
"@nger/ws": "^1.0.10",
|
23
|
+
"dotenv": "^16.0.1",
|
24
|
+
"pm2": "^5.2.0",
|
25
|
+
"reflect-metadata": "^0.1.13"
|
26
|
+
},
|
27
|
+
"devDependencies": {
|
28
|
+
"electron-builder": "^23.0.3",
|
29
|
+
"electron": "^18.2.3"
|
30
|
+
}
|
31
|
+
}
|