1
0
mirror of https://gitcode.com/gh_mirrors/re/react-native-pushy.git synced 2025-11-23 07:53:38 +08:00
Code Issues Packages Projects Releases Wiki Activity GitHub Gitee

fix filejsbundleprovider

This commit is contained in:
sunnylqm
2025-10-24 22:09:05 +08:00
parent 6e4f432e26
commit 268f39f43b
3 changed files with 99 additions and 82 deletions

View File

@@ -1,49 +1,41 @@
import { HotReloadConfig, JSBundleProvider, JSBundleProviderError, JSPackagerClientConfig } from '@rnoh/react-native-openharmony';
import fileIo from '@ohos.file.fs';
import {
FileJSBundle,
HotReloadConfig,
JSBundleProvider,
JSBundleProviderError
} from '@rnoh/react-native-openharmony';
import common from '@ohos.app.ability.common';
import fs from '@ohos.file.fs';
import { UpdateContext } from './UpdateContext';
export class PushyFileJSBundleProvider extends JSBundleProvider {
private updateContext: UpdateContext;
private filePath: string = ''
private path: string = ''
constructor(context: common.UIAbilityContext) {
super();
this.updateContext = new UpdateContext(context);
}
getURL(): string {
return this.updateContext.getBundleUrl()?.substring(1);
this.path = this.updateContext.getBundleUrl();
}
async getBundle(): Promise<ArrayBuffer> {
getURL(): string {
return this.path;
}
async getBundle(): Promise<FileJSBundle> {
try {
this.filePath = this.updateContext.getBundleUrl();
const res = fileIo.accessSync(this.filePath);
if (res) {
const file = fileIo.openSync(this.filePath, fileIo.OpenMode.READ_ONLY);
try {
const stat = await fileIo.stat(this.filePath);
const fileSize = stat.size;
const buffer = new ArrayBuffer(fileSize);
const bytesRead = fileIo.readSync(file.fd, buffer, {
offset: 0,
length: fileSize
});
if (bytesRead !== fileSize) {
throw new Error(`Failed to read entire file: read ${bytesRead} of ${fileSize} bytes`);
}
return buffer;
} finally {
fileIo.closeSync(file.fd);
const status = await fs.access(this.path, fs.OpenMode.READ_ONLY);
if (status) {
return {
filePath: this.path
}
}
throw new Error('Update bundle not found');
} catch (error) {
throw new JSBundleProviderError({
whatHappened: `Couldn't load JSBundle from ${this.filePath}`,
whatHappened: `Couldn't load JSBundle from ${this.path}`,
extraData: error,
howCanItBeFixed: [`Check if a bundle exists at "${this.filePath}" on your device.`]
howCanItBeFixed: [`Check if a bundle exists at "${this.path}" on your device.`]
})
}
}