feat(hamqth): upload the whole log in one file
The per-QSO API is the only correct way to send a SELECTION, and at the pace it must be driven a 14k backlog costs the better part of an hour. HamQTH's other endpoint takes a whole log as one file — and REPLACES what is on the site with it: its documentation says plainly that partial uploads do not exist. So it is offered as its own deliberate act behind a confirmation, never as the batch path behind 'send these', where it would delete every QSO the operator had not selected. Scoped to the callsign this profile uploads as, so a database holding two operators' contacts cannot push one into the other's log; tar.gz above 12 MB because the ceiling is 20 and a six-figure log passes it as text; and every QSO not already stamped is marked sent afterwards, in bulk, so the backlog list agrees with reality.
This commit is contained in:
@@ -8,7 +8,7 @@ import {
|
||||
Select, SelectTrigger, SelectValue, SelectContent, SelectItem,
|
||||
} from '@/components/ui/select';
|
||||
import { cn } from '@/lib/utils';
|
||||
import { GetLoTWQSLDetail, SetLoTWQSLDetail, GetLoTWDownloadAllCalls, SetLoTWDownloadAllCalls, OpenExternalURL, FindQSOsForUpload, UploadQSOsManual, DownloadConfirmations, CancelConfirmations, ImportHamlogConfirmations, ExportHamlogUnmatched, OpenADIFFile, SaveADIFFile, SyncPOTAHunterLog, ListQSO, BulkUpdateQSL, UploadCallsign, GetSlotStats } from '../../wailsjs/go/main/App';
|
||||
import { GetLoTWQSLDetail, SetLoTWQSLDetail, GetLoTWDownloadAllCalls, SetLoTWDownloadAllCalls, OpenExternalURL, FindQSOsForUpload, UploadFullLogHamQTH, UploadQSOsManual, DownloadConfirmations, CancelConfirmations, ImportHamlogConfirmations, ExportHamlogUnmatched, OpenADIFFile, SaveADIFFile, SyncPOTAHunterLog, ListQSO, BulkUpdateQSL, UploadCallsign, GetSlotStats } from '../../wailsjs/go/main/App';
|
||||
import { Input } from '@/components/ui/input';
|
||||
import { RecentQSOsGrid } from '@/components/RecentQSOsGrid';
|
||||
import { EventsOn } from '../../wailsjs/runtime/runtime';
|
||||
@@ -723,7 +723,23 @@ export function QSLManagerPanel({ onEditQSO, actions, paperRequest }: {
|
||||
{service !== 'pota' && service !== 'paper' && (
|
||||
<div className="flex items-center justify-between gap-2 px-3 py-2 border-t border-border bg-muted/20 shrink-0">
|
||||
<div className="flex items-center gap-2 flex-wrap">
|
||||
{service === 'hamlog' ? (
|
||||
{service === 'hamqth' ? (
|
||||
// HamQTH's file endpoint REPLACES the remote log — its own
|
||||
// documentation is explicit that partial uploads do not exist. So
|
||||
// it is offered as its own deliberate act, never as the batch path
|
||||
// behind "send these": that would delete everything not selected.
|
||||
<Button variant="outline" size="sm" disabled={busy}
|
||||
title={t('qslm.hqFullTitle')}
|
||||
onClick={async () => {
|
||||
if (!window.confirm(t('qslm.hqFullConfirm'))) return;
|
||||
setBusy(true);
|
||||
setLogLines([]);
|
||||
try { await UploadFullLogHamQTH(); }
|
||||
catch (e: any) { setBusy(false); setLogLines((l) => [...l, String(e?.message ?? e)]); }
|
||||
}}>
|
||||
<UploadCloud className="size-3.5" /> {t('qslm.hqFull')}
|
||||
</Button>
|
||||
) : service === 'hamlog' ? (
|
||||
<>
|
||||
<Button variant="outline" size="sm" onClick={importHamlogCfm} disabled={busy}
|
||||
title={t('qslm.hamlogImportTitle')}>
|
||||
|
||||
Reference in New Issue
Block a user