refactoors
[mTask.git] / Shares / mTaskShare.icl
index 43350e1..1ccbcc4 100644 (file)
@@ -6,7 +6,9 @@ import Utils.Devices
 import iTasks
 import mTask
 import Data.List
+import Data.Error
 import Data.Tuple
+from Control.Monad import `b`
 from Data.Func import $
 from StdFunc import flip
 
@@ -60,11 +62,12 @@ updateShares dev tfun = upd (map upFun) (sdsFocus (Just (dev, -1)) deviceStore)
 //viewShare m = viewSharedInformation "" [] (getSDSShare m)
 //     <<@ Title ("SDS: " +++ toString m.identifier)
 
-makeShare :: String Int BCValue -> MTaskShare
-makeShare withTask identifier value = {MTaskShare
+makeShare :: String String Int BCValue -> MTaskShare
+makeShare withTask human identifier value = {MTaskShare
                |withTask=[withTask]
                ,identifier=identifier
                ,value=value
+               ,humanName=human
                }
 
 import GenPrint, StdMisc, StdDebug, TTY
@@ -91,8 +94,8 @@ cleanSharesTask taskid d = updateShares d id //TODO
 instance == MTaskShare where
        (==) a b = a.identifier == b.identifier
 
-getRealShare :: MTaskDevice MTaskShare -> Shared BCValue
-getRealShare dev share = sdsFocus ()
+shareShare :: MTaskDevice MTaskShare -> Shared BCValue
+shareShare dev share = sdsFocus ()
        $ mapReadWriteError (deviceLens dev share)
        $ sdsFocus (Just (dev, share.identifier))
        $ deviceStore
@@ -100,11 +103,9 @@ getRealShare dev share = sdsFocus ()
 deviceLens dev share = (mread, mwrite)
 where
        mread :: [MTaskDevice] -> MaybeError TaskException BCValue
-       mread devs = case find ((==)dev) devs of
-               Nothing = Error $ exception "Device doesn't exist anymore"
-               Just {deviceShares} = case find ((==)share) deviceShares of
-                       Nothing = Error $ exception "Share doesn't exist anymore"
-                       Just share = Ok share.MTaskShare.value
+       mread devs = mb2error (exception "Device lost") (find ((==)dev) devs)
+               `b` \d->mb2error (exception "Share lost") (find ((==)share) d.deviceShares)
+               `b` \s->Ok s.MTaskShare.value
        
        mwrite :: BCValue [MTaskDevice] -> MaybeError TaskException (Maybe [MTaskDevice])
        mwrite val devs = case partition ((==)dev) devs of
@@ -113,14 +114,12 @@ where
                ([d=:{deviceShares}], devs) = case partition ((==)share) deviceShares of
                        ([], _) = Error $ exception "Share doesn't exist anymore"
                        ([_,_:_], _) = Error $ exception "Multiple matching shares"
-                       ([s], shares)
-                               # s = {MTaskShare | s & value=val}
-                               # d = {MTaskDevice | d & deviceShares=[s:shares]}
-                               = Ok $ Just [d:devs]
+                       ([s], shares) = Ok $ Just [{MTaskDevice | d &
+                               deviceShares=[{MTaskShare | s & value=val}:shares]}:devs]
 
 updateShareFromPublish :: MTaskDevice Int BCValue -> Task BCValue
 updateShareFromPublish dev ident val = set val 
        $ mapReadWriteError (deviceLens dev dummy)
        $ deviceStoreNP
 where
-       dummy = {MTaskShare|value=BCValue 0,identifier=ident,withTask=[]}
+       dummy = {MTaskShare|humanName="",value=BCValue 0,identifier=ident,withTask=[]}