1
0
mirror of https://github.com/koloml/furbooru-tagging-assistant.git synced 2025-12-25 07:22:58 +00:00

Added separate menu for bulk exporting of all entities

This commit is contained in:
2025-07-27 19:02:19 +04:00
parent fcca26e128
commit b956b6f7bc
5 changed files with 171 additions and 5 deletions

View File

@@ -1,5 +1,5 @@
import type StorageEntity from "$lib/extension/base/StorageEntity";
import { decompressFromEncodedURIComponent } from "lz-string";
import { compressToEncodedURIComponent, decompressFromEncodedURIComponent } from "lz-string";
import type { ImportableElementsList, ImportableEntityObject } from "$lib/extension/transporting/importables";
import EntitiesTransporter from "$lib/extension/EntitiesTransporter";
import MaintenanceProfile from "$entities/MaintenanceProfile";
@@ -42,6 +42,30 @@ export default class BulkEntitiesTransporter {
);
}
exportToJSON(entities: StorageEntity[]): string {
return JSON.stringify({
$type: 'list',
elements: entities
.map(entity => {
switch (true) {
case entity instanceof MaintenanceProfile:
return BulkEntitiesTransporter.#transporters.profiles.exportToObject(entity);
case entity instanceof TagGroup:
return BulkEntitiesTransporter.#transporters.groups.exportToObject(entity);
}
return null;
})
.filter(value => !!value)
} as ImportableElementsList<ImportableEntityObject<StorageEntity>>, null, 2);
}
exportToCompressedJSON(entities: StorageEntity[]): string {
return compressToEncodedURIComponent(
this.exportToJSON(entities)
);
}
static isList(targetObject: any): targetObject is ImportableElementsList<ImportableEntityObject<StorageEntity>> {
return targetObject.$type
&& targetObject.$type === 'list'

View File

@@ -32,6 +32,10 @@ export default class EntitiesTransporter<EntityType> {
this.#targetEntityConstructor = entityConstructor;
}
isCorrectEntity(entityObject: unknown): entityObject is EntityType {
return entityObject instanceof this.#targetEntityConstructor;
}
importFromObject(importedObject: Record<string, any>): EntityType {
validateImportedEntity(
this.#entityName,
@@ -60,8 +64,8 @@ export default class EntitiesTransporter<EntityType> {
)
}
exportToJSON(entityObject: EntityType): string {
if (!(entityObject instanceof this.#targetEntityConstructor)) {
exportToObject(entityObject: EntityType) {
if (!this.isCorrectEntity(entityObject)) {
throw new TypeError('Transporter should be connected to the same entity to export!');
}
@@ -69,12 +73,18 @@ export default class EntitiesTransporter<EntityType> {
throw new TypeError('Only storage entities could be exported!');
}
const exportableObject = exportEntityToObject(
return exportEntityToObject(
this.#entityName,
entityObject
);
}
return JSON.stringify(exportableObject, null, 2);
exportToJSON(entityObject: EntityType): string {
return JSON.stringify(
this.exportToObject(entityObject),
null,
2
);
}
exportToCompressedJSON(entityObject: EntityType): string {