frpc-desktop/electron/service/GitHubService.ts
刘嘉伟 8d56faeb80 🚧 v2
2025-02-21 18:30:13 +08:00

65 lines
1.8 KiB
TypeScript

class GitHubService {
constructor() {}
getGithubRepoAllReleases(githubRepo: string): Promise<Array<GithubRelease>> {
return new Promise((resolve, reject) => {
const { net } = require("electron");
const request = net.request({
method: "get",
url: `https://api.github.com/repos/${githubRepo}/releases?page=1&per_page=1000`
});
request.on("response", response => {
// logInfo(
// LogModule.GITHUB,
// `Received response with status code: ${response.statusCode}`
// );
let responseData: Buffer = Buffer.alloc(0);
response.on("data", (data: Buffer) => {
responseData = Buffer.concat([responseData, data]);
});
response.on("end", () => {
if (response.statusCode === 200) {
this.parseGitHubVersion(responseData.toString())
.then(data => {
resolve(data);
})
.catch(err => reject(err));
// logInfo(
// LogModule.GITHUB,
// "Successfully retrieved GitHub release data."
// );
} else {
// logWarn(
// LogModule.GITHUB,
// "Failed to retrieve data, using local JSON instead. Status code: " +
// response.statusCode
// );
}
});
});
request.on("error", error => {
reject(error);
});
request.end();
});
}
parseGitHubVersion(
githubReleaseJsonStr: string
): Promise<Array<GithubRelease>> {
return new Promise<Array<GithubRelease>>(resolve => {
const githubReleases: Array<GithubRelease> =
JSON.parse(githubReleaseJsonStr);
resolve(githubReleases);
});
}
}
export default GitHubService;