Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "kodo-browser",
"version": "1.0.17",
"version": "1.0.18",
"license": "Apache-2.0",
"author": {
"name": "Rong Zhou",
Expand All @@ -17,7 +17,7 @@
"dev": "./node_modules/.bin/webpack --env development -c ./webpack/webpack.config.js && ./node_modules/.bin/npm-run-all --parallel watch dev:run",
"dev:run": "./node_modules/.bin/cross-env NODE_ENV=development electron ./dist/main/main-bundle.js",
"prod": "./node_modules/.bin/cross-env NODE_ENV=production electron ./dist",
"watch": "./node_modules/.bin/webpack --env development -c ./webpack/webpack-renderer.config.js -w",
"watch": "./node_modules/.bin/webpack --env development -c ./webpack/webpack.config.js -w",
"build": "./node_modules/.bin/webpack --env production --env sourcemap -c ./webpack/webpack.config.js",
"build:mac": "./node_modules/.bin/gulp mac",
"pkg:mac": "./node_modules/.bin/gulp maczip",
Expand Down Expand Up @@ -55,6 +55,7 @@
"@babel/preset-env": "^7.1.6",
"@types/codemirror": "^5.60.5",
"@types/jest": "^27.0.2",
"@types/lodash": "^4.14.182",
"@types/mock-fs": "^4.13.1",
"archiver": "^3.0.3",
"copy-webpack-plugin": "^9.0.1",
Expand Down Expand Up @@ -84,6 +85,7 @@
"webpack-cli": "^4.9.0"
},
"dependencies": {
"@root/walk": "^1.1.0",
"@uirouter/angularjs": "^1.0.20",
"angular": "1.7.9",
"angular-sanitize": "1.7.5",
Expand All @@ -102,7 +104,8 @@
"jquery.qrcode": "^1.0.3",
"js-base64": "^3.4.5",
"js-md5": "^0.7.3",
"kodo-s3-adapter-sdk": "0.2.29",
"kodo-s3-adapter-sdk": "0.2.30",
"lodash": "^4.17.21",
"mime": "^2.3.1",
"moment": "^2.22.2",
"qiniu-path": "^0.0.3",
Expand Down
File renamed without changes.
8 changes: 8 additions & 0 deletions src/common/const/byte-size.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
enum ByteSize {
KB = 1024,
MB = 1024 * KB,
GB = 1024 * MB,
TB = 1024 * GB,
}

export default ByteSize;
File renamed without changes.
4 changes: 4 additions & 0 deletions src/common/const/qiniu.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum BackendMode {
Kodo = "kodo",
S3 = "s3",
}
286 changes: 286 additions & 0 deletions src/common/ipc-actions/upload.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,286 @@
import {IpcRenderer} from "electron";
import {Region} from "kodo-s3-adapter-sdk";
import {NatureLanguage} from "kodo-s3-adapter-sdk/dist/uplog";
import {BackendMode} from "@common/const/qiniu";
import {Status} from "@common/models/job/types";
import StorageClass from "@common/models/storage-class";
import {UploadJob} from "@common/models/job";

// some types maybe should in models
export interface DestInfo {
regionId: string,
bucketName: string,
key: string,
}

export interface UploadOptions {
isOverwrite: boolean,
storageClassName: StorageClass["kodoName"],
storageClasses: StorageClass[],
userNatureLanguage: NatureLanguage,
}

// TODO: merge with `RequiredOptions['clientOptions']` in upload-job.ts
export interface ClientOptions {
accessKey: string,
secretKey: string,
ucUrl: string,
regions: Region[],
backendMode: BackendMode,
}

// action names
export enum UploadAction {
UpdateConfig = "UpdateConfig",
LoadPersistJobs = "LoadPersistJobs",
AddJobs = "AddJobs",
StopJob = "StopJob",
WaitJob = "WaitJob",
StartJob = "StartJob",
RemoveJob = "RemoveJob",
CleanupJobs = "CleanupJobs",
StartAllJobs = "StartAllJobs",
StopAllJobs = "StopAllJobs",
RemoveAllJobs = "RemoveAllJobs",

// common
UpdateUiData = "UpdateUiData",

// reply only
AddedJobs = "AddedJobs",
JobCompleted = "JobCompleted",
CreatedDirectory = "CreatedDirectory",
}

// actions with payload data
export interface UpdateConfigMessage {
action: UploadAction.UpdateConfig,
data: Partial<{
resumeUpload: boolean,
maxConcurrency: number,
multipartUploadSize: number, // Bytes
multipartUploadThreshold: number, // Bytes
uploadSpeedLimit: number, // Bytes/s
isDebug: boolean,
isSkipEmptyDirectory: boolean,
persistPath: string,
}>,
}

export interface LoadPersistJobsMessage {
action: UploadAction.LoadPersistJobs,
data: {
clientOptions: Pick<ClientOptions, "accessKey" | "secretKey" | "ucUrl" | "regions">,
uploadOptions: Pick<UploadOptions, "userNatureLanguage">,
},
}

export interface AddJobsMessage {
action: UploadAction.AddJobs,
data: {
filePathnameList: string[],
destInfo: DestInfo,
uploadOptions: UploadOptions,
clientOptions: ClientOptions,
},
}

export interface UpdateUiDataMessage {
action: UploadAction.UpdateUiData,
data: {
pageNum: number,
count: number,
query?: { status?: Status, name?: string },
},
}

export interface UpdateUiDataReplyMessage {
action: UploadAction.UpdateUiData,
data: {
list: (UploadJob["uiData"] | undefined)[],
total: number,
finished: number,
running: number,
failed: number,
stopped: number,
},
}

export interface StopJobMessage {
action: UploadAction.StopJob,
data: {
jobId: string,
},
}

export interface WaitJobMessage {
action: UploadAction.WaitJob,
data: {
jobId: string,
},
}

export interface StartJobMessage {
action: UploadAction.StartJob,
data: {
jobId: string,
forceOverwrite?: boolean,
},
}

export interface RemoveJobMessage {
action: UploadAction.RemoveJob,
data: {
jobId: string,
},
}

export interface CleanupJobMessage {
action: UploadAction.CleanupJobs,
data?: {},
}

export interface StartAllJobsMessage {
action: UploadAction.StartAllJobs,
data?: {},
}

export interface StopAllJobsMessage {
action: UploadAction.StopAllJobs,
data?: {},
}

export interface RemoveAllJobsMessage {
action: UploadAction.RemoveAllJobs,
data?: {},
}

export interface AddedJobsReplyMessage {
action: UploadAction.AddedJobs,
data: {
filePathnameList: string[],
destInfo: DestInfo,
},
}

export interface JobCompletedReplyMessage {
action: UploadAction.JobCompleted,
data: {
jobId: string,
jobUiData: UploadJob["uiData"],
},
}

export interface CreatedDirectoryReplyMessage {
action: UploadAction.CreatedDirectory,
data: {
bucket: string,
directoryKey: string,
},
}

export type UploadMessage = UpdateConfigMessage
| LoadPersistJobsMessage
| AddJobsMessage
| UpdateUiDataMessage
| StopJobMessage
| WaitJobMessage
| StartJobMessage
| RemoveJobMessage
| CleanupJobMessage
| StartAllJobsMessage
| StopAllJobsMessage
| RemoveAllJobsMessage

// send actions functions
export class UploadActionFns {
constructor(
private readonly ipc: IpcRenderer,
private readonly channel: string,
) {
}

updateConfig(data: UpdateConfigMessage['data']) {
this.ipc.send(this.channel, {
action: UploadAction.UpdateConfig,
data,
});
}

loadPersistJobs(data: LoadPersistJobsMessage['data']) {
this.ipc.send(this.channel, {
action: UploadAction.LoadPersistJobs,
data,
});
}

addJobs(data: AddJobsMessage['data']) {
this.ipc.send(this.channel, {
action: UploadAction.AddJobs,
data,
});
}

updateUiData(data: UpdateUiDataMessage['data']) {
this.ipc.send(this.channel, {
action: UploadAction.UpdateUiData,
data,
});
}

waitJob(data: WaitJobMessage['data']) {
this.ipc.send(this.channel, {
action: UploadAction.WaitJob,
data,
});
}

startJob(data: StartJobMessage['data']) {
this.ipc.send(this.channel, {
action: UploadAction.StartJob,
data,
});
}

stopJob(data: StopJobMessage['data']) {
this.ipc.send(this.channel, {
action: UploadAction.StopJob,
data,
});
}

removeJob(data: RemoveJobMessage['data']) {
this.ipc.send(this.channel, {
action: UploadAction.RemoveJob,
data,
});
}

cleanUpJobs() {
this.ipc.send(this.channel, {
action: UploadAction.CleanupJobs,
data: {},
});
}

startAllJobs() {
this.ipc.send(this.channel, {
action: UploadAction.StartAllJobs,
data: {},
});
}

stopAllJobs() {
this.ipc.send(this.channel, {
action: UploadAction.StopAllJobs,
data: {},
});
}

removeAllJobs() {
this.ipc.send(this.channel, {
action: UploadAction.RemoveAllJobs,
data: {},
});
}
}
Loading