code refactor & sync bugfixes
This commit is contained in:
parent
2bcb47076a
commit
9edcc9841b
20 changed files with 820 additions and 812 deletions
|
|
@ -3,33 +3,26 @@
|
|||
const { contextBridge, ipcRenderer } = require('electron')
|
||||
const { DIRS } = require('./paths')
|
||||
|
||||
// single-slot progress: every import modal used to register ANOTHER listener
|
||||
// and old ones never unregistered, so the file counter sped up per import
|
||||
let importProgressCb = null
|
||||
ipcRenderer.on('import:progress', (e, data) => {
|
||||
if (importProgressCb) importProgressCb(data)
|
||||
})
|
||||
// Single-slot event callbacks: every import modal used to register ANOTHER
|
||||
// listener and old ones never unregistered, so the file counter sped up per
|
||||
// import. Only the latest subscriber receives an event.
|
||||
function singleSlot(channel) {
|
||||
let slot = null
|
||||
ipcRenderer.on(channel, (e, data) => {
|
||||
if (slot) slot(data)
|
||||
})
|
||||
return fn => {
|
||||
slot = fn
|
||||
}
|
||||
}
|
||||
|
||||
// "Open with PLWL": single-slot callback for files handed over via --open
|
||||
// (Exec %f) - the renderer shows the wine/prefix picker popup for it.
|
||||
let openWithCb = null
|
||||
ipcRenderer.on('openwith:file', (e, openPath) => {
|
||||
if (openWithCb) openWithCb(openPath)
|
||||
})
|
||||
|
||||
// LAN sync progress: same single-slot rule as the import counter, only one
|
||||
// sync can run at a time anyway.
|
||||
let lanSyncProgressCb = null
|
||||
ipcRenderer.on('lansync:progress', (e, data) => {
|
||||
if (lanSyncProgressCb) lanSyncProgressCb(data)
|
||||
})
|
||||
|
||||
// Incoming sync consent: the receiver's Accept/Decline popup. Single slot for
|
||||
// the same reason - one pending request at a time (the server enforces it).
|
||||
let lanSyncIncomingCb = null
|
||||
ipcRenderer.on('lansync:incoming', (e, data) => {
|
||||
if (lanSyncIncomingCb) lanSyncIncomingCb(data)
|
||||
})
|
||||
const onImportProgress = singleSlot('import:progress')
|
||||
// "Open with PLWL": files handed over via --open (Exec %f) - the renderer
|
||||
// shows the wine/prefix picker popup for them.
|
||||
const onOpenWith = singleSlot('openwith:file')
|
||||
// one sync (and one pending consent request, enforced server-side) at a time
|
||||
const onLanSyncProgress = singleSlot('lansync:progress')
|
||||
const onLanSyncIncoming = singleSlot('lansync:incoming')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
|
|
@ -54,9 +47,7 @@ contextBridge.exposeInMainWorld('plwl', {
|
|||
openwithTake: () => ipcRenderer.invoke('openwith:take'),
|
||||
openwithRun: payload => ipcRenderer.invoke('openwith:run', payload),
|
||||
openwithTexts: lang => ipcRenderer.invoke('openwith:texts', lang),
|
||||
onOpenWith: cb => {
|
||||
openWithCb = cb
|
||||
},
|
||||
onOpenWith: onOpenWith,
|
||||
basename: p => (p ? path.basename(p) : ''),
|
||||
fileExists: p => {
|
||||
try {
|
||||
|
|
@ -91,24 +82,19 @@ contextBridge.exposeInMainWorld('plwl', {
|
|||
dialogPickFile: opts => ipcRenderer.invoke('dialog:pickFile', opts),
|
||||
shellOpenPath: p => ipcRenderer.invoke('shell:openPath', p),
|
||||
shellShowItemInFolder: p => ipcRenderer.invoke('shell:showItemInFolder', p),
|
||||
onImportProgress: cb => {
|
||||
importProgressCb = cb
|
||||
},
|
||||
onImportProgress: onImportProgress,
|
||||
onGamesChanged: cb => ipcRenderer.on('games:changed', () => cb()),
|
||||
lansyncGet: () => ipcRenderer.invoke('lansync:get'),
|
||||
lansyncDevices: () => ipcRenderer.invoke('lansync:devices'),
|
||||
lansyncRerollDeviceId: () => ipcRenderer.invoke('lansync:rerollDeviceId'),
|
||||
lansyncRerollSyncCode: () => ipcRenderer.invoke('lansync:rerollSyncCode'),
|
||||
lansyncForget: id => ipcRenderer.invoke('lansync:forget', id),
|
||||
lansyncClearHashCache: () => ipcRenderer.invoke('lansync:clearHashCache'),
|
||||
lansyncSync: payload => ipcRenderer.invoke('lansync:sync', payload),
|
||||
lansyncRespondIncoming: (requestId, accept) => ipcRenderer.invoke('lansync:respondIncoming', requestId, accept),
|
||||
onLanSyncDevices: cb => ipcRenderer.on('lansync:devices', (e, data) => cb(data)),
|
||||
onLanSyncProgress: cb => {
|
||||
lanSyncProgressCb = cb
|
||||
},
|
||||
onLanSyncIncoming: cb => {
|
||||
lanSyncIncomingCb = cb
|
||||
},
|
||||
onLanSyncProgress: onLanSyncProgress,
|
||||
onLanSyncIncoming: onLanSyncIncoming,
|
||||
onLanSyncApplied: cb => ipcRenderer.on('lansync:applied', (e, data) => cb(data)),
|
||||
onLanSyncReceiving: cb => ipcRenderer.on('lansync:receiving', (e, data) => cb(data))
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue