fix(share): onShare 加 isActive 守卫 + PixelMap 延到 setData 完成后释放(final review C1/M1)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
55cab6df68
commit
90077a4b6e
@@ -73,7 +73,8 @@ export class ShareProvider implements CapabilityProvider {
|
||||
// —— 入站 ——
|
||||
|
||||
private onShare(data: string): void {
|
||||
if (this.ctx === undefined) {
|
||||
const bridge = this.bridge;
|
||||
if (this.ctx === undefined || bridge === undefined || !bridge.isActive()) {
|
||||
return;
|
||||
}
|
||||
let bean: SharetypeBean;
|
||||
@@ -294,15 +295,18 @@ export class ShareProvider implements CapabilityProvider {
|
||||
private writeClipboardImage(filePath: string): void {
|
||||
const source: image.ImageSource = image.createImageSource(filePath);
|
||||
source.createPixelMap().then((pm: image.PixelMap) => {
|
||||
let data: pasteboard.PasteData;
|
||||
try {
|
||||
const data: pasteboard.PasteData = pasteboard.createData(pasteboard.MIMETYPE_PIXELMAP, pm);
|
||||
pasteboard.getSystemPasteboard().setData(data)
|
||||
.catch((e: BusinessError) => this.log.w(`clipboard image failed: ${e.code} ${e.message}`));
|
||||
data = pasteboard.createData(pasteboard.MIMETYPE_PIXELMAP, pm);
|
||||
} catch (e) {
|
||||
this.log.w(`clipboard image init failed: ${(e as Error).message}`);
|
||||
} finally {
|
||||
pm.release();
|
||||
return;
|
||||
}
|
||||
// pm 须存活到 setData 完成(createData 可能持引用),故在 setData settle 后再 release。
|
||||
pasteboard.getSystemPasteboard().setData(data)
|
||||
.catch((e: BusinessError) => this.log.w(`clipboard image failed: ${e.code} ${e.message}`))
|
||||
.finally(() => pm.release());
|
||||
}).catch((e: BusinessError) => {
|
||||
this.log.w(`createPixelMap failed: ${e.code} ${e.message}`);
|
||||
}).finally(() => {
|
||||
|
||||
Reference in New Issue
Block a user