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 <errno.h>
 | 
				
			||||||
#include "gettext.h"
 | 
					#include "gettext.h"
 | 
				
			||||||
#include <zip.h>
 | 
					#include <zip.h>
 | 
				
			||||||
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "dive.h"
 | 
					#include "dive.h"
 | 
				
			||||||
#include "file.h"
 | 
					#include "file.h"
 | 
				
			||||||
| 
						 | 
					@ -326,24 +327,35 @@ void parse_file(const char *filename, char **error)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAXCOLDIGITS 3
 | 
					#define MAXCOLDIGITS 3
 | 
				
			||||||
#define MAXCOLS 100
 | 
					#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;
 | 
						struct memblock mem;
 | 
				
			||||||
	char *params[7];
 | 
						char *params[11];
 | 
				
			||||||
	char timebuf[MAXCOLDIGITS];
 | 
						char timebuf[MAXCOLDIGITS];
 | 
				
			||||||
	char depthbuf[MAXCOLDIGITS];
 | 
						char depthbuf[MAXCOLDIGITS];
 | 
				
			||||||
	char tempbuf[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;
 | 
							int len = strlen(translate("gettextFromC", "Maximum number of supported columns on CSV import is %d")) + MAXCOLDIGITS;
 | 
				
			||||||
		*error = malloc(len);
 | 
							*error = malloc(len);
 | 
				
			||||||
		snprintf(*error, len, translate("gettextFromC", "Maximum number of supported columns on CSV import is %d"), MAXCOLS);
 | 
							snprintf(*error, len, translate("gettextFromC", "Maximum number of supported columns on CSV import is %d"), MAXCOLS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	snprintf(timebuf, MAXCOLDIGITS, "%d", time);
 | 
						snprintf(timebuf, MAXCOLDIGITS, "%d", timef);
 | 
				
			||||||
	snprintf(depthbuf, MAXCOLDIGITS, "%d", depth);
 | 
						snprintf(depthbuf, MAXCOLDIGITS, "%d", depthf);
 | 
				
			||||||
	snprintf(tempbuf, MAXCOLDIGITS, "%d", temp);
 | 
						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[0] = "timeField";
 | 
				
			||||||
	params[1] = timebuf;
 | 
						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[3] = depthbuf;
 | 
				
			||||||
	params[4] = "tempField";
 | 
						params[4] = "tempField";
 | 
				
			||||||
	params[5] = tempbuf;
 | 
						params[5] = tempbuf;
 | 
				
			||||||
	params[6] = NULL;
 | 
						params[6] = "date";
 | 
				
			||||||
 | 
						params[7] = curdate;
 | 
				
			||||||
 | 
						params[8] = "time";
 | 
				
			||||||
 | 
						params[9] = curtime;
 | 
				
			||||||
 | 
						params[10] = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (filename == NULL)
 | 
						if (filename == NULL)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,8 @@
 | 
				
			||||||
  <xsl:param name="timeField" select="timeField"/>
 | 
					  <xsl:param name="timeField" select="timeField"/>
 | 
				
			||||||
  <xsl:param name="depthField" select="depthField"/>
 | 
					  <xsl:param name="depthField" select="depthField"/>
 | 
				
			||||||
  <xsl:param name="tempField" select="tempField"/>
 | 
					  <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:output method="xml" indent="yes"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <xsl:variable name="lf"><xsl:text>
 | 
					  <xsl:variable name="lf"><xsl:text>
 | 
				
			||||||
| 
						 | 
					@ -15,6 +17,12 @@
 | 
				
			||||||
    <divelog program="subsurface-import" version="2">
 | 
					    <divelog program="subsurface-import" version="2">
 | 
				
			||||||
      <dives>
 | 
					      <dives>
 | 
				
			||||||
        <dive>
 | 
					        <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" />
 | 
					          <divecomputerid deviceid="ffffffff" model="stone" />
 | 
				
			||||||
          <xsl:call-template name="printLine">
 | 
					          <xsl:call-template name="printLine">
 | 
				
			||||||
            <xsl:with-param name="line" select="substring-before(//csv, $lf)"/>
 | 
					            <xsl:with-param name="line" select="substring-before(//csv, $lf)"/>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue