mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-14 13:03:56 +03:00
76 lines
2.9 KiB
Haskell
76 lines
2.9 KiB
Haskell
-- -- | Handle a post from the journal edit form.
|
|
-- handleEdit :: Handler Html
|
|
-- handleEdit = do
|
|
-- VD{..} <- getViewData
|
|
-- -- get form input values, or validation errors.
|
|
-- -- getRequest >>= liftIO (reqRequestBody req) >>= mtrace
|
|
-- mtext <- lookupPostParam "text"
|
|
-- mtrace "--------------------------"
|
|
-- mtrace (journalFilePaths j)
|
|
-- mjournalpath <- lookupPostParam "journal"
|
|
-- let etext = maybe (Left "No value provided") (Right . unpack) mtext
|
|
-- ejournalpath = maybe
|
|
-- (Right $ journalFilePath j)
|
|
-- (\f -> let f' = unpack f in
|
|
-- if f' `elem` dbg0 "paths2" (journalFilePaths j)
|
|
-- then Right f'
|
|
-- else Left ("unrecognised journal file path"::String))
|
|
-- mjournalpath
|
|
-- estrs = [etext, ejournalpath]
|
|
-- errs = lefts estrs
|
|
-- [text,journalpath] = rights estrs
|
|
-- -- display errors or perform edit
|
|
-- if not $ null errs
|
|
-- then do
|
|
-- setMessage $ toHtml (intercalate "; " errs :: String)
|
|
-- redirect JournalR
|
|
|
|
-- -- | Handle a post from the journal edit form.
|
|
-- handleEdit :: Handler Html
|
|
-- handleEdit = do
|
|
-- VD{..} <- getViewData
|
|
-- -- get form input values, or validation errors.
|
|
-- -- getRequest >>= liftIO (reqRequestBody req) >>= mtrace
|
|
-- mtext <- lookupPostParam "text"
|
|
-- mjournalpath <- lookupPostParam "journal"
|
|
-- let etext = maybe (Left "No value provided") (Right . unpack) mtext
|
|
-- ejournalpath = maybe
|
|
-- (Right $ journalFilePath j)
|
|
-- (\f -> let f' = unpack f in
|
|
-- if f' `elem` journalFilePaths j
|
|
-- then Right f'
|
|
-- else Left ("unrecognised journal file path"::String))
|
|
-- mjournalpath
|
|
-- estrs = [etext, ejournalpath]
|
|
-- errs = lefts estrs
|
|
-- [text,journalpath] = rights estrs
|
|
-- -- display errors or perform edit
|
|
-- if not $ null errs
|
|
-- then do
|
|
-- setMessage $ toHtml (intercalate "; " errs :: String)
|
|
-- redirect JournalR
|
|
|
|
-- else do
|
|
-- -- try to avoid unnecessary backups or saving invalid data
|
|
-- filechanged' <- liftIO $ journalSpecifiedFileIsNewer j journalpath
|
|
-- told <- liftIO $ readFileStrictly journalpath
|
|
-- let tnew = filter (/= '\r') text
|
|
-- changed = tnew /= told || filechanged'
|
|
-- if not changed
|
|
-- then do
|
|
-- setMessage "No change"
|
|
-- redirect JournalR
|
|
-- else do
|
|
-- jE <- liftIO $ readJournal Nothing Nothing True (Just journalpath) tnew
|
|
-- either
|
|
-- (\e -> do
|
|
-- setMessage $ toHtml e
|
|
-- redirect JournalR)
|
|
-- (const $ do
|
|
-- liftIO $ writeFileWithBackup journalpath tnew
|
|
-- setMessage $ toHtml (printf "Saved journal %s\n" (show journalpath) :: String)
|
|
-- redirect JournalR)
|
|
-- jE
|
|
|
|
|