use share lenses
[mTask.git] / Shares / mTaskShare.icl
index bf8f2a1..c22843f 100644 (file)
@@ -13,7 +13,7 @@ from StdFunc import flip
 derive class iTask MTaskShare
 
 manageShares :: Task [MTaskDevice]
-manageShares = whileUnchanged deviceStore
+manageShares = whileUnchanged (sdsFocus (Just -1) deviceStore)
        $ \devs->case devs of
                [] = viewInformation "No devices yet" [] []
                _ = allTasks (map manageSharesOnDevice devs)
@@ -25,7 +25,7 @@ manageSharesOnDevice dev = (case dev.deviceShares of
        ) >>| treturn dev
 
 updateShares :: MTaskDevice ([MTaskShare] -> [MTaskShare]) -> Task [MTaskShare]
-updateShares dev tfun = upd (map upFun) deviceStore 
+updateShares dev tfun = upd (map upFun) (sdsFocus (Just -1) deviceStore)
                @ (\d->d.deviceShares) o fromJust o find ((==)dev)
        where
                upFun d = if (dev == d) ({d&deviceShares=tfun d.deviceShares}) d
@@ -92,7 +92,7 @@ getRealShare :: MTaskDevice MTaskShare -> Shared BCValue
 getRealShare dev share=:{identifier} = sdsFocus (Just identifier) $ SDSSource {SDSSource
        | name = "mTaskShareMap-" +++ toString identifier, read=rr, write=ww}
        where
-               rr name iworld = case read deviceStore iworld of
+               rr name iworld = case read (sdsFocus (Just identifier) deviceStore) iworld of
                        (Error e, iworld) = (Error e, iworld)
                        (Ok devices, iworld) = case find ((==)dev) devices of
                                Nothing = (Error $ exception "Device doesn't exist anymore", iworld)
@@ -103,11 +103,11 @@ getRealShare dev share=:{identifier} = sdsFocus (Just identifier) $ SDSSource {S
                // Also send messages
                ww name value iworld
                | not (trace_tn ("Update to: " +++ printToString value)) = undef
-               = case modify (tuple () o modifyValue value) deviceStore iworld of
+               = case modify (tuple () o modifyValue value) (sdsFocus (Just identifier) deviceStore) iworld of
                        (Error e, iworld) = (Error e, iworld)
                        (Ok _, iworld) = case sendMessagesIW [MTUpd identifier value] dev iworld of
                                (Error e, iworld) = (Error e, iworld)
-                               (Ok _, iworld) = (Ok $ maybe True ((==) identifier), iworld)
+                               (Ok _, iworld) = (Ok $ const True, iworld)
 
                modifyValue :: BCValue [MTaskDevice] -> [MTaskDevice]
                modifyValue v ds = filterMap ((==)dev) (updateShare identifier v) ds
@@ -116,7 +116,7 @@ filterMap :: (a -> Bool) (a -> a) [a] -> [a]
 filterMap f t xs = [if (f x) (t x) x\\x<-xs]
 
 getDeviceStoreForShare :: Int -> Shared [MTaskDevice]
-getDeviceStoreForShare ident = sdsFocus (Just ident) $ sdsFocus () deviceStore
+getDeviceStoreForShare ident = sdsFocus (Just ident) $ deviceStore
 
 updateShareFromPublish :: MTaskDevice Int BCValue -> Task [MTaskDevice]
 updateShareFromPublish dev ident val