diff --git a/emanote/src/Emanote/Model/Note.hs b/emanote/src/Emanote/Model/Note.hs index 3c81c6648..d8cb60784 100644 --- a/emanote/src/Emanote/Model/Note.hs +++ b/emanote/src/Emanote/Model/Note.hs @@ -39,6 +39,9 @@ import Text.Pandoc.Scripting (ScriptingEngine) import Text.Pandoc.Walk qualified as W import UnliftIO.Directory (doesPathExist) +import System.FilePath (takeFileName) +import Text.Parsec qualified as P + data Feed = Feed { _feedEnable :: Bool , _feedTitle :: Maybe Text @@ -316,7 +319,19 @@ parseNote scriptingEngine pluginBaseDir r src@(_, fp) s = do parseNoteMarkdown scriptingEngine pluginBaseDir fp s R.LMLRoute_Org _ -> do parseNoteOrg s - pure $ mkNoteWith r (Just src) doc meta errs + let metaWithDateFromPath = case P.parse dateParser mempty (takeFileName fp) of + Left _ -> meta + Right date -> SData.modifyAeson (pure "date") (Just . fromMaybe (Aeson.String date)) meta + pure $ mkNoteWith r (Just src) doc metaWithDateFromPath errs + where + dateParser = do + year <- replicateM 4 P.digit + _ <- P.char '-' + month <- replicateM 2 P.digit + _ <- P.char '-' + day <- replicateM 2 P.digit + _ <- P.char '-' + pure $ T.pack $ mconcat [year, "-", month, "-", day] parseNoteOrg :: (MonadWriter [Text] m) => Text -> m (Pandoc, Aeson.Value) parseNoteOrg s =