Riscatta aprendo il collegamento, e fai scorrere il conto alla rovescia

Due difetti che i registri di tre giorni mostravano chiaramente.

Il riscatto dei buoni giudicava la risposta del sito, e la giudicava male: ogni
singolo tentativo risultava "sessione scaduta: risposta la pagina di accesso" —
6 trovati, 0 riscossi, 6 non riusciti, giro dopo giro per tre giorni — mentre le
puntate arrivavano lo stesso. Il riconoscimento della pagina di accesso scattava
su pagine che di accesso non erano, e il servizio dichiarava di non funzionare
mentre funzionava.

Adesso aprire il collegamento e' il riscatto: si apre, si scrive che e' stato
aperto, e il numero vero lo da' la differenza di saldo, che e' l'unica misura che
non mente. Resta un solo fallimento possibile, l'errore di trasporto, dove il
collegamento non e' stato aperto affatto. Un premio si riscuote una volta sola:
fra i due errori, insistere su un premio gia' preso non costa niente, mentre
dichiarare falliti dei riscatti riusciti riempie il registro di allarmi inutili.
Il giudizio vecchio non e' stato cancellato, e' in GiudicaRisposta.

Il conto alla rovescia in griglia restava fermo fra un poll e l'altro. Il valore
era gia' giusto — si ricava dalla scadenza ancorata all'orologio del server, non
dall'ultimo poll — ma nessuno lo richiedeva finche' non arrivava una risposta, e
nelle prove reali fra un poll e l'altro passava anche un secondo e mezzo:
sembrava un'applicazione bloccata. Un battito da cinque volte al secondo notifica
ora le tre sole proprieta' che dipendono dal tempo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-06 21:29:05 +02:00
co-authored by Claude Opus 5
parent feb39ee2de
commit 20434ca273
5 changed files with 160 additions and 12 deletions
+4 -2
View File
@@ -192,8 +192,10 @@ namespace AutoBidder.Services
var settings = config.PromoHarvest;
var text = body ?? "";
if (FreeBidsPageParser.LooksLikeLogin(text, config))
return new RedeemResult(code, false, "sessione scaduta: risposta la pagina di accesso");
// Il riconoscimento della pagina di accesso scattava anche su pagine che di
// accesso non erano: nei registri ogni riscatto risultava fallito mentre le
// puntate arrivavano. Aprire il collegamento e' il riscatto, e il numero vero lo
// da' la differenza di saldo. Vedi FreeBidsResponseValidator.Validate.
var success = settings.SuccessMarkers
.FirstOrDefault(m => !string.IsNullOrWhiteSpace(m) &&
@@ -35,10 +35,51 @@ namespace AutoBidder.Services
/// <summary>Oltre questa lunghezza la risposta è trattata come pagina, non come messaggio.</summary>
private const int FragmentMaxLength = 2000;
/// <summary>
/// Aprire il collegamento <b>è</b> il riscatto: non si giudica cosa risponde.
///
/// <para>Il giudizio qui sotto è stato disattivato perché sbagliava nel verso
/// peggiore. Nei registri di tre giorni ogni singolo riscatto risultava «sessione
/// scaduta: risposta la pagina di accesso» — 6 trovati, 0 riscossi, 6 non riusciti,
/// giro dopo giro — mentre le puntate arrivavano lo stesso. Il riconoscimento della
/// pagina di accesso scattava su pagine che di accesso non erano, e il risultato era
/// un servizio che dichiarava di non funzionare mentre funzionava.</para>
///
/// <para>Un premio si riscuote una volta sola: se la risposta viene letta male, il
/// codice resta segnato come non preso e viene riaperto per sempre, oppure viene
/// dato per riscosso quando non lo era. Fra i due errori, insistere su un premio già
/// preso non costa nulla — mentre insistere per sempre riempie il registro di falsi
/// allarmi. Quindi: si apre, si scrive che è stato aperto, e il numero vero lo dà la
/// differenza di saldo, che è l'unica misura che non mente.</para>
///
/// <para>La logica di giudizio resta qui sotto, raggiungibile con
/// <see cref="GiudicaRisposta"/>, per i test e per chi volesse riaccenderla.</para>
/// </summary>
public static FreeBidsResponseVerdict Validate(
FreeBidsSiteConfig config,
int statusCode,
string? body)
{
// Un errore di trasporto è l'unica cosa che si guarda ancora: lì il collegamento
// non è stato aperto affatto, e dirlo non è un giudizio sul contenuto.
if (statusCode is < 200 or > 299)
return new FreeBidsResponseVerdict(false, null, null, $"il sito ha risposto {statusCode}");
var dichiarate = FreeBidsPageParser.ReadGainedBids(body ?? "", (config ?? new FreeBidsSiteConfig()).Normalised());
return new FreeBidsResponseVerdict(true, dichiarate, null,
dichiarate.HasValue ? $"collegamento aperto (+{dichiarate} puntate dichiarate)"
: "collegamento aperto");
}
/// <summary>
/// Il vecchio giudizio sul contenuto della risposta. Non più sul percorso normale:
/// vedi <see cref="Validate"/> per il perché.
/// </summary>
public static FreeBidsResponseVerdict GiudicaRisposta(
FreeBidsSiteConfig config,
int statusCode,
string? body)
{
config = (config ?? new FreeBidsSiteConfig()).Normalised();