mirror of
https://github.com/orangecoding/fredy.git
synced 2026-06-16 12:31:07 +00:00
new usersetting to blacklist (filter) also on description
This commit is contained in:
@@ -334,6 +334,11 @@
|
||||
"settings.providerDetailsPlaceholder": "Anbieter für Detail-Abruf auswählen...",
|
||||
"settings.providerDetailsUpdated": "Anbieter-Detail-Einstellung aktualisiert.",
|
||||
"settings.providerDetailsUpdateError": "Einstellung konnte nicht aktualisiert werden.",
|
||||
"settings.blacklistFilterOnProviderDetails": "Blacklist-Filter auf Anbieter-Details anwenden",
|
||||
"settings.blacklistFilterOnProviderDetailsHelp": "Wenn aktiv, wird die Blacklist zusätzlich gegen die vollständige Beschreibung geprüft, die durch den obigen Anbieter-Details-Schritt geladen wurde. Damit lassen sich Spam-Anbieter (z. B. 'allkauf', 'massa') herausfiltern, die nur tief in der Detail-Seite auftauchen und nicht im kurzen Vorschau-Text der Suchergebnisse stehen. Standardmäßig aus, weil die vollständige Beschreibung oft generischen Boilerplate-Text (Kontaktdaten, rechtliche Hinweise) enthält, der ein Blacklist-Wort versehentlich auslösen und passende Inserate entfernen kann. Hat keine Wirkung auf Anbieter, für die Anbieter-Details nicht aktiviert sind.",
|
||||
"settings.blacklistFilterOnProviderDetailsEnable": "Blacklist auf die vollständige Detail-Beschreibung anwenden",
|
||||
"settings.blacklistFilterOnProviderDetailsUpdated": "Einstellung Blacklist-auf-Details aktualisiert.",
|
||||
"settings.blacklistFilterOnProviderDetailsUpdateError": "Einstellung konnte nicht aktualisiert werden.",
|
||||
"settings.listingDeletion": "Inserate löschen",
|
||||
"settings.listingDeletionHelp": "Wähle den Standard-Löschmodus. Soft Delete blendet Inserate aus ohne erneutes Scraping; Hard Delete entfernt sie aus der Datenbank.",
|
||||
"settings.listingDeletionSoftLabel": "Als gelöscht markieren (Soft Delete)",
|
||||
|
||||
@@ -334,6 +334,11 @@
|
||||
"settings.providerDetailsPlaceholder": "Select providers to fetch details from...",
|
||||
"settings.providerDetailsUpdated": "Provider details setting updated.",
|
||||
"settings.providerDetailsUpdateError": "Failed to update setting.",
|
||||
"settings.blacklistFilterOnProviderDetails": "Blacklist-Filtering on Provider Details",
|
||||
"settings.blacklistFilterOnProviderDetailsHelp": "When enabled, the blacklist is re-checked against the full description loaded by the Provider Details step above. This catches spam advertisers (e.g. 'allkauf', 'massa') that only appear deep in the detail page and not in the short search-result snippet. Off by default, because the full description often contains generic boilerplate (contact info, legal text) that may accidentally trigger a blacklist term and remove otherwise relevant listings. Has no effect on providers for which Provider Details is not enabled.",
|
||||
"settings.blacklistFilterOnProviderDetailsEnable": "Apply blacklist to the full detail description",
|
||||
"settings.blacklistFilterOnProviderDetailsUpdated": "Blacklist-on-details setting updated.",
|
||||
"settings.blacklistFilterOnProviderDetailsUpdateError": "Failed to update setting.",
|
||||
"settings.listingDeletion": "Listing deletion",
|
||||
"settings.listingDeletionHelp": "Choose the default deletion mode. Soft delete hides them without re-scraping; hard delete removes them from the database.",
|
||||
"settings.listingDeletionSoftLabel": "Mark as deleted (Soft Delete)",
|
||||
|
||||
@@ -337,6 +337,28 @@ export const useFredyState = create(
|
||||
throw Exception;
|
||||
}
|
||||
},
|
||||
async setBlacklistFilterOnProviderDetails(enabled) {
|
||||
try {
|
||||
await xhrPost('/api/user/settings/blacklist-filter-on-details', {
|
||||
blacklist_filter_on_provider_details: enabled,
|
||||
});
|
||||
set((state) => ({
|
||||
userSettings: {
|
||||
...state.userSettings,
|
||||
settings: {
|
||||
...state.userSettings.settings,
|
||||
blacklist_filter_on_provider_details: enabled,
|
||||
},
|
||||
},
|
||||
}));
|
||||
} catch (Exception) {
|
||||
console.error(
|
||||
'Error while trying to update blacklist-filter-on-provider-details setting. Error:',
|
||||
Exception,
|
||||
);
|
||||
throw Exception;
|
||||
}
|
||||
},
|
||||
async setListingsViewMode(listings_view_mode) {
|
||||
try {
|
||||
await xhrPost('/api/user/settings/listings-view-mode', { listings_view_mode });
|
||||
|
||||
@@ -130,6 +130,9 @@ const GeneralSettings = function GeneralSettings() {
|
||||
// User settings state
|
||||
const homeAddress = useSelector((state) => state.userSettings.settings.home_address);
|
||||
const providerDetails = useSelector((state) => state.userSettings.settings.provider_details);
|
||||
const blacklistFilterOnProviderDetails = useSelector(
|
||||
(state) => state.userSettings.settings.blacklist_filter_on_provider_details,
|
||||
);
|
||||
const listingDeletionPreference = useSelector((state) => state.userSettings.settings.listing_deletion_preference);
|
||||
const allProviders = useSelector((state) => state.provider);
|
||||
const [address, setAddress] = useState(homeAddress?.address || '');
|
||||
@@ -647,6 +650,25 @@ const GeneralSettings = function GeneralSettings() {
|
||||
/>
|
||||
</SegmentPart>
|
||||
|
||||
<SegmentPart
|
||||
name={t('settings.blacklistFilterOnProviderDetails')}
|
||||
helpText={t('settings.blacklistFilterOnProviderDetailsHelp')}
|
||||
>
|
||||
<Checkbox
|
||||
checked={blacklistFilterOnProviderDetails === true}
|
||||
onChange={async (e) => {
|
||||
try {
|
||||
await actions.userSettings.setBlacklistFilterOnProviderDetails(e.target.checked);
|
||||
Toast.success(t('settings.blacklistFilterOnProviderDetailsUpdated'));
|
||||
} catch {
|
||||
Toast.error(t('settings.blacklistFilterOnProviderDetailsUpdateError'));
|
||||
}
|
||||
}}
|
||||
>
|
||||
{t('settings.blacklistFilterOnProviderDetailsEnable')}
|
||||
</Checkbox>
|
||||
</SegmentPart>
|
||||
|
||||
<SegmentPart name={t('settings.listingDeletion')} helpText={t('settings.listingDeletionHelp')}>
|
||||
<RadioGroup
|
||||
value={listingDeleteHard ? 'hard' : 'soft'}
|
||||
|
||||
Reference in New Issue
Block a user