frpc-desktop/electron/controller/VersionController.ts

142 lines
4.3 KiB
TypeScript

import BaseController from "./BaseController";
import VersionService from "../service/VersionService";
import ResponseUtils from "../utils/ResponseUtils";
import VersionRepository from "../repository/VersionRepository";
import Logger from "../core/Logger";
import { BrowserWindow, dialog } from "electron";
import BeanFactory from "../core/BeanFactory";
class VersionController extends BaseController {
private readonly _versionService: VersionService;
private readonly _versionDao: VersionRepository;
constructor(versionService: VersionService, versionDao: VersionRepository) {
super();
this._versionService = versionService;
this._versionDao = versionDao;
}
getVersions(req: ControllerParam) {
this._versionService
.getFrpVersionsByGitHub()
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch(err => {
Logger.error("VersionController.getVersions", err);
this._versionService.getFrpVersionByLocalJson().then(localData => {
req.event.reply(req.channel, ResponseUtils.success(localData));
});
});
}
getDownloadedVersions(req: ControllerParam) {
this._versionDao
.findAll()
.then(data => {
req.event.reply(req.channel, ResponseUtils.success(data));
})
.catch((err: Error) => {
Logger.error("VersionController.getDownloadedVersions", err);
req.event.reply(req.channel, ResponseUtils.fail(err));
});
}
downloadFrpVersion(req: ControllerParam) {
this._versionService
.downloadFrpVersion(req.args.githubReleaseId, progress => {
req.event.reply(
req.channel,
ResponseUtils.success({
percent: progress.percent,
githubReleaseId: req.args.githubReleaseId,
completed: progress.percent >= 1
})
);
})
.then(r => {
req.event.reply(
req.channel,
ResponseUtils.success({
percent: 1,
githubReleaseId: req.args.githubReleaseId,
completed: true
})
);
})
.catch((err: Error) => {
Logger.error("VersionController.downloadFrpVersion", err);
req.event.reply(req.channel, ResponseUtils.fail(err));
});
}
deleteDownloadedVersion(req: ControllerParam) {
this._versionService
.deleteFrpVersion(req.args.githubReleaseId)
.then(() => {
req.event.reply(req.channel, ResponseUtils.success());
})
.catch((err: Error) => {
Logger.error("VersionController.deleteDownloadedVersion", err);
req.event.reply(req.channel, ResponseUtils.fail(err));
});
}
importLocalFrpcVersion(req: ControllerParam) {
const win: BrowserWindow = BeanFactory.getBean("win");
dialog
.showOpenDialog(win, {
properties: ["openFile"],
filters: [
{ name: "Frpc", extensions: ["tar.gz", "zip"] } // 允许选择的文件类型,分开后缀以确保可以选择
]
})
.then(result => {
if (result.canceled) {
req.event.reply(
req.channel,
ResponseUtils.success({
canceled: true
})
);
return;
} else {
const filePath = result.filePaths[0];
this._versionService
.importLocalFrpcVersion(filePath)
.then(data => {
req.event.reply(
req.channel,
ResponseUtils.success({
canceled: false
})
);
})
.catch((err: Error) => {
Logger.error("VersionController.importLocalFrpcVersion", err);
req.event.reply(req.channel, ResponseUtils.fail(err));
});
}
})
.catch(err => {
Logger.error("VersionController.importLocalFrpcVersion", err);
req.event.reply(req.channel, ResponseUtils.fail(err));
});
// const win: BrowserWindow = BeanFactory.getBean("win");
// const result = await dialog.showOpenDialog(win, {
// properties: ["openFile"],
// filters: [
// { name: "Frpc", extensions: ["tar.gz", "zip"] } // 允许选择的文件类型,分开后缀以确保可以选择
// ]
// });
// if (result.canceled) {
//
// }else {
//
// }
}
}
export default VersionController;