diff options
Diffstat (limited to 'server/src/Thermoprint/Server/Queue.hs')
-rw-r--r-- | server/src/Thermoprint/Server/Queue.hs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/server/src/Thermoprint/Server/Queue.hs b/server/src/Thermoprint/Server/Queue.hs new file mode 100644 index 0000000..d2400a1 --- /dev/null +++ b/server/src/Thermoprint/Server/Queue.hs | |||
@@ -0,0 +1,43 @@ | |||
1 | {-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} | ||
2 | |||
3 | module Thermoprint.Server.Queue | ||
4 | ( Queue(..), QueueEntry(..) | ||
5 | ) where | ||
6 | |||
7 | import Thermoprint.API (PrintingError(..), Printout) | ||
8 | import qualified Thermoprint.API as API (JobStatus(..)) | ||
9 | |||
10 | import Thermoprint.Server.Database | ||
11 | |||
12 | import Data.Sequence (Seq) | ||
13 | import qualified Data.Sequence as Seq | ||
14 | |||
15 | import Data.Time | ||
16 | |||
17 | import Control.DeepSeq (NFData) | ||
18 | import Data.Typeable (Typeable) | ||
19 | import GHC.Generics (Generic) | ||
20 | |||
21 | import Data.Default.Class | ||
22 | |||
23 | -- | Zipper for 'Seq QueueEntry' | ||
24 | data Queue = Queue | ||
25 | { pending :: Seq QueueEntry -- ^ Pending jobs, closest last | ||
26 | , current :: Maybe QueueEntry | ||
27 | , history :: Seq (QueueEntry, Maybe PrintingError) -- ^ Completed jobs, closest first | ||
28 | } | ||
29 | deriving (Typeable, Generic, NFData) | ||
30 | |||
31 | instance Default Queue where | ||
32 | def = Queue | ||
33 | { pending = Seq.empty | ||
34 | , current = Nothing | ||
35 | , history = Seq.empty | ||
36 | } | ||
37 | |||
38 | data QueueEntry = QueueEntry | ||
39 | { jobId :: JobId | ||
40 | , created :: UTCTime | ||
41 | } | ||
42 | deriving (Typeable, Generic, NFData) | ||
43 | |||