This commit introduces several improvements to the macOS update process, primarily focusing on enhancing security and reliability: - Add data integrity checks to ensure downloaded updates haven't been tampered with. - Optimize update progress logging in `streamWithProgress` by limiting amount of logs during the download process. - Improve resource management by ensuring proper closure of file read/write streams. - Add retry logic with exponential back-off during file access to handle occassionally seen file system preparation delays on macOS. - Improve decision-making based on user responses. - Improve clarity and informativeness of log messages. - Update error dialogs for better user guidance when updates fail to download, unexpected errors occur or the installer can't be opened. - Add handling for unexpected errors during the update process. - Move to asynchronous functions for more efficient operation. - Move to scoped imports for better code clarity. - Update `Readable` stream type to a more modern variant in Node. - Refactor `ManualUpdater` for improved separation of concerns. - Document the secure update process, and log directory locations. - Rename files to more accurately reflect their purpose. - Add `.DS_Store` in `.gitignore` to avoid unintended files in commits.
17 lines
594 B
TypeScript
17 lines
594 B
TypeScript
import { app, shell } from 'electron';
|
|
import { ElectronLogger } from '@/infrastructure/Log/ElectronLogger';
|
|
import { retryFileSystemAccess } from './RetryFileSystemAccess';
|
|
|
|
export async function startInstallation(filePath: string): Promise<boolean> {
|
|
return retryFileSystemAccess(async () => {
|
|
ElectronLogger.info(`Attempting to open the installer at: ${filePath}.`);
|
|
const error = await shell.openPath(filePath);
|
|
if (!error) {
|
|
app.quit();
|
|
return true;
|
|
}
|
|
ElectronLogger.error(`Failed to open the installer at ${filePath}.`, error);
|
|
return false;
|
|
});
|
|
}
|