diff --git a/VERSION b/VERSION
index 5a2c686..5cff5f1 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.0.112
+0.1.1.0
diff --git a/client/src/App.css b/client/src/App.css
index c694e94..4578d23 100644
--- a/client/src/App.css
+++ b/client/src/App.css
@@ -3865,14 +3865,14 @@ html.theme-cupertino .events-scroll-container {
max-width: min(100%, 420px);
}
-.live-log-fix-coords {
+.live-log-position-coords {
margin: 0;
padding: 0;
border: none;
min-width: 0;
}
-.live-log-fix-label {
+.live-log-position-label {
display: block;
margin: 0 0 10px;
padding: 0;
@@ -3881,35 +3881,35 @@ html.theme-cupertino .events-scroll-container {
color: var(--app-text-muted);
}
-.live-log-fix-coords-row {
+.live-log-position-coords-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
min-width: 0;
}
-.live-log-fix-field {
+.live-log-position-field {
display: flex;
flex-direction: column;
gap: 6px;
min-width: 0;
}
-.live-log-fix-field-label {
+.live-log-position-field-label {
font-size: 12px;
color: var(--app-text-muted);
}
-.live-log-fix-field .input-text {
+.live-log-position-field .input-text {
width: 100%;
box-sizing: border-box;
}
-.live-log-fix-gps-row {
+.live-log-position-gps-row {
margin-top: 10px;
}
-.live-log-fix-gps-btn {
+.live-log-position-gps-btn {
width: 100%;
box-sizing: border-box;
display: flex;
diff --git a/client/src/components/LiveCameraCapture.tsx b/client/src/components/LiveCameraCapture.tsx
index 1733e9a..bfad442 100644
--- a/client/src/components/LiveCameraCapture.tsx
+++ b/client/src/components/LiveCameraCapture.tsx
@@ -216,7 +216,7 @@ export default function LiveCameraCapture({
className="btn secondary live-camera-close"
onClick={onClose}
disabled={busy}
- aria-label={t('logs.confirm_no')}
+ aria-label={t('logs.live_cancel')}
>
@@ -287,7 +287,7 @@ export default function LiveCameraCapture({
{showPreview ? (
diff --git a/client/src/components/LiveLogView.tsx b/client/src/components/LiveLogView.tsx
index fb8685a..54ea4d9 100644
--- a/client/src/components/LiveLogView.tsx
+++ b/client/src/components/LiveLogView.tsx
@@ -33,8 +33,8 @@ import {
import { formatEventSummary } from '../utils/formatEventSummary.js'
import {
getLastAutoPositionMs,
- getLastPositionFixWithin,
- getLatestPositionFix,
+ getLastLoggedPositionWithin,
+ getLatestLoggedPosition,
isMotorRunningFromEvents,
LIVE_EVENT_CODES,
LIVE_LOG_WEATHER_POSITION_MAX_AGE_MS,
@@ -96,7 +96,7 @@ type LiveModal =
| 'water'
| 'sog'
| 'stw'
- | 'fix'
+ | 'position'
| 'photo'
| 'voice'
@@ -167,10 +167,10 @@ export default function LiveLogView({
const [valueInputSecondary, setValueInputSecondary] = useState('')
const [selectedSails, setSelectedSails] = useState
([])
const [undoVisible, setUndoVisible] = useState(false)
- const [fixLat, setFixLat] = useState('')
- const [fixLng, setFixLng] = useState('')
- const [fixGpsLoading, setFixGpsLoading] = useState(false)
- const [fixGpsUnavailable, setFixGpsUnavailable] = useState(false)
+ const [positionLat, setPositionLat] = useState('')
+ const [positionLng, setPositionLng] = useState('')
+ const [positionGpsLoading, setPositionGpsLoading] = useState(false)
+ const [positionGpsUnavailable, setPositionGpsUnavailable] = useState(false)
const [photoCaption, setPhotoCaption] = useState('')
const [photoSaving, setPhotoSaving] = useState(false)
const [voiceCaption, setVoiceCaption] = useState('')
@@ -202,8 +202,8 @@ export default function LiveLogView({
)
const motorRunning = isMotorRunningFromEvents(events)
const motorLabel = t('logs.motor_propulsion')
- const hasPositionFix = useMemo(
- () => (date ? getLatestPositionFix(events, date) != null : false),
+ const hasLoggedPosition = useMemo(
+ () => (date ? getLatestLoggedPosition(events, date) != null : false),
[events, date]
)
const voiceMemoLookup = useEntryVoiceMemos(logbookId, entryId)
@@ -358,7 +358,7 @@ export default function LiveLogView({
})
await refreshEntry(entryId)
} catch {
- // Best-effort; hint banner shows when no position fix exists yet.
+ // Best-effort; hint banner shows when no position has been logged yet.
} finally {
autoPositionBusyRef.current = false
}
@@ -453,16 +453,16 @@ export default function LiveLogView({
}, 'moor')
}
- const openFixModal = async () => {
- setFixLat('')
- setFixLng('')
- setFixGpsUnavailable(false)
- setFixGpsLoading(true)
- setModal('fix')
+ const openPositionModal = async () => {
+ setPositionLat('')
+ setPositionLng('')
+ setPositionGpsUnavailable(false)
+ setPositionGpsLoading(true)
+ setModal('position')
try {
const permission = await queryGeolocationPermission()
if (permission !== 'granted') {
- setFixGpsUnavailable(true)
+ setPositionGpsUnavailable(true)
return
}
const coords = await getCurrentPosition({
@@ -470,25 +470,25 @@ export default function LiveLogView({
enableHighAccuracy: false,
maximumAge: 60_000
})
- setFixLat(coords.lat)
- setFixLng(coords.lng)
+ setPositionLat(coords.lat)
+ setPositionLng(coords.lng)
} catch {
- setFixGpsUnavailable(true)
+ setPositionGpsUnavailable(true)
} finally {
- setFixGpsLoading(false)
+ setPositionGpsLoading(false)
}
}
- const retryFixGps = async () => {
- setFixGpsLoading(true)
- setFixGpsUnavailable(false)
+ const retryPositionGps = async () => {
+ setPositionGpsLoading(true)
+ setPositionGpsUnavailable(false)
try {
const permission = await queryGeolocationPermission()
if (permission !== 'granted') {
- setFixGpsUnavailable(true)
+ setPositionGpsUnavailable(true)
await showAlert(
`${t('logs.live_gps_error')}\n\n${t('logs.live_gps_start_hint')}`,
- t('logs.live_fix')
+ t('logs.live_position')
)
return
}
@@ -497,23 +497,23 @@ export default function LiveLogView({
enableHighAccuracy: false,
maximumAge: 60_000
})
- setFixLat(coords.lat)
- setFixLng(coords.lng)
+ setPositionLat(coords.lat)
+ setPositionLng(coords.lng)
} catch {
- setFixGpsUnavailable(true)
+ setPositionGpsUnavailable(true)
await showAlert(
`${t('logs.live_gps_error')}\n\n${t('logs.live_gps_start_hint')}`,
- t('logs.live_fix')
+ t('logs.live_position')
)
} finally {
- setFixGpsLoading(false)
+ setPositionGpsLoading(false)
}
}
- const confirmFix = () => {
- const coords = normalizeGpsCoordinates(fixLat, fixLng)
+ const confirmPosition = () => {
+ const coords = normalizeGpsCoordinates(positionLat, positionLng)
if (!coords) {
- void showAlert(t('logs.live_fix_invalid'), t('logs.live_fix'))
+ void showAlert(t('logs.live_position_invalid'), t('logs.live_position'))
return
}
setModal('none')
@@ -522,9 +522,9 @@ export default function LiveLogView({
await appendQuickEvent(logbookId, entryId, {
gpsLat: coords.lat,
gpsLng: coords.lng,
- remarks: LIVE_EVENT_CODES.FIX
+ remarks: LIVE_EVENT_CODES.POSITION
})
- }, 'fix')
+ }, 'position')
}
const handleFetchOwmWeather = () => {
@@ -534,17 +534,17 @@ export default function LiveLogView({
return
}
- const position = getLastPositionFixWithin(
+ const position = getLastLoggedPositionWithin(
events,
date,
LIVE_LOG_WEATHER_POSITION_MAX_AGE_MS
)
if (!position) {
- const latest = getLatestPositionFix(events, date)
+ const latest = getLatestLoggedPosition(events, date)
void showAlert(
latest
- ? t('logs.live_weather_fix_stale')
- : t('logs.live_weather_fix_required'),
+ ? t('logs.live_weather_position_stale')
+ : t('logs.live_weather_position_required'),
t('logs.live_weather_owm_btn')
)
return
@@ -945,7 +945,7 @@ export default function LiveLogView({
{error && {error}
}
- {!hasPositionFix && (
+ {!hasLoggedPosition && (
{t('logs.live_gps_start_hint')}
@@ -1036,9 +1036,9 @@ export default function LiveLogView({
)}
-