anki-tools-0.1.0.0: src/Anki/Tools.hs
{-|
Module: Anki.Tools
Copyright: (c) 2016 Al Zohali
License: BSD3
Maintainer: Al Zohali <zohl@fmap.me>
Stability: experimental
= Description
Tools to work with collection.
-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Anki.Tools (
getUserProfiles
, getCollections
, getNotes
, getCards
) where
import Anki.Misc
import Anki.UserProfile
import Anki.Collection
import Anki.Note
import Anki.Card
import Control.Exception (bracket)
import Database.SQLite.Simple (open, close, query_)
import System.Directory (getHomeDirectory)
import System.FilePath (joinPath)
-- | Extract user profiles from the given anki configuration.
getUserProfiles :: AnkiPathsConfiguration -> IO [UserProfile]
getUserProfiles (AnkiPathsConfiguration {..}) = bracket
(open =<< (joinPath . (:[apcRoot, apcPrefs]) <$> getHomeDirectory))
(close)
(flip query_ "select name from profiles")
-- | Extract available collections from the given profile.
getCollections :: AnkiPathsConfiguration -> UserProfile -> IO [Collection]
getCollections (AnkiPathsConfiguration {..}) (UserProfile {..}) = bracket
(open =<< (joinPath . (:[apcRoot, upName, apcCollection]) <$> getHomeDirectory))
(close)
(flip query_ "select id, crt, mod, scm, ver, dty, usn, ls, conf, models, decks, dconf, tags from col")
-- | Extract all notes from from the given profile.
getNotes :: AnkiPathsConfiguration -> UserProfile -> IO [Note]
getNotes (AnkiPathsConfiguration {..}) (UserProfile {..}) = bracket
(open =<< (joinPath . (:[apcRoot, upName, apcCollection]) <$> getHomeDirectory))
(close)
(flip query_ "select id, guid, mid, mod, usn, tags, flds, sfld, csum, flags, data from notes")
-- | Extract all cards from from the given profile.
getCards :: AnkiPathsConfiguration -> UserProfile -> IO [Card]
getCards (AnkiPathsConfiguration {..}) (UserProfile {..}) = bracket
(open =<< (joinPath . (:[apcRoot, upName, apcCollection]) <$> getHomeDirectory))
(close)
(flip query_ "select id, nid, did, ord, mod, usn, type, queue, due, ivl, factor, reps, lapses, left, odue, odid, flags, data from cards limit 20")