Skip to content

Commit d9f2440

Browse files
authored
Merge pull request #119 from qiniu/refactoring/upload-ipc-single-process
Refactoring/upload ipc single process
2 parents 6060e75 + 6614a88 commit d9f2440

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2233
-1381
lines changed

package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "kodo-browser",
3-
"version": "1.0.17",
3+
"version": "1.0.18",
44
"license": "Apache-2.0",
55
"author": {
66
"name": "Rong Zhou",
@@ -17,7 +17,7 @@
1717
"dev": "./node_modules/.bin/webpack --env development -c ./webpack/webpack.config.js && ./node_modules/.bin/npm-run-all --parallel watch dev:run",
1818
"dev:run": "./node_modules/.bin/cross-env NODE_ENV=development electron ./dist/main/main-bundle.js",
1919
"prod": "./node_modules/.bin/cross-env NODE_ENV=production electron ./dist",
20-
"watch": "./node_modules/.bin/webpack --env development -c ./webpack/webpack-renderer.config.js -w",
20+
"watch": "./node_modules/.bin/webpack --env development -c ./webpack/webpack.config.js -w",
2121
"build": "./node_modules/.bin/webpack --env production --env sourcemap -c ./webpack/webpack.config.js",
2222
"build:mac": "./node_modules/.bin/gulp mac",
2323
"pkg:mac": "./node_modules/.bin/gulp maczip",
@@ -55,6 +55,7 @@
5555
"@babel/preset-env": "^7.1.6",
5656
"@types/codemirror": "^5.60.5",
5757
"@types/jest": "^27.0.2",
58+
"@types/lodash": "^4.14.182",
5859
"@types/mock-fs": "^4.13.1",
5960
"archiver": "^3.0.3",
6061
"copy-webpack-plugin": "^9.0.1",
@@ -84,6 +85,7 @@
8485
"webpack-cli": "^4.9.0"
8586
},
8687
"dependencies": {
88+
"@root/walk": "^1.1.0",
8789
"@uirouter/angularjs": "^1.0.20",
8890
"angular": "1.7.9",
8991
"angular-sanitize": "1.7.5",
@@ -102,7 +104,8 @@
102104
"jquery.qrcode": "^1.0.3",
103105
"js-base64": "^3.4.5",
104106
"js-md5": "^0.7.3",
105-
"kodo-s3-adapter-sdk": "0.2.29",
107+
"kodo-s3-adapter-sdk": "0.2.30",
108+
"lodash": "^4.17.21",
106109
"mime": "^2.3.1",
107110
"moment": "^2.22.2",
108111
"qiniu-path": "^0.0.3",
File renamed without changes.

src/common/const/byte-size.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
enum ByteSize {
2+
KB = 1024,
3+
MB = 1024 * KB,
4+
GB = 1024 * MB,
5+
TB = 1024 * GB,
6+
}
7+
8+
export default ByteSize;
File renamed without changes.

src/common/const/qiniu.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum BackendMode {
2+
Kodo = "kodo",
3+
S3 = "s3",
4+
}

src/common/ipc-actions/upload.ts

Lines changed: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,286 @@
1+
import {IpcRenderer} from "electron";
2+
import {Region} from "kodo-s3-adapter-sdk";
3+
import {NatureLanguage} from "kodo-s3-adapter-sdk/dist/uplog";
4+
import {BackendMode} from "@common/const/qiniu";
5+
import {Status} from "@common/models/job/types";
6+
import StorageClass from "@common/models/storage-class";
7+
import {UploadJob} from "@common/models/job";
8+
9+
// some types maybe should in models
10+
export interface DestInfo {
11+
regionId: string,
12+
bucketName: string,
13+
key: string,
14+
}
15+
16+
export interface UploadOptions {
17+
isOverwrite: boolean,
18+
storageClassName: StorageClass["kodoName"],
19+
storageClasses: StorageClass[],
20+
userNatureLanguage: NatureLanguage,
21+
}
22+
23+
// TODO: merge with `RequiredOptions['clientOptions']` in upload-job.ts
24+
export interface ClientOptions {
25+
accessKey: string,
26+
secretKey: string,
27+
ucUrl: string,
28+
regions: Region[],
29+
backendMode: BackendMode,
30+
}
31+
32+
// action names
33+
export enum UploadAction {
34+
UpdateConfig = "UpdateConfig",
35+
LoadPersistJobs = "LoadPersistJobs",
36+
AddJobs = "AddJobs",
37+
StopJob = "StopJob",
38+
WaitJob = "WaitJob",
39+
StartJob = "StartJob",
40+
RemoveJob = "RemoveJob",
41+
CleanupJobs = "CleanupJobs",
42+
StartAllJobs = "StartAllJobs",
43+
StopAllJobs = "StopAllJobs",
44+
RemoveAllJobs = "RemoveAllJobs",
45+
46+
// common
47+
UpdateUiData = "UpdateUiData",
48+
49+
// reply only
50+
AddedJobs = "AddedJobs",
51+
JobCompleted = "JobCompleted",
52+
CreatedDirectory = "CreatedDirectory",
53+
}
54+
55+
// actions with payload data
56+
export interface UpdateConfigMessage {
57+
action: UploadAction.UpdateConfig,
58+
data: Partial<{
59+
resumeUpload: boolean,
60+
maxConcurrency: number,
61+
multipartUploadSize: number, // Bytes
62+
multipartUploadThreshold: number, // Bytes
63+
uploadSpeedLimit: number, // Bytes/s
64+
isDebug: boolean,
65+
isSkipEmptyDirectory: boolean,
66+
persistPath: string,
67+
}>,
68+
}
69+
70+
export interface LoadPersistJobsMessage {
71+
action: UploadAction.LoadPersistJobs,
72+
data: {
73+
clientOptions: Pick<ClientOptions, "accessKey" | "secretKey" | "ucUrl" | "regions">,
74+
uploadOptions: Pick<UploadOptions, "userNatureLanguage">,
75+
},
76+
}
77+
78+
export interface AddJobsMessage {
79+
action: UploadAction.AddJobs,
80+
data: {
81+
filePathnameList: string[],
82+
destInfo: DestInfo,
83+
uploadOptions: UploadOptions,
84+
clientOptions: ClientOptions,
85+
},
86+
}
87+
88+
export interface UpdateUiDataMessage {
89+
action: UploadAction.UpdateUiData,
90+
data: {
91+
pageNum: number,
92+
count: number,
93+
query?: { status?: Status, name?: string },
94+
},
95+
}
96+
97+
export interface UpdateUiDataReplyMessage {
98+
action: UploadAction.UpdateUiData,
99+
data: {
100+
list: (UploadJob["uiData"] | undefined)[],
101+
total: number,
102+
finished: number,
103+
running: number,
104+
failed: number,
105+
stopped: number,
106+
},
107+
}
108+
109+
export interface StopJobMessage {
110+
action: UploadAction.StopJob,
111+
data: {
112+
jobId: string,
113+
},
114+
}
115+
116+
export interface WaitJobMessage {
117+
action: UploadAction.WaitJob,
118+
data: {
119+
jobId: string,
120+
},
121+
}
122+
123+
export interface StartJobMessage {
124+
action: UploadAction.StartJob,
125+
data: {
126+
jobId: string,
127+
forceOverwrite?: boolean,
128+
},
129+
}
130+
131+
export interface RemoveJobMessage {
132+
action: UploadAction.RemoveJob,
133+
data: {
134+
jobId: string,
135+
},
136+
}
137+
138+
export interface CleanupJobMessage {
139+
action: UploadAction.CleanupJobs,
140+
data?: {},
141+
}
142+
143+
export interface StartAllJobsMessage {
144+
action: UploadAction.StartAllJobs,
145+
data?: {},
146+
}
147+
148+
export interface StopAllJobsMessage {
149+
action: UploadAction.StopAllJobs,
150+
data?: {},
151+
}
152+
153+
export interface RemoveAllJobsMessage {
154+
action: UploadAction.RemoveAllJobs,
155+
data?: {},
156+
}
157+
158+
export interface AddedJobsReplyMessage {
159+
action: UploadAction.AddedJobs,
160+
data: {
161+
filePathnameList: string[],
162+
destInfo: DestInfo,
163+
},
164+
}
165+
166+
export interface JobCompletedReplyMessage {
167+
action: UploadAction.JobCompleted,
168+
data: {
169+
jobId: string,
170+
jobUiData: UploadJob["uiData"],
171+
},
172+
}
173+
174+
export interface CreatedDirectoryReplyMessage {
175+
action: UploadAction.CreatedDirectory,
176+
data: {
177+
bucket: string,
178+
directoryKey: string,
179+
},
180+
}
181+
182+
export type UploadMessage = UpdateConfigMessage
183+
| LoadPersistJobsMessage
184+
| AddJobsMessage
185+
| UpdateUiDataMessage
186+
| StopJobMessage
187+
| WaitJobMessage
188+
| StartJobMessage
189+
| RemoveJobMessage
190+
| CleanupJobMessage
191+
| StartAllJobsMessage
192+
| StopAllJobsMessage
193+
| RemoveAllJobsMessage
194+
195+
// send actions functions
196+
export class UploadActionFns {
197+
constructor(
198+
private readonly ipc: IpcRenderer,
199+
private readonly channel: string,
200+
) {
201+
}
202+
203+
updateConfig(data: UpdateConfigMessage['data']) {
204+
this.ipc.send(this.channel, {
205+
action: UploadAction.UpdateConfig,
206+
data,
207+
});
208+
}
209+
210+
loadPersistJobs(data: LoadPersistJobsMessage['data']) {
211+
this.ipc.send(this.channel, {
212+
action: UploadAction.LoadPersistJobs,
213+
data,
214+
});
215+
}
216+
217+
addJobs(data: AddJobsMessage['data']) {
218+
this.ipc.send(this.channel, {
219+
action: UploadAction.AddJobs,
220+
data,
221+
});
222+
}
223+
224+
updateUiData(data: UpdateUiDataMessage['data']) {
225+
this.ipc.send(this.channel, {
226+
action: UploadAction.UpdateUiData,
227+
data,
228+
});
229+
}
230+
231+
waitJob(data: WaitJobMessage['data']) {
232+
this.ipc.send(this.channel, {
233+
action: UploadAction.WaitJob,
234+
data,
235+
});
236+
}
237+
238+
startJob(data: StartJobMessage['data']) {
239+
this.ipc.send(this.channel, {
240+
action: UploadAction.StartJob,
241+
data,
242+
});
243+
}
244+
245+
stopJob(data: StopJobMessage['data']) {
246+
this.ipc.send(this.channel, {
247+
action: UploadAction.StopJob,
248+
data,
249+
});
250+
}
251+
252+
removeJob(data: RemoveJobMessage['data']) {
253+
this.ipc.send(this.channel, {
254+
action: UploadAction.RemoveJob,
255+
data,
256+
});
257+
}
258+
259+
cleanUpJobs() {
260+
this.ipc.send(this.channel, {
261+
action: UploadAction.CleanupJobs,
262+
data: {},
263+
});
264+
}
265+
266+
startAllJobs() {
267+
this.ipc.send(this.channel, {
268+
action: UploadAction.StartAllJobs,
269+
data: {},
270+
});
271+
}
272+
273+
stopAllJobs() {
274+
this.ipc.send(this.channel, {
275+
action: UploadAction.StopAllJobs,
276+
data: {},
277+
});
278+
}
279+
280+
removeAllJobs() {
281+
this.ipc.send(this.channel, {
282+
action: UploadAction.RemoveAllJobs,
283+
data: {},
284+
});
285+
}
286+
}

0 commit comments

Comments
 (0)