diff --git a/frontend/src/components/settings/PostAssociationsCard.vue b/frontend/src/components/settings/PostAssociationsCard.vue index 141d789..c267fde 100644 --- a/frontend/src/components/settings/PostAssociationsCard.vue +++ b/frontend/src/components/settings/PostAssociationsCard.vue @@ -6,9 +6,10 @@ >
Some creators post a cropped fragment on Patreon to say the real thing has - landed in their Discord. FC proposes those pairs; nothing is linked until - you accept one. A wrong link would tell you two different pieces are the - same, so this stays a suggestion. + landed in their Discord. When the creator's own file name settles it — + the same working name on both posts and nowhere else in their library — + FC links the pair for you. Anything less certain waits here, because a + wrong link would tell you two different pieces are the same.
+ +
+ Off, every pair waits for you here — including the ones there is nothing + left to decide about. +
+
- A pair always needs two reasons — being close in time - and the post itself mentioning Discord. Neither is enough alone at any - setting at or above 0.55, which is what stops a busy posting day from - producing false pairs. + A pair needs two reasons — close in time, the post + mentioning Discord or the server, or a marker the creator uses on + both and almost nowhere else. None is enough alone at any setting at + or above 0.45, which is what stops a busy posting day from producing + false pairs. A shared working name is weighed separately: it says the + two are the same piece rather than that they happened near each + other.
@@ -57,8 +72,9 @@
- Nothing proposed. That is the expected state most of the time — pairs only - appear when a post both lands near a drop and says it is about Discord. + Nothing waiting. That is the expected state most of the time — a pair the + file names settle is linked without asking, and everything else needs a + post to both land near a drop and point at Discord.
+ · shared marker {{ Math.round(p.signals.marker * 100) }}% + +
+ +
+ both call it + {{ p.signals.identity_token }} + ({{ Math.round((p.signals.identity ?? 0) * 100) }}% — shared with + another post of theirs, so not conclusive on its own)
Link @@ -98,10 +127,12 @@ import SettingNumberField from '../common/SettingNumberField.vue' const store = usePostAssociationsStore() const enabled = ref(true) +const auto = ref(true) const threshold = ref(0.6) const windowHours = ref(24) watch(() => store.enabled, (v) => { enabled.value = v }, { immediate: true }) +watch(() => store.auto, (v) => { auto.value = v }, { immediate: true }) watch(() => store.threshold, (v) => { threshold.value = v }, { immediate: true }) watch(() => store.windowHours, (v) => { windowHours.value = v }, { immediate: true }) diff --git a/frontend/src/stores/postAssociations.js b/frontend/src/stores/postAssociations.js index e8a2027..b98cc55 100644 --- a/frontend/src/stores/postAssociations.js +++ b/frontend/src/stores/postAssociations.js @@ -6,14 +6,18 @@ import { useAsyncAction } from '../composables/useAsyncAction.js' import { toast } from '../utils/toast.js' // Backs the announcement review queue (#388 E5): "this Patreon post announced -// that Discord drop". Confirm-only, deliberately — a wrongly-asserted link -// tells the operator two different pieces are one, which is worse than no link -// at all, so accept is the ONLY thing that makes a link real. Mirrors -// seriesSuggestions (FC-6.3), which is the same shape for the same reason. +// that Discord drop". A wrongly-asserted link tells the operator two different +// pieces are one, which is worse than no link at all — so what reaches this +// queue is everything FC is NOT sure enough about to act on by itself. +// +// A pair the creator's own working name identifies, where that name is on +// these two posts and nowhere else in their library, is linked without asking +// (`auto`). Mirrors seriesSuggestions (FC-6.3) in shape. export const usePostAssociationsStore = defineStore('postAssociations', () => { const api = useApi() const proposals = ref([]) const enabled = ref(true) + const auto = ref(true) const threshold = ref(0.6) const windowHours = ref(24) const { loading, error, run } = useAsyncAction({ errorAs: 'message' }) @@ -28,6 +32,7 @@ export const usePostAssociationsStore = defineStore('postAssociations', () => { async function loadSettings () { const s = await api.get('/api/settings/import') enabled.value = s.discord_link_enabled + auto.value = s.discord_link_auto threshold.value = s.discord_link_threshold windowHours.value = s.discord_link_window_hours } @@ -41,6 +46,11 @@ export const usePostAssociationsStore = defineStore('postAssociations', () => { await saveSettings({ discord_link_enabled: v }) } + async function setAuto (v) { + auto.value = v + await saveSettings({ discord_link_auto: v }) + } + async function setThreshold (v) { threshold.value = v await saveSettings({ discord_link_threshold: v }) @@ -76,8 +86,8 @@ export const usePostAssociationsStore = defineStore('postAssociations', () => { } return { - proposals, enabled, threshold, windowHours, loading, error, - load, loadSettings, setEnabled, setThreshold, setWindowHours, + proposals, enabled, auto, threshold, windowHours, loading, error, + load, loadSettings, setEnabled, setAuto, setThreshold, setWindowHours, accept, dismiss, rescan } })