Mark a dupe in the contact type column, as N1MM does
N1MM writes a contact type on every contact it logs: `D` for a station already worked, `N` for one the entry may not work at all, and empty for an ordinary contact. Nothing here wrote the column, so a dupe counted as a contact worth no points instead of dropping out of the score, and the two places that read the column did nothing: the QTC pile offered dupes that N1MM leaves out, and the statistics window could not leave dupes out either. The marking is in one place, `ContestLog.ApplyVerdict`, and every contest is marked the same way. What changes between contests is what counts as a dupe and which stations are workable, and both come from the contest, as they do in N1MM's `Contact.IsDupe`. No contest module in N1MM marks differently. Our own callsign is not workable either, which is what N1MM adds on top of the contest rule. Two details follow N1MM as well: QTC traffic keeps an empty column, because its `IsDupe` only marks a row while the program is logging contacts; and a mark that came with the contact stands, because N1MM marks a contact when it logs or edits one and never clears marks in a pass over the log. Editing a contact clears the column so it is worked out again, which is what N1MM does at the same point: an edit can move a contact to a band where it is no longer a dupe. A dupe is now out of the score altogether — contacts, points and multipliers — which is N1MM's `ScoreClass.AddContact`. The QSO count still counts WAE QTC rows as contacts; that is the other half of the scoring audit's item 14. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0157i7PiZyqBkquxS9A6FTdQ
This commit is contained in:
@@ -67,7 +67,16 @@ public sealed class QsoEditor
|
||||
public QsoEdit Apply(Qso qso, QsoField field, string text)
|
||||
{
|
||||
QsoEdit edit = Applied(qso, field, text);
|
||||
return edit.IsAccepted ? edit : edit with { Field = field };
|
||||
if (!edit.IsAccepted)
|
||||
{
|
||||
return edit with { Field = field };
|
||||
}
|
||||
// the contact type is left for the log to work out again: an edit can
|
||||
// move a contact to a band where it is no longer a dupe. N1MM works
|
||||
// it out again at the same point
|
||||
return edit.Result is { } changed
|
||||
? edit with { Result = changed with { ContactType = "" } }
|
||||
: edit;
|
||||
}
|
||||
|
||||
/// Applies several fields in one go, stopping at the first value the
|
||||
|
||||
Reference in New Issue
Block a user