Villefort: Villefort is a task manager and time tracker

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

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


[Skip to Readme]

Modules

[Last Documentation]

  • 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

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 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, 0.1.2.17, 0.1.2.18, 0.1.2.19 (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 2018-10-25T05:47:22Z
Distributions
Executables Villefort
Downloads 21464 total (135 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2018-10-25 [all 2 reports]

Readme for Villefort-0.1.2.17

[back to package description]

Villefort

Villefort is a task management system written in Haskell.

Version 1.2.17 changes

  • fixed subject truncation bug on new todo page.

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 Villefort

create a custom main method in ~.villefort/villefort.hs This default config can be found here. For example

module Main where

import Villefort.Server (villefort)
import Villefort.Config

main :: IO ()
main = villefort defaultConfig {
  database = "/home/user/todo.db" --usage custom database location
  }

Task Data Type

Definition

data Date = Date {year :: String,      -- | The specific date you want a task to be due 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 usage

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

Storing Vars in the Database extended example

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 value
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))

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 migrate 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