diff --git a/src/Operations/Import/Firefox.hs b/src/Operations/Import/Firefox.hs index c938b73..3a99da9 100644 --- a/src/Operations/Import/Firefox.hs +++ b/src/Operations/Import/Firefox.hs @@ -1,5 +1,6 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeApplications #-} {-| Module : Operations.Import.Firefox Description : Imports from firefox @@ -44,7 +45,7 @@ import System.Environment import GHC.Stack import Control.Lens - (foldMapOf, folded, makeLenses, to, (&), (<>~), (^.)) + (foldMapOf, folded, has, ix, makeLenses, to, (%~), (&), (<>~), (^.)) import qualified Database.SQLite.Simple as SQL @@ -103,6 +104,8 @@ importFirefox = do fs <- (`appEndo` []) <$> runResourceT (runConduit $ stores .| C.mapM bookmarks .| C.foldMap (\f -> Endo (++ f))) buukaU $ modify $ \oldState -> F.foldl' update (initialState oldState) fs ^. buuka where - -- incomplete update - update acc f = acc & seen <>~ (f ^. url . to S.singleton) + toEntry Firefox{..} = B.BuukaEntry{ B._url = B.URL _url, B._title = Just _title } + update acc f = acc + & seen <>~ (f ^. url . to S.singleton) + & if has (seen . ix (f ^. url)) acc then id else buuka %~ (B.insert (toEntry f)) initialState oldState = Update oldState (foldMapOf (B._Buuka . folded . B.url . B._URL) S.singleton oldState)