Syncing stashes on actor merge, improved merge dialog feedback.

This commit is contained in:
2026-06-09 01:23:23 +02:00
parent 3a86651891
commit d9f432ef73
2 changed files with 29 additions and 2 deletions

View File

@@ -58,7 +58,10 @@
</template>
<div class="dialog-actions">
<Ellipsis v-if="submitted" />
<button
v-else
type="submit"
class="button button-primary"
:disabled="!targetActor"
@@ -73,6 +76,7 @@
import { ref, onMounted } from 'vue';
import Dialog from '#/components/dialog/dialog.vue';
import Ellipsis from '#/components/loading/ellipsis.vue';
import { get, post } from '#/src/api.js';
@@ -89,6 +93,7 @@ const targetActor = ref(null);
const actorInput = ref(null);
const actorQuery = ref('');
const actorResults = ref([]);
const submitted = ref(false);
async function searchActors() {
const res = await get('/actors', {
@@ -101,12 +106,16 @@ async function searchActors() {
}
async function merge() {
submitted.value = true;
await post(`/actors/${targetActor.value.id}/merge/${props.actor.id}`, null, {
successFeedback: `Merged ${props.actor.entity ? `${props.actor.name} (${props.actor.entity.name})` : props.actor.name} into ${targetActor.value.name}`,
errorFeedback: `Failed to merge ${props.actor.entity ? `${props.actor.name} (${props.actor.entity.name})` : props.actor.name} into ${targetActor.value.name}`,
appendErrorMessage: true,
});
submitted.value = false;
emit('close');
}
@@ -183,4 +192,13 @@ onMounted(() => {
font-family: monospace;
font-size: 1rem;
}
.load-container {
height: 2rem;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
padding: 0 1rem;
}
</style>

View File

@@ -22,7 +22,7 @@ import slugify from '../utils/slugify.js';
import { curateRevision } from './revisions.js';
import { interpolateProfiles, platformsByHostname } from '../common/actors.mjs'; // eslint-disable-line import/namespace
import { resolvePlace } from '../common/geo.mjs'; // eslint-disable-line import/namespace
import { syncScenes, syncActors } from './sync.js';
import { syncScenes, syncActors, syncStashes } from './sync.js';
import verifyAbility from '../utils/verify-ability.js';
const logger = initLogger();
@@ -600,6 +600,11 @@ export async function mergeActors(targetActorId, sourceActorId, reqUser) {
.where('actor_id', sourceActorId)
.returning('release_id');
await trx('stashes_actors')
.update('actor_id', targetActorId)
.where('actor_id', sourceActorId)
.returning('id');
try {
await trx.commit();
} catch (error) {
@@ -616,7 +621,11 @@ export async function mergeActors(targetActorId, sourceActorId, reqUser) {
omit,
}, { refreshView: false });
await syncScenes(mergedScenes.map((scene) => scene.release_id));
await Promise.all([
syncScenes(mergedScenes.map((scene) => scene.release_id)),
syncActors([targetActorId, sourceActorId]),
syncStashes('actor', [targetActorId, sourceActorId]),
]);
return {
scenes: mergedScenes.length,