Парсер: часы ночной паузы в настройках админки

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zabudko-ruandClaude Opus 5.5 committed 2026-10-26 00:33:07 +04:00
1 parent d32f37457b
commit 5470036a69
9 files changed
+95 -30

No files matched your search

+23
View File
@@ -10,6 +10,9 @@ interface Settings {
freshDays: number;
pauseSec: number;
maxPages: number;
quietHours: boolean;
quietFrom: number;
quietTo: number;
categories: number[];
useKey: boolean;
removalCheck: boolean;
@@ -65,6 +68,26 @@ export function ParserSettings() {
{number('maxPages', x.maxPages, 1, 10, x.pagesHint)}
</div>
<div className="space-y-4 border-t border-line pt-5">
<h3 className="font-medium">{x.quietTitle}</h3>
<p className="text-sm text-muted">{x.quietHint}</p>
<Toggle checked={f.quietHours} onChange={(v) => setF({ ...f, quietHours: v })} label={x.quietOn} />
<div className="grid gap-4 sm:grid-cols-3">
{(['quietFrom', 'quietTo'] as const).map((field) => (
<div key={field}>
<label className="label" htmlFor={`ps-${field}`}>{x[field]}</label>
<select
id={`ps-${field}`} className="field" disabled={!f.quietHours}
value={f[field]} onChange={(e) => setF({ ...f, [field]: Number(e.target.value) })}
>
{Array.from({ length: 24 }, (_, h) => <option key={h} value={h}>{`${String(h).padStart(2, '0')}:00`}</option>)}
</select>
</div>
))}
</div>
{f.quietHours && f.quietFrom === f.quietTo && <p className="text-sm text-warn" role="status">{x.quietSame}</p>}
</div>
<fieldset>
<legend className="label">{x.categories}</legend>
<div className="flex flex-wrap gap-2">
+6
View File
@@ -103,6 +103,8 @@ const ru = {
keyHint: 'С ключом проход быстрее и известно точное время размещения, но ключ платный. Без ключа парсер работает медленнее. Если баланс ключа кончился, парсер сам переходит на работу без ключа.',
useKey: 'Использовать ключ', key: 'Текущий ключ', keyNone: 'не задан', keyEnv: 'из настроек сервера', keySet: 'задан здесь',
keyNew: 'Вставьте новый ключ, чтобы заменить', keyClear: 'Убрать ключ', keyConfirm: 'Убрать ключ, заданный в админке?',
quietTitle: 'Ночная пауза', quietHint: 'В эти часы по Еревану парсер и проверка снятых объявлений не работают — так не тратятся токены ридера. Сторож парсера в паузу не тревожит.',
quietOn: 'Останавливать парсер на ночь', quietFrom: 'С (Ереван)', quietTo: 'До (Ереван)', quietSame: 'Начало и конец совпадают — паузы не будет',
removalTitle: 'Отметка «Снято с List.am»', removalCheck: 'Проверять, не сняты ли объявления, по которым есть лиды',
recheckHours: 'Перепроверять объявление раз в, часов', removalBatch: 'Объявлений за заход (раз в 10 минут)', batchHint: (n: number) => `До ${n} проверок в сутки`,
},
@@ -336,6 +338,8 @@ const hy: Dict = {
keyHint: 'Բանալիով անցումն ավելի արագ է, և հայտնի է տեղադրման ճշգրիտ ժամը, բայց բանալին վճարովի է։ Առանց բանալու պարսերն ավելի դանդաղ է։ Եթե բանալու մնացորդը սպառվի, պարսերն ինքը կանցնի առանց բանալու աշխատանքի։',
useKey: 'Օգտագործել բանալին', key: 'Ընթացիկ բանալի', keyNone: 'նշված չէ', keyEnv: 'սերվերի կարգավորումներից', keySet: 'նշված է այստեղ',
keyNew: 'Տեղադրեք նոր բանալի՝ փոխարինելու համար', keyClear: 'Հեռացնել բանալին', keyConfirm: 'Հեռացնե՞լ ադմինկայում նշված բանալին',
quietTitle: 'Գիշերային դադար', quietHint: 'Այս ժամերին (Երևանի ժամանակով) պարսերը և հանված հայտարարությունների ստուգումը չեն աշխատում՝ ընթերցիչի տոկենները չեն ծախսվում։ Պարսերի պահակը դադարի ժամանակ չի անհանգստացնում։',
quietOn: 'Գիշերը կանգնեցնել պարսերը', quietFrom: 'Սկսած (Երևան)', quietTo: 'Մինչև (Երևան)', quietSame: 'Սկիզբը և ավարտը համընկնում են՝ դադար չի լինի',
removalTitle: '«Հանվել է List.am-ից» նշում', removalCheck: 'Ստուգել՝ արդյոք հանված են լիդ ունեցող հայտարարությունները',
recheckHours: 'Վերստուգել հայտարարությունը, ժամը մեկ', removalBatch: 'Հայտարարություններ մեկ մոտեցմամբ (10 րոպեն մեկ)', batchHint: (n) => `Օրական մինչև ${n} ստուգում`,
},
@@ -567,6 +571,8 @@ const en: Dict = {
keyHint: 'With a key a run is faster and the exact posting time is known, but the key is paid. Without it the parser is slower. If the key balance runs out, the parser switches to keyless mode by itself.',
useKey: 'Use the key', key: 'Current key', keyNone: 'not set', keyEnv: 'from server settings', keySet: 'set here',
keyNew: 'Paste a new key to replace', keyClear: 'Remove key', keyConfirm: 'Remove the key set in the admin panel?',
quietTitle: 'Night pause', quietHint: 'During these hours (Yerevan time) the parser and the removal check do not run, so reader tokens are not spent. The parser watchdog stays silent during the pause.',
quietOn: 'Stop the parser at night', quietFrom: 'From (Yerevan)', quietTo: 'Until (Yerevan)', quietSame: 'Start and end are the same, so there is no pause',
removalTitle: '“Removed from List.am” mark', removalCheck: 'Check whether listings with leads were removed',
recheckHours: 'Recheck a listing every, hours', removalBatch: 'Listings per batch (every 10 minutes)', batchHint: (n) => `Up to ${n} checks a day`,
},