aboutsummaryrefslogtreecommitdiff
path: root/src/IRE/Application.hs
blob: 530e4a441651d58ef79eee48809c84f1443fca49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{-# LANGUAGE OverloadedStrings #-}

module IRE.Application (
  app
) where

import Control.Monad.Trans (liftIO)
import Network.Wai (Application)
import Network.Wai.Middleware.Static (addBase, hasPrefix, staticPolicy, (>->))
import Network.Wai.Parse (FileInfo(..))
import System.FilePath.Posix ((</>))
import Web.Scotty ( ActionM, ScottyM, file, files, get,
  json, middleware, post, scottyApp )

import IRE.Application.YOLO (findItems)
import IRE.YOLO (Detector)

app :: FilePath -> Detector -> IO Application
app rootDir net = scottyApp $ ire rootDir net

ire :: FilePath -> Detector -> ScottyM ()
ire rootDir net = do
  middleware $ staticPolicy (hasPrefix "static" >-> addBase rootDir)
  get "/" $ file (rootDir </> "webui.html")

  post "/findItems" $ apiFindItems net


apiFindItems :: Detector -> ActionM ()
apiFindItems net = do
  fs <- files
  let fc = head [ fileContent fi | (_, fi) <- fs ]
  resp <- liftIO $ findItems net fc
  json resp