Compare commits
4 Commits
a4468f18dc
...
be61293cbe
| Author | SHA1 | Date | |
|---|---|---|---|
| be61293cbe | |||
| e493194ce1 | |||
| b61631c33c | |||
| fa65da75bc |
@@ -266,7 +266,7 @@ const expanded = ref(new Set());
|
||||
|
||||
const mappedKeys = {
|
||||
actors: actorsById,
|
||||
tags: tagsById,
|
||||
// tags: tagsById,
|
||||
movies: moviesById,
|
||||
};
|
||||
|
||||
@@ -292,6 +292,16 @@ const curatedRevisions = computed(() => revisions.value.map((revision) => {
|
||||
}))];
|
||||
}
|
||||
|
||||
if (key === 'tags') {
|
||||
return [key, value.map((tag) => ({
|
||||
id: tag.id,
|
||||
name: tag.actorId
|
||||
? `${actorsById.value[tag.actorId]?.name}: ${tagsById.value[tag.id]?.name}`
|
||||
: tagsById.value[tag.id]?.name,
|
||||
modified: revision.deltas.some((delta) => delta.key === key && !delta.value.some((deltaTag) => deltaTag.id === tag.id)),
|
||||
}))];
|
||||
}
|
||||
|
||||
if (key === 'socials') {
|
||||
// new socials don't have IDs yet, so we need to compare the values
|
||||
return [key, value.map((item) => ({
|
||||
@@ -323,6 +333,19 @@ const curatedRevisions = computed(() => revisions.value.map((revision) => {
|
||||
};
|
||||
}
|
||||
|
||||
if (delta.key === 'tags') {
|
||||
return {
|
||||
...delta,
|
||||
value: delta.value.map((tag) => ({
|
||||
id: tag.id,
|
||||
name: tag.actorId
|
||||
? `${actorsById.value[tag.actorId]?.name}: ${tagsById.value[tag.id]?.name}`
|
||||
: tagsById.value[tag.id]?.name,
|
||||
modified: !revision.base[delta.key].some((deltaTag) => deltaTag.id === tag.id),
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
if (delta.key === 'socials') {
|
||||
// new socials don't have IDs yet, so we need to compare the values
|
||||
return {
|
||||
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "traxxx-web",
|
||||
"version": "0.49.0",
|
||||
"version": "0.49.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"version": "0.49.0",
|
||||
"version": "0.49.1",
|
||||
"dependencies": {
|
||||
"@brillout/json-serializer": "^0.5.8",
|
||||
"@dicebear/collection": "^7.0.5",
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
"overrides": {
|
||||
"vite": "$vite"
|
||||
},
|
||||
"version": "0.49.0",
|
||||
"version": "0.49.1",
|
||||
"imports": {
|
||||
"#/*": "./*.js"
|
||||
}
|
||||
|
||||
@@ -729,8 +729,14 @@ export async function fetchSceneRevisions(revisionId, filters = {}, reqUser) {
|
||||
.limit(limit)
|
||||
.offset((page - 1) * limit);
|
||||
|
||||
const actorIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.actors, ...(revision.deltas.find((delta) => delta.key === 'actors')?.value || [])])));
|
||||
const tagIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.tags, ...(revision.deltas.find((delta) => delta.key === 'tags')?.value || [])])));
|
||||
const actorIds = Array.from(new Set(revisions.flatMap((revision) => [
|
||||
...revision.base.actors,
|
||||
...(revision.deltas.find((delta) => delta.key === 'actors')?.value || []),
|
||||
...revision.base.tags.map((tag) => tag.actorId),
|
||||
...revision.deltas.find((delta) => delta.key === 'tags')?.value.map((tag) => tag.actorId) || [],
|
||||
].filter(Boolean))));
|
||||
|
||||
const tagIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.tags, ...(revision.deltas.find((delta) => delta.key === 'tags')?.value || [])].map((tag) => tag.id))));
|
||||
const movieIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.movies, ...(revision.deltas.find((delta) => delta.key === 'movies')?.value || [])])));
|
||||
|
||||
const [actors, tags, movies] = await Promise.all([
|
||||
@@ -967,6 +973,13 @@ export async function createSceneRevision(sceneId, { edits, comment, apply }, re
|
||||
return [key, values.id];
|
||||
}
|
||||
|
||||
if (key === 'tags') {
|
||||
return [key, values.map((tag) => ({
|
||||
id: tag.id,
|
||||
actorId: tag.actorId,
|
||||
}))];
|
||||
}
|
||||
|
||||
if (Array.isArray(values)) {
|
||||
return [key, values.map((value) => value?.hash || value?.id || value)];
|
||||
}
|
||||
@@ -983,6 +996,16 @@ export async function createSceneRevision(sceneId, { edits, comment, apply }, re
|
||||
return null;
|
||||
}
|
||||
|
||||
if (key === 'tags') {
|
||||
return {
|
||||
key,
|
||||
value: value.map((tag) => ({
|
||||
id: tag.id,
|
||||
actorId: tag.actorId,
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
const valueSet = new Set(value);
|
||||
const baseSet = new Set(baseScene[key]);
|
||||
|
||||
80
src/tools/scene_tag_revision_fix.js
Normal file
80
src/tools/scene_tag_revision_fix.js
Normal file
@@ -0,0 +1,80 @@
|
||||
import { MerkleJson } from 'merkle-json';
|
||||
|
||||
import knex from '../knex.js';
|
||||
|
||||
const mj = new MerkleJson();
|
||||
|
||||
function curateTag(tag) {
|
||||
if (Object.hasOwn(tag, 'actorId')) {
|
||||
return {
|
||||
id: tag.id,
|
||||
actorId: tag.actorId,
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof tag === 'number') {
|
||||
return {
|
||||
id: tag,
|
||||
// can't restore actorId, don't set to null to hint at missing data
|
||||
};
|
||||
}
|
||||
|
||||
throw new Error(`Unrecognized tag delta: ${JSON.stringify(tag)}`);
|
||||
}
|
||||
|
||||
async function init() {
|
||||
const revisions = await knex('scenes_revisions');
|
||||
|
||||
// console.log(revisions);
|
||||
|
||||
const fixedRevisions = revisions.map((revision) => {
|
||||
if (revision.base.tags.length === 0 && !revision.deltas.some((delta) => delta.key === 'tags')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const newDeltas = revision.deltas.map((delta) => {
|
||||
if (delta.key !== 'tags') {
|
||||
return delta;
|
||||
}
|
||||
|
||||
return {
|
||||
...delta,
|
||||
value: delta.value.map((tag) => curateTag(tag)),
|
||||
};
|
||||
});
|
||||
|
||||
const newBase = {
|
||||
...revision.base,
|
||||
tags: revision.base.tags.map((tag) => curateTag(tag)),
|
||||
};
|
||||
|
||||
return {
|
||||
...revision,
|
||||
deltas: newDeltas,
|
||||
base: newBase,
|
||||
};
|
||||
}).filter(Boolean);
|
||||
|
||||
const entries = fixedRevisions.map((revision) => ({
|
||||
id: revision.id,
|
||||
base: JSON.stringify(revision.base),
|
||||
deltas: JSON.stringify(revision.deltas),
|
||||
hash: mj.hash({
|
||||
base: revision.base,
|
||||
deltas: revision.deltas,
|
||||
}),
|
||||
}));
|
||||
|
||||
console.log(entries);
|
||||
|
||||
await knex('scenes_revisions')
|
||||
.insert(entries)
|
||||
.onConflict('id')
|
||||
.merge(['base', 'deltas', 'hash']);
|
||||
|
||||
console.log(`Fixed ${entries.length} revisions`);
|
||||
|
||||
await knex.destroy();
|
||||
}
|
||||
|
||||
init();
|
||||
Reference in New Issue
Block a user