should have real share access now
[mTask.git] / Shares / mTaskShare.icl
index 9960f4e..68b519e 100644 (file)
@@ -66,8 +66,8 @@ makeShare withTask identifier value = {MTaskShare
                ,value=value
                }
 
-updateShare :: MTaskDevice Int BCValue -> Task [MTaskShare]
-updateShare dev ident val = updateShares dev $ map $ up ident val
+updateShareFromPublish :: MTaskDevice Int BCValue -> Task [MTaskShare]
+updateShareFromPublish dev ident val = updateShares dev $ map $ up ident val
        where
                up :: Int BCValue MTaskShare -> MTaskShare
                up i v s = if (s.identifier == i) {MTaskShare | s & value=val} s
@@ -103,6 +103,18 @@ getRealShare dev {sdsi} = SDSSource {SDSSource
                                        Just share = (Ok share.MTaskShare.value, iworld)
                        
                // Also send messages
-               ww name value iworld = undef//case modify (modFun name value) sdsStore of
-//                     (Error e, iworld) = (Error e, iworld)
-//                     (Ok shares, iworld) = (Ok $ const True, iworld)
+               ww name value iworld = case modify (\r->((), map (modFun value) r)) deviceStore iworld of
+                       (Error e, iworld) = (Error e, iworld)
+                       (Ok _, iworld) = case sendMessagesIW [MTUpd sdsi value] dev iworld of
+                               (Error e, iworld) = (Error e, iworld)
+                               (Ok _, iworld) = (Ok $ const True, iworld)
+
+               //Selects the correct device
+               modFun value d
+               | d == dev = {d & deviceShares=map (modFun2 value) d.deviceShares}
+               = d
+
+               //Selects the correct share
+               modFun2 value share
+               | sdsi == share.MTaskShare.identifier = {MTaskShare | share & value=value}
+               = share