This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 39d6240c85c925edfe40165c7f830774d777babe
Author: Alex Harui <[email protected]>
AuthorDate: Fri Oct 18 22:40:58 2019 -0700

    basic JS impl for local sharedobject
---
 .../src/main/royale/mx/net/SharedObject.as         | 112 +++++++++++++++++++--
 ...{SharedObject.as => SharedObjectFlushStatus.as} |  30 +-----
 2 files changed, 107 insertions(+), 35 deletions(-)

diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as
index f83783a..ee794bb 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as
@@ -20,27 +20,119 @@
 package mx.net
 {
 
- import org.apache.royale.events.EventDispatcher;
+COMPILE::SWF
+{
+    import flash.net.SharedObject;
+}
+ 
+import org.apache.royale.events.EventDispatcher;
+import org.apache.royale.utils.string.trim;
  
 
 
-   public class SharedObject extends org.apache.royale.events.EventDispatcher
-   {
+public class SharedObject extends org.apache.royale.events.EventDispatcher
+{
+    public static function getLocal(name:String, localPath:String = null, 
secure:Boolean = false):mx.net.SharedObject
+       {
+        var so:mx.net.SharedObject = new mx.net.SharedObject();
+        so.setName(name);
+        so.setLocalPath(localPath);
+        COMPILE::SWF
+        {
+            so.createSO();        
+        }
+        return so;
+    }
+    
+    COMPILE::SWF
+    private var _so:flash.net.SharedObject;
       
-
-      public static function getLocal(name:String, localPath:String = null, 
secure:Boolean = false):SharedObject
-         {
-           return null;
-         }
       public function flush(minDiskSpace:int = 0):String
          {
-           return null;
+               COMPILE::JS
+            {
+                if (_data)
+                {
+                    var theseKeys:Object = {};
+                    for (var p:String in _data)
+                    {
+                        document.cookie = _name + p + '=' + _data[p];
+                        theseKeys[p] = 1;
+                    }
+                    var deleteKeys:Array = [];
+                    for (p in keys)
+                    {
+                        if (!theseKeys[p])
+                        {
+                            deleteKeys.push(p);
+                        }
+                    }
+                    for each (p in deleteKeys)
+                    {
+                        delete keys[p];
+                        document.cookie = _name + p + '=; expires=Thu, 01 Jan 
1970 00:00:00 GMT';
+                    }
+                }
+                return SharedObjectFlushStatus.FLUSHED;
+            }
+            COMPILE::SWF
+            {
+                return _so.flush(minDiskSpace);
+            }
          }
 
+      private var keys:Object = {};
+      
+      private var _data:Object;
+      
       public function get data():Object
          {
-          return null;
+              COMPILE::SWF
+           {
+               return _so.data;
+           }
+           COMPILE::JS
+           {
+               if (!_data)
+               {
+                   _data = {};
+                   var allCookies:String = document.cookie;
+                   var arrCookies:Array = allCookies.split(';');
+                   for each (var s:String in arrCookies)
+                   {
+                       s = trim(s);
+                       var parts:Array = s.split('=');
+                        if (parts[0].indexOf(_name) == 0)
+                        {
+                            var key:String = parts[0].substring(_name.length);
+                            keys[key] = 1;
+                            _data[key] = parts[1];
+                        }
+                   }
+               }
+               return _data;
+           }
          }
+      
+      private var _name:String;
+      
+      public function setName(name:String):void
+      {
+          _name = name;
+      }
+      
+      private var _localPath:String;
+      
+      public function setLocalPath(localPath:String):void
+      {
+          _localPath = localPath;
+      }
+      
+      COMPILE::SWF
+      public function createSO():void
+      {
+          _so = flash.net.SharedObject.getLocal(_name, _localPath);
+      }
    }
 
             
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObjectFlushStatus.as
similarity index 68%
copy from frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as
copy to 
frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObjectFlushStatus.as
index f83783a..d95101a 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObject.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/net/SharedObjectFlushStatus.as
@@ -20,29 +20,9 @@
 package mx.net
 {
 
- import org.apache.royale.events.EventDispatcher;
- 
-
-
-   public class SharedObject extends org.apache.royale.events.EventDispatcher
-   {
-      
-
-      public static function getLocal(name:String, localPath:String = null, 
secure:Boolean = false):SharedObject
-         {
-           return null;
-         }
-      public function flush(minDiskSpace:int = 0):String
-         {
-           return null;
-         }
-
-      public function get data():Object
-         {
-          return null;
-         }
-   }
-
-            
-
+public class SharedObjectFlushStatus
+{
+    public static const PENDING:String = "pending";
+    public static const FLUSHED:String = "flushed";
 }
+}
\ No newline at end of file

Reply via email to