add download caching to Get task

Project: http://git-wip-us.apache.org/repos/asf/flex-utilities/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-utilities/commit/1276a054
Tree: http://git-wip-us.apache.org/repos/asf/flex-utilities/tree/1276a054
Diff: http://git-wip-us.apache.org/repos/asf/flex-utilities/diff/1276a054

Branch: refs/heads/develop
Commit: 1276a054c9ca0f9f21d9a65fe75b30e7e9374329
Parents: b54f16f
Author: Alex Harui <aha...@apache.org>
Authored: Wed Feb 12 14:43:22 2014 -0800
Committer: Alex Harui <aha...@apache.org>
Committed: Wed Feb 12 14:44:47 2014 -0800

----------------------------------------------------------------------
 ant_on_air/src/org/apache/flex/ant/Ant.as      | 10 ++++++
 ant_on_air/src/org/apache/flex/ant/tags/Get.as | 34 +++++++++++++++++++--
 2 files changed, 42 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/1276a054/ant_on_air/src/org/apache/flex/ant/Ant.as
----------------------------------------------------------------------
diff --git a/ant_on_air/src/org/apache/flex/ant/Ant.as 
b/ant_on_air/src/org/apache/flex/ant/Ant.as
index 754e955..a3b28d8 100644
--- a/ant_on_air/src/org/apache/flex/ant/Ant.as
+++ b/ant_on_air/src/org/apache/flex/ant/Ant.as
@@ -227,5 +227,15 @@ package org.apache.flex.ant
          *  Output for Echo.  Defaults to trace().
          */
         public var output:Function = function(s:String):void { trace(s) };
+        
+        /**
+         *  Whether Get uses a download cache
+         */
+        public static var usingDownloadCache:Boolean;
+        
+        /**
+         *  The folder Get uses as a download cache
+         */
+        public static var downloadCacheFolder:String;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/1276a054/ant_on_air/src/org/apache/flex/ant/tags/Get.as
----------------------------------------------------------------------
diff --git a/ant_on_air/src/org/apache/flex/ant/tags/Get.as 
b/ant_on_air/src/org/apache/flex/ant/tags/Get.as
index 6e679fa..8c70f37 100644
--- a/ant_on_air/src/org/apache/flex/ant/tags/Get.as
+++ b/ant_on_air/src/org/apache/flex/ant/tags/Get.as
@@ -86,7 +86,22 @@ package org.apache.flex.ant.tags
             s = s.replace("%1", getDestFile().nativePath);
             ant.output(ant.formatOutput("get", s));
             
-            var urlRequest:URLRequest = new URLRequest(src);
+            var actualSrc:String = src;
+            if (Ant.usingDownloadCache)
+            {
+                if (src.indexOf("http") == 0)
+                {
+                    var c:int = src.indexOf("/");
+                    c = src.indexOf("/", c + 1);
+                    c = src.indexOf("/", c + 1);
+                    // that should find the slash after the server.
+                    var cacheFile:File = 
File.applicationStorageDirectory.resolvePath(Ant.downloadCacheFolder);
+                    cacheFile = cacheFile.resolvePath(src.substr(c + 1));
+                    if (cacheFile.exists)
+                        actualSrc = cacheFile.url;
+                }
+            }
+            var urlRequest:URLRequest = new URLRequest(actualSrc);
             urlRequest.followRedirects = false;
             urlRequest.userAgent = "Java";     // required to get sourceforge 
redirects to do the right thing
             urlLoader = new URLLoader();
@@ -177,7 +192,22 @@ package org.apache.flex.ant.tags
                 fs.open(destFile, FileMode.WRITE);
                 fs.writeBytes(urlLoader.data as ByteArray);
                 fs.close();
-            }            
+            }
+            if (Ant.usingDownloadCache)
+            {
+                if (src.indexOf("http") == 0)
+                {
+                    var c:int = src.indexOf("/");
+                    c = src.indexOf("/", c + 1);
+                    c = src.indexOf("/", c + 1);
+                    // that should find the slash after the server.
+                    var cacheFile:File = 
File.applicationStorageDirectory.resolvePath(Ant.downloadCacheFolder);
+                    cacheFile = cacheFile.resolvePath(src.substr(c + 1));
+                    if (!cacheFile.exists)
+                        destFile.copyTo(cacheFile);
+                }
+            }
+
             dispatchEvent(new Event(Event.COMPLETE));
                        urlLoader = null;
         }

Reply via email to