🐛 Prevent some scenario to delete user entire computer
This commit is contained in:
parent
087ba5e51b
commit
3489203a16
@ -3,11 +3,12 @@ import { exec } from 'child_process'
|
|||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
import { ipcMain, WebContents } from 'electron'
|
import { ipcMain, WebContents } from 'electron'
|
||||||
import { glob } from 'glob'
|
import { glob } from 'glob'
|
||||||
import { unlinkSync } from 'fs'
|
import { mkdirSync, statSync, unlinkSync } from 'fs'
|
||||||
|
|
||||||
import { installTasks, InstallTask, updateInstallTask, InstallProgressPeriod } from './tasks'
|
import { installTasks, InstallTask, updateInstallTask, InstallProgressPeriod } from './tasks'
|
||||||
import { downloadAssets } from './downloader'
|
import { downloadAssets } from './downloader'
|
||||||
import { setAppRecord } from './library'
|
import { setAppRecord } from './library'
|
||||||
|
import { readdirSync } from 'original-fs'
|
||||||
|
|
||||||
export function initInstaller(): void {
|
export function initInstaller(): void {
|
||||||
ipcMain.handle('install-product-release', (evt, task: string) => submitInstallTask(JSON.parse(task), evt.sender))
|
ipcMain.handle('install-product-release', (evt, task: string) => submitInstallTask(JSON.parse(task), evt.sender))
|
||||||
@ -18,6 +19,15 @@ function submitInstallTask(task: InstallTask, contents: WebContents): void {
|
|||||||
task.progress = { value: 0, period: InstallProgressPeriod.Initializing, done: false, error: null }
|
task.progress = { value: 0, period: InstallProgressPeriod.Initializing, done: false, error: null }
|
||||||
task.emitter = contents
|
task.emitter = contents
|
||||||
|
|
||||||
|
if (!statSync(task.basePath).isDirectory()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (readdirSync(task.basePath).length > 0) {
|
||||||
|
const newPath = join(task.basePath, task.product.name)
|
||||||
|
mkdirSync(newPath)
|
||||||
|
task.basePath = newPath
|
||||||
|
}
|
||||||
|
|
||||||
installTasks[task.id] = task
|
installTasks[task.id] = task
|
||||||
updateInstallTask(task)
|
updateInstallTask(task)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { LocalAppRecord } from '@main/library'
|
import { LocalAppRecord } from '@main/library'
|
||||||
import { Avatar, Box, Button, Container, Grid2 as Grid, IconButton, Stack, Typography } from '@mui/material'
|
import { Avatar, Box, Button, Container, Divider, Grid2 as Grid, IconButton, Stack, Typography } from '@mui/material'
|
||||||
import { useEffect, useMemo, useState } from 'react'
|
import { useEffect, useMemo, useState } from 'react'
|
||||||
import { useNavigate, useParams } from 'react-router'
|
import { useNavigate, useParams } from 'react-router'
|
||||||
import { getAttachmentUrl } from 'solar-js-sdk'
|
import { getAttachmentUrl } from 'solar-js-sdk'
|
||||||
@ -84,6 +84,26 @@ export default function LibraryDetails(): JSX.Element {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
|
<Divider sx={{ mb: 2 }} />
|
||||||
|
|
||||||
|
<Typography variant="h6" component="h2" gutterBottom>
|
||||||
|
Release Information
|
||||||
|
</Typography>
|
||||||
|
|
||||||
|
{appReleaseContent && (
|
||||||
|
<Box
|
||||||
|
component="article"
|
||||||
|
className="prose prose-lg dark:prose-invert"
|
||||||
|
dangerouslySetInnerHTML={{ __html: appReleaseContent ?? '' }}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<Divider sx={{ mb: 2 }} />
|
||||||
|
|
||||||
|
<Typography variant="h6" component="h2" gutterBottom>
|
||||||
|
Product Introduction
|
||||||
|
</Typography>
|
||||||
|
|
||||||
{appProductContent && (
|
{appProductContent && (
|
||||||
<Box
|
<Box
|
||||||
component="article"
|
component="article"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user