@@ -12,7 +12,7 @@ module FF.Qt.TaskListWidget (
1212 getTitle ,
1313 new ,
1414 setDebugInfoVisible ,
15- upsertTask ,
15+ syncTask ,
1616) where
1717
1818import Control.Monad (when )
@@ -37,19 +37,23 @@ import Text.Printf (printf)
3737
3838import FF (fromRgaM )
3939import FF.Types (
40- Entity (.. ),
40+ Entity (Entity ),
4141 EntityView ,
42- Note (.. ),
42+ Note ,
43+ NoteId ,
44+ NoteStatus (TaskStatus ),
45+ Status (Active , Archived ),
4346 TaskMode (.. ),
4447 View (NoteView , note ),
4548 taskMode ,
4649 )
50+ import FF.Types qualified
4751import FF.UI (sampleLabel )
4852
4953data TaskListWidget = TaskListWidget
5054 { parent :: QTreeWidget
5155 , modeItems :: IORef (Map TaskMode QTreeWidgetItem )
52- , taskItems :: IORef (Map String (TaskMode , QTreeWidgetItem ))
56+ , taskItems :: IORef (Map NoteId (TaskMode , QTreeWidgetItem ))
5357 }
5458
5559{- | Value order in this enumeration defines the field order in the tree widget.
@@ -115,6 +119,15 @@ setDebugInfoVisible this v = do
115119 QTreeView. setColumnHidden this. parent (fromEnum SortKeyField ) $ not v
116120 QTreeView. setHeaderHidden this. parent $ not v
117121
122+ syncTask :: TaskListWidget -> Bool -> EntityView Note -> IO ()
123+ syncTask this keepTaskOpen entity = do
124+ case note. note_status of
125+ Just (TaskStatus Active ) -> upsertTask this keepTaskOpen entity
126+ Just (TaskStatus Archived ) -> deleteTaskFromUi this noteId
127+ _ -> undefined
128+ where
129+ Entity noteId NoteView {note} = entity
130+
118131upsertTask :: TaskListWidget -> Bool -> EntityView Note -> IO ()
119132upsertTask this keepTaskOpen entity = do
120133 today <- utctDay <$> getCurrentTime -- TODO get local day
@@ -142,7 +155,17 @@ upsertTask this keepTaskOpen entity = do
142155 this. parent
143156 (nullptr :: QTreeWidgetItem )
144157 where
145- Entity {entityId = DocId noteId, entityVal = NoteView {note}} = entity
158+ Entity noteId NoteView {note} = entity
159+
160+ deleteTaskFromUi :: TaskListWidget -> NoteId -> IO ()
161+ deleteTaskFromUi this noteId = do
162+ mExisting <- Map. lookup noteId <$> readIORef this. taskItems
163+ for_ mExisting \ (oldMode, item) -> do
164+ oldModeItem <- (! oldMode) <$> readIORef this. modeItems
165+ idx <- QTreeWidgetItem. indexOfChild oldModeItem item
166+ _ <- QTreeWidgetItem. takeChild oldModeItem idx
167+ modifyIORef this. taskItems $ Map. delete noteId
168+ QTreeWidget. setCurrentItem this. parent (nullptr :: QTreeWidgetItem )
146169
147170getOrCreateModeItem :: TaskListWidget -> TaskMode -> IO QTreeWidgetItem
148171getOrCreateModeItem this mode = do
@@ -195,7 +218,7 @@ taskItemField entity = \case
195218 SortKeyField -> sortKey
196219 TitleField -> title
197220 where
198- Entity {entityId = DocId noteId, entityVal = NoteView {note} } = entity
221+ Entity ( DocId noteId) NoteView {note} = entity
199222 title = concat $ take 1 $ lines $ fromRgaM note. note_text
200223 sortKey = printf " End=%04d%02d%02d,Start=%04d%02d%02d" ey em ed sy sm sd
201224 (ey, em, ed) = maybe (9999 , 99 , 99 ) toGregorian note. note_end
0 commit comments