feat: saving files and folders when updating modpaks
This commit is contained in:
@ -348,6 +348,7 @@ export function initMinecraftHandlers() {
|
|||||||
apiReleaseUrl = 'https://api.github.com/repos/DIKER0K/Comfort/releases/latest',
|
apiReleaseUrl = 'https://api.github.com/repos/DIKER0K/Comfort/releases/latest',
|
||||||
versionFileName = 'comfort_version.txt',
|
versionFileName = 'comfort_version.txt',
|
||||||
packName = 'Comfort',
|
packName = 'Comfort',
|
||||||
|
preserveFiles = [], // Новый параметр: список файлов/папок для сохранения
|
||||||
} = options || {};
|
} = options || {};
|
||||||
|
|
||||||
const appPath = path.dirname(app.getPath('exe'));
|
const appPath = path.dirname(app.getPath('exe'));
|
||||||
@ -375,6 +376,7 @@ export function initMinecraftHandlers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const tempDir = path.join(appPath, 'temp');
|
const tempDir = path.join(appPath, 'temp');
|
||||||
|
const packDir = path.join(versionsDir, packName); // Директория пакета
|
||||||
|
|
||||||
// Создаем/очищаем временную директорию
|
// Создаем/очищаем временную директорию
|
||||||
if (fs.existsSync(tempDir)) {
|
if (fs.existsSync(tempDir)) {
|
||||||
@ -400,10 +402,61 @@ export function initMinecraftHandlers() {
|
|||||||
fs.mkdirSync(versionsDir, { recursive: true });
|
fs.mkdirSync(versionsDir, { recursive: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Сохраняем файлы/папки, которые нужно оставить
|
||||||
|
const backupDir = path.join(tempDir, 'backup');
|
||||||
|
fs.mkdirSync(backupDir, { recursive: true });
|
||||||
|
|
||||||
|
// Проверка и бэкап указанных файлов/папок
|
||||||
|
for (const filePath of preserveFiles) {
|
||||||
|
const fullPath = path.join(packDir, filePath);
|
||||||
|
|
||||||
|
if (fs.existsSync(fullPath)) {
|
||||||
|
const backupPath = path.join(backupDir, filePath);
|
||||||
|
|
||||||
|
// Создаем необходимые директории для бэкапа
|
||||||
|
const backupDirPath = path.dirname(backupPath);
|
||||||
|
if (!fs.existsSync(backupDirPath)) {
|
||||||
|
fs.mkdirSync(backupDirPath, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Копируем файл или директорию
|
||||||
|
if (fs.lstatSync(fullPath).isDirectory()) {
|
||||||
|
fs.cpSync(fullPath, backupPath, { recursive: true });
|
||||||
|
console.log(`Директория ${filePath} сохранена во временный бэкап`);
|
||||||
|
} else {
|
||||||
|
fs.copyFileSync(fullPath, backupPath);
|
||||||
|
console.log(`Файл ${filePath} сохранен во временный бэкап`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Распаковываем архив напрямую в папку versions
|
// Распаковываем архив напрямую в папку versions
|
||||||
await extract(zipPath, { dir: versionsDir });
|
await extract(zipPath, { dir: versionsDir });
|
||||||
fs.unlinkSync(zipPath);
|
fs.unlinkSync(zipPath);
|
||||||
|
|
||||||
|
// Восстанавливаем файлы/папки из бэкапа
|
||||||
|
for (const filePath of preserveFiles) {
|
||||||
|
const backupPath = path.join(backupDir, filePath);
|
||||||
|
if (fs.existsSync(backupPath)) {
|
||||||
|
const targetPath = path.join(packDir, filePath);
|
||||||
|
|
||||||
|
// Создаем необходимые директории для восстановления
|
||||||
|
const targetDirPath = path.dirname(targetPath);
|
||||||
|
if (!fs.existsSync(targetDirPath)) {
|
||||||
|
fs.mkdirSync(targetDirPath, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Копируем обратно файл или директорию
|
||||||
|
if (fs.lstatSync(backupPath).isDirectory()) {
|
||||||
|
fs.cpSync(backupPath, targetPath, { recursive: true });
|
||||||
|
console.log(`Директория ${filePath} восстановлена из бэкапа`);
|
||||||
|
} else {
|
||||||
|
fs.copyFileSync(backupPath, targetPath);
|
||||||
|
console.log(`Файл ${filePath} восстановлен из бэкапа`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Сохраняем новую версию
|
// Сохраняем новую версию
|
||||||
fs.writeFileSync(versionFilePath, latestVersion);
|
fs.writeFileSync(versionFilePath, latestVersion);
|
||||||
|
|
||||||
|
@ -23,6 +23,13 @@ const launchOptions = {
|
|||||||
baseVersion: '1.21.4',
|
baseVersion: '1.21.4',
|
||||||
serverIp: 'popa-popa.ru',
|
serverIp: 'popa-popa.ru',
|
||||||
fabricVersion: 'fabric0.16.14',
|
fabricVersion: 'fabric0.16.14',
|
||||||
|
preserveFiles: [
|
||||||
|
'options.txt',
|
||||||
|
'screenshots',
|
||||||
|
'schematics',
|
||||||
|
'syncmatics',
|
||||||
|
'saves',
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
const AuthCheck = ({ children }: { children: ReactNode }) => {
|
const AuthCheck = ({ children }: { children: ReactNode }) => {
|
||||||
|
@ -33,6 +33,7 @@ interface LaunchPageProps {
|
|||||||
baseVersion: string;
|
baseVersion: string;
|
||||||
serverIp: string;
|
serverIp: string;
|
||||||
fabricVersion: string;
|
fabricVersion: string;
|
||||||
|
preserveFiles: string[];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,6 +116,7 @@ const LaunchPage = ({ launchOptions }: LaunchPageProps) => {
|
|||||||
apiReleaseUrl: launchOptions.apiReleaseUrl,
|
apiReleaseUrl: launchOptions.apiReleaseUrl,
|
||||||
versionFileName: launchOptions.versionFileName,
|
versionFileName: launchOptions.versionFileName,
|
||||||
packName: launchOptions.packName,
|
packName: launchOptions.packName,
|
||||||
|
preserveFiles: launchOptions.preserveFiles,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Передаем опции для скачивания
|
// Передаем опции для скачивания
|
||||||
|
Reference in New Issue
Block a user