mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-12 02:43:50 +00:00
V3 project migration (#1652)
* migrate settings * migrate viewsettings * migrate url preset * migrate project data * migrate custom fields * migrate automations * migrate rundown * lint * return custom field translation table * check regex * new url type * refactor * migrate old OSC subscriptions * migrate old http subscriptions * update comments * migrate the whole db * remove automation logging unlis there is an error * return a new object * refactor: copy currup is only used in one place * make a copy of original migrated file * refactor: ensure image flder is part of project service init * add entrys to groups * small cleanup * just drop incorrect custom fields in the default data parser
This commit is contained in:
committed by
GitHub
parent
35347e8d63
commit
9ebb3decdb
@@ -33,13 +33,13 @@ import {
|
||||
import { runtimeService } from '../runtime-service/RuntimeService.js';
|
||||
|
||||
import {
|
||||
copyCorruptFile,
|
||||
doesProjectExist,
|
||||
getPathToProject,
|
||||
getProjectFiles,
|
||||
moveCorruptFile,
|
||||
parseJsonFile,
|
||||
} from './projectServiceUtils.js';
|
||||
import { join } from 'path';
|
||||
|
||||
type ProjectState =
|
||||
| {
|
||||
@@ -65,6 +65,8 @@ init();
|
||||
function init() {
|
||||
ensureDirectory(publicDir.projectsDir);
|
||||
ensureDirectory(publicDir.corruptDir);
|
||||
ensureDirectory(publicDir.logoDir);
|
||||
ensureDirectory(publicDir.migrateDir);
|
||||
}
|
||||
|
||||
export async function getCurrentProject(): Promise<{ filename: string; pathToFile: string }> {
|
||||
@@ -130,7 +132,8 @@ async function loadNewProject(): Promise<string> {
|
||||
*/
|
||||
async function handleCorruptedFile(filePath: string, fileName: string): Promise<string> {
|
||||
// copy file to corrupted folder
|
||||
await copyCorruptFile(filePath, fileName).catch((_) => {
|
||||
const copyPath = join(publicDir.corruptDir, fileName);
|
||||
await copyFile(filePath, copyPath).catch((_) => {
|
||||
/* while we have to catch the error, we dont need to handle it */
|
||||
});
|
||||
|
||||
@@ -140,6 +143,19 @@ async function handleCorruptedFile(filePath: string, fileName: string): Promise<
|
||||
return getFileNameFromPath(newPath);
|
||||
}
|
||||
|
||||
async function handleMigratedFile(filePath: string, fileName: string): Promise<string> {
|
||||
// copy file to migrated folder
|
||||
const copyPath = join(publicDir.migrateDir, fileName);
|
||||
await copyFile(filePath, copyPath).catch((_) => {
|
||||
/* while we have to catch the error, we dont need to handle it */
|
||||
});
|
||||
|
||||
// and make a new file with the recovered data
|
||||
const newPath = appendToName(filePath, '(migrated)');
|
||||
await dockerSafeRename(filePath, newPath);
|
||||
return getFileNameFromPath(newPath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Coordinates the initial load of a project on app startup
|
||||
* This is different from the load project since we need to always load something
|
||||
@@ -190,6 +206,10 @@ export async function loadProjectFile(fileName: string): Promise<string> {
|
||||
logger.warning(LogOrigin.Server, 'Project loaded with errors');
|
||||
parsedFileName = await handleCorruptedFile(filePath, fileName);
|
||||
}
|
||||
if (result.migrated) {
|
||||
logger.warning(LogOrigin.Server, 'The imported project is migrate, the original file has been backed up');
|
||||
parsedFileName = await handleMigratedFile(filePath, fileName);
|
||||
}
|
||||
|
||||
const projectName = await loadProject(result.data, parsedFileName);
|
||||
return projectName;
|
||||
|
||||
@@ -1,16 +1,11 @@
|
||||
import { DatabaseModel, MaybeString, ProjectFile } from 'ontime-types';
|
||||
|
||||
import { existsSync } from 'fs';
|
||||
import { copyFile, readFile, stat } from 'fs/promises';
|
||||
import { readFile, stat } from 'fs/promises';
|
||||
import { extname, join } from 'path';
|
||||
|
||||
import { publicDir } from '../../setup/index.js';
|
||||
import {
|
||||
dockerSafeRename,
|
||||
ensureDirectory,
|
||||
getFilesFromFolder,
|
||||
removeFileExtension,
|
||||
} from '../../utils/fileManagement.js';
|
||||
import { dockerSafeRename, getFilesFromFolder, removeFileExtension } from '../../utils/fileManagement.js';
|
||||
|
||||
/**
|
||||
* Handles the upload of a new project file
|
||||
@@ -23,7 +18,6 @@ export async function handleUploaded(filePath: string, name: string) {
|
||||
}
|
||||
|
||||
export async function handleImageUpload(filePath: string, name: string): Promise<string> {
|
||||
ensureDirectory(publicDir.logoDir);
|
||||
const newFilePath = join(publicDir.logoDir, name);
|
||||
await dockerSafeRename(filePath, newFilePath);
|
||||
|
||||
@@ -78,14 +72,6 @@ export function getPathToProject(name: string): string {
|
||||
return join(publicDir.projectsDir, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a copy of a given project to the corrupted directory
|
||||
*/
|
||||
export async function copyCorruptFile(filePath: string, name: string): Promise<void> {
|
||||
const newPath = join(publicDir.corruptDir, name);
|
||||
return copyFile(filePath, newPath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves a file permanently to the corrupted directory
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user