aboutsummaryrefslogtreecommitdiff
path: root/tprint
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2015-12-25 17:56:13 +0000
committerGregor Kleen <gkleen@yggdrasil.li>2015-12-25 17:56:13 +0000
commit9db2c42f4880362cf098358de830415c14f6878c (patch)
tree2b0b9257f01eec926152746fc2e7646764063c3a /tprint
parent08eee2f0de77ffa631e84ccf734e8e95817b7c81 (diff)
downloadthermoprint-9db2c42f4880362cf098358de830415c14f6878c.tar
thermoprint-9db2c42f4880362cf098358de830415c14f6878c.tar.gz
thermoprint-9db2c42f4880362cf098358de830415c14f6878c.tar.bz2
thermoprint-9db2c42f4880362cf098358de830415c14f6878c.tar.xz
thermoprint-9db2c42f4880362cf098358de830415c14f6878c.zip
Cleaned tree for rewrite
Diffstat (limited to 'tprint')
-rw-r--r--tprint/LICENSE27
-rw-r--r--tprint/Setup.hs2
-rw-r--r--tprint/src/Main.hs217
-rw-r--r--tprint/tprint.cabal32
-rw-r--r--tprint/tprint.nix20
5 files changed, 0 insertions, 298 deletions
diff --git a/tprint/LICENSE b/tprint/LICENSE
deleted file mode 100644
index 4ad71e2..0000000
--- a/tprint/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
1Statement of Purpose
2
3The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").
4
5Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
6
7For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
8
91. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:
10
11the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
12moral rights retained by the original author(s) and/or performer(s);
13publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;
14rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;
15rights protecting the extraction, dissemination, use and reuse of data in a Work;
16database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
17other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
182. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.
19
203. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.
21
224. Limitations and Disclaimers.
23
24No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
25Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
26Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
27Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. \ No newline at end of file
diff --git a/tprint/Setup.hs b/tprint/Setup.hs
deleted file mode 100644
index 9a994af..0000000
--- a/tprint/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
1import Distribution.Simple
2main = defaultMain
diff --git a/tprint/src/Main.hs b/tprint/src/Main.hs
deleted file mode 100644
index 0f88a86..0000000
--- a/tprint/src/Main.hs
+++ /dev/null
@@ -1,217 +0,0 @@
1{-# LANGUAGE RecordWildCards, RankNTypes #-}
2
3import Thermoprint
4import Thermoprint.Api
5
6import qualified BBCode (parse, make)
7
8import Options.Applicative
9
10import Data.Either
11import Data.Maybe
12import Control.Monad
13import Control.Monad.Trans.Either
14
15import System.IO
16import qualified System.IO as IO
17import System.Exit
18import System.Environment
19
20import Data.Proxy
21import Servant.API
22import Servant.Client
23
24import Data.Int (Int64)
25
26thermoprintApi :: Proxy ThermoprintApi
27thermoprintApi = Proxy
28
29data TPrint = TPrint TPrintMode TPrintOptions
30
31data TPrintOptions = TPrintOptions
32 { baseUrl :: BaseUrl
33 }
34
35data TPrintMode = Print PrintOptions
36 | PrintDraft PrintDraftOptions
37 | Query QueryOptions
38 | Add AddOptions
39 | Get GetOptions
40 | Write WriteOptions
41 | Del DelOptions
42
43data PrintOptions = PrintOptions
44 { printerId :: Integer
45 , dryRun :: Bool
46 }
47
48data PrintDraftOptions = PrintDraftOptions
49 { printOptions :: PrintOptions
50 , pDraftId :: Int64
51 , deleteAfter :: Bool
52 }
53
54data QueryOptions = QueryOptions
55
56data AddOptions = AddOptions
57 { title :: String
58 }
59
60data GetOptions = GetOptions
61 { gDraftId :: Int64
62 , getTitle :: Bool
63 }
64
65data WriteOptions = WriteOptions
66 { wDraftId :: Int64
67 , newTitle :: Maybe String
68 }
69
70data DelOptions = DelOptions
71 { dDraftId :: Int64
72 }
73
74
75main :: IO ()
76main = do
77 envUrl <- lookupEnv "TPRINT"
78 let
79 defaultUrl = fromMaybe (BaseUrl Http "localhost" 8080) (envUrl >>= either (const Nothing) Just . parseBaseUrl)
80 execParser (opts defaultUrl) >>= main'
81 where
82 opts url = info (helper <*> opts' url) (
83 fullDesc
84 <> header "tprint - A cli tool for interfacing with the REST api as provided by thermoprint-servant"
85 )
86 opts' url = TPrint
87 <$> modeSwitch
88 <*> commonOpts url
89 commonOpts url = TPrintOptions
90 <$> option baseUrlReader (
91 long "url"
92 <> short 'u'
93 <> metavar "URL"
94 <> help "The base url of the api. Also reads TPRINT from environment."
95 <> value url
96 <> showDefaultWith showBaseUrl
97 )
98 baseUrlReader = str >>= either readerError return . parseBaseUrl
99 modeSwitch = subparser $ mconcat $ map (\(n, f, h) -> command n $ info (helper <*> f) $ progDesc h)
100 [ ("print", print, "Read bbcode from stdin and send it to be printed")
101 , ("print-draft", printD, "Send a draft to be printed")
102 , ("query", query, "List drafts")
103 , ("add", add, "Read bbcode from stdin and add it as a draft")
104 , ("get", get, "Get a draft and print it as bbcode to stdout")
105 , ("write", write, "Read bbcode from stdin and overwrite an existing draft")
106 , ("del", del, "Delete a draft")
107 ]
108 draftN s = option auto (
109 long "draft"
110 <> short 'n'
111 <> metavar "INT"
112 <> help s
113 )
114 print = Print <$> print'
115 print' = PrintOptions
116 <$> option auto (
117 long "printer"
118 <> short 'p'
119 <> metavar "INT"
120 <> help "The number of the printer to use"
121 <> value 0
122 <> showDefault
123 )
124 <*> flag False True (
125 long "dry-run"
126 <> short 'd'
127 <> help "Instead of sending data to printer output the parsed stream to stderr"
128 <> showDefault
129 )
130 printD = (PrintDraft <$>) $ PrintDraftOptions
131 <$> print'
132 <*> draftN "The number of the draft to print"
133 <*> flag False True (
134 long "delete"
135 <> help "Delete the draft after printing"
136 )
137 query = (Query <$>) $ pure QueryOptions
138 add = (Add <$>) $ AddOptions
139 <$> strArgument (
140 metavar "TITLE"
141 <> help "The human readable title for the new draft"
142 )
143 get = (Get <$>) $ GetOptions
144 <$> draftN "The number of the draft to retrieve"
145 <*> flag False True (
146 long "title"
147 <> short 't'
148 <> help "Get title instead of content"
149 )
150 write = (Write <$>) $ WriteOptions
151 <$> draftN "The number of the draft to overwrite"
152 <*> optional ( strArgument (
153 metavar "TITLE"
154 <> help "The human readable title for the updated draft (defaults to retrieving the old one before overwriting)"
155 )
156 )
157 del = (Del <$>) $ DelOptions
158 <$> draftN "The number of the draft to delete"
159
160either' :: (a -> String) -> EitherT a IO b -> IO b
161either' f a = either (die . f) return =<< runEitherT a
162
163main' (TPrint mode TPrintOptions{..}) = do
164 let
165 -- print :: Integer -> Block String -> EitherT ServantError IO ()
166 -- queryDrafts :: EitherT ServantError IO [(Integer, String)]
167 -- addDraft :: (String, Block String) -> EitherT ServantError IO Int64
168 -- getDraft :: Int64 -> EitherT ServantError IO (String, Block String)
169 -- writeDraft :: Int64 -> (String, Block String) -> EitherT ServantError IO Int64
170 -- delDraft :: Int64 -> EitherT ServantError IO ()
171 (print :<|> queryDrafts :<|> addDraft :<|> getDraft :<|> writeDraft :<|> delDraft) = client thermoprintApi baseUrl
172 case mode of
173 Print PrintOptions{..} -> do
174 input <- BBCode.parse `liftM` getContents
175 input' <- either (die . ("Parse error: " ++)) return input
176 case dryRun of
177 False -> do
178 res <- runEitherT $ print printerId input'
179 case res of
180 Left err -> hPutStrLn stderr $ show err
181 Right _ -> exitSuccess
182 True -> do
183 hPutStrLn stderr $ show input'
184 PrintDraft PrintDraftOptions{..} -> do
185 let PrintOptions{..} = printOptions
186 (_, input) <- either' (\e -> "Error while retrieving draft: " ++ show e) $ getDraft pDraftId
187 case dryRun of
188 False -> do
189 res <- runEitherT $ print printerId input
190 case res of
191 Left err -> hPutStrLn stderr $ show err
192 Right _ -> when deleteAfter $ either' (\e -> "Error while deleting draft: " ++ show e) $ delDraft pDraftId
193 True -> do
194 hPutStrLn stderr $ show input
195 Query QueryOptions -> do
196 drafts <- either' (\e -> "Error while retrieving drafts: " ++ show e) queryDrafts
197 mapM_ (\(n, t) -> putStrLn $ "[" ++ show n ++ "]\n" ++ (unlines $ map (\s -> " " ++ s) $ lines t)) drafts
198 when (null drafts) $ hPutStrLn stderr "No drafts"
199 Add AddOptions{..} -> do
200 input <- BBCode.parse `liftM` getContents
201 input' <- either (die . ("Parse error: " ++)) return input
202 n <- either' (\e -> "Error while saving draft: " ++ show e) $ addDraft (title, input')
203 IO.print n
204 Get GetOptions{..} -> do
205 (title, draft) <- either' (\e -> "Error while retrieving draft: " ++ show e) $ getDraft gDraftId
206 case getTitle of
207 False -> putStr $ BBCode.make draft
208 True -> putStrLn title
209 Write WriteOptions{..} -> do
210 input <- BBCode.parse `liftM` getContents
211 input' <- either (die . ("Parse error: " ++)) return input
212 title <- case newTitle of
213 Just new -> return new
214 Nothing -> fst <$> (either' (\e -> "Error while retrieving draft: " ++ show e) $ getDraft wDraftId)
215 either' (\e -> "Error while overwriting draft: " ++ show e) $ writeDraft wDraftId (title, input')
216 Del DelOptions{..} -> either' (\e -> "Error while deleting draft: " ++ show e) $ delDraft dDraftId
217 _ -> undefined
diff --git a/tprint/tprint.cabal b/tprint/tprint.cabal
deleted file mode 100644
index 54cb47d..0000000
--- a/tprint/tprint.cabal
+++ /dev/null
@@ -1,32 +0,0 @@
1-- Initial tprint.cabal generated by cabal init. For further
2-- documentation, see http://haskell.org/cabal/users-guide/
3
4name: tprint
5version: 0.0.0
6synopsis: A cli-tool for interfacing with thermoprint-servant
7-- description:
8homepage: git://git.yggdrasil.li/thermoprint
9license: PublicDomain
10license-file: LICENSE
11author: Gregor Kleen
12maintainer: aethoago@141.li
13-- copyright:
14-- category:
15build-type: Simple
16-- extra-source-files:
17cabal-version: >=1.10
18
19executable tprint
20 main-is: Main.hs
21 -- other-modules:
22 -- other-extensions:
23 hs-source-dirs: src
24 default-language: Haskell2010
25 build-depends: base >=4.8 && <4.9
26 , thermoprint
27 , thermoprint-servant
28 , bbcode
29 , optparse-applicative >=0.11.0 && <1
30 , servant >=0.4.4 && <1
31 , servant-client >=0.4.4 && <1
32 , either >=4.4.1 && <5 \ No newline at end of file
diff --git a/tprint/tprint.nix b/tprint/tprint.nix
deleted file mode 100644
index 492a643..0000000
--- a/tprint/tprint.nix
+++ /dev/null
@@ -1,20 +0,0 @@
1{ mkDerivation
2, stdenv
3, base
4, thermoprint-servant, thermoprint, bbcode
5, optparse-applicative, servant-client, servant
6}:
7mkDerivation {
8 pname = "tprint";
9 version = "0.0.0";
10 src = ./.;
11 isLibrary = false;
12 isExecutable = true;
13 executableHaskellDepends = [ base
14 thermoprint thermoprint-servant bbcode
15 optparse-applicative servant-client servant
16 ];
17 homepage = "git://git.yggdrasil.li/thermoprint";
18 description = "A cli-tool for interfacing with thermoprint-servant";
19 license = stdenv.lib.licenses.publicDomain;
20}