diff --git a/src/components/map/GpxExport.tsx b/src/components/map/GpxExport.tsx index 3203b66..4cb17e7 100644 --- a/src/components/map/GpxExport.tsx +++ b/src/components/map/GpxExport.tsx @@ -14,24 +14,54 @@ const GpxExport: React.FC<{ gpx: any }> = (props: { gpx: any }) => { const hiddenLinkElement = useRef(null); - var downloadName: string; + var downloadBaseName: string; if (props.gpx.metadata.name !== undefined) { - downloadName = props.gpx.metadata.name; + downloadBaseName = props.gpx.metadata.name.substr( + 0, + props.gpx.metadata.name.lastIndexOf('.') + ); } else if (props.gpx.gpx.metadata.name !== undefined) { - downloadName = `${props.gpx.gpx.metadata.name}.gpx`; + downloadBaseName = props.gpx.gpx.metadata.name; } else { - downloadName = `track-${props.gpx.metadata.lastModified}.gpx`; + downloadBaseName = `track-${props.gpx.metadata.lastModified}`; } + const downloadExt = 'gpx'; + + const downloadName = `${downloadBaseName}.${downloadExt}`; + + const getNewFilename: any = async ( + filename: string, + extension: string, + i = 0 + ) => { + const filenameToTest = + i === 0 ? `${filename}.${extension}` : `${filename}(${i}).${extension}`; + try { + const statResult = await Filesystem.stat({ + path: filenameToTest, + directory: Directory.Documents, + }); + return getNewFilename(filename, extension, i + 1); + } catch { + return filenameToTest; + } + }; + const download = async (event: any) => { event.preventDefault(); console.log('download()'); const gpxAsXml = await getGpxAsXmlString(db, props.gpx._id); console.log(`gpxAsXml: ${gpxAsXml}`); if (isCapacitor) { + const filename = await getNewFilename( + `../Download/${downloadBaseName}`, + downloadExt + ); + console.log(`filename: ${filename}`); const fileUrl = await Filesystem.writeFile({ - path: `Download/${downloadName}`, + path: filename, data: gpxAsXml, directory: Directory.Documents, encoding: Encoding.UTF8,