diff --git a/src/service/request.js b/src/service/request.js index ceae1c58..9c9efb36 100644 --- a/src/service/request.js +++ b/src/service/request.js @@ -309,7 +309,7 @@ export function $throw(code, error, endpoint) { if (endpoint?.startsWith('analysis/')) { ignoreError = true; } - if (endpoint.endsWith('/mutuals') && (code === 403 || code === -1)) { + if (endpoint?.endsWith('/mutuals') && (code === 403 || code === -1)) { ignoreError = true; } const text = message.map((s) => escapeTag(s)).join('
'); diff --git a/src/stores/favorite.js b/src/stores/favorite.js index 4370298e..3a925961 100644 --- a/src/stores/favorite.js +++ b/src/stores/favorite.js @@ -728,6 +728,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { friendStore.updateLocalFavoriteFriends(); isFavoriteLoading.value = false; watchState.isFavoritesLoaded = true; + countFavoriteGroups(); } }); } @@ -789,9 +790,8 @@ export const useFavoriteStore = defineStore('Favorite', () => { friendStore.updateSidebarFavorites(); } ref.$groupKey = `${ref.type}:${String(ref.tags[0])}`; - const group = getCachedFavoriteGroupsByTypeName()[ref.$groupKey]; - if (typeof group !== 'undefined') { - ++group.count; + if (!isFavoriteLoading.value) { + countFavoriteGroups(); } } else { if (ref.favoriteId !== json.favoriteId) { @@ -1631,6 +1631,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { handleFavoriteAdd, getCachedFavoritesByObjectId, checkInvalidLocalAvatars, - removeInvalidLocalAvatars + removeInvalidLocalAvatars, + getCachedFavoriteGroupsByTypeName }; }); diff --git a/src/views/Favorites/components/FavoritesMoveDropdown.vue b/src/views/Favorites/components/FavoritesMoveDropdown.vue index 1f14ac91..aa24c5b4 100644 --- a/src/views/Favorites/components/FavoritesMoveDropdown.vue +++ b/src/views/Favorites/components/FavoritesMoveDropdown.vue @@ -83,14 +83,14 @@ addFavoriteAvatar(groupAPI); } } else { - moveFavorite(props.currentFavorite.ref, groupAPI, props.type); + moveFavorite(props.currentFavorite.ref, groupAPI); } } - function moveFavorite(ref, group, type) { + function moveFavorite(ref, group) { favoriteRequest.deleteFavorite({ objectId: ref.id }).then(() => { favoriteRequest.addFavorite({ - type, + type: group.type, favoriteId: ref.id, tags: group.name }); @@ -100,7 +100,7 @@ function addFavoriteAvatar(groupAPI) { return favoriteRequest .addFavorite({ - type: 'avatar', + type: groupAPI.type, favoriteId: props.currentFavorite.id, tags: groupAPI.name }) diff --git a/src/views/Favorites/dialogs/AvatarImportDialog.vue b/src/views/Favorites/dialogs/AvatarImportDialog.vue index c5d502e5..ef74f426 100644 --- a/src/views/Favorites/dialogs/AvatarImportDialog.vue +++ b/src/views/Favorites/dialogs/AvatarImportDialog.vue @@ -137,7 +137,7 @@ const { showUserDialog } = useUserStore(); const { favoriteAvatarGroups, avatarImportDialogInput, avatarImportDialogVisible, localAvatarFavoriteGroups } = storeToRefs(useFavoriteStore()); - const { addLocalAvatarFavorite, localAvatarFavGroupLength } = useFavoriteStore(); + const { addLocalAvatarFavorite, localAvatarFavGroupLength, getCachedFavoritesByObjectId } = useFavoriteStore(); const { showAvatarDialog, applyAvatar } = useAvatarStore(); const { showFullscreenImageDialog } = useGalleryStore(); @@ -302,7 +302,7 @@ function addFavoriteAvatar(ref, group, message) { return favoriteRequest .addFavorite({ - type: 'avatar', + type: group.type, favoriteId: ref.id, tags: group.name }) @@ -329,6 +329,9 @@ } ref = data[i]; if (D.avatarImportFavoriteGroup) { + if (getCachedFavoritesByObjectId(ref.id)) { + throw new Error('Avatar is already in favorites'); + } await addFavoriteAvatar(ref, D.avatarImportFavoriteGroup, false); } else if (D.avatarImportLocalFavoriteGroup) { addLocalAvatarFavorite(ref.id, D.avatarImportLocalFavoriteGroup); diff --git a/src/views/Favorites/dialogs/FriendImportDialog.vue b/src/views/Favorites/dialogs/FriendImportDialog.vue index 644ddadf..4e36bea3 100644 --- a/src/views/Favorites/dialogs/FriendImportDialog.vue +++ b/src/views/Favorites/dialogs/FriendImportDialog.vue @@ -121,6 +121,7 @@ const { favoriteFriendGroups, friendImportDialogInput, friendImportDialogVisible } = storeToRefs(useFavoriteStore()); const { showFullscreenImageDialog } = useGalleryStore(); + const { getCachedFavoritesByObjectId } = useFavoriteStore(); const friendImportDialog = ref({ loading: false, @@ -234,6 +235,9 @@ break; } ref = data[i]; + if (getCachedFavoritesByObjectId(ref.id)) { + throw new Error('Friend is already in favorites'); + } await addFavoriteUser(ref, D.friendImportFavoriteGroup, false); removeFromArray(friendImportTable.value.data, ref); D.userIdList.delete(ref.id); @@ -250,7 +254,7 @@ function addFavoriteUser(ref, group, message) { return favoriteRequest .addFavorite({ - type: 'friend', + type: group.type, favoriteId: ref.id, tags: group.name }) diff --git a/src/views/Favorites/dialogs/WorldImportDialog.vue b/src/views/Favorites/dialogs/WorldImportDialog.vue index fa8c05a2..afee95c1 100644 --- a/src/views/Favorites/dialogs/WorldImportDialog.vue +++ b/src/views/Favorites/dialogs/WorldImportDialog.vue @@ -139,7 +139,7 @@ const { showUserDialog } = useUserStore(); const { favoriteWorldGroups, worldImportDialogInput, worldImportDialogVisible, localWorldFavoriteGroups } = storeToRefs(useFavoriteStore()); - const { localWorldFavGroupLength, addLocalWorldFavorite } = useFavoriteStore(); + const { localWorldFavGroupLength, addLocalWorldFavorite, getCachedFavoritesByObjectId } = useFavoriteStore(); const { showWorldDialog } = useWorldStore(); const { showFullscreenImageDialog } = useGalleryStore(); @@ -321,6 +321,9 @@ } ref = data[i]; if (D.worldImportFavoriteGroup) { + if (getCachedFavoritesByObjectId(ref.id)) { + throw new Error('World is already in favorites'); + } await addFavoriteWorld(ref, D.worldImportFavoriteGroup, false); } else if (D.worldImportLocalFavoriteGroup) { addLocalWorldFavorite(ref.id, D.worldImportLocalFavoriteGroup);