mirror of
https://gitcode.com/gh_mirrors/re/react-native-pushy.git
synced 2025-10-07 22:55:13 +08:00
resolve harmony hot update fail issue (#483)
* fix harmony more than 2M issue * fix mtpush-react-native conflics * update harmony remote dependency flow * udpate * udpate * udpate * udpate * udpate * update * uddate * udpapte * adapter pushy for Expo * udpate * resolve harmony hot update fail issue * udpate * udpate * udpate * udpate * udpate * update * udpate
This commit is contained in:
@@ -65,9 +65,13 @@ export class DownloadTask {
|
||||
0,
|
||||
params.targetFile.lastIndexOf('/'),
|
||||
);
|
||||
await fileIo.mkdir(targetDir);
|
||||
const exists = fileIo.accessSync(targetDir);
|
||||
if(!exists){
|
||||
await fileIo.mkdir(targetDir);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
const response = await httpRequest.request(params.url, {
|
||||
@@ -78,12 +82,11 @@ export class DownloadTask {
|
||||
'Content-Type': 'application/octet-stream',
|
||||
},
|
||||
});
|
||||
|
||||
if (response.responseCode > 299) {
|
||||
throw new Error(`Server error: ${response.responseCode}`);
|
||||
}
|
||||
|
||||
const contentLength = parseInt(response.header['Content-Length'] || '0');
|
||||
const contentLength = parseInt(response.header['content-length'] || '0');
|
||||
const writer = await fileIo.open(
|
||||
params.targetFile,
|
||||
fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE,
|
||||
@@ -102,8 +105,12 @@ export class DownloadTask {
|
||||
this.onProgressUpdate(received, contentLength);
|
||||
}
|
||||
await fileIo.close(writer);
|
||||
const stat = await fileIo.stat(params.targetFile);
|
||||
const fileSize = stat.size;
|
||||
const stats = await fileIo.stat(params.targetFile);
|
||||
const fileSize = stats.size;
|
||||
if (fileSize !== contentLength) {
|
||||
throw new Error(`Download incomplete: expected ${contentLength} bytes but got ${stats.size} bytes`);
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('Download failed:', error);
|
||||
throw error;
|
||||
@@ -113,7 +120,7 @@ export class DownloadTask {
|
||||
}
|
||||
|
||||
private onProgressUpdate(received: number, total: number): void {
|
||||
this.eventHub.emit('downloadProgress', {
|
||||
this.eventHub.emit('RCTPushyDownloadProgress', {
|
||||
received,
|
||||
total,
|
||||
hash: this.hash,
|
||||
@@ -288,8 +295,8 @@ export class DownloadTask {
|
||||
}
|
||||
}
|
||||
|
||||
if(entry.filename !== '.DS_Store'){
|
||||
await zip.decompressFile(entry.filename, params.unzipDirectory);
|
||||
if(fn !== '.DS_Store'){
|
||||
await zip.decompressFile(fn, params.unzipDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -491,4 +498,4 @@ export class DownloadTask {
|
||||
params.listener?.onDownloadFailed(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,7 @@ type EventCallback = (data: any) => void;
|
||||
export class EventHub {
|
||||
private static instance: EventHub;
|
||||
private listeners: Map<string, Set<EventCallback>>;
|
||||
private rnInstance: any;
|
||||
|
||||
private constructor() {
|
||||
this.listeners = new Map();
|
||||
@@ -27,12 +28,12 @@ export class EventHub {
|
||||
}
|
||||
|
||||
public emit(event: string, data: any): void {
|
||||
this.listeners.get(event)?.forEach(callback => {
|
||||
try {
|
||||
callback(data);
|
||||
} catch (error) {
|
||||
console.error(`Error in event listener for ${event}:`, error);
|
||||
}
|
||||
});
|
||||
if (this.rnInstance) {
|
||||
this.rnInstance.emitDeviceEvent(event, data);
|
||||
}
|
||||
}
|
||||
|
||||
setRNInstance(instance: any) {
|
||||
this.rnInstance = instance;
|
||||
}
|
||||
}
|
@@ -7,6 +7,7 @@ import { BusinessError } from '@ohos.base';
|
||||
import logger from './Logger';
|
||||
import { UpdateModuleImpl } from './UpdateModuleImpl';
|
||||
import { UpdateContext } from './UpdateContext';
|
||||
import { EventHub } from './EventHub';
|
||||
|
||||
const TAG = "PushyTurboModule"
|
||||
|
||||
@@ -18,9 +19,8 @@ export class PushyTurboModule extends TurboModule {
|
||||
super(ctx);
|
||||
logger.debug(TAG, ",PushyTurboModule constructor");
|
||||
this.mUiCtx = ctx.uiAbilityContext
|
||||
let rnInstance = ctx.rnInstance
|
||||
this.context = new UpdateContext(this.mUiCtx)
|
||||
// rnInstance.emitDeviceEvent("Pushy",{code: err.code, message: err.message});
|
||||
EventHub.getInstance().setRNInstance(ctx.rnInstance)
|
||||
}
|
||||
|
||||
|
||||
|
@@ -31,11 +31,14 @@ export class UpdateContext {
|
||||
this.preferences = preferences.getPreferencesSync(this.context, {name:'update'});
|
||||
const packageVersion = this.getPackageVersion();
|
||||
const storedVersion = this.preferences.getSync('packageVersion', '');
|
||||
if (packageVersion !== storedVersion) {
|
||||
this.preferences.clear();
|
||||
this.preferences.putSync('packageVersion', packageVersion);
|
||||
this.preferences.flush();
|
||||
this.cleanUp();
|
||||
if(!storedVersion){
|
||||
this.preferences.putSync('packageVersion', packageVersion);
|
||||
this.preferences.flush();
|
||||
} else if (storedVersion && packageVersion !== storedVersion) {
|
||||
this.preferences.clear();
|
||||
this.preferences.putSync('packageVersion', packageVersion);
|
||||
this.preferences.flush();
|
||||
this.cleanUp();
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Failed to init preferences:', e);
|
||||
@@ -137,8 +140,9 @@ export class UpdateContext {
|
||||
params.unzipDirectory = `${this.rootDir}/${hash}`;
|
||||
|
||||
const downloadTask = new DownloadTask(this.context);
|
||||
await downloadTask.execute(params);
|
||||
return await downloadTask.execute(params);
|
||||
} catch (e) {
|
||||
throw e;
|
||||
console.error('Failed to download APK patch:', e);
|
||||
}
|
||||
}
|
||||
@@ -152,14 +156,13 @@ export class UpdateContext {
|
||||
|
||||
const lastVersion = this.getKv('currentVersion');
|
||||
this.setKv('currentVersion', hash);
|
||||
|
||||
if (lastVersion && lastVersion !== hash) {
|
||||
this.setKv('lastVersion', lastVersion);
|
||||
}
|
||||
|
||||
this.setKv('firstTime', 'true');
|
||||
this.setKv('firstTimeOk', 'false');
|
||||
this.setKv('rolledBackVersion', null);
|
||||
this.setKv('rolledBackVersion', "");
|
||||
} catch (e) {
|
||||
console.error('Failed to switch version:', e);
|
||||
}
|
||||
@@ -211,7 +214,7 @@ export class UpdateContext {
|
||||
}
|
||||
|
||||
public getCurrentVersion() : string {
|
||||
const currentVersion = this.preferences.getSync('currentVersion', '') as string;
|
||||
const currentVersion = this.getKv('currentVersion');
|
||||
return currentVersion;
|
||||
}
|
||||
|
||||
|
@@ -56,7 +56,7 @@ export class UpdateModuleImpl {
|
||||
options: { updateUrl: string; hash: string }
|
||||
): Promise<void> {
|
||||
try {
|
||||
await updateContext.downloadPatchFromPackage(options.updateUrl, options.hash, {
|
||||
return await updateContext.downloadPatchFromPackage(options.updateUrl, options.hash, {
|
||||
onDownloadCompleted: (params: DownloadTaskParams) => {
|
||||
return Promise.resolve();
|
||||
},
|
||||
|
Reference in New Issue
Block a user