Updating GPX import to use parent's shared.

This commit is contained in:
Eric van der Vlist 2023-02-13 11:23:17 +01:00
parent e445a7e1af
commit df42a684c3
2 changed files with 27 additions and 85 deletions

View File

@ -234,7 +234,7 @@ export const watchDbLegacy = async () => {
localPurges._deleted = true; localPurges._deleted = true;
await db.put(localPurges); await db.put(localPurges);
} catch (error) { } catch (error) {
console.warn({ caller: 'watchDbLegacy / _local/purges', error }); // console.warn({ caller: 'watchDbLegacy / _local/purges', error });
} }
const deletedDocs = await getDeletedDocs(); const deletedDocs = await getDeletedDocs();
@ -274,7 +274,12 @@ export const watchDbLegacy = async () => {
} }
} }
} }
if (i !== deletedDocs.length) { console.log({
caller: 'watchDbLegacy / purge',
nbDeletedDocs: i,
nbDocsToDelete: deletedDocs.length,
});
if (i === deletedDocs.length) {
await sleep(60000); await sleep(60000);
} }
} }

View File

@ -3,6 +3,7 @@ import { cloneDeep, isEmpty } from 'lodash';
import { PureComponent } from 'react'; import { PureComponent } from 'react';
import { $DEVCOMP } from 'solid-js'; import { $DEVCOMP } from 'solid-js';
import { Point, Rectangle } from '../components/map/types'; import { Point, Rectangle } from '../components/map/types';
import { state } from '../db-admin/health-legacy';
import { lat2tile, lon2tile, rectanglesIntersect } from '../lib/geo'; import { lat2tile, lon2tile, rectanglesIntersect } from '../lib/geo';
import { findStartTime } from '../lib/gpx'; import { findStartTime } from '../lib/gpx';
import getUri, { intToGpxId, intToTrkptId } from '../lib/ids'; import getUri, { intToGpxId, intToTrkptId } from '../lib/ids';
@ -78,7 +79,8 @@ const prune = (
trkpt: number; trkpt: number;
}, },
extensions: any, extensions: any,
docs: any[] docs: any[],
shared: string[]
) => { ) => {
if (typeof object === 'object') { if (typeof object === 'object') {
for (const key in object) { for (const key in object) {
@ -124,94 +126,18 @@ const prune = (
docs.push({ docs.push({
_id: getUri(key, subId), _id: getUri(key, subId),
type: key, type: key,
shared,
origin: state().remoteUrl,
doc: subObjects[index], doc: subObjects[index],
}); });
prune(subId, subObjects[index], previousIds, {}, docs); prune(subId, subObjects[index], previousIds, {}, docs, shared);
} }
object[key] = undefined; object[key] = undefined;
} else prune(id, object[key], previousIds, extensions, docs); } else prune(id, object[key], previousIds, extensions, docs, shared);
} }
} }
}; };
// const extensionsFromObject = (
// object: any,
// extensions = {
// viewport: { topLeft: <Point>{}, bottomRight: <Point>{} },
// bbox: {
// minLon: <number | undefined>undefined,
// minLat: <number | undefined>undefined,
// maxLon: <number | undefined>undefined,
// maxLat: <number | undefined>undefined,
// },
// }
// ) => {
// if (typeof object === 'object') {
// if ('$' in object) {
// const attributes = object.$;
// if ('lat' in attributes) {
// const lat = +attributes.lat;
// if (
// extensions.bbox.minLat === undefined ||
// lat < extensions.bbox.minLat
// ) {
// extensions.bbox.minLat = lat;
// }
// if (
// extensions.bbox.maxLat === undefined ||
// lat > extensions.bbox.maxLat
// ) {
// extensions.bbox.maxLat = lat;
// }
// }
// if ('lon' in attributes) {
// const lon = +attributes.lon;
// if (
// extensions.bbox.minLon === undefined ||
// lon < extensions.bbox.minLon
// ) {
// extensions.bbox.minLon = lon;
// }
// if (
// extensions.bbox.maxLon === undefined ||
// lon > extensions.bbox.maxLon
// ) {
// extensions.bbox.maxLon = lon;
// }
// }
// }
// for (const key in object) {
// extensionsFromObject(object[key], extensions);
// }
// }
// return extensions;
// };
// const extensionsFromGpx = (gpx: Gpx) => {
// const extensions = { ...gpx.extensions, ...extensionsFromObject(gpx) };
// gpx.extensions = undefined;
// if (
// extensions.bbox.maxLat !== undefined &&
// extensions.bbox.minLon !== undefined
// ) {
// extensions.viewport.topLeft = {
// x: lon2tile(extensions.bbox.minLon, 0),
// y: lat2tile(extensions.bbox.maxLat, 0),
// };
// }
// if (
// extensions.bbox.minLat !== undefined &&
// extensions.bbox.maxLon !== undefined
// ) {
// extensions.viewport.bottomRight = {
// x: lon2tile(extensions.bbox.maxLon, 0),
// y: lat2tile(extensions.bbox.minLat, 0),
// };
// }
// return extensions;
// };
const hasMissingTimestamps = (trk: Trk) => { const hasMissingTimestamps = (trk: Trk) => {
for (const trkseg of trk.trkseg!) { for (const trkseg of trk.trkseg!) {
for (const trkpt of trkseg.trkpt!) { for (const trkpt of trkseg.trkpt!) {
@ -261,6 +187,7 @@ export const pruneAndSaveImportedGpx = async (params: any) => {
}; };
convertTrkToRteWhenNeeded(gpx); convertTrkToRteWhenNeeded(gpx);
let previousGpx: Gpx | null = null; let previousGpx: Gpx | null = null;
let shared: string[];
if (id === 'new') { if (id === 'new') {
const currentDateTime = new Date().toISOString(); const currentDateTime = new Date().toISOString();
const startTime = new Date(findStartTime(gpx, currentDateTime)); const startTime = new Date(findStartTime(gpx, currentDateTime));
@ -272,16 +199,26 @@ export const pruneAndSaveImportedGpx = async (params: any) => {
} }
gpxId = { gpx: intToGpxId(startTime.valueOf()) }; gpxId = { gpx: intToGpxId(startTime.valueOf()) };
docs = [ docs = [
{ _id: getUri('gpx', gpxId), type: 'gpx', doc: gpx }, {
_id: getUri('gpx', gpxId),
type: 'gpx',
origin: state().remoteUrl,
doc: gpx,
// a new GPX isn't shared...
},
{ {
_id: getUri('extensions', gpxId), _id: getUri('extensions', gpxId),
type: 'extensions', type: 'extensions',
origin: state().remoteUrl,
doc: {}, doc: {},
}, },
]; ];
} else { } else {
gpxId = getUri('gpx', id); gpxId = getUri('gpx', id);
previousGpx = (await getGpx({ id })) ?? null; previousGpx = (await getGpx({ id })) ?? null;
if (previousGpx?.extensions?.shared) {
shared = previousGpx?.extensions?.shared.split(/\s*,\s*/);
}
console.log({ console.log({
caller: 'pruneAndSaveImportedGpx / previousGpx', caller: 'pruneAndSaveImportedGpx / previousGpx',
id, id,
@ -312,7 +249,7 @@ export const pruneAndSaveImportedGpx = async (params: any) => {
const trkId = getUri('trk', trkUri); const trkId = getUri('trk', trkUri);
previousIds.trk = trkId.trk; previousIds.trk = trkId.trk;
} }
prune(gpxId, gpx, previousIds, extensions, docs); prune(gpxId, gpx, previousIds, extensions, docs, shared);
console.log({ caller: 'pruneAndSaveImportedGpx / pruned', docs }); console.log({ caller: 'pruneAndSaveImportedGpx / pruned', docs });
try { try {
const result = await putAll(docs); const result = await putAll(docs);