mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Add current date to CSV import
Since CSV import does not include date/time stamp, we need to generate one for ourselves. This patch uses current time of the import as dive time. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									3e48511318
								
							
						
					
					
						commit
						89770249d0
					
				
					 2 changed files with 31 additions and 7 deletions
				
			
		
							
								
								
									
										30
									
								
								file.c
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								file.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
#include <errno.h>
 | 
			
		||||
#include "gettext.h"
 | 
			
		||||
#include <zip.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
#include "dive.h"
 | 
			
		||||
#include "file.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -326,24 +327,35 @@ void parse_file(const char *filename, char **error)
 | 
			
		|||
 | 
			
		||||
#define MAXCOLDIGITS 3
 | 
			
		||||
#define MAXCOLS 100
 | 
			
		||||
void parse_csv_file(const char *filename, int time, int depth, int temp, char **error)
 | 
			
		||||
void parse_csv_file(const char *filename, int timef, int depthf, int tempf, char **error)
 | 
			
		||||
{
 | 
			
		||||
	struct memblock mem;
 | 
			
		||||
	char *params[7];
 | 
			
		||||
	char *params[11];
 | 
			
		||||
	char timebuf[MAXCOLDIGITS];
 | 
			
		||||
	char depthbuf[MAXCOLDIGITS];
 | 
			
		||||
	char tempbuf[MAXCOLDIGITS];
 | 
			
		||||
	time_t now;
 | 
			
		||||
	struct tm *timep;
 | 
			
		||||
	char curdate[9];
 | 
			
		||||
	char curtime[6];
 | 
			
		||||
 | 
			
		||||
	if (time >= MAXCOLS || depth >= MAXCOLS || temp >= MAXCOLS) {
 | 
			
		||||
	if (timef >= MAXCOLS || depthf >= MAXCOLS || tempf >= MAXCOLS) {
 | 
			
		||||
		int len = strlen(translate("gettextFromC", "Maximum number of supported columns on CSV import is %d")) + MAXCOLDIGITS;
 | 
			
		||||
		*error = malloc(len);
 | 
			
		||||
		snprintf(*error, len, translate("gettextFromC", "Maximum number of supported columns on CSV import is %d"), MAXCOLS);
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	snprintf(timebuf, MAXCOLDIGITS, "%d", time);
 | 
			
		||||
	snprintf(depthbuf, MAXCOLDIGITS, "%d", depth);
 | 
			
		||||
	snprintf(tempbuf, MAXCOLDIGITS, "%d", temp);
 | 
			
		||||
	snprintf(timebuf, MAXCOLDIGITS, "%d", timef);
 | 
			
		||||
	snprintf(depthbuf, MAXCOLDIGITS, "%d", depthf);
 | 
			
		||||
	snprintf(tempbuf, MAXCOLDIGITS, "%d", tempf);
 | 
			
		||||
	time(&now);
 | 
			
		||||
	timep = localtime(&now);
 | 
			
		||||
	strftime(curdate, sizeof(curdate), "%Y%m%d", timep);
 | 
			
		||||
 | 
			
		||||
	/* As the parameter is numeric, we need to ensure that the leading zero
 | 
			
		||||
	* is not discarded during the transform, thus prepend time with 1 */
 | 
			
		||||
	strftime(curtime, sizeof(curtime), "1%H%M", timep);
 | 
			
		||||
 | 
			
		||||
	params[0] = "timeField";
 | 
			
		||||
	params[1] = timebuf;
 | 
			
		||||
| 
						 | 
				
			
			@ -351,7 +363,11 @@ void parse_csv_file(const char *filename, int time, int depth, int temp, char **
 | 
			
		|||
	params[3] = depthbuf;
 | 
			
		||||
	params[4] = "tempField";
 | 
			
		||||
	params[5] = tempbuf;
 | 
			
		||||
	params[6] = NULL;
 | 
			
		||||
	params[6] = "date";
 | 
			
		||||
	params[7] = curdate;
 | 
			
		||||
	params[8] = "time";
 | 
			
		||||
	params[9] = curtime;
 | 
			
		||||
	params[10] = NULL;
 | 
			
		||||
 | 
			
		||||
	if (filename == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,8 @@
 | 
			
		|||
  <xsl:param name="timeField" select="timeField"/>
 | 
			
		||||
  <xsl:param name="depthField" select="depthField"/>
 | 
			
		||||
  <xsl:param name="tempField" select="tempField"/>
 | 
			
		||||
  <xsl:param name="date" select="date"/>
 | 
			
		||||
  <xsl:param name="time" select="time"/>
 | 
			
		||||
  <xsl:output method="xml" indent="yes"/>
 | 
			
		||||
 | 
			
		||||
  <xsl:variable name="lf"><xsl:text>
 | 
			
		||||
| 
						 | 
				
			
			@ -15,6 +17,12 @@
 | 
			
		|||
    <divelog program="subsurface-import" version="2">
 | 
			
		||||
      <dives>
 | 
			
		||||
        <dive>
 | 
			
		||||
          <xsl:attribute name="date">
 | 
			
		||||
            <xsl:value-of select="concat(substring($date, 1, 4), '-', substring($date, 5, 2), '-', substring($date, 7, 2))"/>
 | 
			
		||||
          </xsl:attribute>
 | 
			
		||||
          <xsl:attribute name="time">
 | 
			
		||||
            <xsl:value-of select="concat(substring($time, 2, 2), ':', substring($time, 4, 2))"/>
 | 
			
		||||
          </xsl:attribute>
 | 
			
		||||
          <divecomputerid deviceid="ffffffff" model="stone" />
 | 
			
		||||
          <xsl:call-template name="printLine">
 | 
			
		||||
            <xsl:with-param name="line" select="substring-before(//csv, $lf)"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue