Handle multiple prefixes in metadata key migration
Was never updated after the change that made it possible that metadata can have multiple prefixes (e.g. device names)
This commit is contained in:
@@ -20,7 +20,7 @@ import {
|
|||||||
MetadataHolderType,
|
MetadataHolderType,
|
||||||
MetadataKeyValuePair,
|
MetadataKeyValuePair,
|
||||||
} from '@/modules/metadata/Metadata.types.ts';
|
} from '@/modules/metadata/Metadata.types.ts';
|
||||||
import { doesMetadataKeyExistIn, extractOriginalKey, getMetadataKey } from '@/modules/metadata/Metadata.utils.ts';
|
import { extractOriginalKey, getMetadataKey } from '@/modules/metadata/Metadata.utils.ts';
|
||||||
import { MangaIdInfo } from '@/modules/manga/Manga.types.ts';
|
import { MangaIdInfo } from '@/modules/manga/Manga.types.ts';
|
||||||
import { ChapterIdInfo } from '@/modules/chapter/services/Chapters.ts';
|
import { ChapterIdInfo } from '@/modules/chapter/services/Chapters.ts';
|
||||||
import { CategoryIdInfo } from '@/modules/category/Category.types.ts';
|
import { CategoryIdInfo } from '@/modules/category/Category.types.ts';
|
||||||
@@ -105,25 +105,28 @@ const applyMetadataValueMigration = (meta: Metadata, migration: IMetadataMigrati
|
|||||||
return migratedMetadata;
|
return migratedMetadata;
|
||||||
};
|
};
|
||||||
|
|
||||||
const applyMetadataKeyMigration = (meta: Metadata, migration: IMetadataMigration): Metadata => {
|
const applyMetadataKeyMigration = (meta: Metadata, migration: IMetadataMigration, appKeyPrefix: string): Metadata => {
|
||||||
const migratedMetadata: Metadata = { ...meta };
|
const migratedMetadata: Metadata = { ...meta };
|
||||||
|
|
||||||
if (!migration.keys) {
|
if (!migration.keys) {
|
||||||
return migratedMetadata;
|
return migratedMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
const metadataKeyChanges = migration.keys;
|
const appMetadata = getAppMetadataFrom(meta, undefined, appKeyPrefix);
|
||||||
|
|
||||||
metadataKeyChanges.forEach(({ oldKey, newKey }) => {
|
migration.keys.forEach(({ oldKey, newKey }) => {
|
||||||
if (!doesMetadataKeyExistIn(meta, oldKey)) {
|
Object.keys(appMetadata).forEach((key) => {
|
||||||
|
if (!key.endsWith(oldKey)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doesMetadataKeyExistIn(meta, newKey)) {
|
const prefixes = key.split('_');
|
||||||
return;
|
const prefix = prefixes.slice(0, prefixes.length - 1).join('_');
|
||||||
}
|
|
||||||
|
|
||||||
migratedMetadata[getMetadataKey(newKey)] = meta[getMetadataKey(oldKey)];
|
const newKeyWithOldKeysPrefix = `${prefix}_${newKey}`;
|
||||||
|
|
||||||
|
migratedMetadata[newKeyWithOldKeysPrefix] = appMetadata[key];
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
return migratedMetadata;
|
return migratedMetadata;
|
||||||
@@ -282,13 +285,18 @@ export const applyMetadataMigrations = (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const appKeyPrefixForMigration = getAppKeyPrefixForMigration(migrationId);
|
||||||
const appKeyPrefixMigrated = applyAppKeyPrefixMigration(metadataToMigrate, migration);
|
const appKeyPrefixMigrated = applyAppKeyPrefixMigration(metadataToMigrate, migration);
|
||||||
const metadataValuesMigrated = applyMetadataValueMigration(
|
const metadataValuesMigrated = applyMetadataValueMigration(
|
||||||
appKeyPrefixMigrated,
|
appKeyPrefixMigrated,
|
||||||
migration,
|
migration,
|
||||||
getAppKeyPrefixForMigration(migrationId),
|
appKeyPrefixForMigration,
|
||||||
|
);
|
||||||
|
const metadataKeysMigrated = applyMetadataKeyMigration(
|
||||||
|
metadataValuesMigrated,
|
||||||
|
migration,
|
||||||
|
appKeyPrefixForMigration,
|
||||||
);
|
);
|
||||||
const metadataKeysMigrated = applyMetadataKeyMigration(metadataValuesMigrated, migration);
|
|
||||||
|
|
||||||
migrationToMetadata.push([migrationId, metadataKeysMigrated]);
|
migrationToMetadata.push([migrationId, metadataKeysMigrated]);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user