Updating GPX import to use parent's shared.
This commit is contained in:
parent
e445a7e1af
commit
df42a684c3
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
103
src/db/gpx.ts
103
src/db/gpx.ts
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue