module Web.Tweet
(
basicTweet
, thread
, module Web.Tweet.Types
, module Web.Tweet.API
, signRequest
, urlString
) where
import Web.Tweet.Sign
import Web.Tweet.API
import Web.Tweet.Utils.API
import Web.Tweet.Types
import Web.Tweet.Utils
import Data.List.Split (chunksOf)
import Control.Monad
import Control.Lens
import Data.Maybe
import Data.Default
basicTweet :: String -> FilePath -> IO Int
basicTweet contents = tweetData (mkTweet contents)
thread :: String -> [String] -> Maybe Int -> Int -> FilePath -> IO ()
thread contents hs idNum num filepath = do
let handleStr = concatMap (((++) " ") . ((++) "@")) hs
let content = (take num) . (chunksOf (140(length handleStr))) $ contents
case idNum of
(Just i) -> thread' content hs idNum num filepath
Nothing -> case content of
[] -> pure ()
[x] -> void $ basicTweet x filepath
y@(x:xs) -> thread' y hs (Just 0) num filepath
thread' :: [String] -> [String] -> Maybe Int -> Int -> FilePath -> IO ()
thread' content hs idNum num filepath = do
let f = \str i -> tweetData (Tweet { _status = str, _handles = hs, _replyID = if i == 0 then Nothing else Just i }) filepath
let initial = f (head content)
last <- foldr ((>=>) . f) initial (content) $ fromMaybe 0 idNum
deleteTweet (fromIntegral last) filepath
reply :: String -> [String] -> Maybe Int -> FilePath -> IO ()
reply contents hs idNum = thread contents hs idNum 1
mkTweet :: String -> Tweet
mkTweet contents = over (status) (const (contents)) def