68 lines
2.4 KiB
JavaScript
68 lines
2.4 KiB
JavaScript
const { contextBridge, ipcRenderer } = require('electron');
|
|
|
|
// 加载jsQR库
|
|
let jsQRLib = null;
|
|
try {
|
|
// 直接require jsqr模块
|
|
const jsqrModule = require('jsqr');
|
|
// 处理ES module的default export
|
|
jsQRLib = jsqrModule.default || jsqrModule;
|
|
console.log('jsQR loaded successfully:', typeof jsQRLib);
|
|
} catch (e) {
|
|
console.error('Failed to load jsQR:', e);
|
|
}
|
|
|
|
contextBridge.exposeInMainWorld('api', {
|
|
// Vault operations
|
|
getVaults: () => ipcRenderer.invoke('db:getVaults'),
|
|
addVault: (vault) => ipcRenderer.invoke('db:addVault', vault),
|
|
updateVault: (id, vault) => ipcRenderer.invoke('db:updateVault', id, vault),
|
|
deleteVault: (id) => ipcRenderer.invoke('db:deleteVault', id),
|
|
|
|
// Account operations
|
|
getAccounts: (page, limit, vaultId) => ipcRenderer.invoke('db:getAccounts', page, limit, vaultId),
|
|
getAccountCount: (vaultId) => ipcRenderer.invoke('db:getAccountCount', vaultId),
|
|
addAccount: (account) => ipcRenderer.invoke('db:addAccount', account),
|
|
updateAccount: (id, account) => ipcRenderer.invoke('db:updateAccount', id, account),
|
|
deleteAccount: (id) => ipcRenderer.invoke('db:deleteAccount', id),
|
|
moveAccountToVault: (accountId, vaultId) => ipcRenderer.invoke('db:moveAccountToVault', accountId, vaultId),
|
|
searchAccounts: (query, vaultId) => ipcRenderer.invoke('db:searchAccounts', query, vaultId),
|
|
|
|
// Clipboard
|
|
copyToClipboard: (text) => ipcRenderer.invoke('clipboard:write', text),
|
|
|
|
|
|
// Screenshot
|
|
captureScreen: () => ipcRenderer.invoke('screen:capture'),
|
|
|
|
// QR Code parsing
|
|
decodeQR: (imageData, width, height) => {
|
|
if (!jsQRLib) {
|
|
console.error('jsQR not loaded');
|
|
return null;
|
|
}
|
|
try {
|
|
// 确保是Uint8ClampedArray格式
|
|
const data = imageData instanceof Uint8ClampedArray
|
|
? imageData
|
|
: new Uint8ClampedArray(imageData);
|
|
|
|
console.log('Decoding QR, image size:', width, 'x', height, 'data length:', data.length);
|
|
const result = jsQRLib(data, width, height);
|
|
|
|
if (result) {
|
|
console.log('QR code found:', result.data);
|
|
return result.data;
|
|
} else {
|
|
console.log('No QR code found in image');
|
|
return null;
|
|
}
|
|
} catch (e) {
|
|
console.error('QR decode error:', e);
|
|
return null;
|
|
}
|
|
},
|
|
hasJsQR: () => !!jsQRLib,
|
|
|
|
});
|