fixed #4235 - prevent OS from sleeping during transfers

This commit is contained in:
Eugene Pankov 2021-07-24 10:04:14 +02:00
parent a2e0db2a16
commit 4673aa498e
No known key found for this signature in database
GPG Key ID: 5896FCBBDD1CF4F4
2 changed files with 13 additions and 4 deletions

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, Remote, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, NativeImage } from 'electron' import { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, Remote, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, NativeImage, PowerSaveBlocker } from 'electron'
import * as remote from '@electron/remote' import * as remote from '@electron/remote'
export interface MessageBoxResponse { export interface MessageBoxResponse {
@ -20,6 +20,7 @@ export class ElectronService {
remote: Remote remote: Remote
process: any process: any
autoUpdater: AutoUpdater autoUpdater: AutoUpdater
powerSaveBlocker: PowerSaveBlocker
TouchBar: typeof TouchBar TouchBar: typeof TouchBar
BrowserWindow: typeof BrowserWindow BrowserWindow: typeof BrowserWindow
Menu: typeof Menu Menu: typeof Menu
@ -39,6 +40,7 @@ export class ElectronService {
this.globalShortcut = remote.globalShortcut this.globalShortcut = remote.globalShortcut
this.nativeImage = remote.nativeImage this.nativeImage = remote.nativeImage
this.autoUpdater = remote.autoUpdater this.autoUpdater = remote.autoUpdater
this.powerSaveBlocker = remote.powerSaveBlocker
this.TouchBar = remote.TouchBar this.TouchBar = remote.TouchBar
this.BrowserWindow = remote.BrowserWindow this.BrowserWindow = remote.BrowserWindow
this.Menu = remote.Menu this.Menu = remote.Menu

View File

@ -198,7 +198,7 @@ export class ElectronPlatformService extends PlatformService {
} }
return Promise.all(result.filePaths.map(async p => { return Promise.all(result.filePaths.map(async p => {
const transfer = new ElectronFileUpload(p) const transfer = new ElectronFileUpload(p, this.electron)
await wrapPromise(this.zone, transfer.open()) await wrapPromise(this.zone, transfer.open())
this.fileTransferStarted.next(transfer) this.fileTransferStarted.next(transfer)
return transfer return transfer
@ -215,7 +215,7 @@ export class ElectronPlatformService extends PlatformService {
if (!result.filePath) { if (!result.filePath) {
return null return null
} }
const transfer = new ElectronFileDownload(result.filePath, mode, size) const transfer = new ElectronFileDownload(result.filePath, mode, size, this.electron)
await wrapPromise(this.zone, transfer.open()) await wrapPromise(this.zone, transfer.open())
this.fileTransferStarted.next(transfer) this.fileTransferStarted.next(transfer)
return transfer return transfer
@ -233,10 +233,12 @@ class ElectronFileUpload extends FileUpload {
private mode: number private mode: number
private file: fs.FileHandle private file: fs.FileHandle
private buffer: Buffer private buffer: Buffer
private powerSaveBlocker = 0
constructor (private filePath: string) { constructor (private filePath: string, private electron: ElectronService) {
super() super()
this.buffer = Buffer.alloc(256 * 1024) this.buffer = Buffer.alloc(256 * 1024)
this.powerSaveBlocker = electron.powerSaveBlocker.start('prevent-app-suspension')
} }
async open (): Promise<void> { async open (): Promise<void> {
@ -265,19 +267,23 @@ class ElectronFileUpload extends FileUpload {
} }
close (): void { close (): void {
this.electron.powerSaveBlocker.stop(this.powerSaveBlocker)
this.file.close() this.file.close()
} }
} }
class ElectronFileDownload extends FileDownload { class ElectronFileDownload extends FileDownload {
private file: fs.FileHandle private file: fs.FileHandle
private powerSaveBlocker = 0
constructor ( constructor (
private filePath: string, private filePath: string,
private mode: number, private mode: number,
private size: number, private size: number,
private electron: ElectronService,
) { ) {
super() super()
this.powerSaveBlocker = electron.powerSaveBlocker.start('prevent-app-suspension')
} }
async open (): Promise<void> { async open (): Promise<void> {
@ -306,6 +312,7 @@ class ElectronFileDownload extends FileDownload {
} }
close (): void { close (): void {
this.electron.powerSaveBlocker.stop(this.powerSaveBlocker)
this.file.close() this.file.close()
} }
} }