diff pkg/imports/sr.go @ 3748:4bb5dfa0b7e3

SR import: Accept TXT file for uploads.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 24 Jun 2019 16:28:12 +0200
parents 879c297c47e9
children 98d5dd2f0ca1
line wrap: on
line diff
--- a/pkg/imports/sr.go	Mon Jun 24 16:25:17 2019 +0200
+++ b/pkg/imports/sr.go	Mon Jun 24 16:28:12 2019 +0200
@@ -220,11 +220,17 @@
 
 	start := time.Now()
 
-	z, err := zip.OpenReader(filepath.Join(sr.Dir, "sr.zip"))
+	zpath := filepath.Join(sr.Dir, "sr.zip")
+
+	z, err := zip.OpenReader(zpath)
 	if err != nil {
-		return nil, err
+		feedback.Warn("Expected ZIP file: %v", err)
+		feedback.Warn("Falling back to TXT file mode.")
+		z = nil
 	}
-	defer z.Close()
+	if z != nil {
+		defer z.Close()
+	}
 
 	feedback.Info("Looking for 'meta.json'")
 
@@ -271,18 +277,23 @@
 		return nil, common.ToError(err)
 	}
 
-	var xyzf *zip.File
-	for _, ext := range []string{".xyz", ".txt"} {
-		feedback.Info("Looking for '*%s'", ext)
-		if xyzf = common.FindInZIP(z, ext); xyzf != nil {
-			break
+	var xyz octree.MultiPointZ
+
+	if z != nil { // Scanning ZIP file for *.xyz file.
+		var xyzf *zip.File
+		for _, ext := range []string{".xyz", ".txt"} {
+			feedback.Info("Looking for '*%s'", ext)
+			if xyzf = common.FindInZIP(z, ext); xyzf != nil {
+				break
+			}
 		}
+		if xyzf == nil {
+			return nil, errors.New("Cannot find any *.xyz or *.txt file")
+		}
+		xyz, err = loadXYZ(xyzf, feedback, xform)
+	} else { // TXT file mode
+		xyz, err = loadXYZFile(zpath, feedback, xform)
 	}
-	if xyzf == nil {
-		return nil, errors.New("Cannot find any *.xyz or *.txt file")
-	}
-
-	xyz, err := loadXYZ(xyzf, feedback, xform)
 	if err != nil {
 		return nil, err
 	}
@@ -758,6 +769,15 @@
 	return loadXYZReader(r, feedback, xform)
 }
 
+func loadXYZFile(f string, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) {
+	r, err := os.Open(f)
+	if err != nil {
+		return nil, err
+	}
+	defer r.Close()
+	return loadXYZReader(r, feedback, xform)
+}
+
 func loadBoundary(z *zip.ReadCloser) (polygonSlice, error) {
 	shpF := common.FindInZIP(z, ".shp")
 	if shpF == nil {