more accurate sync progress report
This commit is contained in:
parent
8e3512b5cd
commit
c0f6e802ed
12 changed files with 390 additions and 63 deletions
48
src/paths.js
48
src/paths.js
|
|
@ -115,21 +115,47 @@ function resolvePortablePath(p) {
|
|||
}
|
||||
|
||||
// The launcher's own icon (renderer/plwl.png), used by the tray, the app
|
||||
// icon and as the .desktop shortcut fallback. Cached: it never moves at
|
||||
// runtime.
|
||||
// icon and as the .desktop shortcut fallback.
|
||||
//
|
||||
// The module-relative copy comes FIRST: it is the only candidate that exists
|
||||
// in every layout, because a packaged build keeps renderer/ inside
|
||||
// app.asar and Electron's patched fs reads straight out of the archive (a
|
||||
// release only ships olcxja.plwl.png next to the portable root, so looking at
|
||||
// APP_ROOT alone made the tray icon vanish in installed builds). Cached: it
|
||||
// never moves at runtime.
|
||||
function launcherIconCandidates() {
|
||||
const bundled = path.join(__dirname, '..', 'renderer')
|
||||
return [
|
||||
path.join(bundled, 'plwl.png'),
|
||||
path.join(bundled, 'plwl.svg'),
|
||||
path.join(APP_ROOT, 'renderer', 'plwl.png'),
|
||||
path.join(APP_ROOT, 'renderer', 'plwl.svg'),
|
||||
path.join(APP_ROOT, 'olcxja.plwl.png')
|
||||
]
|
||||
}
|
||||
|
||||
function firstExisting(candidates) {
|
||||
for (const candidate of candidates) {
|
||||
try {
|
||||
if (fs.existsSync(candidate)) return candidate
|
||||
} catch {}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
let launcherIcon = null
|
||||
function launcherIconPath() {
|
||||
if (launcherIcon === null) {
|
||||
const p = path.join(APP_ROOT, 'renderer', 'plwl.png')
|
||||
try {
|
||||
launcherIcon = fs.existsSync(p) ? p : ''
|
||||
} catch {
|
||||
launcherIcon = ''
|
||||
}
|
||||
}
|
||||
if (launcherIcon === null) launcherIcon = firstExisting(launcherIconCandidates()) || ''
|
||||
return launcherIcon || null
|
||||
}
|
||||
|
||||
// The same icon, but only as a real file on disk: a .desktop entry's Icon= is
|
||||
// resolved by the desktop environment, which cannot look inside app.asar.
|
||||
function launcherIconDiskPath() {
|
||||
const onDisk = launcherIconCandidates().filter(candidate => !candidate.includes(`.asar${path.sep}`))
|
||||
return firstExisting(onDisk)
|
||||
}
|
||||
|
||||
function readJson(file, fallback) {
|
||||
try {
|
||||
return JSON.parse(fs.readFileSync(file, 'utf8'))
|
||||
|
|
@ -145,4 +171,4 @@ function writeJson(file, data) {
|
|||
fs.renameSync(tmp, file)
|
||||
}
|
||||
|
||||
module.exports = { RESOURCES, APP_ROOT, BUILD, FILES, DATA, DIRS, ensureDirs, syncBundledTranslations, launcherIconPath, readJson, writeJson, toPortablePath, resolvePortablePath }
|
||||
module.exports = { RESOURCES, APP_ROOT, BUILD, FILES, DATA, DIRS, ensureDirs, syncBundledTranslations, launcherIconPath, launcherIconDiskPath, readJson, writeJson, toPortablePath, resolvePortablePath }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue