- modifyValue v ds = filterMap ((==)dev) deviceUpdate ds
- where
- deviceUpdate d = {MTaskDevice | d
- & deviceShares=filterMap ((==)share) shareUpd d.deviceShares}
- shareUpd s = {MTaskShare | s & value=v}
-
- filterMap :: (a -> Bool) (a -> a) [a] -> [a]
- filterMap f t xs = [if (f x) (t x) x\\x<-xs]
+ modifyValue v ds = filterMap ((==)dev) (updateShare identifier v) ds
+
+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
+
+updateShareFromPublish :: MTaskDevice Int BCValue -> Task [MTaskDevice]
+updateShareFromPublish dev ident val
+ = upd (filterMap ((==)dev) (updateShare ident val)) $ getDeviceStoreForShare ident
+
+updateShare :: Int BCValue MTaskDevice -> MTaskDevice
+updateShare ident val dev = {MTaskDevice | dev & deviceShares=filterMap
+ (\s->s.identifier==ident)
+ (\s->{MTaskShare | s & value=val})
+ dev.deviceShares}