import from firefox #1
@@ -40,6 +40,7 @@ library
 | 
				
			|||||||
                     , Operations.Insert
 | 
					                     , Operations.Insert
 | 
				
			||||||
                     , Operations.List
 | 
					                     , Operations.List
 | 
				
			||||||
                     , Operations.Query
 | 
					                     , Operations.Query
 | 
				
			||||||
 | 
					                     , Operations.Import.Firefox
 | 
				
			||||||
                     , Operations
 | 
					                     , Operations
 | 
				
			||||||
                     , Data.Environment
 | 
					                     , Data.Environment
 | 
				
			||||||
                     , Data.Buuka
 | 
					                     , Data.Buuka
 | 
				
			||||||
@@ -61,6 +62,9 @@ library
 | 
				
			|||||||
                     , lens
 | 
					                     , lens
 | 
				
			||||||
                     , hashable
 | 
					                     , hashable
 | 
				
			||||||
                     , regex-tdfa
 | 
					                     , regex-tdfa
 | 
				
			||||||
 | 
					                     , sqlite-simple
 | 
				
			||||||
 | 
					                     , conduit
 | 
				
			||||||
 | 
					                     , conduit-extra
 | 
				
			||||||
  hs-source-dirs:      src
 | 
					  hs-source-dirs:      src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
executable buuka
 | 
					executable buuka
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								default.nix
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								default.nix
									
									
									
									
									
								
							@@ -1,8 +1,9 @@
 | 
				
			|||||||
{ mkDerivation, aeson, base, bytestring, containers
 | 
					{ mkDerivation, aeson, base, bytestring, conduit, conduit-extra
 | 
				
			||||||
, deriving-compat, exceptions, filepath, hashable, hashids
 | 
					, containers, deriving-compat, exceptions, filepath, hashable
 | 
				
			||||||
, hedgehog, hedgehog-corpus, lens, mtl, optparse-applicative
 | 
					, hashids, hedgehog, hedgehog-corpus, lens, mtl
 | 
				
			||||||
, regex-tdfa, stdenv, tasty, tasty-hedgehog, tasty-hunit, text
 | 
					, optparse-applicative, regex-tdfa, sqlite-simple, stdenv, tasty
 | 
				
			||||||
, transformers, unliftio, vector, yaml
 | 
					, tasty-hedgehog, tasty-hunit, text, transformers, unliftio, vector
 | 
				
			||||||
 | 
					, yaml
 | 
				
			||||||
}:
 | 
					}:
 | 
				
			||||||
mkDerivation {
 | 
					mkDerivation {
 | 
				
			||||||
  pname = "buuka";
 | 
					  pname = "buuka";
 | 
				
			||||||
@@ -11,8 +12,9 @@ mkDerivation {
 | 
				
			|||||||
  isLibrary = true;
 | 
					  isLibrary = true;
 | 
				
			||||||
  isExecutable = true;
 | 
					  isExecutable = true;
 | 
				
			||||||
  libraryHaskellDepends = [
 | 
					  libraryHaskellDepends = [
 | 
				
			||||||
    aeson base bytestring containers exceptions filepath hashable
 | 
					    aeson base bytestring conduit conduit-extra containers exceptions
 | 
				
			||||||
    hashids lens mtl regex-tdfa text transformers unliftio vector yaml
 | 
					    filepath hashable hashids lens mtl regex-tdfa sqlite-simple text
 | 
				
			||||||
 | 
					    transformers unliftio vector yaml
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  executableHaskellDepends = [ base optparse-applicative unliftio ];
 | 
					  executableHaskellDepends = [ base optparse-applicative unliftio ];
 | 
				
			||||||
  testHaskellDepends = [
 | 
					  testHaskellDepends = [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								src/Operations/Import/Firefox.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								src/Operations/Import/Firefox.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					{-|
 | 
				
			||||||
 | 
					Module      : Operations.Import.Firefox
 | 
				
			||||||
 | 
					Description : Imports from firefox
 | 
				
			||||||
 | 
					Copyright   : (c) Mats Rauhala, 2020
 | 
				
			||||||
 | 
					License     : BSD-3-Clause
 | 
				
			||||||
 | 
					Maintainer  : mats.rauhala@iki.fi
 | 
				
			||||||
 | 
					Stability   : experimental
 | 
				
			||||||
 | 
					Portability : POSIX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Imports from firefox. Firefox needs to be closed when doing the import
 | 
				
			||||||
 | 
					-}
 | 
				
			||||||
 | 
					module Operations.Import.Firefox where
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import Conduit
 | 
				
			||||||
 | 
					import qualified Data.Conduit.Combinators as C
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import System.FilePath
 | 
				
			||||||
 | 
					       (takeFileName, (</>))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import Control.Exception
 | 
				
			||||||
 | 
					       (Exception)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import System.Environment
 | 
				
			||||||
 | 
					       (lookupEnv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import GHC.Stack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- select p.title, p.url from moz_bookmarks b join moz_places p on b.fk = p.id
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					-- select keyword from moz_keywords where place_id = ?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					newtype ImportException
 | 
				
			||||||
 | 
					  = HomeNotFound CallStack
 | 
				
			||||||
 | 
					  deriving stock (Show)
 | 
				
			||||||
 | 
					  deriving anyclass (Exception)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stores
 | 
				
			||||||
 | 
					  :: MonadResource m
 | 
				
			||||||
 | 
					  => MonadThrow m
 | 
				
			||||||
 | 
					  => MonadIO m
 | 
				
			||||||
 | 
					  => HasCallStack
 | 
				
			||||||
 | 
					  => ConduitT i FilePath m ()
 | 
				
			||||||
 | 
					stores = liftIO (lookupEnv "HOME") >>= maybe (throwM (HomeNotFound callStack)) listStores
 | 
				
			||||||
 | 
					  where
 | 
				
			||||||
 | 
					    listStores home =
 | 
				
			||||||
 | 
					      sourceDirectoryDeep False (home </> ".mozilla/firefox")
 | 
				
			||||||
 | 
					        .| C.filter (\p -> takeFileName p == "places.sqlite")
 | 
				
			||||||
		Reference in New Issue
	
	Block a user