From 781e2f409f0a4da4c2c37ca61467895c76974c8c Mon Sep 17 00:00:00 2001
From: 1P-Cusack <1p-cusack@1stplayable.com>
Date: Wed, 21 Jun 2017 18:50:39 -0400
Subject: [PATCH 1/2] Adding support for loading obj.gz files in ModelCache.

---
 .../src/model-networking/ModelCache.cpp             | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/libraries/model-networking/src/model-networking/ModelCache.cpp b/libraries/model-networking/src/model-networking/ModelCache.cpp
index 623832aaa8..3bb33e0a2a 100644
--- a/libraries/model-networking/src/model-networking/ModelCache.cpp
+++ b/libraries/model-networking/src/model-networking/ModelCache.cpp
@@ -20,6 +20,8 @@
 
 #include <QThreadPool>
 
+#include <Gzip.h>
+
 #include "ModelNetworkingLogging.h"
 #include <Trace.h>
 #include <StatTracker.h>
@@ -171,7 +173,9 @@ void GeometryReader::run() {
 
         QString urlname = _url.path().toLower();
         if (!urlname.isEmpty() && !_url.path().isEmpty() &&
-            (_url.path().toLower().endsWith(".fbx") || _url.path().toLower().endsWith(".obj"))) {
+			(_url.path().toLower().endsWith(".fbx") || 
+			_url.path().toLower().endsWith(".obj") || 
+			_url.path().toLower().endsWith(".gz"))) {
             FBXGeometry::Pointer fbxGeometry;
 
             if (_url.path().toLower().endsWith(".fbx")) {
@@ -181,7 +185,12 @@ void GeometryReader::run() {
                 }
             } else if (_url.path().toLower().endsWith(".obj")) {
                 fbxGeometry.reset(OBJReader().readOBJ(_data, _mapping, _combineParts, _url));
-            } else {
+			} else if (_url.path().toLower().endsWith(".gz")) {
+				QByteArray uncompressedData;
+				if (gunzip(_data, uncompressedData)){
+					fbxGeometry.reset(OBJReader().readOBJ(uncompressedData, _mapping, _combineParts, _url));
+				}
+			} else {
                 throw QString("unsupported format");
             }
 

From f8c30c70e838b1fc3fff849c67a36de74d4991cb Mon Sep 17 00:00:00 2001
From: 1P-Cusack <1p-cusack@1stplayable.com>
Date: Thu, 22 Jun 2017 11:21:19 -0400
Subject: [PATCH 2/2] Addressing some feedback. Making the .obj.gz checks more
 specific and adding an exception if gunzip fails.

---
 .../model-networking/src/model-networking/ModelCache.cpp   | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libraries/model-networking/src/model-networking/ModelCache.cpp b/libraries/model-networking/src/model-networking/ModelCache.cpp
index 3bb33e0a2a..704455c981 100644
--- a/libraries/model-networking/src/model-networking/ModelCache.cpp
+++ b/libraries/model-networking/src/model-networking/ModelCache.cpp
@@ -175,7 +175,7 @@ void GeometryReader::run() {
         if (!urlname.isEmpty() && !_url.path().isEmpty() &&
 			(_url.path().toLower().endsWith(".fbx") || 
 			_url.path().toLower().endsWith(".obj") || 
-			_url.path().toLower().endsWith(".gz"))) {
+			_url.path().toLower().endsWith(".obj.gz"))) {
             FBXGeometry::Pointer fbxGeometry;
 
             if (_url.path().toLower().endsWith(".fbx")) {
@@ -185,11 +185,14 @@ void GeometryReader::run() {
                 }
             } else if (_url.path().toLower().endsWith(".obj")) {
                 fbxGeometry.reset(OBJReader().readOBJ(_data, _mapping, _combineParts, _url));
-			} else if (_url.path().toLower().endsWith(".gz")) {
+			} else if (_url.path().toLower().endsWith(".obj.gz")) {
 				QByteArray uncompressedData;
 				if (gunzip(_data, uncompressedData)){
 					fbxGeometry.reset(OBJReader().readOBJ(uncompressedData, _mapping, _combineParts, _url));
+				} else {
+					throw QString("failed to decompress .obj.gz" );
 				}
+
 			} else {
                 throw QString("unsupported format");
             }