mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-27 20:58:47 +00:00
dbf7fa89a2
Seems that Shearwater cloud gives the sample time in milliseconds nowadays. Taking a wild guess, that this logic should suffice for us to be able to import old and newer XML logs. (Assuming that if the timestamp for the first sample is more than 100, timestamps are in milliseconds, otherwise in seconds.) Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
238 lines
9.2 KiB
HTML
238 lines
9.2 KiB
HTML
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
|
<xsl:strip-space elements="*"/>
|
|
<xsl:output method="xml" indent="yes"/>
|
|
<xsl:include href="commonTemplates.xsl"/>
|
|
|
|
<xsl:key name="gases" match="diveLogRecord" use="concat(fractionO2, '/', fractionHe)" />
|
|
|
|
<xsl:template match="/">
|
|
<divelog program='subsurface-import' version='2'>
|
|
<settings>
|
|
<xsl:for-each select="/dive/diveLog">
|
|
<divecomputerid deviceid="{computerSerial}">
|
|
<xsl:attribute name="model">
|
|
<xsl:value-of select="'Shearwater'" />
|
|
</xsl:attribute>
|
|
<xsl:attribute name="serial">
|
|
<xsl:value-of select="computerSerial" />
|
|
</xsl:attribute>
|
|
</divecomputerid>
|
|
</xsl:for-each>
|
|
</settings>
|
|
<dives>
|
|
<xsl:apply-templates select="/dive/diveLog"/>
|
|
</dives>
|
|
</divelog>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="diveLog">
|
|
<xsl:variable name="units">
|
|
<xsl:choose>
|
|
<xsl:when test="imperialUnits = 'true'">
|
|
<xsl:value-of select="'imperial'"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="'metric'"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<dive>
|
|
<xsl:attribute name="number">
|
|
<xsl:value-of select="number"/>
|
|
</xsl:attribute>
|
|
|
|
<xsl:variable name="datetime">
|
|
<xsl:call-template name="convertDate">
|
|
<xsl:with-param name="dateTime">
|
|
<xsl:value-of select="startDate"/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:variable>
|
|
<xsl:attribute name="date">
|
|
<xsl:value-of select="substring-before($datetime, ' ')"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="time">
|
|
<xsl:value-of select="substring-after($datetime, ' ')"/>
|
|
</xsl:attribute>
|
|
|
|
<xsl:attribute name="duration">
|
|
<xsl:value-of select="concat(maxTime, ' min')"/>
|
|
</xsl:attribute>
|
|
|
|
<xsl:variable name="timeMultiplier">
|
|
<xsl:choose>
|
|
<xsl:when test="diveLogRecords/diveLogRecord[1]/currentTime > 100">
|
|
<xsl:value-of select="'1000'"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="'1'"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<depth>
|
|
<xsl:attribute name="max">
|
|
<xsl:choose>
|
|
<xsl:when test="$units = 'imperial'">
|
|
<xsl:value-of select="maxDepth * 0.3048"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="maxDepth"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
</depth>
|
|
|
|
<surface>
|
|
<xsl:attribute name="pressure">
|
|
<xsl:value-of select="concat(startSurfacePressure div 1000, ' bar')"/>
|
|
</xsl:attribute>
|
|
</surface>
|
|
|
|
<xsl:for-each select="diveLogRecords/diveLogRecord[generate-id() = generate-id(key('gases', concat(fractionO2, '/', fractionHe))[1])]">
|
|
<xsl:if test="currentCircuitSetting = 1">
|
|
<cylinder>
|
|
<xsl:attribute name="description">
|
|
<xsl:value-of select="concat(fractionO2 * 100, '/', fractionHe * 100)"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="o2">
|
|
<xsl:value-of select="concat(fractionO2 * 100, '%')"/>
|
|
</xsl:attribute>
|
|
<xsl:if test="fractionHe != 0">
|
|
<xsl:attribute name="he">
|
|
<xsl:value-of select="concat(fractionHe * 100, '%')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
</cylinder>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
|
|
<divecomputer>
|
|
<xsl:attribute name="deviceid">
|
|
<xsl:value-of select="computerSerial"/>
|
|
</xsl:attribute>
|
|
|
|
<extradata key="startBatteryVoltage" value="{startBatteryVoltage}"/>
|
|
<extradata key="endBatteryVoltage" value="{endBatteryVoltage}"/>
|
|
<extradata key="computerFirmware" value="{computerFirmware}"/>
|
|
<extradata key="computerSerial" value="{computerSerial}"/>
|
|
<extradata key="computerSoftwareVersion" value="{computerSoftwareVersion}"/>
|
|
<extradata key="computerModel" value="{computerModel}"/>
|
|
<extradata key="logVersion" value="{logVersion}"/>
|
|
<extradata key="product" value="{product}"/>
|
|
<extradata key="features" value="{features}"/>
|
|
<extradata key="decoModel" value="{decoModel}"/>
|
|
<extradata key="vpmbConservatism" value="{vpmbConservatism}"/>
|
|
<extradata key="gfMin" value="{gfMin}"/>
|
|
<extradata key="gfMax" value="{gfMax}"/>
|
|
|
|
<xsl:for-each select="diveLogRecords/diveLogRecord">
|
|
<xsl:if test="(fractionO2 != preceding-sibling::diveLogRecord[1]/fractionO2) or (fractionHe != preceding-sibling::diveLogRecord[1]/fractionHe)">
|
|
<event name="gaschange">
|
|
<xsl:attribute name="time">
|
|
<xsl:call-template name="sec2time">
|
|
<xsl:with-param name="timeSec">
|
|
<xsl:value-of select="currentTime div $timeMultiplier"/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="o2">
|
|
<xsl:value-of select="fractionO2"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="he">
|
|
<xsl:value-of select="fractionHe"/>
|
|
</xsl:attribute>
|
|
</event>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
|
|
<xsl:for-each select="diveLogRecords/diveLogRecord">
|
|
<sample>
|
|
<xsl:attribute name="time">
|
|
<xsl:call-template name="sec2time">
|
|
<xsl:with-param name="timeSec">
|
|
<xsl:value-of select="currentTime div $timeMultiplier"/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="depth">
|
|
<xsl:choose>
|
|
<xsl:when test="$units = 'imperial'">
|
|
<xsl:value-of select="format-number(currentDepth * 0.3048, '0.00')"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="currentDepth"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="temp">
|
|
<xsl:choose>
|
|
<xsl:when test="$units = 'imperial'">
|
|
<xsl:value-of select="concat(format-number((waterTemp - 32) * 5 div 9, '0.0'), ' C')"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="waterTemp"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
<xsl:if test="currentCircuitSetting = 0">
|
|
<xsl:attribute name="po2">
|
|
<xsl:choose>
|
|
<xsl:when test="$units = 'imperial'">
|
|
<xsl:value-of select="concat(averagePPO2 div 14.5037738, ' bar')"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="concat(averagePPO2, ' bar')"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="tank0pressurePSI != '' and tank0pressurePSI > 0 and tank0pressurePSI < 4092">
|
|
<xsl:attribute name="pressure0">
|
|
<xsl:value-of select="concat(format-number((tank0pressurePSI * 2 div 14.5037738007), '#.##'), ' bar')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="tank1pressurePSI != '' and tank1pressurePSI > 0 and tank1pressurePSI < 4092">
|
|
<xsl:attribute name="pressure1">
|
|
<xsl:value-of select="concat(format-number((tank1pressurePSI * 2 div 14.5037738007), '#.##'), ' bar')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="currentNdl != '' and currentNdl != 0">
|
|
<xsl:attribute name="ndl">
|
|
<xsl:value-of select="concat(currentNdl, ':00 min')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="firstStopDepth != ''">
|
|
<xsl:attribute name="stopdepth">
|
|
<xsl:choose>
|
|
<xsl:when test="$units = 'imperial'">
|
|
<xsl:value-of select="concat(format-number(firstStopDepth * 0.3048, '0.00'), ' m')"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="concat(firstStopDepth, ' m')"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="stoptime">
|
|
<xsl:value-of select="concat(firstStopTime, ' min')"/>
|
|
</xsl:attribute>
|
|
<xsl:choose>
|
|
<xsl:when test="firstStopDepth = 0">
|
|
<xsl:attribute name="in_deco">
|
|
<xsl:value-of select="'0'"/>
|
|
</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:attribute name="in_deco">
|
|
<xsl:value-of select="'1'"/>
|
|
</xsl:attribute>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:if>
|
|
</sample>
|
|
</xsl:for-each>
|
|
</divecomputer>
|
|
</dive>
|
|
</xsl:template>
|
|
</xsl:stylesheet>
|