Villefort: Villefort is a task manager and time tracker

[ bsd3, library, program, web ] [ Propose Tags ]

Villefort is a browser based time tracker built around a sqlite3 database.


[Skip to Readme]
Versions 0.1.0.0, 0.1.0.2, 0.1.0.3, 0.1.0.4, 0.1.0.5, 0.1.0.6, 0.1.0.7, 0.1.0.8, 0.1.1.0, 0.1.1.1, 0.1.1.2, 0.1.1.3, 0.1.1.4, 0.1.1.5, 0.1.1.6, 0.1.1.7, 0.1.1.8, 0.1.1.9, 0.1.1.10, 0.1.1.11, 0.1.1.12, 0.1.1.13, 0.1.1.14, 0.1.1.15, 0.1.2.1, 0.1.2.2, 0.1.2.3, 0.1.2.4, 0.1.2.5, 0.1.2.6, 0.1.2.7, 0.1.2.8, 0.1.2.9, 0.1.2.10, 0.1.2.11, 0.1.2.12, 0.1.2.13, 0.1.2.14, 0.1.2.15, 0.1.2.16 (info)
Dependencies base (>=4.7 && <5), bytestring, convertible, directory, filepath, HDBC (>=2.4.0 && <2.5), HDBC-sqlite3 (>=2.3.3 && <2.4), MissingH, mtl (>=2.2.1 && <2.3), process, random, scotty (>=0.11.0 && <0.12), split (>=0.2.3 && <0.3), strict, text, time (>=1.6.0 && <1.7), transformers, unix, uri-encode, Villefort [details]
License BSD-3-Clause
Copyright 2017 Alice Reuter
Author Alice Reuter
Maintainer alicereuterdev@gmail.com
Category Web
Home page https://github.com/alicereuter/Villefort#readme
Source repo head: git clone https://github.com/alicereuter/Villefort
Uploaded by AliceReuter at Sat Oct 20 02:36:02 UTC 2018
Distributions NixOS:0.1.2.14
Executables Villefort
Downloads 7218 total (93 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2018-10-20 [all 3 reports]
Hackage Matrix CI

Modules

  • Villefort
    • Villefort.Config
    • Villefort.Daily
    • Villefort.Database
    • Villefort.Definitions
    • Villefort.Log
    • Villefort.New
    • Villefort.Server
    • Villefort.Today
    • Villefort.Todo
    • Villefort.Util
    • Villefort.Weekly

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for Villefort-0.1.2.16

[back to package description]

Villefort

Villefort is a time management system written in Haskell.

Version 1.2.15

  • New Task Data type with better scheduling options
  • Running tasks is now fault tolerant. If one task fails the tasks after it still run.
  • You can now store aribitrary vars in the task database

New Task Data Type

data Date = Date {year :: String, -- | The specific date you want a task to be on
                  month :: String,
                  day :: String }
            | Offset {offset :: Int}   -- | The number of days in the future you want the task to be due on 
            | Today -- | Make the task due today
          deriving (Show,Eq)

-- | Villefort's internal representation of Tasks
data Task = Task {title :: String,
                 description :: String,
                 subject :: String,
                 due :: Date} deriving (Show,Eq)

Example

cs121n :: IO Task
cs121n = pure $ Task {
  title = "cs121 notes",
  description = "Type up cs121 lecture notes",
  subject = "cs121",
  due = Today}

Storing Vars in the Database

module Main where

import Villefort.Server (villefort)
import Villefort.Config (defaultConfig,defWeekly)
import Villefort.Definitions
import Villefort.Database
import Control.Monad.Reader
import System.Random

main :: IO ()
main =  check >> villefort conf

conf = defaultConfig {
    database= "dotfiles/todo.db"
    ,weekly = schedule    
  }

-- | checks if vars exists and if they don't initialize them with their default vals
check :: IO ()
check = do
  isBack <- runReaderT (isVar "back" ) conf
  if isBack then pure () else runReaderT (updateVar "back" (show 5.0)) conf
  isCrunch <- runReaderT (isVar "crunch" ) conf
  if isBack then pure () else runReaderT (updateVar "crunch" (show 5.0)) conf


schedule = defWeekly {
   monday = [a121cn
            ,eng301n
            ,a121chw            
            ,back
            ],
   tuesday = [cs101n
             ,cs121n
             ],
   wednesday = [a121cn
               ,eng301n
               ,a121chw
               ,back
               ],
   thursday = [cs101n
              ,cs101hw
              ,crunches
              ],
   friday  =  [eng301n
              ,a121chw
              ,back
              ],
   saturday = [crunches]
   }

cs121hw :: IO Task
cs121hw = pure $ Task {title="cs121 hw",
                       description="Do cs121hw for Friday",
                       subject="cs211",
                       due =Offset 4}
cs101hw :: IO Task          
cs101hw = pure $ Task { title ="cs101 hw",
                        description ="Do cs101hw for Friday",
                        subject = "cs101",
                        due = Offset 7} 
cs101n :: IO Task
cs101n = pure $ Task {
  title = "cs101 notes",
  description = "Type up cs101 lecture notes",
  subject = "cs101",
  due = Today}

cs121n :: IO Task
cs121n = pure $ defTask {
  title = "cs121 notes",
  description = "Type up cs121 lecture notes",
  subject = "cs121"}

eng301n :: IO Task
eng301n = pure $ defTask {
  title = "eng301 notes",
  description = "Type up eng301 lecture notes",
  subject = "eng301"
  }

a121chw :: IO Task
a121chw = pure $ defTask {
  title = "a121c hw",
  description = "Do a121c homework",
  subject = "a121c"
  }
  
a121cn :: IO Task
a121cn = pure $ defTask {
  title = "a121c notes",
  description = "Type up a121c lecture notes",
  subject = "a121c"
  }

cs101 :: IO Task
cs101 = pure $ Task {
  title = "cs101 hw",
  description = "Do cs101hw for Friday",
  subject = "cs101",
  due = Offset 7}
  
back     = exercise "back" 1
crunches = exercise "crunch" 1

exercise var increment = do
  res <- flip runReaderT conf $ getVar var
  putStrLn $ show res
  let num = read res :: Double
  flip runReaderT conf (updateVar var ( show ( num+increment)))
  listB <- gener num
  return $ Task var ("do " ++ show listB++ " " ++ var)   "exercise" Today

gener :: Double -> IO [Int]
gener level = do
  dubs <-  mapM gen $ replicate 5 level :: IO [Double]
  return $ map floor dubs
  where gen x =  randomRIO (x-(x/3),x+(x/3))

default config

Home screen

alt text

Add new todos

alt text

Stats page

alt text

To install

  1. Install cabal (https://www.haskell.org/platform/)
  2. In terminal or command prompt run cabal install Villefort.
  3. and then cabal run Villefort.
  4. You will be able to see the home screen by typing localhost:3002 into your favorite browser.

Configure your villefort

create a custom main method in ~.villefort/villefort.hs. Below is an example. Use Villefort --recompile to recompile Villefort with your custom config. Recompilation requires ghc to be in your $PATH. The next time you run villefort it will run with your custom config. The default Config is found in Villefort.Config.

How to copy data between versions of Villefort.

  1. Install the new version through cabal.
  2. Navigate to ~/.cabal .
  3. Navigate to share/ .
  4. Navigate into your architecture folder mine is x86_64-linux-ghc-7.10.3.
  5. You should now see different versions of Villefort. Villefort-0.1.2.12/
    |-- data/
    |   |-- date
    |   |-- day
    |   |-- todo.db
    |-- templates/
    |-- js.js

Villefort-0.1.2.13/

    |-- data/
    |   |-- date
    |   |-- day
    |   |-- todo.db
    |-- templates/
    |-- js.js

Just copy the data/todo.db from the old version into data/todo.db of the new version. Remember to rebuild Villefort so that your custom build uses the new version of Villefort. Villefort --recompile